diff --git a/src/config/Pages.ts b/src/config/Pages.ts index b37f600..d8549fa 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -122,8 +122,13 @@ export const Pages = { errors: "/access-logs/errors", permissions: "/access-logs/permissions", }, - icons: { - list: "/icons/list", - groupList: "/icons/group/list", + dmenu: { + icons: { + list: "/dmenu/icons/list", + groupList: "/dmenu/icons/group/list", + }, + warnings: { + list: "/dmenu/reports/list", + }, }, }; diff --git a/src/langs/fa.json b/src/langs/fa.json index a19c6a3..c048eab 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -74,7 +74,10 @@ "support": "پلن پشتیبانی", "feedback": "گزارش ها", "accessLogs": "لاگ‌های دسترسی", - "icons": "آیکون ها" + "icons": "آیکون ها", + "dmenu": "دی منو", + "groups_icon": "گروه های آیکون", + "reports": "گزارش ها" }, "slider": { "new_slider": "اسلایدر جدید", diff --git a/src/pages/icon/hooks/useIconData.ts b/src/pages/dmenu/hooks/useIconData.ts similarity index 100% rename from src/pages/icon/hooks/useIconData.ts rename to src/pages/dmenu/hooks/useIconData.ts diff --git a/src/pages/icon/GroupList.tsx b/src/pages/dmenu/icon/GroupList.tsx similarity index 92% rename from src/pages/icon/GroupList.tsx rename to src/pages/dmenu/icon/GroupList.tsx index 686a6f9..30af8dc 100644 --- a/src/pages/icon/GroupList.tsx +++ b/src/pages/dmenu/icon/GroupList.tsx @@ -1,15 +1,15 @@ import { type FC, useState } from 'react' import { useTranslation } from 'react-i18next' -import Button from '../../components/Button' +import Button from '../../../components/Button' import { Add } from 'iconsax-react' import CreateGroupIcon from './components/CreateGroupIcon' -import { useGetGroupIcons, useDeleteGroupIcon } from './hooks/useIconData' -import Td from '../../components/Td' -import Input from '../../components/Input' -import PageLoading from '../../components/PageLoading' -import TrashWithConfrim from '../../components/TrashWithConfrim' +import { useGetGroupIcons, useDeleteGroupIcon } from '../hooks/useIconData' +import Td from '../../../components/Td' +import Input from '../../../components/Input' +import PageLoading from '../../../components/PageLoading' +import TrashWithConfrim from '../../../components/TrashWithConfrim' import { toast } from 'react-toastify' -import { ErrorType } from '../../helpers/types' +import { ErrorType } from '../../../helpers/types' import { GroupIconType } from './types/Types' const GroupIconList: FC = () => { diff --git a/src/pages/icon/List.tsx b/src/pages/dmenu/icon/List.tsx similarity index 94% rename from src/pages/icon/List.tsx rename to src/pages/dmenu/icon/List.tsx index 3c31601..6cf147c 100644 --- a/src/pages/icon/List.tsx +++ b/src/pages/dmenu/icon/List.tsx @@ -1,15 +1,15 @@ import { useState, type FC } from 'react' -import { useGetIcons, useDeleteIcon } from './hooks/useIconData' +import { useGetIcons, useDeleteIcon } from '../hooks/useIconData' import { useTranslation } from 'react-i18next' -import Button from '../../components/Button' +import Button from '../../../components/Button' import { Add } from 'iconsax-react' import CreateIcon from './components/CreateIcon' -import Td from '../../components/Td' -import Input from '../../components/Input' -import PageLoading from '../../components/PageLoading' -import TrashWithConfrim from '../../components/TrashWithConfrim' +import Td from '../../../components/Td' +import Input from '../../../components/Input' +import PageLoading from '../../../components/PageLoading' +import TrashWithConfrim from '../../../components/TrashWithConfrim' import { toast } from 'react-toastify' -import { ErrorType } from '../../helpers/types' +import { ErrorType } from '../../../helpers/types' import { IconType } from './types/Types' import moment from 'moment-jalaali' diff --git a/src/pages/icon/components/CreateGroupIcon.tsx b/src/pages/dmenu/icon/components/CreateGroupIcon.tsx similarity index 91% rename from src/pages/icon/components/CreateGroupIcon.tsx rename to src/pages/dmenu/icon/components/CreateGroupIcon.tsx index ca463db..4dc9974 100644 --- a/src/pages/icon/components/CreateGroupIcon.tsx +++ b/src/pages/dmenu/icon/components/CreateGroupIcon.tsx @@ -1,15 +1,15 @@ import { FC } from 'react' import { useTranslation } from 'react-i18next' -import Button from '../../../components/Button' -import DefaulModal from '../../../components/DefaulModal' -import Input from '../../../components/Input' +import Button from '../../../../components/Button' +import DefaulModal from '../../../../components/DefaulModal' +import Input from '../../../../components/Input' import { useFormik } from 'formik' import * as Yup from 'yup' import { toast } from 'react-toastify' import { TickCircle } from 'iconsax-react' -import { useCreateGroupIcon } from '../hooks/useIconData' +import { useCreateGroupIcon } from '../../hooks/useIconData' import { CreateGroupIconType } from '../types/Types' -import { ErrorType } from '../../../helpers/types' +import { ErrorType } from '../../../../helpers/types' interface CreateGroupIconProps { open: boolean diff --git a/src/pages/icon/components/CreateIcon.tsx b/src/pages/dmenu/icon/components/CreateIcon.tsx similarity index 91% rename from src/pages/icon/components/CreateIcon.tsx rename to src/pages/dmenu/icon/components/CreateIcon.tsx index 27d9a51..2fb9a60 100644 --- a/src/pages/icon/components/CreateIcon.tsx +++ b/src/pages/dmenu/icon/components/CreateIcon.tsx @@ -1,17 +1,17 @@ import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' -import Button from '../../../components/Button' -import DefaulModal from '../../../components/DefaulModal' -import UploadBox from '../../../components/UploadBox' -import Select from '../../../components/Select' +import Button from '../../../../components/Button' +import DefaulModal from '../../../../components/DefaulModal' +import UploadBox from '../../../../components/UploadBox' +import Select from '../../../../components/Select' import { useFormik } from 'formik' import * as Yup from 'yup' import { toast } from 'react-toastify' import { TickCircle } from 'iconsax-react' -import { useCreateIcon, useGetGroupIcons } from '../hooks/useIconData' -import { useSingleUpload } from '../../service/hooks/useServiceData' +import { useCreateIcon, useGetGroupIcons } from '../../hooks/useIconData' +import { useSingleUpload } from '../../../service/hooks/useServiceData' import { CreateIconType, GroupIconType } from '../types/Types' -import { ErrorType } from '../../../helpers/types' +import { ErrorType } from '../../../../helpers/types' interface CreateIconProps { open: boolean diff --git a/src/pages/icon/types/Types.ts b/src/pages/dmenu/icon/types/Types.ts similarity index 92% rename from src/pages/icon/types/Types.ts rename to src/pages/dmenu/icon/types/Types.ts index 91dcdec..cb045c3 100644 --- a/src/pages/icon/types/Types.ts +++ b/src/pages/dmenu/icon/types/Types.ts @@ -1,4 +1,4 @@ -import { IResponse } from "../../../types/response.types"; +import { IResponse } from "../../../../types/response.types"; export type CreateGroupIconType = { name: string; diff --git a/src/pages/icon/service/IconService.ts b/src/pages/dmenu/service/IconService.ts similarity index 97% rename from src/pages/icon/service/IconService.ts rename to src/pages/dmenu/service/IconService.ts index f8a4bd0..f5bfac3 100644 --- a/src/pages/icon/service/IconService.ts +++ b/src/pages/dmenu/service/IconService.ts @@ -4,7 +4,7 @@ import { CreateIconType, GroupIconsResponse, IconsResponse, -} from "../types/Types"; +} from "../icon/types/Types"; export const getIcons = async (): Promise => { const { data } = await axios.get("/admin/dmenu/icons"); diff --git a/src/router/Main.tsx b/src/router/Main.tsx index 0a980f3..49fcbe8 100644 --- a/src/router/Main.tsx +++ b/src/router/Main.tsx @@ -77,8 +77,9 @@ import AccessLogsList from '../pages/accessLogs/AccessLogsList' import AccessLogsStats from '../pages/accessLogs/AccessLogsStats' import ErrorLogs from '../pages/accessLogs/ErrorLogs' import PermissionLogs from '../pages/accessLogs/PermissionLogs' -import IconsList from '../pages/icon/List.tsx' -import GroupIconList from '../pages/icon/GroupList' +import IconsList from '../pages/dmenu/icon/List' +import GroupIconList from '../pages/dmenu/icon/GroupList' +// import WarningsList from '../pages/dmenu/reports/List' // TODO: Create this component const MainRouter: FC = () => { const { hasSubMenu } = useSharedStore() @@ -168,8 +169,9 @@ const MainRouter: FC = () => { } /> } /> - } /> - } /> + } /> + } /> + {/* } /> */} diff --git a/src/shared/SideBar.tsx b/src/shared/SideBar.tsx index d1b6237..9afb75d 100644 --- a/src/shared/SideBar.tsx +++ b/src/shared/SideBar.tsx @@ -2,7 +2,7 @@ import { FC, useEffect } from 'react' import LogoImage from '../assets/images/logo.svg' import LogoSmall from '../assets/images/logo-small.svg' import { useTranslation } from 'react-i18next' -import { Card, Code, CodeCircle, DocumentLike, DocumentText, Element3, Gallery, Headphone, Home2, Logout, Message, Messages3, Money3, NotificationStatus, People, Profile, Receipt21, Setting2, SmsTracking, Teacher, TicketDiscount, UserSquare, Activity, Icon } from 'iconsax-react' +import { Card, Code, CodeCircle, DocumentLike, DocumentText, Element3, Gallery, Headphone, Home2, Logout, Message, Messages3, Money3, NotificationStatus, People, Profile, Receipt21, Setting2, SmsTracking, Teacher, TicketDiscount, UserSquare, Activity, Icon, Category, Warning2 } from 'iconsax-react' import SideBarItem from './SideBarItem' import { useLocation } from 'react-router-dom' import { Pages } from '../config/Pages' @@ -19,12 +19,14 @@ import BlogSubMenu from './components/BlogSubMenu' import { useGetProfile } from '../pages/profile/hooks/useProfileData' import SupportSubMenu from './components/SupportSubMenu' import AccessLogsSubMenu from './components/AccessLogsSubMenu' +import { useGetAdminPermissions } from '../pages/users/hooks/useUserData' const SideBar: FC = () => { const { t } = useTranslation('global') const { openSidebar, setOpenSidebar, hasSubMenu, setSubMenuName, setSubtMenu, subMenuName } = useSharedStore() const location = useLocation() const { data: profile } = useGetProfile() + const { data: adminPermissions } = useGetAdminPermissions() const isActive = (name: string) => { return location.pathname.includes(name) } @@ -292,18 +294,51 @@ const SideBar: FC = () => { /> + { + adminPermissions?.data?.permissions?.some((permission: { name: string }) => permission.name === 'dmenu') && + <> +
+ {t('sidebar.dmenu')} +
+
+
+ } + title={t('sidebar.icons')} + isActive={isActive('icons/list')} + link={Pages.dmenu.icons.list} + activeName='dmenu' + /> +
+ +
+ } + title={t('sidebar.groups_icon')} + isActive={isActive('group')} + link={Pages.dmenu.icons.groupList} + activeName='dmenu' + /> +
+ +
+ } + title={t('sidebar.reports')} + isActive={isActive('reports')} + link={Pages.dmenu.warnings.list} + activeName='dmenu' + /> +
+
+ + }
-
- } - title={t('sidebar.icons')} - isActive={isActive('icons')} - link={Pages.icons.list} - activeName='dmenu' - /> -
} @@ -333,8 +368,9 @@ const SideBar: FC = () => { />
+ - + { hasSubMenu && (openSidebar || window.innerWidth > 1139) &&