This commit is contained in:
@@ -95,6 +95,21 @@ export enum PermissionEnum {
|
|||||||
BLOGS_UPDATE = "blogs_update",
|
BLOGS_UPDATE = "blogs_update",
|
||||||
BLOGS_DELETE = "blogs_delete",
|
BLOGS_DELETE = "blogs_delete",
|
||||||
|
|
||||||
|
BLOG_CATEGORIES_CREATE = "blog_categories_create",
|
||||||
|
BLOG_CATEGORIES_READ = "blog_categories_read",
|
||||||
|
BLOG_CATEGORIES_UPDATE = "blog_categories_update",
|
||||||
|
BLOG_CATEGORIES_DELETE = "blog_categories_delete",
|
||||||
|
|
||||||
|
BLOG_COMMENTS_CREATE = "blog_comments_create",
|
||||||
|
BLOG_COMMENTS_READ = "blog_comments_read",
|
||||||
|
BLOG_COMMENTS_UPDATE = "blog_comments_update",
|
||||||
|
BLOG_COMMENTS_DELETE = "blog_comments_delete",
|
||||||
|
|
||||||
|
SLIDERS_CREATE = "sliders_create",
|
||||||
|
SLIDERS_READ = "sliders_read",
|
||||||
|
SLIDERS_UPDATE = "sliders_update",
|
||||||
|
SLIDERS_DELETE = "sliders_delete",
|
||||||
|
|
||||||
LEARNINGS_CREATE = "learnings_create",
|
LEARNINGS_CREATE = "learnings_create",
|
||||||
LEARNINGS_READ = "learnings_read",
|
LEARNINGS_READ = "learnings_read",
|
||||||
LEARNINGS_UPDATE = "learnings_update",
|
LEARNINGS_UPDATE = "learnings_update",
|
||||||
@@ -170,7 +185,15 @@ export type CrudAction = "create" | "read" | "update" | "delete";
|
|||||||
|
|
||||||
const CRUD_ACTIONS: readonly CrudAction[] = ["create", "read", "update", "delete"];
|
const CRUD_ACTIONS: readonly CrudAction[] = ["create", "read", "update", "delete"];
|
||||||
|
|
||||||
export const CONTENT_PERMISSION_RESOURCES = ["blogs", "learnings", "advertisements", "announcements"] as const;
|
export const CONTENT_PERMISSION_RESOURCES = [
|
||||||
|
"blogs",
|
||||||
|
"blog_categories",
|
||||||
|
"blog_comments",
|
||||||
|
"sliders",
|
||||||
|
"learnings",
|
||||||
|
"advertisements",
|
||||||
|
"announcements",
|
||||||
|
] as const;
|
||||||
export const FINANCIAL_PERMISSION_RESOURCES = ["payments", "invoices", "transactions", "discounts", "bank_accounts"] as const;
|
export const FINANCIAL_PERMISSION_RESOURCES = ["payments", "invoices", "transactions", "discounts", "bank_accounts"] as const;
|
||||||
export const SUPPORT_PERMISSION_RESOURCES = [
|
export const SUPPORT_PERMISSION_RESOURCES = [
|
||||||
"support_plan",
|
"support_plan",
|
||||||
|
|||||||
@@ -104,10 +104,10 @@ const BlogCategory: FC = () => {
|
|||||||
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
|
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
|
||||||
<Td text={t('')}>
|
<Td text={t('')}>
|
||||||
<div className='flex gap-2 items-center'>
|
<div className='flex gap-2 items-center'>
|
||||||
{canUpdate('blogs') && (
|
{canUpdate('blog_categories') && (
|
||||||
<UpdateCategory id={item.id} />
|
<UpdateCategory id={item.id} />
|
||||||
)}
|
)}
|
||||||
{canDelete('blogs') && (
|
{canDelete('blog_categories') && (
|
||||||
<Trash size={20} color='red' onClick={() => {
|
<Trash size={20} color='red' onClick={() => {
|
||||||
deleteBlogCategory.mutateAsync(item.id, {
|
deleteBlogCategory.mutateAsync(item.id, {
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
@@ -129,7 +129,7 @@ const BlogCategory: FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{canCreate('blogs') && (
|
{canCreate('blog_categories') && (
|
||||||
<div className='relative bg-white min-h-[calc(100vh-185px)] w-sidebar xl:block hidden py-10 px-5 h-fit rounded-3xl'>
|
<div className='relative bg-white min-h-[calc(100vh-185px)] w-sidebar xl:block hidden py-10 px-5 h-fit rounded-3xl'>
|
||||||
<p className='text-md'>{t('blog.add_category')}</p>
|
<p className='text-md'>{t('blog.add_category')}</p>
|
||||||
<div className='text-sm flex items-center justify-between mt-4'>
|
<div className='text-sm flex items-center justify-between mt-4'>
|
||||||
|
|||||||
@@ -7,8 +7,10 @@ import moment from 'moment-jalaali'
|
|||||||
import { CloseCircle, TickCircle } from 'iconsax-react'
|
import { CloseCircle, TickCircle } from 'iconsax-react'
|
||||||
import { ErrorType } from '../../helpers/types'
|
import { ErrorType } from '../../helpers/types'
|
||||||
import { toast } from '../../components/Toast';
|
import { toast } from '../../components/Toast';
|
||||||
|
import { usePermissions } from '../../hooks/usePermissions'
|
||||||
const Comments: FC = () => {
|
const Comments: FC = () => {
|
||||||
const { t } = useTranslation('global')
|
const { t } = useTranslation('global')
|
||||||
|
const { canUpdate } = usePermissions()
|
||||||
const getBlogComments = useGetBlogComments()
|
const getBlogComments = useGetBlogComments()
|
||||||
const changeStatusComment = useChangeStatusComment()
|
const changeStatusComment = useChangeStatusComment()
|
||||||
const handleChangeStatus = (id: string, status: string) => {
|
const handleChangeStatus = (id: string, status: string) => {
|
||||||
@@ -49,7 +51,7 @@ const Comments: FC = () => {
|
|||||||
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
|
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
|
||||||
<Td text=''>
|
<Td text=''>
|
||||||
{
|
{
|
||||||
item.status === 'PENDING' &&
|
item.status === 'PENDING' && canUpdate('blog_comments') &&
|
||||||
<div className='flex items-center gap-2'>
|
<div className='flex items-center gap-2'>
|
||||||
<TickCircle onClick={() => handleChangeStatus(item.id, 'APPROVED')} color='green' size={20} />
|
<TickCircle onClick={() => handleChangeStatus(item.id, 'APPROVED')} color='green' size={20} />
|
||||||
<CloseCircle onClick={() => handleChangeStatus(item.id, 'REJECTED')} color='red' size={20} />
|
<CloseCircle onClick={() => handleChangeStatus(item.id, 'REJECTED')} color='red' size={20} />
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ const SliderList: FC = () => {
|
|||||||
<div>
|
<div>
|
||||||
{t('slider.list_slider')}
|
{t('slider.list_slider')}
|
||||||
</div>
|
</div>
|
||||||
{canCreate('blogs') && (
|
{canCreate('sliders') && (
|
||||||
<div>
|
<div>
|
||||||
<Link to={Pages.sliders.create}>
|
<Link to={Pages.sliders.create}>
|
||||||
<Button
|
<Button
|
||||||
@@ -84,7 +84,7 @@ const SliderList: FC = () => {
|
|||||||
<Td text={item.isActive ? t('slider.active') : t('slider.inactive')} />
|
<Td text={item.isActive ? t('slider.active') : t('slider.inactive')} />
|
||||||
<Td text={''}>
|
<Td text={''}>
|
||||||
<div className='flex gap-2'>
|
<div className='flex gap-2'>
|
||||||
{canUpdate('blogs') && (
|
{canUpdate('sliders') && (
|
||||||
<Link to={Pages.sliders.detail + item.id}>
|
<Link to={Pages.sliders.detail + item.id}>
|
||||||
<Edit
|
<Edit
|
||||||
className='size-5'
|
className='size-5'
|
||||||
@@ -92,7 +92,7 @@ const SliderList: FC = () => {
|
|||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
{canDelete('blogs') && (
|
{canDelete('sliders') && (
|
||||||
<TrashWithConfrim
|
<TrashWithConfrim
|
||||||
onDelete={() => handleDelete(item.id)}
|
onDelete={() => handleDelete(item.id)}
|
||||||
isLoading={deleteSlider.isPending}
|
isLoading={deleteSlider.isPending}
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ const ContentSubMenu: FC = () => {
|
|||||||
title={t("submenu.blog_comments")}
|
title={t("submenu.blog_comments")}
|
||||||
isActive={isActive("/blog/comments")}
|
isActive={isActive("/blog/comments")}
|
||||||
link={Pages.blog.comments}
|
link={Pages.blog.comments}
|
||||||
activeName="blogs"
|
activeName="blog_comments"
|
||||||
/>
|
/>
|
||||||
<SubMenuItem
|
<SubMenuItem
|
||||||
title={t("submenu.blog_category")}
|
title={t("submenu.blog_category")}
|
||||||
isActive={isActive("/blog/category")}
|
isActive={isActive("/blog/category")}
|
||||||
link={Pages.blog.category}
|
link={Pages.blog.category}
|
||||||
activeName="blogs"
|
activeName="blog_categories"
|
||||||
/>
|
/>
|
||||||
<SubMenuItem
|
<SubMenuItem
|
||||||
title={t("sidebar.ads")}
|
title={t("sidebar.ads")}
|
||||||
@@ -69,7 +69,7 @@ const ContentSubMenu: FC = () => {
|
|||||||
title={t("sidebar.sliders")}
|
title={t("sidebar.sliders")}
|
||||||
isActive={isActive("sliders")}
|
isActive={isActive("sliders")}
|
||||||
link={Pages.sliders.list}
|
link={Pages.sliders.list}
|
||||||
activeName="blogs"
|
activeName="sliders"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user