This commit is contained in:
@@ -95,6 +95,21 @@ export enum PermissionEnum {
|
||||
BLOGS_UPDATE = "blogs_update",
|
||||
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_READ = "learnings_read",
|
||||
LEARNINGS_UPDATE = "learnings_update",
|
||||
@@ -170,7 +185,15 @@ export type 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 SUPPORT_PERMISSION_RESOURCES = [
|
||||
"support_plan",
|
||||
|
||||
@@ -104,10 +104,10 @@ const BlogCategory: FC = () => {
|
||||
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
|
||||
<Td text={t('')}>
|
||||
<div className='flex gap-2 items-center'>
|
||||
{canUpdate('blogs') && (
|
||||
{canUpdate('blog_categories') && (
|
||||
<UpdateCategory id={item.id} />
|
||||
)}
|
||||
{canDelete('blogs') && (
|
||||
{canDelete('blog_categories') && (
|
||||
<Trash size={20} color='red' onClick={() => {
|
||||
deleteBlogCategory.mutateAsync(item.id, {
|
||||
onSuccess: () => {
|
||||
@@ -129,7 +129,7 @@ const BlogCategory: FC = () => {
|
||||
</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'>
|
||||
<p className='text-md'>{t('blog.add_category')}</p>
|
||||
<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 { ErrorType } from '../../helpers/types'
|
||||
import { toast } from '../../components/Toast';
|
||||
import { usePermissions } from '../../hooks/usePermissions'
|
||||
const Comments: FC = () => {
|
||||
const { t } = useTranslation('global')
|
||||
const { canUpdate } = usePermissions()
|
||||
const getBlogComments = useGetBlogComments()
|
||||
const changeStatusComment = useChangeStatusComment()
|
||||
const handleChangeStatus = (id: string, status: string) => {
|
||||
@@ -49,7 +51,7 @@ const Comments: FC = () => {
|
||||
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
|
||||
<Td text=''>
|
||||
{
|
||||
item.status === 'PENDING' &&
|
||||
item.status === 'PENDING' && canUpdate('blog_comments') &&
|
||||
<div className='flex items-center gap-2'>
|
||||
<TickCircle onClick={() => handleChangeStatus(item.id, 'APPROVED')} color='green' size={20} />
|
||||
<CloseCircle onClick={() => handleChangeStatus(item.id, 'REJECTED')} color='red' size={20} />
|
||||
|
||||
@@ -37,7 +37,7 @@ const SliderList: FC = () => {
|
||||
<div>
|
||||
{t('slider.list_slider')}
|
||||
</div>
|
||||
{canCreate('blogs') && (
|
||||
{canCreate('sliders') && (
|
||||
<div>
|
||||
<Link to={Pages.sliders.create}>
|
||||
<Button
|
||||
@@ -84,7 +84,7 @@ const SliderList: FC = () => {
|
||||
<Td text={item.isActive ? t('slider.active') : t('slider.inactive')} />
|
||||
<Td text={''}>
|
||||
<div className='flex gap-2'>
|
||||
{canUpdate('blogs') && (
|
||||
{canUpdate('sliders') && (
|
||||
<Link to={Pages.sliders.detail + item.id}>
|
||||
<Edit
|
||||
className='size-5'
|
||||
@@ -92,7 +92,7 @@ const SliderList: FC = () => {
|
||||
/>
|
||||
</Link>
|
||||
)}
|
||||
{canDelete('blogs') && (
|
||||
{canDelete('sliders') && (
|
||||
<TrashWithConfrim
|
||||
onDelete={() => handleDelete(item.id)}
|
||||
isLoading={deleteSlider.isPending}
|
||||
|
||||
@@ -39,13 +39,13 @@ const ContentSubMenu: FC = () => {
|
||||
title={t("submenu.blog_comments")}
|
||||
isActive={isActive("/blog/comments")}
|
||||
link={Pages.blog.comments}
|
||||
activeName="blogs"
|
||||
activeName="blog_comments"
|
||||
/>
|
||||
<SubMenuItem
|
||||
title={t("submenu.blog_category")}
|
||||
isActive={isActive("/blog/category")}
|
||||
link={Pages.blog.category}
|
||||
activeName="blogs"
|
||||
activeName="blog_categories"
|
||||
/>
|
||||
<SubMenuItem
|
||||
title={t("sidebar.ads")}
|
||||
@@ -69,7 +69,7 @@ const ContentSubMenu: FC = () => {
|
||||
title={t("sidebar.sliders")}
|
||||
isActive={isActive("sliders")}
|
||||
link={Pages.sliders.list}
|
||||
activeName="blogs"
|
||||
activeName="sliders"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user