diff --git a/README.md b/README.md index a828584..f422837 100644 --- a/README.md +++ b/README.md @@ -814,3 +814,26 @@ function UsersTable({ data, columns }) { ); } ``` + + +## Sidebar.Exit + +`Sidebar` به‌صورت پیش‌فرض گزینه خروج را نمایش نمی‌دهد. برای فعال‌کردن خروج Keycloak داخلی UI Kit، آن را به‌صورت compound component اضافه کنید: + +```jsx + + + +``` + +عنوان و آیکون خروج قابل تغییر هستند: + +```jsx + +``` + +`Sidebar.Exit` از `logoutKeycloak` داخلی UI Kit استفاده می‌کند و callback خروج از سامانه مقصد نیاز ندارد. diff --git a/dist/layout.d.ts b/dist/layout.d.ts index fc44a0f..deefbf8 100644 --- a/dist/layout.d.ts +++ b/dist/layout.d.ts @@ -13,8 +13,7 @@ export type SidebarProps = { currentPath?: string; linkComponent?: any; onNavigate?: (item: SidebarItem) => void; - logoutTitle?: string; - logoutIcon?: any; + children?: any; primaryMobileCount?: number; moreTitle?: string; moreDrawerTitle?: string; @@ -22,7 +21,14 @@ export type SidebarProps = { mobileProps?: Record; }; -export function Sidebar(props: SidebarProps): any; +export type SidebarExitProps = { + title?: string; + icon?: any; +}; + +export const Sidebar: ((props: SidebarProps) => any) & { + Exit: (props: SidebarExitProps) => any; +}; export function isSidebarPathActive( currentPath: string | undefined, item: SidebarItem, diff --git a/dist/layout.js b/dist/layout.js index 2ff8b22..78381b6 100644 --- a/dist/layout.js +++ b/dist/layout.js @@ -1,13 +1,13 @@ -import { jsx as A, jsxs as l, Fragment as L } from "react/jsx-runtime"; -import { Box as a, HStack as b, VStack as C, Image as M, Text as c, useDisclosure as V, Stack as U, Tooltip as z, IconButton as S, Icon as d, Drawer as X, DrawerOverlay as H, DrawerContent as F, DrawerCloseButton as J, DrawerHeader as K, DrawerBody as q, SimpleGrid as _, Link as $ } from "@chakra-ui/react"; -import { useRef as AA, useEffect as eA, forwardRef as oA } from "react"; -import { FiMoreHorizontal as nA } from "react-icons/fi"; -import { IoExit as tA } from "react-icons/io5"; -import { u as rA, l as W } from "./chunks/permission-DL7ciWwc.js"; -const gA = "data:image/webp;base64,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MCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoxMDU3ZjgxNy03YTEzLThiNGEtODc1Ni1lYWM1MWEyZDRiYTY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDgtMTNUMTQ6MjU6NTMrMDQ6MzA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MDZjNmM4ODYtZDY2My1jMzQzLTkwZTUtNjQ4ZWJlYTkxYzgxPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjEwNTdmODE3LTdhMTMtOGI0YS04NzU2LWVhYzUxYTJkNGJhNjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6NWI3ZmJlNDgtMDc0ZS01NzRhLWFlNTctN2RmYjA4NmI1N2Q3PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjA2YzZjODg2LWQ2NjMtYzM0My05MGU1LTY0OGViZWE5MWM4MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmEwYjgxNWMzLTkzYjMtODU0MC04NmY0LTA0OTEyZTY5Y2Y4NTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K"; -function lA({ children: e, ...n }) { +import { jsx as A, jsxs as g, Fragment as K } from "react/jsx-runtime"; +import { Box as c, HStack as p, VStack as s, Image as N, Text as d, useDisclosure as q, Stack as _, Tooltip as T, IconButton as j, Icon as C, Drawer as $, DrawerOverlay as AA, DrawerContent as oA, DrawerCloseButton as eA, DrawerHeader as nA, DrawerBody as tA, SimpleGrid as rA, Link as gA } from "@chakra-ui/react"; +import { useRef as lA, Children as iA, isValidElement as IA, useEffect as aA, forwardRef as cA } from "react"; +import { FiMoreHorizontal as dA } from "react-icons/fi/index.js"; +import { IoExit as CA } from "react-icons/io5/index.js"; +import { u as sA, l as E } from "./chunks/permission-DL7ciWwc.js"; +const bA = "data:image/webp;base64,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MCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE4LTA4LTEzVDE0OjI1OjUzKzA0OjMwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wOC0xM1QxNDoyNTo1MyswNDozMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoxMDU3ZjgxNy03YTEzLThiNGEtODc1Ni1lYWM1MWEyZDRiYTY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDgtMTNUMTQ6MjU6NTMrMDQ6MzA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MDZjNmM4ODYtZDY2My1jMzQzLTkwZTUtNjQ4ZWJlYTkxYzgxPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjEwNTdmODE3LTdhMTMtOGI0YS04NzU2LWVhYzUxYTJkNGJhNjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6NWI3ZmJlNDgtMDc0ZS01NzRhLWFlNTctN2RmYjA4NmI1N2Q3PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjA2YzZjODg2LWQ2NjMtYzM0My05MGU1LTY0OGViZWE5MWM4MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmEwYjgxNWMzLTkzYjMtODU0MC04NmY0LTA0OTEyZTY5Y2Y4NTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgIDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K"; +function pA({ children: o, ...n }) { return /* @__PURE__ */ A( - a, + c, { as: "header", w: "100%", @@ -20,38 +20,38 @@ function lA({ children: e, ...n }) { position: "fixed", color: "white", ...n, - children: /* @__PURE__ */ A(b, { h: "100%", alignItems: "center", justifyContent: "space-between", children: e }) + children: /* @__PURE__ */ A(p, { h: "100%", alignItems: "center", justifyContent: "space-between", children: o }) } ); } -function iA({ children: e, ...n }) { - return /* @__PURE__ */ A(b, { alignItems: "center", h: "100%", py: "10px", ...n, children: e }); +function hA({ children: o, ...n }) { + return /* @__PURE__ */ A(p, { alignItems: "center", h: "100%", py: "10px", ...n, children: o }); } -function IA(e) { - return /* @__PURE__ */ A(M, { loading: "lazy", alt: "logo", maxW: "80px", maxH: "80px", ...e }); +function uA(o) { + return /* @__PURE__ */ A(N, { loading: "lazy", alt: "logo", maxW: "80px", maxH: "80px", ...o }); } -function aA({ children: e, ...n }) { +function xA({ children: o, ...n }) { return /* @__PURE__ */ A( - C, + s, { alignItems: "start", justifyContent: "center", h: "100%", spacing: 1, ...n, - children: e + children: o } ); } -function cA({ children: e, ...n }) { - return /* @__PURE__ */ A(c, { fontWeight: "bold", fontSize: "20px", ...n, children: e }); +function RA({ children: o, ...n }) { + return /* @__PURE__ */ A(d, { fontWeight: "bold", fontSize: "20px", ...n, children: o }); } -function dA({ children: e, ...n }) { - return /* @__PURE__ */ A(c, { ...n, children: e }); +function DA({ children: o, ...n }) { + return /* @__PURE__ */ A(d, { ...n, children: o }); } -function CA({ logoSrc: e = gA, ...n }) { - return /* @__PURE__ */ l( - C, +function mA({ logoSrc: o = bA, ...n }) { + return /* @__PURE__ */ g( + s, { w: "fit-content", alignItems: "center", @@ -59,53 +59,53 @@ function CA({ logoSrc: e = gA, ...n }) { py: "10px", ...n, children: [ - /* @__PURE__ */ A(M, { src: e, loading: "lazy", maxW: "90px" }), - /* @__PURE__ */ A(c, { fontSize: "xs", fontWeight: "bold", textAlign: "center", children: "مؤسسه تولید سیستم‌های خبره و هوشمند اسلامی باقرالعلوم(ع)" }) + /* @__PURE__ */ A(N, { src: o, loading: "lazy", maxW: "90px" }), + /* @__PURE__ */ A(d, { fontSize: "xs", fontWeight: "bold", textAlign: "center", children: "مؤسسه تولید سیستم‌های خبره و هوشمند اسلامی باقرالعلوم(ع)" }) ] } ); } -const mA = Object.assign(lA, { - BrandSection: iA, - Logo: IA, - Brand: aA, - Title: cA, - Description: dA, - Bi: CA -}), Y = (e, n) => { - const t = (e == null ? void 0 : e.split("?")[0]) || ""; +const SA = Object.assign(pA, { + BrandSection: hA, + Logo: uA, + Brand: xA, + Title: RA, + Description: DA, + Bi: mA +}), B = (o, n) => { + const t = (o == null ? void 0 : o.split("?")[0]) || ""; return [n == null ? void 0 : n.path, ...(n == null ? void 0 : n.aliases) || []].filter(Boolean).some( - (g) => t === g || t.startsWith(`${g}/`) + (l) => t === l || t.startsWith(`${l}/`) ); -}, ZA = (e = [], n) => e.find((t) => Y(n, t)), p = oA( - ({ linkComponent: e, href: n, children: t, ...r }, g) => /* @__PURE__ */ A($, { ref: g, href: n, ...e ? { as: e } : {}, ...r, children: t }) +}, YA = (o = [], n) => o.find((t) => B(n, t)), h = cA( + ({ linkComponent: o, href: n, children: t, ...r }, l) => /* @__PURE__ */ A(gA, { ref: l, href: n, ...o ? { as: o } : {}, ...r, children: t }) ); -p.displayName = "SidebarLink"; -const sA = ({ - item: e, +h.displayName = "SidebarLink"; +const ZA = ({ + item: o, isActive: n, isDisabled: t, linkComponent: r, - onNavigate: g + onNavigate: l }) => { const i = /* @__PURE__ */ A( - S, + j, { variant: "ghost", - icon: /* @__PURE__ */ A(d, { as: e.icon }), + icon: /* @__PURE__ */ A(C, { as: o.icon }), fontSize: "xl", size: { base: "sm", lg: "lg" }, isDisabled: t, isActive: n, - "aria-label": e.title, + "aria-label": o.title, "aria-current": n ? "page" : void 0, - onClick: t ? void 0 : g + onClick: t ? void 0 : l } ); return /* @__PURE__ */ A( - z, + T, { - label: t ? "عدم دسترسی" : e.title, + label: t ? "عدم دسترسی" : o.title, placement: "left-start", hasArrow: !0, rounded: "md", @@ -113,26 +113,26 @@ const sA = ({ px: 4, fontWeight: "bold", closeDelay: 150, - children: t ? /* @__PURE__ */ A(a, { as: "span", children: i }) : /* @__PURE__ */ A( - p, + children: t ? /* @__PURE__ */ A(c, { as: "span", children: i }) : /* @__PURE__ */ A( + h, { linkComponent: r, - href: e.path, + href: o.path, _hover: { textDecoration: "none" }, children: i } ) } ); -}, bA = ({ - item: e, +}, yA = ({ + item: o, isActive: n, isDisabled: t, linkComponent: r, - onNavigate: g + onNavigate: l }) => { - const i = /* @__PURE__ */ l( - C, + const i = /* @__PURE__ */ g( + s, { as: "span", spacing: 0.5, @@ -146,9 +146,9 @@ const sA = ({ opacity: t ? 0.4 : 1, transition: "background-color 150ms ease, color 150ms ease", children: [ - /* @__PURE__ */ A(d, { as: e.icon, boxSize: 5 }), + /* @__PURE__ */ A(C, { as: o.icon, boxSize: 5 }), /* @__PURE__ */ A( - c, + d, { as: "span", w: "full", @@ -157,14 +157,14 @@ const sA = ({ lineHeight: "short", textAlign: "center", noOfLines: 1, - children: e.mobileTitle || e.title + children: o.mobileTitle || o.title } ) ] } ); return t ? /* @__PURE__ */ A( - a, + c, { flex: "1", minW: 0, @@ -174,45 +174,47 @@ const sA = ({ children: i } ) : /* @__PURE__ */ A( - p, + h, { linkComponent: r, - href: e.path, + href: o.path, flex: "1", minW: 0, display: "flex", alignItems: "center", _hover: { textDecoration: "none" }, - onClick: g, + onClick: l, "aria-current": n ? "page" : void 0, children: i } ); -}, GA = ({ - items: e = [], +}, Q = () => null, GA = ({ + items: o = [], currentPath: n, linkComponent: t, onNavigate: r, - logoutTitle: g = "خروج", - logoutIcon: i = tA, - primaryMobileCount: D = 4, - moreTitle: k = "بیشتر", - moreDrawerTitle: N = "سایر بخش‌های سامانه", - desktopProps: E, - mobileProps: j + children: l, + primaryMobileCount: i = 4, + moreTitle: O = "بیشتر", + moreDrawerTitle: P = "سایر بخش‌های سامانه", + desktopProps: L, + mobileProps: V }) => { - const { isOpen: T, onOpen: B, onClose: h } = V(), m = AA(), { cannot: Q, can: Z, isLoading: G } = rA(); - eA(() => { - G || Z("panel_access") || W(); - }, [Z, G]); - const P = n ?? (typeof window < "u" ? `${window.location.pathname}${window.location.search}` : ""), O = e.slice(0, D), w = e.slice(D), u = (o) => (Array.isArray(o == null ? void 0 : o.perm) ? o.perm : [o == null ? void 0 : o.perm]).filter(Boolean).some((I) => Q(I)), s = (o) => Y(P, o), x = w.some(s), f = (o) => { - r == null || r(o), h(); - }, y = () => { - h(), W(); + var S, Y; + const { isOpen: U, onOpen: X, onClose: u } = q(), G = lA(), { cannot: H, can: f, isLoading: w } = sA(), I = iA.toArray(l).find( + (e) => IA(e) && e.type === Q + ), x = !!I, R = ((S = I == null ? void 0 : I.props) == null ? void 0 : S.title) || "خروج", v = ((Y = I == null ? void 0 : I.props) == null ? void 0 : Y.icon) || CA; + aA(() => { + w || f("panel_access") || E(); + }, [f, w]); + const F = n ?? (typeof window < "u" ? `${window.location.pathname}${window.location.search}` : ""), J = o.slice(0, i), D = o.slice(i), m = (e) => (Array.isArray(e == null ? void 0 : e.perm) ? e.perm : [e == null ? void 0 : e.perm]).filter(Boolean).some((a) => H(a)), b = (e) => B(F, e), Z = D.some(b), W = D.length > 0 || x, M = (e) => { + r == null || r(e), u(); + }, z = () => { + u(), E(); }; - return /* @__PURE__ */ l(L, { children: [ + return /* @__PURE__ */ g(K, { children: [ /* @__PURE__ */ A( - U, + _, { py: 6, as: "nav", @@ -228,23 +230,23 @@ const sA = ({ msOverflowStyle: "none" }, display: { base: "none", lg: "flex" }, - ...E, - children: /* @__PURE__ */ l(C, { spacing: 2, children: [ - e.map((o) => /* @__PURE__ */ A( - sA, + ...L, + children: /* @__PURE__ */ g(s, { spacing: 2, children: [ + o.map((e) => /* @__PURE__ */ A( + ZA, { - item: o, - isDisabled: u(o), - isActive: s(o), + item: e, + isDisabled: m(e), + isActive: b(e), linkComponent: t, - onNavigate: () => r == null ? void 0 : r(o) + onNavigate: () => r == null ? void 0 : r(e) }, - o.path + e.path )), - /* @__PURE__ */ A( - z, + x && /* @__PURE__ */ A( + T, { - label: g, + label: R, placement: "left-start", hasArrow: !0, rounded: "md", @@ -253,14 +255,14 @@ const sA = ({ fontWeight: "bold", closeDelay: 150, children: /* @__PURE__ */ A( - S, + j, { variant: "ghost", - icon: /* @__PURE__ */ A(d, { as: i }), + icon: /* @__PURE__ */ A(C, { as: v }), fontSize: "xl", size: { base: "sm", lg: "lg" }, - "aria-label": g, - onClick: y + "aria-label": R, + onClick: z } ) } @@ -269,7 +271,7 @@ const sA = ({ } ), /* @__PURE__ */ A( - a, + c, { as: "nav", "aria-label": "ناوبری اصلی موبایل", @@ -283,24 +285,24 @@ const sA = ({ borderColor: "gray.200", boxShadow: "0 -6px 18px rgba(0, 0, 0, 0.08)", pb: "env(safe-area-inset-bottom)", - ...j, - children: /* @__PURE__ */ l(b, { h: "56px", px: 1.5, spacing: 1, align: "stretch", children: [ - O.map((o) => /* @__PURE__ */ A( - bA, + ...V, + children: /* @__PURE__ */ g(p, { h: "56px", px: 1.5, spacing: 1, align: "stretch", children: [ + J.map((e) => /* @__PURE__ */ A( + yA, { - item: o, - isDisabled: u(o), - isActive: s(o), + item: e, + isDisabled: m(e), + isActive: b(e), linkComponent: t, - onNavigate: () => f(o) + onNavigate: () => M(e) }, - o.path + e.path )), - /* @__PURE__ */ A( - a, + W && /* @__PURE__ */ A( + c, { as: "button", - ref: m, + ref: G, type: "button", flex: "1", minW: 0, @@ -313,27 +315,27 @@ const sA = ({ alignItems: "center", justifyContent: "center", cursor: "pointer", - onClick: B, + onClick: X, "aria-label": "نمایش سایر بخش‌ها", - children: /* @__PURE__ */ l( - C, + children: /* @__PURE__ */ g( + s, { spacing: 0.5, w: "full", py: 1, px: 1, borderRadius: "xl", - color: x ? "blue.600" : "gray.600", - bg: x ? "blue.50" : "transparent", + color: Z ? "blue.600" : "gray.600", + bg: Z ? "blue.50" : "transparent", children: [ - /* @__PURE__ */ A(d, { as: nA, boxSize: 5 }), + /* @__PURE__ */ A(C, { as: dA, boxSize: 5 }), /* @__PURE__ */ A( - c, + d, { fontSize: "10px", - fontWeight: x ? "bold" : "medium", + fontWeight: Z ? "bold" : "medium", lineHeight: "short", - children: k + children: O } ) ] @@ -344,28 +346,28 @@ const sA = ({ ] }) } ), - /* @__PURE__ */ l( - X, + W && /* @__PURE__ */ g( + $, { - isOpen: T, + isOpen: U, placement: "bottom", - onClose: h, - finalFocusRef: m, + onClose: u, + finalFocusRef: G, children: [ - /* @__PURE__ */ A(H, {}), - /* @__PURE__ */ l( - F, + /* @__PURE__ */ A(AA, {}), + /* @__PURE__ */ g( + oA, { borderTopRadius: "2xl", maxH: "min(78dvh, 620px)", pb: "env(safe-area-inset-bottom)", children: [ - /* @__PURE__ */ A(J, { insetInlineEnd: 3, insetInlineStart: "auto" }), - /* @__PURE__ */ A(K, { borderBottomWidth: "1px", fontSize: "md", children: N }), - /* @__PURE__ */ l(q, { py: 4, overflowY: "auto", children: [ - /* @__PURE__ */ A(_, { columns: 4, spacing: 2, children: w.map((o) => { - const R = u(o), I = s(o), v = /* @__PURE__ */ l( - C, + /* @__PURE__ */ A(eA, { insetInlineEnd: 3, insetInlineStart: "auto" }), + /* @__PURE__ */ A(nA, { borderBottomWidth: "1px", fontSize: "md", children: P }), + /* @__PURE__ */ g(tA, { py: 4, overflowY: "auto", children: [ + /* @__PURE__ */ A(rA, { columns: 4, spacing: 2, children: D.map((e) => { + const y = m(e), a = b(e), k = /* @__PURE__ */ g( + s, { h: "70px", minW: 0, @@ -373,43 +375,43 @@ const sA = ({ spacing: 1, px: 1, borderWidth: "1px", - borderColor: I ? "blue.300" : "gray.200", + borderColor: a ? "blue.300" : "gray.200", borderRadius: "lg", - bg: I ? "blue.50" : "white", - color: I ? "blue.700" : "gray.700", - opacity: R ? 0.4 : 1, + bg: a ? "blue.50" : "white", + color: a ? "blue.700" : "gray.700", + opacity: y ? 0.4 : 1, children: [ - /* @__PURE__ */ A(d, { as: o.icon, boxSize: 5, flexShrink: 0 }), + /* @__PURE__ */ A(C, { as: e.icon, boxSize: 5, flexShrink: 0 }), /* @__PURE__ */ A( - c, + d, { w: "full", fontSize: "10px", lineHeight: "shorter", - fontWeight: I ? "bold" : "medium", + fontWeight: a ? "bold" : "medium", textAlign: "center", noOfLines: 2, - children: o.mobileTitle || o.title + children: e.mobileTitle || e.title } ) ] } ); - return R ? /* @__PURE__ */ A(a, { children: v }, o.path) : /* @__PURE__ */ A( - p, + return y ? /* @__PURE__ */ A(c, { children: k }, e.path) : /* @__PURE__ */ A( + h, { linkComponent: t, - href: o.path, + href: e.path, _hover: { textDecoration: "none" }, - onClick: () => f(o), - "aria-current": I ? "page" : void 0, - children: v + onClick: () => M(e), + "aria-current": a ? "page" : void 0, + children: k }, - o.path + e.path ); }) }), - /* @__PURE__ */ A(a, { mt: 4, pt: 4, borderTopWidth: "1px", borderColor: "gray.200", children: /* @__PURE__ */ l( - b, + x && /* @__PURE__ */ A(c, { mt: 4, pt: 4, borderTopWidth: "1px", borderColor: "gray.200", children: /* @__PURE__ */ g( + p, { as: "button", type: "button", @@ -421,10 +423,10 @@ const sA = ({ color: "red.600", bg: "red.50", cursor: "pointer", - onClick: y, + onClick: z, children: [ - /* @__PURE__ */ A(d, { as: i, boxSize: 5 }), - /* @__PURE__ */ A(c, { fontWeight: "bold", children: "خروج از سامانه" }) + /* @__PURE__ */ A(C, { as: v, boxSize: 5 }), + /* @__PURE__ */ A(d, { fontWeight: "bold", children: R }) ] } ) }) @@ -436,10 +438,12 @@ const sA = ({ } ) ] }); -}; +}, kA = Object.assign(GA, { + Exit: Q +}); export { - mA as Header, - GA as Sidebar, - ZA as getActiveSidebarItem, - Y as isSidebarPathActive + SA as Header, + kA as Sidebar, + YA as getActiveSidebarItem, + B as isSidebarPathActive }; diff --git a/src/layout/Sidebar.jsx b/src/layout/Sidebar.jsx index 356e7cd..cd6359d 100644 --- a/src/layout/Sidebar.jsx +++ b/src/layout/Sidebar.jsx @@ -19,9 +19,9 @@ import { VStack, useDisclosure, } from "@chakra-ui/react"; -import { forwardRef, useEffect, useRef } from "react"; -import { FiMoreHorizontal } from "react-icons/fi"; -import { IoExit } from "react-icons/io5"; +import { Children, forwardRef, isValidElement, useEffect, useRef } from "react"; +import { FiMoreHorizontal } from "react-icons/fi/index.js"; +import { IoExit } from "react-icons/io5/index.js"; import { logoutKeycloak } from "../core/keycloak.jsx"; import { usePermission } from "../core/permission.jsx"; @@ -165,13 +165,14 @@ const MobileNavigationButton = ({ ); }; -export const Sidebar = ({ +const SidebarExit = () => null; + +const SidebarRoot = ({ items = [], currentPath, linkComponent, onNavigate, - logoutTitle = "خروج", - logoutIcon = IoExit, + children, primaryMobileCount = 4, moreTitle = "بیشتر", moreDrawerTitle = "سایر بخش‌های سامانه", @@ -182,6 +183,13 @@ export const Sidebar = ({ const moreButtonRef = useRef(); const { cannot, can, isLoading } = usePermission(); + const exitElement = Children.toArray(children).find( + (child) => isValidElement(child) && child.type === SidebarExit, + ); + const hasExit = Boolean(exitElement); + const logoutTitle = exitElement?.props?.title || "خروج"; + const logoutIcon = exitElement?.props?.icon || IoExit; + useEffect(() => { if (isLoading) return; @@ -209,7 +217,7 @@ export const Sidebar = ({ const active = (item) => isSidebarPathActive(resolvedCurrentPath, item); const isSecondaryItemActive = secondaryItems.some(active); - const hasMoreContent = true; + const hasMoreContent = secondaryItems.length > 0 || hasExit; const handleNavigate = (item) => { onNavigate?.(item); @@ -252,25 +260,27 @@ export const Sidebar = ({ /> ))} - - } - fontSize="xl" - size={{ base: "sm", lg: "lg" }} - aria-label={logoutTitle} - onClick={handleLogout} - /> - + {hasExit && ( + + } + fontSize="xl" + size={{ base: "sm", lg: "lg" }} + aria-label={logoutTitle} + onClick={handleLogout} + /> + + )} @@ -414,24 +424,26 @@ export const Sidebar = ({ })} - - - - خروج از سامانه - - + {hasExit && ( + + + + {logoutTitle} + + + )} @@ -439,3 +451,7 @@ export const Sidebar = ({ ); }; + +export const Sidebar = Object.assign(SidebarRoot, { + Exit: SidebarExit, +}); diff --git a/src/layout/index.d.ts b/src/layout/index.d.ts index fc44a0f..deefbf8 100644 --- a/src/layout/index.d.ts +++ b/src/layout/index.d.ts @@ -13,8 +13,7 @@ export type SidebarProps = { currentPath?: string; linkComponent?: any; onNavigate?: (item: SidebarItem) => void; - logoutTitle?: string; - logoutIcon?: any; + children?: any; primaryMobileCount?: number; moreTitle?: string; moreDrawerTitle?: string; @@ -22,7 +21,14 @@ export type SidebarProps = { mobileProps?: Record; }; -export function Sidebar(props: SidebarProps): any; +export type SidebarExitProps = { + title?: string; + icon?: any; +}; + +export const Sidebar: ((props: SidebarProps) => any) & { + Exit: (props: SidebarExitProps) => any; +}; export function isSidebarPathActive( currentPath: string | undefined, item: SidebarItem,