diff --git a/dist/index.js b/dist/index.js
index 599f4b8..07f7019 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1,55 +1,55 @@
-import { jsxs as B, jsx as a, Fragment as Z } from "react/jsx-runtime";
-import { useState as v, useRef as N, useEffect as C, useCallback as E, createContext as $, useMemo as z, useContext as P } from "react";
-import { HStack as I, IconButton as D, Button as L, Input as U, Text as S, Spinner as ee } from "@chakra-ui/react";
-import { IoChevronForwardOutline as g, IoChevronBackOutline as O } from "react-icons/io5";
+import { jsxs as I, jsx as a, Fragment as Z } from "react/jsx-runtime";
+import { useState as v, useRef as N, useEffect as C, useCallback as E, createContext as $, useMemo as _, useContext as P } from "react";
+import { HStack as k, IconButton as K, Button as R, Input as L, Text as S, Spinner as ee } from "@chakra-ui/react";
+import { IoChevronForwardOutline as O, IoChevronBackOutline as W } from "react-icons/io5";
import te from "keycloak-js";
import { useQuery as ne } from "@tanstack/react-query";
import re from "axios";
-const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => String(e).replace(/\d/g, (t) => "۰۱۲۳۴۵۶۷۸۹"[Number(t)]), K = (e) => String(e).replace(/[۰-۹]/g, (n) => String("۰۱۲۳۴۵۶۷۸۹".indexOf(n))), Ke = ({
+const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => String(e).replace(/\d/g, (t) => "۰۱۲۳۴۵۶۷۸۹"[Number(t)]), D = (e) => String(e).replace(/[۰-۹]/g, (n) => String("۰۱۲۳۴۵۶۷۸۹".indexOf(n))), De = ({
currentPage: e,
totalPages: t,
totalCount: n,
- onPageChange: s
+ onPageChange: l
}) => {
- const [c, l] = v(p(e)), [i, o] = v(!1), [f, u] = v(null), w = N(null), y = [.../* @__PURE__ */ new Set([1, e, t])].filter(
+ const [u, s] = v(p(e)), [i, o] = v(!1), [d, c] = v(null), b = N(null), y = [.../* @__PURE__ */ new Set([1, e, t])].filter(
(r) => r >= 1 && r <= t
);
C(() => {
- if (f !== null) {
- e === f && (u(null), o(!1), l(p(e)));
+ if (d !== null) {
+ e === d && (c(null), o(!1), s(p(e)));
return;
}
- i || l(p(e));
- }, [e, i, f]), C(() => {
- if (!i || !c || f !== null) return;
- const r = parseInt(K(c), 10);
+ i || s(p(e));
+ }, [e, i, d]), C(() => {
+ if (!i || !u || d !== null) return;
+ const r = parseInt(D(u), 10);
if (isNaN(r)) return;
const h = setTimeout(() => {
- var b;
+ var w;
const m = Math.min(Math.max(r, 1), t);
- m !== e ? (u(m), l(p(m)), s(m)) : (o(!1), l(p(e))), (b = w.current) == null || b.blur();
+ m !== e ? (c(m), s(p(m)), l(m)) : (o(!1), s(p(e))), (w = b.current) == null || w.blur();
}, 1e3);
return () => clearTimeout(h);
}, [
- c,
+ u,
i,
- f,
+ d,
t,
e,
- s
+ l
]);
const A = () => {
- var m, b;
- const r = parseInt(K(c), 10);
+ var m, w;
+ const r = parseInt(D(u), 10);
if (isNaN(r)) {
- l(p(e)), o(!1), u(null), (m = w.current) == null || m.blur();
+ s(p(e)), o(!1), c(null), (m = b.current) == null || m.blur();
return;
}
const h = Math.min(Math.max(r, 1), t);
- h !== e ? (u(h), l(p(h)), s(h)) : (l(p(e)), o(!1), u(null)), (b = w.current) == null || b.blur();
+ h !== e ? (c(h), s(p(h)), l(h)) : (s(p(e)), o(!1), c(null)), (w = b.current) == null || w.blur();
};
- return t === 0 || !n ? null : /* @__PURE__ */ B(
- I,
+ return t === 0 || !n ? null : /* @__PURE__ */ I(
+ k,
{
justifyContent: "space-around",
backgroundColor: "white",
@@ -60,65 +60,65 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
borderColor: "blue.200",
w: "100%",
children: [
- /* @__PURE__ */ B(I, { spacing: 2, alignItems: "center", justifyContent: "center", children: [
+ /* @__PURE__ */ I(k, { spacing: 2, alignItems: "center", justifyContent: "center", children: [
/* @__PURE__ */ a(
- D,
+ K,
{
size: "md",
bg: "#e6e6f1",
color: "#4B49AC",
_hover: { bg: "#cbcbe8" },
- onClick: () => s(e - 1),
+ onClick: () => l(e - 1),
isDisabled: e === 1,
- icon: /* @__PURE__ */ a(g, {}),
+ icon: /* @__PURE__ */ a(O, {}),
"aria-label": "صفحه قبلی"
}
),
y.map((r) => /* @__PURE__ */ a(
- L,
+ R,
{
size: "md",
px: 2,
bg: e === r ? "#4B49AC" : "#e6e6f1",
color: e === r ? "#e6e6f1" : "#4B49AC",
_hover: { bg: e === r ? "#4B49AC" : "#cbcbe8" },
- onClick: () => s(r),
+ onClick: () => l(r),
variant: "soft",
children: p(r)
},
r
)),
/* @__PURE__ */ a(
- D,
+ K,
{
size: "md",
bg: "#e6e6f1",
color: "#4B49AC",
_hover: { bg: "#cbcbe8" },
- onClick: () => s(e + 1),
+ onClick: () => l(e + 1),
isDisabled: e === t,
- icon: /* @__PURE__ */ a(O, {}),
+ icon: /* @__PURE__ */ a(W, {}),
"aria-label": "صفحه بعدی"
}
),
/* @__PURE__ */ a(
- U,
+ L,
{
- ref: w,
+ ref: b,
type: "text",
inputMode: "numeric",
placeholder: "صفحه",
w: "56px",
- value: c,
+ value: u,
onFocus: () => {
- o(!0), u(null), l("");
+ o(!0), c(null), s("");
},
onChange: (r) => {
- const h = r.target.value, m = K(h).replace(/\D/g, "");
- l(p(m));
+ const h = r.target.value, m = D(h).replace(/\D/g, "");
+ s(p(m));
},
onBlur: () => {
- c || (l(p(e)), o(!1), u(null));
+ u || (s(p(e)), o(!1), c(null));
},
onKeyDown: (r) => {
r.key === "Enter" && A();
@@ -131,58 +131,58 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
}
)
] }),
- /* @__PURE__ */ B(I, { spacing: 2, children: [
+ /* @__PURE__ */ I(k, { spacing: 2, children: [
/* @__PURE__ */ a(S, { w: "auto", fontWeight: "bold", whiteSpace: "nowrap", children: "تعداد کل:" }),
/* @__PURE__ */ a(S, { children: p(n) })
] })
]
}
);
-}, De = ({
+}, Ke = ({
currentPage: e,
totalPages: t,
totalCount: n,
- onPageChange: s
+ onPageChange: l
}) => {
- const [c, l] = v(p(e)), [i, o] = v(!1), [f, u] = v(null), w = N(null), y = Array.from(
+ const [u, s] = v(p(e)), [i, o] = v(!1), [d, c] = v(null), b = N(null), y = Array.from(
/* @__PURE__ */ new Set([1, e, e + 1, t])
).filter((r) => r >= 1 && r <= t).sort((r, h) => r - h);
C(() => {
- if (f !== null) {
- e === f && (u(null), o(!1), l(p(e)));
+ if (d !== null) {
+ e === d && (c(null), o(!1), s(p(e)));
return;
}
- i || l(p(e));
- }, [e, i, f]), C(() => {
- if (!i || !c || f !== null) return;
- const r = parseInt(K(c), 10);
+ i || s(p(e));
+ }, [e, i, d]), C(() => {
+ if (!i || !u || d !== null) return;
+ const r = parseInt(D(u), 10);
if (isNaN(r)) return;
const h = setTimeout(() => {
- var b;
+ var w;
const m = Math.min(Math.max(r, 1), t);
- m !== e ? (u(m), l(p(m)), s(m)) : (o(!1), l(p(e))), (b = w.current) == null || b.blur();
+ m !== e ? (c(m), s(p(m)), l(m)) : (o(!1), s(p(e))), (w = b.current) == null || w.blur();
}, 1e3);
return () => clearTimeout(h);
}, [
- c,
+ u,
i,
- f,
+ d,
t,
e,
- s
+ l
]);
const A = () => {
- var m, b;
- const r = parseInt(K(c), 10);
+ var m, w;
+ const r = parseInt(D(u), 10);
if (isNaN(r)) {
- l(p(e)), o(!1), u(null), (m = w.current) == null || m.blur();
+ s(p(e)), o(!1), c(null), (m = b.current) == null || m.blur();
return;
}
const h = Math.min(Math.max(r, 1), t);
- h !== e ? (u(h), l(p(h)), s(h)) : (l(p(e)), o(!1), u(null)), (b = w.current) == null || b.blur();
+ h !== e ? (c(h), s(p(h)), l(h)) : (s(p(e)), o(!1), c(null)), (w = b.current) == null || w.blur();
};
- return t === 0 || !n ? null : /* @__PURE__ */ B(
- I,
+ return t === 0 || !n ? null : /* @__PURE__ */ I(
+ k,
{
justifyContent: "space-around",
backgroundColor: "white",
@@ -193,70 +193,70 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
borderColor: "blue.200",
w: "100%",
children: [
- /* @__PURE__ */ B(I, { spacing: 2, whiteSpace: "nowrap", children: [
+ /* @__PURE__ */ I(k, { spacing: 2, whiteSpace: "nowrap", children: [
/* @__PURE__ */ a(S, { fontWeight: "bold", children: "صفحه" }),
/* @__PURE__ */ a(S, { children: p(e) }),
/* @__PURE__ */ a(S, { fontWeight: "bold", children: "از" }),
/* @__PURE__ */ a(S, { children: p(t) })
] }),
- /* @__PURE__ */ B(I, { spacing: 2, alignItems: "center", justifyContent: "center", children: [
+ /* @__PURE__ */ I(k, { spacing: 2, alignItems: "center", justifyContent: "center", children: [
/* @__PURE__ */ a(
- D,
+ K,
{
size: "md",
bg: "#e6e6f1",
color: "#4B49AC",
_hover: { bg: "#cbcbe8" },
- onClick: () => s(e - 1),
+ onClick: () => l(e - 1),
isDisabled: e === 1,
- icon: /* @__PURE__ */ a(g, {}),
+ icon: /* @__PURE__ */ a(O, {}),
"aria-label": "صفحه قبلی"
}
),
y.map((r) => /* @__PURE__ */ a(
- L,
+ R,
{
size: "md",
bg: e === r ? "#4B49AC" : "#e6e6f1",
color: e === r ? "#e6e6f1" : "#4B49AC",
_hover: { bg: e === r ? "#4B49AC" : "#cbcbe8" },
- onClick: () => s(r),
+ onClick: () => l(r),
variant: "soft",
children: p(r)
},
r
)),
/* @__PURE__ */ a(
- D,
+ K,
{
size: "md",
bg: "#e6e6f1",
color: "#4B49AC",
_hover: { bg: "#cbcbe8" },
- onClick: () => s(e + 1),
+ onClick: () => l(e + 1),
isDisabled: e === t,
- icon: /* @__PURE__ */ a(O, {}),
+ icon: /* @__PURE__ */ a(W, {}),
"aria-label": "صفحه بعدی"
}
),
/* @__PURE__ */ a(
- U,
+ L,
{
- ref: w,
+ ref: b,
type: "text",
inputMode: "numeric",
placeholder: "صفحه",
w: "100px",
- value: c,
+ value: u,
onFocus: () => {
- o(!0), u(null), l("");
+ o(!0), c(null), s("");
},
onChange: (r) => {
- const h = r.target.value, m = K(h).replace(/\D/g, "");
- l(p(m));
+ const h = r.target.value, m = D(h).replace(/\D/g, "");
+ s(p(m));
},
onBlur: () => {
- c || (l(p(e)), o(!1), u(null));
+ u || (s(p(e)), o(!1), c(null));
},
onKeyDown: (r) => {
r.key === "Enter" && A();
@@ -269,7 +269,7 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
}
)
] }),
- /* @__PURE__ */ B(I, { spacing: 2, whiteSpace: "nowrap", children: [
+ /* @__PURE__ */ I(k, { spacing: 2, whiteSpace: "nowrap", children: [
/* @__PURE__ */ a(S, { fontWeight: "bold", children: "تعداد کل:" }),
/* @__PURE__ */ a(S, { children: p(n) })
] })
@@ -280,58 +280,58 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
currentPage: e,
totalPages: t,
totalCount: n,
- onPageChange: s
+ onPageChange: l
}) => {
- const [c, l] = v(""), [i, o] = v(!1), [f, u] = v(null), w = N(null), y = f ?? e, A = E(
+ const [u, s] = v(""), [i, o] = v(!1), [d, c] = v(null), b = N(null), y = d ?? e, A = E(
(x) => {
- const k = Math.min(Math.max(x, 1), t);
- o(!1), l(""), u(null), k !== e && s(k);
+ const B = Math.min(Math.max(x, 1), t);
+ o(!1), s(""), c(null), B !== e && l(B);
},
- [e, t, s]
+ [e, t, l]
), r = E(() => {
- if (!c) {
- o(!1), l(""), u(null);
+ if (!u) {
+ o(!1), s(""), c(null);
return;
}
- const x = parseInt(K(c), 10);
+ const x = parseInt(D(u), 10);
if (isNaN(x)) {
- o(!1), l(""), u(null);
+ o(!1), s(""), c(null);
return;
}
- const k = Math.min(Math.max(x, 1), t);
- o(!1), l(""), k !== e ? (u(k), s(k)) : u(null);
- }, [c, e, t, s]);
+ const B = Math.min(Math.max(x, 1), t);
+ o(!1), s(""), B !== e ? (c(B), l(B)) : c(null);
+ }, [u, e, t, l]);
C(() => {
var x;
- i && ((x = w.current) == null || x.focus());
+ i && ((x = b.current) == null || x.focus());
}, [i]), C(() => {
- f !== null && e === f && u(null);
- }, [e, f]), C(() => {
- if (!i || !c) return;
+ d !== null && e === d && c(null);
+ }, [e, d]), C(() => {
+ if (!i || !u) return;
const x = setTimeout(() => {
r();
}, 1e3);
return () => clearTimeout(x);
- }, [c, i, r]);
+ }, [u, i, r]);
const h = () => {
- u(null), l(""), o(!0);
- }, m = (x, k = !1) => /* @__PURE__ */ a(
- L,
+ c(null), s(""), o(!0);
+ }, m = (x, B = !1) => /* @__PURE__ */ a(
+ R,
{
size: "md",
- bg: k ? "#4B49AC" : "#e6e6f1",
- color: k ? "#e6e6f1" : "#4B49AC",
- _hover: { bg: k ? "#4B49AC" : "#cbcbe8" },
- onClick: k ? h : () => A(x),
+ bg: B ? "#4B49AC" : "#e6e6f1",
+ color: B ? "#e6e6f1" : "#4B49AC",
+ _hover: { bg: B ? "#4B49AC" : "#cbcbe8" },
+ onClick: B ? h : () => A(x),
variant: "soft",
children: p(x)
},
x
);
if (t === 0 || !n) return null;
- const b = t > 1 && y !== 1, F = t > 1 && y !== t;
+ const w = t > 1 && y !== 1, g = t > 1 && y !== t;
return /* @__PURE__ */ a(
- I,
+ k,
{
justifyContent: "center",
backgroundColor: "white",
@@ -341,9 +341,9 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
border: "1px",
borderColor: "blue.200",
w: "100%",
- children: /* @__PURE__ */ B(I, { spacing: 2, alignItems: "center", justifyContent: "center", children: [
+ children: /* @__PURE__ */ I(k, { spacing: 2, alignItems: "center", justifyContent: "center", children: [
/* @__PURE__ */ a(
- D,
+ K,
{
size: "md",
bg: "#e6e6f1",
@@ -351,29 +351,29 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
_hover: { bg: "#cbcbe8" },
onClick: () => A(y - 1),
isDisabled: y === 1,
- icon: /* @__PURE__ */ a(g, {}),
+ icon: /* @__PURE__ */ a(O, {}),
"aria-label": "صفحه قبلی"
}
),
- b && m(1),
+ w && m(1),
i ? /* @__PURE__ */ a(
- U,
+ L,
{
- ref: w,
+ ref: b,
type: "text",
inputMode: "numeric",
placeholder: "صفحه",
w: "48px",
- value: c,
+ value: u,
onChange: (x) => {
- const k = x.target.value, X = K(k).replace(/\D/g, "");
- l(p(X));
+ const B = x.target.value, X = D(B).replace(/\D/g, "");
+ s(p(X));
},
onBlur: () => {
- c ? r() : (l(""), o(!1), u(null));
+ u ? r() : (s(""), o(!1), c(null));
},
onKeyDown: (x) => {
- x.key === "Enter" && r(), x.key === "Escape" && (l(""), o(!1), u(null));
+ x.key === "Enter" && r(), x.key === "Escape" && (s(""), o(!1), c(null));
},
textAlign: "center",
color: "#1D2939",
@@ -382,9 +382,9 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
dir: "ltr"
}
) : m(y, !0),
- F && m(t),
+ g && m(t),
/* @__PURE__ */ a(
- D,
+ K,
{
size: "md",
bg: "#e6e6f1",
@@ -392,7 +392,7 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
_hover: { bg: "#cbcbe8" },
onClick: () => A(y + 1),
isDisabled: y === t,
- icon: /* @__PURE__ */ a(O, {}),
+ icon: /* @__PURE__ */ a(W, {}),
"aria-label": "صفحه بعدی"
}
)
@@ -400,91 +400,91 @@ const Ee = (e) => new Intl.NumberFormat("fa-IR").format(Number(e)), p = (e) => S
}
);
};
-let R = null, d = null, V = null, j = !1;
-const ie = $(null), oe = ({ url: e, realm: t, clientId: n }) => (d || (d = new te({
+let V = null, f = null, F = null, j = !1;
+const ie = $(null), oe = ({ url: e, realm: t, clientId: n }) => (f || (f = new te({
url: e,
realm: t,
clientId: n
-})), d), se = (e) => (R = e, R), le = () => j, G = () => !!(d != null && d.authenticated), T = () => (d == null ? void 0 : d.token) ?? null, q = async (e = 30) => d ? d.updateToken(e) : !1, H = (e) => d == null ? void 0 : d.logout(e), Te = (e) => d == null ? void 0 : d.login(e), J = ({ config: e, initOptions: t = {} } = {}) => {
- const n = e ?? R;
+})), f), se = (e) => (V = e, V), le = () => j, G = () => !!(f != null && f.authenticated), T = () => (f == null ? void 0 : f.token) ?? null, q = async (e = 30) => f ? f.updateToken(e) : !1, H = (e) => f == null ? void 0 : f.logout(e), Te = (e) => f == null ? void 0 : f.login(e), J = ({ config: e, initOptions: t = {} } = {}) => {
+ const n = e ?? V;
if (!(n != null && n.url) || !(n != null && n.realm) || !(n != null && n.clientId))
throw new Error("Keycloak config is required.");
se(n);
- const s = oe(n);
- return V || (V = s.init({
+ const l = oe(n);
+ return F || (F = l.init({
onLoad: "login-required",
checkLoginIframe: !1,
flow: "implicit",
...t
- }).then((c) => (j = !0, c)).catch((c) => {
- throw j = !0, c;
- })), V;
+ }).then((u) => (j = !0, u)).catch((u) => {
+ throw j = !0, u;
+ })), F;
}, ce = ({
children: e,
config: t,
initOptions: n,
- loading: s = null
+ loading: l = null
}) => {
- const [c, l] = v(!1), [i, o] = v(!1), [f, u] = v(null), w = N(!1), y = E(() => {
- d && (o(!!d.authenticated), u(d.token ?? null));
+ const [u, s] = v(!1), [i, o] = v(!1), [d, c] = v(null), b = N(!1), y = E(() => {
+ f && (o(!!f.authenticated), c(f.token ?? null));
}, []);
- C(() => (w.current = !0, J({ config: t, initOptions: n }).then((b) => {
- w.current && (o(!!b), u((d == null ? void 0 : d.token) ?? null), l(!0));
+ C(() => (b.current = !0, J({ config: t, initOptions: n }).then((w) => {
+ b.current && (o(!!w), c((f == null ? void 0 : f.token) ?? null), s(!0));
}).catch(() => {
- w.current && (o(!1), u(null), l(!0));
+ b.current && (o(!1), c(null), s(!0));
}), () => {
- w.current = !1;
+ b.current = !1;
}), [t, n]);
- const A = E(() => d == null ? void 0 : d.login(), []), r = E((b) => d == null ? void 0 : d.logout(b), []), h = E(
- async (b = 30) => {
- if (!d) return !1;
- const F = await d.updateToken(b);
- return y(), F;
+ const A = E(() => f == null ? void 0 : f.login(), []), r = E((w) => f == null ? void 0 : f.logout(w), []), h = E(
+ async (w = 30) => {
+ if (!f) return !1;
+ const g = await f.updateToken(w);
+ return y(), g;
},
[y]
- ), m = z(
+ ), m = _(
() => ({
- initialized: c,
+ initialized: u,
authenticated: i,
- token: f,
+ token: d,
login: A,
logout: r,
updateToken: h
}),
- [c, i, f, A, r, h]
+ [u, i, d, A, r, h]
);
- return c ? /* @__PURE__ */ a(ie.Provider, { value: m, children: e }) : s;
-}, Q = $(null), M = "permissions", ue = (e) => (e == null ? void 0 : e.storageKey) || M, ze = ({
+ return u ? /* @__PURE__ */ a(ie.Provider, { value: m, children: e }) : l;
+}, Q = $(null), M = "permissions", ue = (e) => (e == null ? void 0 : e.storageKey) || M, _e = ({
user: e = null,
children: t,
config: n,
- loading: s = /* @__PURE__ */ a("div", { children: "Loading permissions..." }),
- errorFallback: c = /* @__PURE__ */ a("div", { children: "Error loading permissions" })
+ loading: l = /* @__PURE__ */ a("div", { children: "Loading permissions..." }),
+ errorFallback: u = /* @__PURE__ */ a("div", { children: "Error loading permissions" })
}) => {
- const l = ue(n), [i, o] = v(
- () => ae(l)
- ), { data: f, isLoading: u, error: w } = me(n), y = f ?? i;
+ const s = ue(n), [i, o] = v(
+ () => ae(s)
+ ), { data: d, isLoading: c, error: b } = me(n), y = d ?? i;
C(() => {
- f && (de(l, f), o(f));
- }, [f, l]);
- const A = z(
+ d && (de(s, d), o(d));
+ }, [d, s]);
+ const A = _(
() => fe(y),
[y]
), r = E(
- (b = "") => pe(A, b),
+ (w = "") => pe(A, w),
[A]
- ), h = E((b = "") => !r(b), [r]), m = z(
+ ), h = E((w = "") => !r(w), [r]), m = _(
() => ({
user: e,
can: r,
cannot: h,
permissions: y,
- isLoading: u,
- error: w
+ isLoading: c,
+ error: b
}),
- [e, r, h, y, u, w]
+ [e, r, h, y, c, b]
);
- return w && !y ? c : u && !y ? s : /* @__PURE__ */ a(Q.Provider, { value: m, children: t });
+ return b && !y ? u : c && !y ? l : /* @__PURE__ */ a(Q.Provider, { value: m, children: t });
}, ae = (e = M) => {
if (!(typeof window > "u"))
try {
@@ -499,7 +499,7 @@ const ie = $(null), oe = ({ url: e, realm: t, clientId: n }) => (d || (d = new t
localStorage.setItem(e, JSON.stringify(t));
} catch {
}
-}, _e = (e = M) => {
+}, ze = (e = M) => {
if (!(typeof window > "u"))
try {
localStorage.removeItem(e);
@@ -507,7 +507,7 @@ const ie = $(null), oe = ({ url: e, realm: t, clientId: n }) => (d || (d = new t
}
}, fe = (e) => e ? new Set(e.map((t) => t.name)) : /* @__PURE__ */ new Set(), pe = (e, t = "") => {
if (!t) return !1;
- if (e.has(t) || [...e].some((s) => s.startsWith(t))) return !0;
+ if (e.has(t) || [...e].some((l) => l.startsWith(t))) return !0;
let n = t;
for (; n.includes(":"); )
if (n = n.slice(0, n.lastIndexOf(":")), e.has(`${n}:*`)) return !0;
@@ -520,16 +520,16 @@ const ie = $(null), oe = ({ url: e, realm: t, clientId: n }) => (d || (d = new t
throw new Error("Permission config requires url and clientId.");
const t = T(), n = new URL(e.url);
n.searchParams.set("client_id", e.clientId);
- const s = await fetch(n.toString(), {
+ const l = await fetch(n.toString(), {
method: "GET",
headers: {
...t ? { Authorization: `Bearer ${t}` } : {}
}
});
- if (!s.ok)
+ if (!l.ok)
throw new Error("Failed to load permissions");
- return s.json();
-}, W = () => {
+ return l.json();
+}, U = () => {
const e = P(Q);
if (!e)
throw new Error("usePermission must be used within PermissionProvider");
@@ -546,25 +546,25 @@ const ie = $(null), oe = ({ url: e, realm: t, clientId: n }) => (d || (d = new t
children: t,
fallback: n = /* @__PURE__ */ a("div", { children: "You are not allowed to do this" })
}) => {
- const { can: s } = W();
- return s(e) ? t : n;
-}, Fe = ({ children: e }) => {
- const { can: t, permissions: n } = W();
+ const { can: l } = U();
+ return l(e) ? t : n;
+}, ge = ({ children: e }) => {
+ const { can: t, permissions: n } = U();
return n && t("admin") ? e : null;
-}, Ve = ({ children: e }) => {
- const { can: t, isLoading: n } = W();
+}, Fe = ({ children: e }) => {
+ const { can: t, isLoading: n } = U();
return C(() => {
n || t("panel_access") || H();
}, [n, t]), e;
};
-let _ = null;
+let z = null;
const be = (e) => {
const { api: t } = e, n = re.create({
baseURL: t.baseUrl
- }), s = async () => {
+ }), l = async () => {
(!le() || !G()) && await J();
- }, c = async (i) => {
- await s();
+ }, u = async (i) => {
+ await l();
let o = T();
if (o) {
try {
@@ -577,17 +577,17 @@ const be = (e) => {
};
}
return i;
- }, l = async (i) => {
- var f;
+ }, s = async (i) => {
+ var d;
const o = i.config;
- if (((f = i == null ? void 0 : i.response) == null ? void 0 : f.status) === 401 && !(o != null && o._retry)) {
+ if (((d = i == null ? void 0 : i.response) == null ? void 0 : d.status) === 401 && !(o != null && o._retry)) {
o._retry = !0;
try {
await q(30);
- const u = T();
+ const c = T();
return o.headers = {
...o.headers,
- Authorization: `Bearer ${u}`
+ Authorization: `Bearer ${c}`
}, n(o);
} catch {
H({ redirectUri: window.location.origin });
@@ -595,17 +595,17 @@ const be = (e) => {
}
return Promise.reject(i);
};
- return n.interceptors.request.use(c), n.interceptors.response.use(
+ return n.interceptors.request.use(u), n.interceptors.response.use(
(i) => i,
- l
+ s
), {
api: n
};
-}, we = (e) => (_ = be(e), _), ye = () => {
- if (!_)
+}, we = (e) => (z = be(e), z), ye = () => {
+ if (!z)
throw new Error("api is not configured. Call configureApi(config) first.");
- return _.api;
-}, Re = new Proxy(
+ return z.api;
+}, Ve = new Proxy(
{},
{
get(e, t) {
@@ -617,8 +617,8 @@ function xe() {
const [e, t] = v(!1), n = N(null);
return C(() => {
if (process.env.NODE_ENV !== "production") return;
- let s;
- const c = async () => {
+ let l;
+ const u = async () => {
const i = await fetch(`/version.json?t=${Date.now()}`, {
cache: "no-store"
});
@@ -629,10 +629,10 @@ function xe() {
};
return (async () => {
try {
- n.current = await c(), s = setInterval(async () => {
+ n.current = await u(), l = setInterval(async () => {
try {
- const i = await c();
- n.current && i !== n.current && (t(!0), clearInterval(s));
+ const i = await u();
+ n.current && i !== n.current && (t(!0), clearInterval(l));
} catch (i) {
console.error("Update check failed:", i);
}
@@ -641,7 +641,7 @@ function xe() {
console.error("Initial version fetch failed:", i);
}
})(), () => {
- s && clearInterval(s);
+ l && clearInterval(l);
};
}, []), e ? /* @__PURE__ */ a(
"div",
@@ -664,32 +664,60 @@ function xe() {
}
function je({
children: e,
- config: t,
- loading: n = /* @__PURE__ */ a(ee, {}),
+ apiBaseUrl: t,
+ keycloakClientId: n,
+ permissionClientId: l,
+ loading: u = /* @__PURE__ */ a(ee, {}),
updateChecker: s = !0,
- updateCheckerProps: c
+ updateCheckerProps: i,
+ keycloakUrl: o = "https://auth.ibagher.ir",
+ keycloakRealm: d = "bi",
+ permissionUrl: c = "https://api.d.aiengines.ir/user_api/v1/permissions/list"
}) {
- return z(() => {
- we(t);
- }, [t]), /* @__PURE__ */ B(Z, { children: [
- s && /* @__PURE__ */ a(xe, { ...c }),
- /* @__PURE__ */ a(ce, { config: t.keycloak, loading: n, children: e })
+ const b = _(
+ () => ({
+ api: {
+ baseUrl: t
+ },
+ keycloak: {
+ url: o,
+ realm: d,
+ clientId: n
+ },
+ permission: {
+ url: c,
+ clientId: l
+ }
+ }),
+ [
+ t,
+ n,
+ l,
+ o,
+ d,
+ c
+ ]
+ );
+ return C(() => {
+ we(b);
+ }, [b]), /* @__PURE__ */ I(Z, { children: [
+ s && /* @__PURE__ */ a(xe, { ...i }),
+ /* @__PURE__ */ a(ce, { config: b.keycloak, loading: u, children: e })
] });
}
export {
- Fe as AdminGuard,
+ ge as AdminGuard,
+ je as BiProvider,
Me as Can,
ce as KeycloakProvider,
- Ke as LightPagination,
- De as Pagination,
- Ve as PanelAccessGuard,
- ze as PermissionProvider,
+ De as LightPagination,
+ Ke as Pagination,
+ Fe as PanelAccessGuard,
+ _e as PermissionProvider,
Ne as SimplePagination,
- je as UiKitProvider,
- xe as UpdateChecker,
- Re as api,
+ Ve as api,
pe as checkPermission,
- _e as clearCachedPermissions,
+ ze as clearCachedPermissions,
we as configureApi,
be as createApi,
fe as createPermissionSet,
@@ -704,10 +732,10 @@ export {
H as logoutKeycloak,
Y as permissionKeys,
de as setCachedPermissions,
- K as toEnDigits,
+ D as toEnDigits,
p as toFaDigits,
Ee as toFaNumber,
q as updateKeycloakToken,
- W as usePermission,
+ U as usePermission,
me as usePermissionsQuery
};
diff --git a/src/core/UiKitProvider.jsx b/src/core/UiKitProvider.jsx
deleted file mode 100644
index 747bb59..0000000
--- a/src/core/UiKitProvider.jsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { useMemo } from "react";
-import { Spinner } from "@chakra-ui/react";
-import { KeycloakProvider } from "./keycloak.jsx";
-import { UpdateChecker } from "../components/UpdateChecker.jsx";
-import { configureApi } from "./api.js";
-
-export function UiKitProvider({
- children,
- config,
- loading = ,
- updateChecker = true,
- updateCheckerProps,
-}) {
- useMemo(() => {
- configureApi(config);
- }, [config]);
-
- return (
- <>
- {updateChecker && }
-
-
- {children}
-
- >
- );
-}
diff --git a/src/index.js b/src/index.js
index f0f764e..d4d4b0c 100644
--- a/src/index.js
+++ b/src/index.js
@@ -33,5 +33,4 @@ export {
export { createApi, configureApi, getApi, api } from "./core/api.js";
-export { UiKitProvider } from "./core/UiKitProvider.jsx";
-export { UpdateChecker } from "./components/UpdateChecker.jsx";
+export { BiProvider } from "./provider/BiProvider.jsx";
diff --git a/src/provider/BiProvider.jsx b/src/provider/BiProvider.jsx
new file mode 100644
index 0000000..a85e591
--- /dev/null
+++ b/src/provider/BiProvider.jsx
@@ -0,0 +1,57 @@
+import { useEffect, useMemo } from "react";
+import { Spinner } from "@chakra-ui/react";
+import { KeycloakProvider } from "../core/keycloak.jsx";
+import { UpdateChecker } from "../components/UpdateChecker.jsx";
+import { configureApi } from "../core/api.js";
+
+export function BiProvider({
+ children,
+ apiBaseUrl,
+ keycloakClientId,
+ permissionClientId,
+ loading = ,
+ updateChecker = true,
+ updateCheckerProps,
+ keycloakUrl = "https://auth.ibagher.ir",
+ keycloakRealm = "bi",
+ permissionUrl = "https://api.d.aiengines.ir/user_api/v1/permissions/list",
+}) {
+ const config = useMemo(
+ () => ({
+ api: {
+ baseUrl: apiBaseUrl,
+ },
+ keycloak: {
+ url: keycloakUrl,
+ realm: keycloakRealm,
+ clientId: keycloakClientId,
+ },
+ permission: {
+ url: permissionUrl,
+ clientId: permissionClientId,
+ },
+ }),
+ [
+ apiBaseUrl,
+ keycloakClientId,
+ permissionClientId,
+ keycloakUrl,
+ keycloakRealm,
+ permissionUrl,
+ ],
+ );
+
+ useEffect(() => {
+ configureApi(config);
+ }, [config]);
+
+ return (
+ <>
+ {updateChecker && }
+
+
+ {children}
+
+ >
+ );
+}