"use client"; import { useEffect, useMemo, useState } from "react"; import type { UserRole } from "@/config/homeAppsConfig"; import { rolesAccessExplorerItems } from "@/config/rolesAccessExplorerConfig"; import { rolesAccessService } from "@/services/api/rolesAccessService"; import type { AccessTab, CustomOrganizationRole, RoleAccessSectionId, RolePermissionMatrix } from "@/types/rolesAccess"; import { CompactExplorerChrome } from "@/components/shared/CompactExplorerChrome"; import { CustomOrganizationRolesSection } from "./sections/CustomOrganizationRolesSection"; import { PermissionsMatrixSection } from "./sections/PermissionsMatrixSection"; import { ExplorerIconTile } from "@/components/shared/GlassIcon"; function isAllowedRole(role: UserRole): role is "super_admin" | "org_admin" { return role === "super_admin" || role === "org_admin"; } export function RolesAccessExplorer({ role }: { role: UserRole }) { const [query, setQuery] = useState(""); const [tabs, setTabs] = useState([]); const [activeTabId, setActiveTabId] = useState(null); const [matrix, setMatrix] = useState([]); const [customRoles, setCustomRoles] = useState([]); const [toast, setToast] = useState<{ message: string; tone: "success" | "error" } | null>(null); useEffect(() => { if (!isAllowedRole(role)) return; setMatrix(rolesAccessService.listMatrix()); setCustomRoles(rolesAccessService.listCustomRoles()); }, [role]); const availableItems = role === "org_admin" ? rolesAccessExplorerItems.filter((item) => item.id === "permissions-matrix") : rolesAccessExplorerItems; const filteredItems = useMemo(() => availableItems.filter((item) => item.titleFa.includes(query) || item.descriptionFa.includes(query)), [availableItems, query]); const activeTab = tabs.find((tab) => tab.id === activeTabId) || null; const title = activeTab?.titleFa || "خانه"; if (!isAllowedRole(role)) return

دسترسی غیرمجاز

شما به این بخش دسترسی ندارید.

; const openSection = (sectionId: RoleAccessSectionId) => { const item = availableItems.find((entry) => entry.id === sectionId); if (!item) return; const id = `tab-${sectionId}`; setTabs((current) => current.some((tab) => tab.id === id) ? current : [...current, { id, titleFa: item.titleFa, sectionId, isClosable: true }]); setActiveTabId(id); }; const closeTab = (tabId: string) => { const next = tabs.filter((tab) => tab.id !== tabId); setTabs(next); if (activeTabId === tabId) setActiveTabId(next.at(-1)?.id || null); }; const showToast = (message: string, tone: "success" | "error" = "success") => { setToast({ message, tone }); window.setTimeout(() => setToast(null), 2600); }; return (
({ id: tab.id, titleFa: tab.titleFa, isClosable: tab.isClosable }))} activeTabId={activeTabId} query={query} searchPlaceholder="جستجو..." onQuery={setQuery} onHome={() => setActiveTabId(null)} onSelectTab={setActiveTabId} onCloseTab={closeTab} > {!activeTab ? (
{filteredItems.map((item) => openSection(item.id)} />)}
) : activeTab.sectionId === "permissions-matrix" ? ( ) : ( { setCustomRoles(items); rolesAccessService.saveCustomRoles(items); }} /> )}
{toast &&
{toast.message}
}
); }