feat: admin category

This commit is contained in:
2026-02-23 15:32:16 +03:30
parent e7f4c55bfe
commit b8ae9757d4
5 changed files with 30 additions and 6 deletions

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 1920 1920" xmlns="http://www.w3.org/2000/svg">
<path d="M276.941 440.584v565.722c0 422.4 374.174 625.468 674.71 788.668l8.02 4.292 8.131-4.292c300.537-163.2 674.71-366.268 674.71-788.668V440.584l-682.84-321.657L276.94 440.584Zm682.73 1479.529c-9.262 0-18.523-2.372-26.993-6.89l-34.9-18.974C588.095 1726.08 164 1495.906 164 1006.306V404.78c0-21.91 12.65-41.788 32.414-51.162L935.727 5.42c15.134-7.228 32.866-7.228 48 0l739.313 348.2c19.765 9.374 32.414 29.252 32.414 51.162v601.525c0 489.6-424.207 719.774-733.779 887.943l-34.899 18.975c-8.47 4.517-17.731 6.889-27.105 6.889Zm467.158-547.652h-313.412l-91.595-91.482v-83.803H905.041v-116.78h-83.69l-58.503-58.504c-1.92.113-3.84.113-5.76.113-176.075 0-319.285-143.21-319.285-319.285 0-176.075 143.21-319.398 319.285-319.398 176.075 0 319.285 143.323 319.285 319.398 0 1.92 0 3.84-.113 5.647l350.57 350.682v313.412Zm-266.654-112.941h153.713v-153.713L958.462 750.155l3.953-37.27c1.017-123.897-91.595-216.621-205.327-216.621S550.744 588.988 550.744 702.72c0 113.845 92.612 206.344 206.344 206.344l47.21-5.309 63.811 63.7h149.873v116.78h116.781v149.986l25.412 25.299Zm-313.4-553.57c0 46.758-37.949 84.706-84.706 84.706-46.758 0-84.706-37.948-84.706-84.706s37.948-84.706 84.706-84.706c46.757 0 84.706 37.948 84.706 84.706" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -5,8 +5,10 @@ export const PROFILE = "/profile";
export const MENU = "/menu"; export const MENU = "/menu";
export const TRAINING = "/training"; export const TRAINING = "/training";
//Management //Admin Routes
export const PERMISSION_ACCESS = "/permission-access"; export const PERMISSION_ACCESS = "/permission-access";
//Management
export const USERS = "/users"; export const USERS = "/users";
export const ORGANIZATIONS = "/organizations"; export const ORGANIZATIONS = "/organizations";
export const ROLES = "/roles"; export const ROLES = "/roles";

View File

@@ -27,12 +27,15 @@ import TagDistribtution from "../Pages/LiveStock/TagDistribution";
import TagDistribtutionDetails from "../Pages/LiveStock/TagDistributionDetails"; import TagDistribtutionDetails from "../Pages/LiveStock/TagDistributionDetails";
import Tags from "../partials/LiveStock/tagging/Tags"; import Tags from "../partials/LiveStock/tagging/Tags";
export const managementCategoryItems = [ export const adminCategoryItems = [
{ {
name: "permission_control", name: "permission_control",
path: R.PERMISSION_ACCESS, path: R.PERMISSION_ACCESS,
component: Management, component: Management,
}, },
];
export const managementCategoryItems = [
{ {
name: "users", name: "users",
path: R.USERS, path: R.USERS,

View File

@@ -1,6 +1,7 @@
import { ItemWithSubItems } from "../types/userPermissions"; import { ItemWithSubItems } from "../types/userPermissions";
import { filterByAccess } from "./filterByAccess"; import { filterByAccess } from "./filterByAccess";
import { import {
adminCategoryItems,
feedInputCategoryItems, feedInputCategoryItems,
livestockCategoryItems, livestockCategoryItems,
managementCategoryItems, managementCategoryItems,
@@ -11,6 +12,7 @@ import {
unitCategoryItems, unitCategoryItems,
} from "./getCategoryParameters"; } from "./getCategoryParameters";
import { getUserAvalablePaths } from "./getUserAvalablePaths"; import { getUserAvalablePaths } from "./getUserAvalablePaths";
import { useUserProfileStore } from "../context/zustand-store/userStore";
import LogoManagement from "../assets/images/svg/management.svg?react"; import LogoManagement from "../assets/images/svg/management.svg?react";
import LogoFeedInput from "../assets/images/svg/feed-input.svg?react"; import LogoFeedInput from "../assets/images/svg/feed-input.svg?react";
import LogoWage from "../assets/images/svg/wage.svg?react"; import LogoWage from "../assets/images/svg/wage.svg?react";
@@ -19,6 +21,7 @@ import LogoPos from "../assets/images/svg/pos.svg?react";
import LogoTransactions from "../assets/images/svg/transactions.svg?react"; import LogoTransactions from "../assets/images/svg/transactions.svg?react";
import LogoUnits from "../assets/images/svg/units.svg?react"; import LogoUnits from "../assets/images/svg/units.svg?react";
import LogoTagging from "../assets/images/svg/tagging.svg?react"; import LogoTagging from "../assets/images/svg/tagging.svg?react";
import LogoAdmin from "../assets/images/svg/admin.svg?react";
type Item = { type Item = {
page_name: string; page_name: string;
@@ -26,7 +29,7 @@ type Item = {
}; };
export function getUserPermissions( export function getUserPermissions(
permissions: Item[] = [] permissions: Item[] = [],
): ItemWithSubItems[] { ): ItemWithSubItems[] {
if (!permissions || !permissions.length) { if (!permissions || !permissions.length) {
return []; return [];
@@ -47,11 +50,23 @@ export function getUserPermissions(
const transactionItems = filterByAccess( const transactionItems = filterByAccess(
permissions, permissions,
transactionCategoryItems transactionCategoryItems,
); );
const items: ItemWithSubItems[] = []; const items: ItemWithSubItems[] = [];
const profile = useUserProfileStore.getState().profile;
const isAdmin = profile?.role?.type?.key === "ADM";
if (isAdmin) {
items.push({
en: "admin",
fa: "ادمین",
icon: LogoAdmin,
subItems: adminCategoryItems,
});
}
if (managementItems.length) { if (managementItems.length) {
items.push({ items.push({
en: "management", en: "management",

View File

@@ -22,7 +22,7 @@ type Item = {
export function getUserAvalablePaths( export function getUserAvalablePaths(
category: string, category: string,
permissions: any[] = [] permissions: any[] = [],
): SubItems[] { ): SubItems[] {
if (!Array.isArray(permissions)) { if (!Array.isArray(permissions)) {
return []; return [];
@@ -32,7 +32,7 @@ export function getUserAvalablePaths(
if (!permissions?.length) return []; if (!permissions?.length) return [];
const nameSet = new Set( const nameSet = new Set(
permissions.map((item: Item) => item?.page_name).filter(Boolean) permissions.map((item: Item) => item?.page_name).filter(Boolean),
); );
return items?.filter((item) => item?.name && nameSet.has(item.name)) || []; return items?.filter((item) => item?.name && nameSet.has(item.name)) || [];