@erpsquad/common 1.10.10-test → 1.10.11-test
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{android-12-switch-jj9sZdHr.esm.js → android-12-switch-CAuiT5Pz.esm.js} +7 -7
- package/dist/chunks/{android-12-switch-jj9sZdHr.esm.js.map → android-12-switch-CAuiT5Pz.esm.js.map} +1 -1
- package/dist/chunks/{android-12-switch-DXCSLxql.js → android-12-switch-E6mXBkCx.js} +7 -7
- package/dist/chunks/{android-12-switch-DXCSLxql.js.map → android-12-switch-E6mXBkCx.js.map} +1 -1
- package/dist/chunks/{apiHelper-CnW4mhWd.esm.js → apiHelper-73EBSKIp.esm.js} +5 -5
- package/dist/chunks/{apiHelper-CnW4mhWd.esm.js.map → apiHelper-73EBSKIp.esm.js.map} +1 -1
- package/dist/chunks/{apiHelper-Nwi6vehP.js → apiHelper-BVJa3_k8.js} +5 -5
- package/dist/chunks/{apiHelper-Nwi6vehP.js.map → apiHelper-BVJa3_k8.js.map} +1 -1
- package/dist/chunks/{appbar-DM2iBqb4.esm.js → appbar-CqjkuAGQ.esm.js} +3 -3
- package/dist/chunks/{appbar-DM2iBqb4.esm.js.map → appbar-CqjkuAGQ.esm.js.map} +1 -1
- package/dist/chunks/{appbar-rfkAYQdQ.js → appbar-pTs1Yhzo.js} +3 -3
- package/dist/chunks/{appbar-rfkAYQdQ.js.map → appbar-pTs1Yhzo.js.map} +1 -1
- package/dist/chunks/{default-data-B9vVQV5Y.js → default-data-Mq-52KPT.js} +7 -7
- package/dist/chunks/{default-data-B9vVQV5Y.js.map → default-data-Mq-52KPT.js.map} +1 -1
- package/dist/chunks/{default-data-CTj0tV-U.esm.js → default-data-uGbtWbX3.esm.js} +7 -7
- package/dist/chunks/{default-data-CTj0tV-U.esm.js.map → default-data-uGbtWbX3.esm.js.map} +1 -1
- package/dist/chunks/{form-builder-deconversion-v5GvXDZ9.js → form-builder-deconversion-C4DFp-Jv.js} +2 -2
- package/dist/chunks/{form-builder-deconversion-v5GvXDZ9.js.map → form-builder-deconversion-C4DFp-Jv.js.map} +1 -1
- package/dist/chunks/{form-builder-deconversion-CUwBfP4C.esm.js → form-builder-deconversion-CIJWMHun.esm.js} +2 -2
- package/dist/chunks/{form-builder-deconversion-CUwBfP4C.esm.js.map → form-builder-deconversion-CIJWMHun.esm.js.map} +1 -1
- package/dist/chunks/{fullScreen-Bfrr-bT2.js → fullScreen-BNlY6F_Z.js} +2 -2
- package/dist/chunks/{fullScreen-Bfrr-bT2.js.map → fullScreen-BNlY6F_Z.js.map} +1 -1
- package/dist/chunks/{fullScreen-BO0UA3Zr.esm.js → fullScreen-CV8aHM8J.esm.js} +2 -2
- package/dist/chunks/{fullScreen-BO0UA3Zr.esm.js.map → fullScreen-CV8aHM8J.esm.js.map} +1 -1
- package/dist/chunks/{languageContext-BP7EvzMv.js → languageContext-BSEvKGy9.js} +2 -2
- package/dist/chunks/{languageContext-BP7EvzMv.js.map → languageContext-BSEvKGy9.js.map} +1 -1
- package/dist/chunks/{languageContext-DM_LTp53.esm.js → languageContext-D_khAb2z.esm.js} +2 -2
- package/dist/chunks/{languageContext-DM_LTp53.esm.js.map → languageContext-D_khAb2z.esm.js.map} +1 -1
- package/dist/chunks/{migration-utils-CnzZeXcT.esm.js → migration-utils-ChJDhzct.esm.js} +2 -2
- package/dist/chunks/{migration-utils-CnzZeXcT.esm.js.map → migration-utils-ChJDhzct.esm.js.map} +1 -1
- package/dist/chunks/{migration-utils-BWRj500E.js → migration-utils-D_sKDk5V.js} +2 -2
- package/dist/chunks/{migration-utils-BWRj500E.js.map → migration-utils-D_sKDk5V.js.map} +1 -1
- package/dist/chunks/{page-context-BXcrnujq.esm.js → page-context-D0QJui88.esm.js} +46 -58
- package/dist/chunks/page-context-D0QJui88.esm.js.map +1 -0
- package/dist/chunks/{page-context-qX5XKOOF.js → page-context-fgpShY8H.js} +45 -57
- package/dist/chunks/page-context-fgpShY8H.js.map +1 -0
- package/dist/chunks/{sidebar-l49eLo8p.esm.js → sidebar-DGGqCL8z.esm.js} +4 -4
- package/dist/chunks/{sidebar-l49eLo8p.esm.js.map → sidebar-DGGqCL8z.esm.js.map} +1 -1
- package/dist/chunks/{sidebar-C2zkLZyA.js → sidebar-DZ3SNJU4.js} +4 -4
- package/dist/chunks/{sidebar-C2zkLZyA.js.map → sidebar-DZ3SNJU4.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-BQN2N8jx.esm.js → sidebarScreen-D0v7aHxc.esm.js} +4 -4
- package/dist/chunks/{sidebarScreen-BQN2N8jx.esm.js.map → sidebarScreen-D0v7aHxc.esm.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-PoYXto7E.js → sidebarScreen-usZhvsdA.js} +4 -4
- package/dist/chunks/{sidebarScreen-PoYXto7E.js.map → sidebarScreen-usZhvsdA.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-Cef0lqA7.esm.js → uom-field-wrapper-DNgu7XcT.esm.js} +10 -10
- package/dist/chunks/{uom-field-wrapper-Cef0lqA7.esm.js.map → uom-field-wrapper-DNgu7XcT.esm.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-DXNgxYwv.js → uom-field-wrapper-PUawuRbz.js} +10 -10
- package/dist/chunks/{uom-field-wrapper-DXNgxYwv.js.map → uom-field-wrapper-PUawuRbz.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-Bo-BSaTa.js → useAccountSetting-BUtKbR7D.js} +2 -2
- package/dist/chunks/{useAccountSetting-Bo-BSaTa.js.map → useAccountSetting-BUtKbR7D.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-BZQ6ceiU.esm.js → useAccountSetting-YwdjGrxs.esm.js} +2 -2
- package/dist/chunks/{useAccountSetting-BZQ6ceiU.esm.js.map → useAccountSetting-YwdjGrxs.esm.js.map} +1 -1
- package/dist/chunks/{useAuth-HvZ6U960.js → useAuth-Bn-Dk5iL.js} +3 -1
- package/dist/chunks/{useAuth-HvZ6U960.js.map → useAuth-Bn-Dk5iL.js.map} +1 -1
- package/dist/chunks/{useAuth-Tfx2guEJ.esm.js → useAuth-DatwJNOz.esm.js} +3 -1
- package/dist/chunks/{useAuth-Tfx2guEJ.esm.js.map → useAuth-DatwJNOz.esm.js.map} +1 -1
- package/dist/chunks/{useLangauge-DwsR1jcv.js → useLangauge-CZdmpat2.js} +2 -2
- package/dist/chunks/{useLangauge-DwsR1jcv.js.map → useLangauge-CZdmpat2.js.map} +1 -1
- package/dist/chunks/{useLangauge-BU_fP3ZM.esm.js → useLangauge-ko-Wm4Qq.esm.js} +2 -2
- package/dist/chunks/{useLangauge-BU_fP3ZM.esm.js.map → useLangauge-ko-Wm4Qq.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-DOk8SnPC.esm.js → useReduxIntegration-B8otN3ek.esm.js} +3 -3
- package/dist/chunks/{useReduxIntegration-DOk8SnPC.esm.js.map → useReduxIntegration-B8otN3ek.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-Dx22DWpG.js → useReduxIntegration-CZkiPDYL.js} +3 -3
- package/dist/chunks/{useReduxIntegration-Dx22DWpG.js.map → useReduxIntegration-CZkiPDYL.js.map} +1 -1
- package/dist/components/index.esm.js +8 -8
- package/dist/components/index.js +8 -8
- package/dist/contexts/index.esm.js +3 -3
- package/dist/contexts/index.js +3 -3
- package/dist/hooks/index.esm.js +5 -5
- package/dist/hooks/index.js +5 -5
- package/dist/index.esm.js +16 -16
- package/dist/index.js +16 -16
- package/dist/layout/index.esm.js +2 -2
- package/dist/layout/index.js +2 -2
- package/dist/utils/index.esm.js +3 -3
- package/dist/utils/index.js +3 -3
- package/dist/views/index.esm.js +6 -6
- package/dist/views/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunks/page-context-BXcrnujq.esm.js.map +0 -1
- package/dist/chunks/page-context-qX5XKOOF.js.map +0 -1
package/dist/index.esm.js
CHANGED
|
@@ -6,31 +6,31 @@ import { P as P2, a as a11, b as b3, S as S2, c as c3, d as d2, e as e2, f as f2
|
|
|
6
6
|
import { bA, a as a12, b as b4, c as c4, d as d3, e as e3, f as f3, g as g3, h as h2, i as i4, j as j2, k as k2, l as l2, m as m2, n as n2, o as o3, p as p2, q as q2, r as r4, s as s2, t as t2, u as u2, v as v3, w as w2, x as x2, y as y2, z as z2, A as A2, B as B2, C as C2, D as D2, E as E2, F as F2, G as G2, H as H2, I as I2, J as J2, L as L2, M as M2, N as N2, O as O2, P as P3, Q as Q2, R as R2, S as S3, T as T2, U as U2, V as V2, W as W2, bB, X as X2, Y as Y2, Z as Z2, _ as _2, $ as $2, a0 as a02, a1 as a13, a2 as a22, a3 as a32, a4 as a42, a5 as a52, a6 as a62, a7 as a72, a8 as a82, a9 as a92, aa as aa2, ab as ab2, ac as ac2, ad as ad2, ae as ae2, af as af2, ag as ag2, ah as ah2, ai as ai2, aj as aj2, ak as ak2, al as al2, am as am2, an as an2, ao as ao2, ap as ap2, aq as aq2, ar as ar2, as as as2, at as at2, au as au2, av as av2, aw as aw2, ax as ax2, ay as ay2, az as az2, aA as aA2, aB as aB2, aC as aC2, aD as aD2, aE as aE2, aF as aF2, aG as aG2, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2 as b22, b3 as b32, b4 as b42, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf, bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz } from "./chunks/route-page-map-C4wM0M4A.esm.js";
|
|
7
7
|
import { P as P4, m as m3 } from "./chunks/modules-D5_hDIg9.esm.js";
|
|
8
8
|
import { d as d4 } from "./chunks/mui.constants-BFBzxaiA.esm.js";
|
|
9
|
-
import { A as A3, a as a14, b as b10, c as c5, d as d5, e as e4, e as e5, B as B3, C as C3, f as f4, g as g4, h as h3, D as D3, i as i5, j as j3, k as k3, l as l3, m as m4, n as n3, o as o4, p as p3, q as q3, r as r5, s as s3, t as t3, u as u3, v as v4, w as w3, x as x3, y as y3, z as z3, E as E3, F as F3, G as G3, H as H3, I as I3, J as J3, K as K2, O as O3, R as R3, L as L3, V as V3, M as M3, N as N3, P as P5, Q as Q3, S as S4, T as T3, U as U3, W as W3, X as X3, X as X4, Y as Y3, Z as Z3, _ as _3, _ as _4, $ as $3, a0 as a03, a1 as a15, a2 as a23, a3 as a33, a4 as a43, a5 as a53, a6 as a63, a7 as a73, a7 as a74, a8 as a83, a9 as a93, aa as aa3, ab as ab3, ab as ab4, ac as ac3, ad as ad3, ae as ae3, af as af3, ag as ag3, ah as ah3, ai as ai3, aj as aj3, ak as ak3, al as al3 } from "./chunks/android-12-switch-
|
|
10
|
-
import { A as A4, a as a16, b as b11, B as B4, D as D4, c as c6, d as d6, e as e6, f as f5, g as g5, h as h4, i as i6, i as i7, C as C4, j as j4, j as j5, k as k4, l as l4, m as m5, n as n4, o as o5, p as p4, G as G4, q as q4, r as r6, s as s4, t as t4, s as s5, t as t5, u as u4, v as v5, w as w4, x as x4, y as y4, z as z4, E as E4, F as F4, H as H4, I as I4, J as J4, K as K3, L as L4, M as M4, M as M5, N as N4, O as O4, P as P6, Q as Q4, R as R4, S as S5, T as T4, U as U4, V as V4, W as W4, X as X5, Y as Y4, Y as Y5, Z as Z4, _ as _5, $ as $4, a0 as a04, _ as _6, a1 as a17, a2 as a24, a3 as a34, a4 as a44, a5 as a54, a6 as a64, U as U5, a7 as a75, a8 as a84, a9 as a94, aa as aa4, ab as ab5, ab as ab6, ac as ac4, ad as ad4, ae as ae4, af as af4, ag as ag4, ah as ah4, ai as ai4, aj as aj4, ak as ak4, al as al4, am as am3 } from "./chunks/uom-field-wrapper-
|
|
11
|
-
import { A as A5, a as a18, a as a19, b as b12, B as B5, C as C5, C as C6, D as D5, H as H5, M as M6, R as R5, S as S6, c as c7, T as T5, d as d7, e as e7 } from "./chunks/appbar-
|
|
12
|
-
import { C as C7, D as D6, M as M7, V as V5, c as c8, a as a20, f as f6, b as b13, g as g6, d as d8, r as r7, e as e8, t as t6 } from "./chunks/form-builder-deconversion-
|
|
13
|
-
import { A as A6, a as a21, C as C8, T as T6, c as c9, g as g7, n as n5, b as b14, u as u5 } from "./chunks/useAuth-
|
|
9
|
+
import { A as A3, a as a14, b as b10, c as c5, d as d5, e as e4, e as e5, B as B3, C as C3, f as f4, g as g4, h as h3, D as D3, i as i5, j as j3, k as k3, l as l3, m as m4, n as n3, o as o4, p as p3, q as q3, r as r5, s as s3, t as t3, u as u3, v as v4, w as w3, x as x3, y as y3, z as z3, E as E3, F as F3, G as G3, H as H3, I as I3, J as J3, K as K2, O as O3, R as R3, L as L3, V as V3, M as M3, N as N3, P as P5, Q as Q3, S as S4, T as T3, U as U3, W as W3, X as X3, X as X4, Y as Y3, Z as Z3, _ as _3, _ as _4, $ as $3, a0 as a03, a1 as a15, a2 as a23, a3 as a33, a4 as a43, a5 as a53, a6 as a63, a7 as a73, a7 as a74, a8 as a83, a9 as a93, aa as aa3, ab as ab3, ab as ab4, ac as ac3, ad as ad3, ae as ae3, af as af3, ag as ag3, ah as ah3, ai as ai3, aj as aj3, ak as ak3, al as al3 } from "./chunks/android-12-switch-CAuiT5Pz.esm.js";
|
|
10
|
+
import { A as A4, a as a16, b as b11, B as B4, D as D4, c as c6, d as d6, e as e6, f as f5, g as g5, h as h4, i as i6, i as i7, C as C4, j as j4, j as j5, k as k4, l as l4, m as m5, n as n4, o as o5, p as p4, G as G4, q as q4, r as r6, s as s4, t as t4, s as s5, t as t5, u as u4, v as v5, w as w4, x as x4, y as y4, z as z4, E as E4, F as F4, H as H4, I as I4, J as J4, K as K3, L as L4, M as M4, M as M5, N as N4, O as O4, P as P6, Q as Q4, R as R4, S as S5, T as T4, U as U4, V as V4, W as W4, X as X5, Y as Y4, Y as Y5, Z as Z4, _ as _5, $ as $4, a0 as a04, _ as _6, a1 as a17, a2 as a24, a3 as a34, a4 as a44, a5 as a54, a6 as a64, U as U5, a7 as a75, a8 as a84, a9 as a94, aa as aa4, ab as ab5, ab as ab6, ac as ac4, ad as ad4, ae as ae4, af as af4, ag as ag4, ah as ah4, ai as ai4, aj as aj4, ak as ak4, al as al4, am as am3 } from "./chunks/uom-field-wrapper-DNgu7XcT.esm.js";
|
|
11
|
+
import { A as A5, a as a18, a as a19, b as b12, B as B5, C as C5, C as C6, D as D5, H as H5, M as M6, R as R5, S as S6, c as c7, T as T5, d as d7, e as e7 } from "./chunks/appbar-CqjkuAGQ.esm.js";
|
|
12
|
+
import { C as C7, D as D6, M as M7, V as V5, c as c8, a as a20, f as f6, b as b13, g as g6, d as d8, r as r7, e as e8, t as t6 } from "./chunks/form-builder-deconversion-CIJWMHun.esm.js";
|
|
13
|
+
import { A as A6, a as a21, C as C8, T as T6, c as c9, g as g7, n as n5, b as b14, u as u5 } from "./chunks/useAuth-DatwJNOz.esm.js";
|
|
14
14
|
import { CustomEditor, CustomEditor as CustomEditor2 } from "./chunks/custom-editor-DnfTs5-j.esm.js";
|
|
15
|
-
import { S as S7 } from "./chunks/sidebar-
|
|
15
|
+
import { S as S7 } from "./chunks/sidebar-DGGqCL8z.esm.js";
|
|
16
16
|
import { A as A7, a as a25, b as b15, c as c10, d as d9, e as e9, f as f7, g as g8, B as B6, C as C9, h as h5, i as i8, j as j6, k as k5, l as l5, m as m6, n as n6, D as D7, E as E5, I as I5, L as L5, o as o6, p as p5, O as O5, q as q5, P as P7, r as r8, s as s6, t as t7, R as R6, u as u6, v as v6, w as w5, x as x5, y as y5, S as S8, z as z5, F as F5, G as G5, H as H6, J as J5, T as T7, K as K4, M as M8, W as W5, N as N5 } from "./chunks/arrow-up-Cz4A_O0J.esm.js";
|
|
17
17
|
import { A as A8, a as a26, b as b16, B as B7, C as C10, c as c11, d as d10, e as e10, D as D8, f as f8, E as E6, g as g9, h as h6, F as F6, i as i9, j as j7, G as G6, H as H7, I as I6, k as k6, l as l6, L as L6, m as m7, n as n7, M as M9, P as P8, o as o7, p as p6, R as R7, q as q6, S as S9, T as T8 } from "./chunks/trash-jodcm4T5.esm.js";
|
|
18
18
|
import { A as A9, E as E7, a as a27, S as S10, b as b17, T as T9 } from "./chunks/tick-CRp4S9uN.esm.js";
|
|
19
19
|
import { N as N6, S as S11 } from "./chunks/notification-Dr_nE2Dc.esm.js";
|
|
20
20
|
import { D as D9 } from "./chunks/document-DKQMhgnk.esm.js";
|
|
21
|
-
import { E as E8, a as a28, b as b18, c as c12, u as u7 } from "./chunks/apiHelper-
|
|
22
|
-
import { a as a29, c as c13, b as b19, d as d11, f as f9, e as e11, g as g10, h as h7, i as i10, r as r9, j as j8, s as s7, u as u8, k as k7, l as l7, m as m8, n as n8, o as o8, v as v7, p as p7 } from "./chunks/useReduxIntegration-
|
|
23
|
-
import { u as u9, a as a30, b as b20, c as c14, d as d12, e as e12, f as f10, g as g11 } from "./chunks/useAccountSetting-
|
|
24
|
-
import { u as u10 } from "./chunks/useLangauge-
|
|
21
|
+
import { E as E8, a as a28, b as b18, c as c12, u as u7 } from "./chunks/apiHelper-73EBSKIp.esm.js";
|
|
22
|
+
import { a as a29, c as c13, b as b19, d as d11, f as f9, e as e11, g as g10, h as h7, i as i10, r as r9, j as j8, s as s7, u as u8, k as k7, l as l7, m as m8, n as n8, o as o8, v as v7, p as p7 } from "./chunks/useReduxIntegration-B8otN3ek.esm.js";
|
|
23
|
+
import { u as u9, a as a30, b as b20, c as c14, d as d12, e as e12, f as f10, g as g11 } from "./chunks/useAccountSetting-YwdjGrxs.esm.js";
|
|
24
|
+
import { u as u10 } from "./chunks/useLangauge-ko-Wm4Qq.esm.js";
|
|
25
25
|
import { useTranslation } from "react-i18next";
|
|
26
|
-
import { L as L7, a as a31 } from "./chunks/languageContext-
|
|
27
|
-
import { E as E9, P as P9, a as a35, b as b21, c as c15, d as d13, i as i11 } from "./chunks/page-context-
|
|
26
|
+
import { L as L7, a as a31 } from "./chunks/languageContext-D_khAb2z.esm.js";
|
|
27
|
+
import { E as E9, P as P9, a as a35, b as b21, c as c15, d as d13, i as i11 } from "./chunks/page-context-D0QJui88.esm.js";
|
|
28
28
|
import { M as M10, M as M11, c as c16, a as a36, t as t8 } from "./chunks/theme-impl-B5ncd0_-.esm.js";
|
|
29
29
|
import { t as t9, g as g12, t as t10 } from "./chunks/themeSelector-Y7FIaMIK.esm.js";
|
|
30
30
|
import { p as p8, a as a37, r as r10, b as b23, s as s8, t as t11 } from "./chunks/typography-DSb3h0jJ.esm.js";
|
|
31
31
|
import { I as I7, a as a38, b as b24, c as c17, d as d14, e as e13, f as f11, g as g13, S as S12, U as U6, h as h8, i as i12, j as j9, k as k8, l as l8, m as m9, n as n9, o as o9, p as p9, q as q7, r as r11, s as s9, t as t12, u as u11, v as v8, w as w6, x as x6, y as y6, z as z6, A as A10, B as B8, C as C11, D as D10, E as E10, F as F7, G as G7, H as H8, J as J6, K as K5, L as L8, M as M12, N as N7, O as O6, P as P10, Q as Q5, R as R8, T as T10, V as V6, W as W6, X as X6, Y as Y6, Z as Z5, _ as _7, $ as $5, a0 as a05, a1 as a110, a2 as a210, a3 as a39, a4 as a45, a5 as a55, a6 as a65, a7 as a76, a8 as a85, a9 as a95, aa as aa5, ab as ab7, ac as ac5, ad as ad5, ae as ae5, af as af5, ag as ag5, ah as ah5, ai as ai5, aj as aj5, ak as ak5, al as al5, am as am4, an as an3, ao as ao3, ap as ap3, aq as aq3, ar as ar3, as as as3, at as at3, au as au3, av as av3, aw as aw3, ax as ax3, ay as ay3, az as az3, aA as aA3, aB as aB3, aC as aC3, aD as aD3, aE as aE3, aF as aF3, aG as aG3, aH as aH2, aI as aI2, aJ as aJ2, aK as aK2, aL as aL2, aM as aM2, aN as aN2, aO as aO2, aP as aP2, aQ as aQ2, aR as aR2, aS as aS2 } from "./chunks/common-B6euWODJ.esm.js";
|
|
32
32
|
import { R as R9, c as c18, g as g14, h as h9, a as a40, n as n10 } from "./chunks/navigation-utils-DvSBvB6q.esm.js";
|
|
33
|
-
import { C as C12, M as M13, a as a41, b as b25, c as c19, S as S13, d as d15, e as e14, f as f12, g as g15, h as h10, i as i13, j as j10, k as k9, l as l9, m as m10, n as n11, o as o10, p as p10, q as q8, r as r12, u as u12 } from "./chunks/migration-utils-
|
|
33
|
+
import { C as C12, M as M13, a as a41, b as b25, c as c19, S as S13, d as d15, e as e14, f as f12, g as g15, h as h10, i as i13, j as j10, k as k9, l as l9, m as m10, n as n11, o as o10, p as p10, q as q8, r as r12, u as u12 } from "./chunks/migration-utils-ChJDhzct.esm.js";
|
|
34
34
|
import { d as d16, f as f13 } from "./chunks/form-builder-conversion-BdWASNEo.esm.js";
|
|
35
35
|
import { l as l10 } from "./chunks/translations-B5t-KZNN.esm.js";
|
|
36
36
|
import { g as g16, a as a46, r as r13, s as s10 } from "./chunks/module-routes-config-CCkZEtfg.esm.js";
|
|
@@ -40,9 +40,9 @@ import { u as u14, a as a48, b as b28, c as c22 } from "./chunks/hooks-Cj9Yhy-E.
|
|
|
40
40
|
import { c as c23, g as g18, i as i15, l as l12, r as r15, s as s12 } from "./chunks/store-ksRZPIIc.esm.js";
|
|
41
41
|
import { a as a49, b as b29, c as c24, d as d17, e as e15, f as f15, g as g19, h as h12, i as i16, s as s13, j as j12, k as k11 } from "./chunks/api-BAbF3OU7.esm.js";
|
|
42
42
|
import { UserApi } from "./api-client/index.esm.js";
|
|
43
|
-
import { A as A12, a as a50, B as B10, b as b30, C as C13, c as c25, d as d18, e as e16, f as f16, g as g20, D as D11, E as E11, h as h13, i as i17, M as M14, j as j13, F as F8, k as k12, l as l13, m as m12, H as H9, I as I8, L as L9, N as N8, P as P11, n as n13, T as T11, R as R10, S as S14, o as o12, p as p12, q as q10, r as r16, s as s14, t as t14, u as u15, v as v10, w as w8, x as x8, y as y8, z as z8, G as G8, J as J7, K as K6, O as O7, Q as Q6, U as U7, V as V7, W as W7, X as X7, Y as Y7, Z as Z6, _ as _8, $ as $6, a0 as a06, a1 as a111, a2 as a211, a3 as a310, a4 as a410, a5 as a56, a6 as a66, a7 as a77, a8 as a86, a9 as a96, aa as aa6, ab as ab8, ac as ac6, ad as ad6, ae as ae6, af as af6, ag as ag6, ah as ah6, ai as ai6, aj as aj6, ak as ak6 } from "./chunks/default-data-
|
|
44
|
-
import { F as F9 } from "./chunks/fullScreen-
|
|
45
|
-
import { S as S15 } from "./chunks/sidebarScreen-
|
|
43
|
+
import { A as A12, a as a50, B as B10, b as b30, C as C13, c as c25, d as d18, e as e16, f as f16, g as g20, D as D11, E as E11, h as h13, i as i17, M as M14, j as j13, F as F8, k as k12, l as l13, m as m12, H as H9, I as I8, L as L9, N as N8, P as P11, n as n13, T as T11, R as R10, S as S14, o as o12, p as p12, q as q10, r as r16, s as s14, t as t14, u as u15, v as v10, w as w8, x as x8, y as y8, z as z8, G as G8, J as J7, K as K6, O as O7, Q as Q6, U as U7, V as V7, W as W7, X as X7, Y as Y7, Z as Z6, _ as _8, $ as $6, a0 as a06, a1 as a111, a2 as a211, a3 as a310, a4 as a410, a5 as a56, a6 as a66, a7 as a77, a8 as a86, a9 as a96, aa as aa6, ab as ab8, ac as ac6, ad as ad6, ae as ae6, af as af6, ag as ag6, ah as ah6, ai as ai6, aj as aj6, ak as ak6 } from "./chunks/default-data-uGbtWbX3.esm.js";
|
|
44
|
+
import { F as F9 } from "./chunks/fullScreen-CV8aHM8J.esm.js";
|
|
45
|
+
import { S as S15 } from "./chunks/sidebarScreen-D0v7aHxc.esm.js";
|
|
46
46
|
import { U as U8, c as c26, d as d19, c as c27, s as s15, a as a51, b as b31, r as r17, U as U9, f as f17, g as g21, h as h14, i as i18, j as j14, p as p13, k as k13, e as e17, s as s16, l as l14, b as b33, m as m13, n as n14, o as o13, q as q11, t as t15, u as u16 } from "./chunks/reducer-Bpuo5eq1.esm.js";
|
|
47
47
|
import { P as P12, a as a57 } from "./chunks/pathname.hrms-C5ojsho0.esm.js";
|
|
48
48
|
import { default as default2 } from "i18next";
|
package/dist/index.js
CHANGED
|
@@ -8,31 +8,31 @@ const pathname_quotes = require("./chunks/pathname.quotes-B-KBD2nK.js");
|
|
|
8
8
|
const routePageMap = require("./chunks/route-page-map-CJLyl6P1.js");
|
|
9
9
|
const modules = require("./chunks/modules-C3T2Pnwc.js");
|
|
10
10
|
const mui_constants = require("./chunks/mui.constants-CJEIUmWO.js");
|
|
11
|
-
const android12Switch = require("./chunks/android-12-switch-
|
|
12
|
-
const uomFieldWrapper = require("./chunks/uom-field-wrapper-
|
|
13
|
-
const appbar = require("./chunks/appbar-
|
|
14
|
-
const formBuilderDeconversion = require("./chunks/form-builder-deconversion-
|
|
15
|
-
const useAuth = require("./chunks/useAuth-
|
|
11
|
+
const android12Switch = require("./chunks/android-12-switch-E6mXBkCx.js");
|
|
12
|
+
const uomFieldWrapper = require("./chunks/uom-field-wrapper-PUawuRbz.js");
|
|
13
|
+
const appbar = require("./chunks/appbar-pTs1Yhzo.js");
|
|
14
|
+
const formBuilderDeconversion = require("./chunks/form-builder-deconversion-C4DFp-Jv.js");
|
|
15
|
+
const useAuth = require("./chunks/useAuth-Bn-Dk5iL.js");
|
|
16
16
|
const customEditor = require("./chunks/custom-editor-DIQqk_yI.js");
|
|
17
|
-
const sidebar = require("./chunks/sidebar-
|
|
17
|
+
const sidebar = require("./chunks/sidebar-DZ3SNJU4.js");
|
|
18
18
|
const arrowUp = require("./chunks/arrow-up-BC9MfTDu.js");
|
|
19
19
|
const trash = require("./chunks/trash-CUP1jXNo.js");
|
|
20
20
|
const tick = require("./chunks/tick-By8O3yMK.js");
|
|
21
21
|
const notification = require("./chunks/notification-lAbbtOBF.js");
|
|
22
22
|
const document = require("./chunks/document-D7m0P_S2.js");
|
|
23
|
-
const apiHelper = require("./chunks/apiHelper-
|
|
24
|
-
const useReduxIntegration = require("./chunks/useReduxIntegration-
|
|
25
|
-
const useAccountSetting = require("./chunks/useAccountSetting-
|
|
26
|
-
const useLangauge = require("./chunks/useLangauge-
|
|
23
|
+
const apiHelper = require("./chunks/apiHelper-BVJa3_k8.js");
|
|
24
|
+
const useReduxIntegration = require("./chunks/useReduxIntegration-CZkiPDYL.js");
|
|
25
|
+
const useAccountSetting = require("./chunks/useAccountSetting-BUtKbR7D.js");
|
|
26
|
+
const useLangauge = require("./chunks/useLangauge-CZdmpat2.js");
|
|
27
27
|
const reactI18next = require("react-i18next");
|
|
28
|
-
const languageContext = require("./chunks/languageContext-
|
|
29
|
-
const pageContext = require("./chunks/page-context-
|
|
28
|
+
const languageContext = require("./chunks/languageContext-BSEvKGy9.js");
|
|
29
|
+
const pageContext = require("./chunks/page-context-fgpShY8H.js");
|
|
30
30
|
const themeImpl = require("./chunks/theme-impl-BgGLJiHC.js");
|
|
31
31
|
const themeSelector = require("./chunks/themeSelector-CkbUQSqY.js");
|
|
32
32
|
const typography = require("./chunks/typography-G3sgt_Ls.js");
|
|
33
33
|
const common = require("./chunks/common-6VUrYJDq.js");
|
|
34
34
|
const navigationUtils = require("./chunks/navigation-utils-CG-S6RJB.js");
|
|
35
|
-
const migrationUtils = require("./chunks/migration-utils-
|
|
35
|
+
const migrationUtils = require("./chunks/migration-utils-D_sKDk5V.js");
|
|
36
36
|
const formBuilderConversion = require("./chunks/form-builder-conversion-D69EGO5g.js");
|
|
37
37
|
const translations = require("./chunks/translations-1vp9srMj.js");
|
|
38
38
|
const moduleRoutesConfig = require("./chunks/module-routes-config-B8IucBuj.js");
|
|
@@ -42,9 +42,9 @@ const hooks = require("./chunks/hooks-DsdahmnZ.js");
|
|
|
42
42
|
const store = require("./chunks/store-BdrUnJ3G.js");
|
|
43
43
|
const api = require("./chunks/api-DJMpbRRM.js");
|
|
44
44
|
const apiClient = require("./api-client/index.js");
|
|
45
|
-
const defaultData = require("./chunks/default-data-
|
|
46
|
-
const fullScreen = require("./chunks/fullScreen-
|
|
47
|
-
const sidebarScreen = require("./chunks/sidebarScreen-
|
|
45
|
+
const defaultData = require("./chunks/default-data-Mq-52KPT.js");
|
|
46
|
+
const fullScreen = require("./chunks/fullScreen-BNlY6F_Z.js");
|
|
47
|
+
const sidebarScreen = require("./chunks/sidebarScreen-usZhvsdA.js");
|
|
48
48
|
const reducer = require("./chunks/reducer-t-U331ho.js");
|
|
49
49
|
const pathname_hrms = require("./chunks/pathname.hrms-2_BEXO_r.js");
|
|
50
50
|
const i18n = require("i18next");
|
package/dist/layout/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F } from "../chunks/fullScreen-
|
|
2
|
-
import { S } from "../chunks/sidebarScreen-
|
|
1
|
+
import { F } from "../chunks/fullScreen-CV8aHM8J.esm.js";
|
|
2
|
+
import { S } from "../chunks/sidebarScreen-D0v7aHxc.esm.js";
|
|
3
3
|
export {
|
|
4
4
|
F as FullscreenLayout,
|
|
5
5
|
S as SidebarLayout
|
package/dist/layout/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const fullScreen = require("../chunks/fullScreen-
|
|
4
|
-
const sidebarScreen = require("../chunks/sidebarScreen-
|
|
3
|
+
const fullScreen = require("../chunks/fullScreen-BNlY6F_Z.js");
|
|
4
|
+
const sidebarScreen = require("../chunks/sidebarScreen-usZhvsdA.js");
|
|
5
5
|
exports.FullscreenLayout = fullScreen.FullscreenLayout;
|
|
6
6
|
exports.SidebarLayout = sidebarScreen.SidebarLayout;
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.esm.js
CHANGED
|
@@ -2,12 +2,12 @@ import { ar as getToken } from "../chunks/common-B6euWODJ.esm.js";
|
|
|
2
2
|
import { I, a, b, c, d, e, f, g, S, U, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, aT, G, H, J, K, L, M, N, O, P, Q, R, T, V, W, X, Y, Z, aU, _, $, a0, a1, a2, a3, a4, a5, aV, a6, a7, a8, a9, aa, ab, ac, aW, ad, ae, af, ag, ah, ai, aX, aj, ak, al, am, an, ao, ap, aq, as, at, aY, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS } from "../chunks/common-B6euWODJ.esm.js";
|
|
3
3
|
import { g as g2, b as b2, i as i2, c as c2, o as o2, r as r2 } from "../chunks/api-config-GOys-syK.esm.js";
|
|
4
4
|
import { R as R2, c as c3, g as g3, h as h2, a as a10, n as n2 } from "../chunks/navigation-utils-DvSBvB6q.esm.js";
|
|
5
|
-
import { c as c4, a as a11, f as f2, b as b3, g as g4, d as d2, r as r3, e as e2, t as t2 } from "../chunks/form-builder-deconversion-
|
|
6
|
-
import { C as C2, M as M2, a as a12, b as b4, c as c5, S as S2, d as d3, e as e3, f as f3, g as g5, h as h3, i as i3, j as j2, k as k2, l as l2, m as m2, n as n3, o as o3, p as p2, q as q2, r as r4, u as u2 } from "../chunks/migration-utils-
|
|
5
|
+
import { c as c4, a as a11, f as f2, b as b3, g as g4, d as d2, r as r3, e as e2, t as t2 } from "../chunks/form-builder-deconversion-CIJWMHun.esm.js";
|
|
6
|
+
import { C as C2, M as M2, a as a12, b as b4, c as c5, S as S2, d as d3, e as e3, f as f3, g as g5, h as h3, i as i3, j as j2, k as k2, l as l2, m as m2, n as n3, o as o3, p as p2, q as q2, r as r4, u as u2 } from "../chunks/migration-utils-ChJDhzct.esm.js";
|
|
7
7
|
import { d as d4, f as f4 } from "../chunks/form-builder-conversion-BdWASNEo.esm.js";
|
|
8
8
|
import { r as getV1Languages } from "../chunks/api-BAbF3OU7.esm.js";
|
|
9
9
|
import { s as s2, j as j3, k as k3 } from "../chunks/api-BAbF3OU7.esm.js";
|
|
10
|
-
import { c as c6, g as g6, n as n4, b as b5 } from "../chunks/useAuth-
|
|
10
|
+
import { c as c6, g as g6, n as n4, b as b5 } from "../chunks/useAuth-DatwJNOz.esm.js";
|
|
11
11
|
import { l as l3 } from "../chunks/translations-B5t-KZNN.esm.js";
|
|
12
12
|
import { g as g7, a as a13, r as r5, s as s3 } from "../chunks/module-routes-config-CCkZEtfg.esm.js";
|
|
13
13
|
import { default as default2 } from "i18next";
|
package/dist/utils/index.js
CHANGED
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const common = require("../chunks/common-6VUrYJDq.js");
|
|
4
4
|
const apiConfig = require("../chunks/api-config-DXwDMFn-.js");
|
|
5
5
|
const navigationUtils = require("../chunks/navigation-utils-CG-S6RJB.js");
|
|
6
|
-
const formBuilderDeconversion = require("../chunks/form-builder-deconversion-
|
|
7
|
-
const migrationUtils = require("../chunks/migration-utils-
|
|
6
|
+
const formBuilderDeconversion = require("../chunks/form-builder-deconversion-C4DFp-Jv.js");
|
|
7
|
+
const migrationUtils = require("../chunks/migration-utils-D_sKDk5V.js");
|
|
8
8
|
const formBuilderConversion = require("../chunks/form-builder-conversion-D69EGO5g.js");
|
|
9
9
|
const api = require("../chunks/api-DJMpbRRM.js");
|
|
10
|
-
const useAuth = require("../chunks/useAuth-
|
|
10
|
+
const useAuth = require("../chunks/useAuth-Bn-Dk5iL.js");
|
|
11
11
|
const translations = require("../chunks/translations-1vp9srMj.js");
|
|
12
12
|
const moduleRoutesConfig = require("../chunks/module-routes-config-B8IucBuj.js");
|
|
13
13
|
const i18n = require("i18next");
|
package/dist/views/index.esm.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { A, a, B, b, C, c, d, e, f, g, D, E, h, i, M, j, F, k, l, m, H, I, L, N, P, n, T, R, S, o, p, q, r, s, t, u, v, w, x, y, z, G, J, K, O, Q, U, al, V, W, X, am, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak } from "../chunks/default-data-
|
|
1
|
+
import { A, a, B, b, C, c, d, e, f, g, D, E, h, i, M, j, F, k, l, m, H, I, L, N, P, n, T, R, S, o, p, q, r, s, t, u, v, w, x, y, z, G, J, K, O, Q, U, al, V, W, X, am, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak } from "../chunks/default-data-uGbtWbX3.esm.js";
|
|
2
2
|
import { j as jsxRuntimeExports } from "../chunks/jsx-runtime-ClFauRgV.esm.js";
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
|
-
import { _ as ModuleTile } from "../chunks/android-12-switch-
|
|
5
|
-
import { al as al2 } from "../chunks/android-12-switch-
|
|
6
|
-
import { T as Typography } from "../chunks/useAuth-
|
|
7
|
-
import { F as FullscreenLayout } from "../chunks/fullScreen-
|
|
4
|
+
import { _ as ModuleTile } from "../chunks/android-12-switch-CAuiT5Pz.esm.js";
|
|
5
|
+
import { al as al2 } from "../chunks/android-12-switch-CAuiT5Pz.esm.js";
|
|
6
|
+
import { T as Typography } from "../chunks/useAuth-DatwJNOz.esm.js";
|
|
7
|
+
import { F as FullscreenLayout } from "../chunks/fullScreen-CV8aHM8J.esm.js";
|
|
8
8
|
import { useState, useMemo, useEffect } from "react";
|
|
9
9
|
import { m as modules } from "../chunks/modules-D5_hDIg9.esm.js";
|
|
10
10
|
import { i as images } from "../chunks/images-BY6aQF32.esm.js";
|
|
11
11
|
/* empty css */
|
|
12
12
|
import { ar as getToken } from "../chunks/common-B6euWODJ.esm.js";
|
|
13
13
|
import { t as getV1RoleUserId } from "../chunks/api-BAbF3OU7.esm.js";
|
|
14
|
-
import { f as Box } from "../chunks/appbar-
|
|
14
|
+
import { f as Box } from "../chunks/appbar-CqjkuAGQ.esm.js";
|
|
15
15
|
import { C as CssBaseline } from "../chunks/CssBaseline-qnbPrAjr.esm.js";
|
|
16
16
|
import { U as U2, c as c2, d as d2, r as r2, f as f2, g as g2, h as h2, i as i2, j as j2, p as p2, k as k2, e as e2, s as s2, l as l2, b as b2, m as m2, n as n2, o as o2, q as q2, t as t2, u as u2 } from "../chunks/reducer-Bpuo5eq1.esm.js";
|
|
17
17
|
import { bA, bB } from "../chunks/route-page-map-C4wM0M4A.esm.js";
|
package/dist/views/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const defaultData = require("../chunks/default-data-
|
|
3
|
+
const defaultData = require("../chunks/default-data-Mq-52KPT.js");
|
|
4
4
|
const jsxRuntime = require("../chunks/jsx-runtime-B6vEU3CM.js");
|
|
5
5
|
const reactI18next = require("react-i18next");
|
|
6
|
-
const android12Switch = require("../chunks/android-12-switch-
|
|
7
|
-
const useAuth = require("../chunks/useAuth-
|
|
8
|
-
const fullScreen = require("../chunks/fullScreen-
|
|
6
|
+
const android12Switch = require("../chunks/android-12-switch-E6mXBkCx.js");
|
|
7
|
+
const useAuth = require("../chunks/useAuth-Bn-Dk5iL.js");
|
|
8
|
+
const fullScreen = require("../chunks/fullScreen-BNlY6F_Z.js");
|
|
9
9
|
const React = require("react");
|
|
10
10
|
const modules = require("../chunks/modules-C3T2Pnwc.js");
|
|
11
11
|
const images = require("../chunks/images-Cmybjd2S.js");
|
|
12
12
|
;/* empty css */
|
|
13
13
|
const common = require("../chunks/common-6VUrYJDq.js");
|
|
14
14
|
const api = require("../chunks/api-DJMpbRRM.js");
|
|
15
|
-
const appbar = require("../chunks/appbar-
|
|
15
|
+
const appbar = require("../chunks/appbar-pTs1Yhzo.js");
|
|
16
16
|
const CssBaseline = require("../chunks/CssBaseline-Ba0wbudi.js");
|
|
17
17
|
const reducer = require("../chunks/reducer-t-U331ho.js");
|
|
18
18
|
const routePageMap = require("../chunks/route-page-map-CJLyl6P1.js");
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-context-BXcrnujq.esm.js","sources":["../../src/utils/format-permissions.ts","../../src/contexts/permission-context.tsx","../../src/components/loaders/erp-loader.tsx","../../src/contexts/page-context.tsx"],"sourcesContent":["import { formatLabel } from \"./format-text\";\r\n\r\nexport interface HrmsPermissionNode {\r\n canView?: boolean; // r + :nop\r\n canViewById?: boolean; // r + :param (plain)\r\n canAdd?: boolean; // w\r\n canEdit?: boolean; // u / e + :param (plain)\r\n canDelete?: boolean; // d\r\n /**\r\n * Dynamic action map for any compound operation path.\r\n * Key = camelCase of the named segments extracted from the operation.\r\n *\r\n * Examples:\r\n * \":param/status\" → actions.status\r\n * \":param/send\" → actions.send\r\n * \":param/contracts/:param_id\" → actions.contracts\r\n * \":param/documents/:param_id/verify\" → actions.documentsVerify\r\n * \"public/welcome/:param/reject\" → stored on sub-node \"publicWelcome\".actions.reject\r\n * \"public/welcome/:param/accept\" → stored on sub-node \"publicWelcome\".actions.accept\r\n */\r\n actions?: Record<string, boolean>;\r\n [subRoute: string]: HrmsPermissionNode | boolean | Record<string, boolean> | undefined;\r\n}\r\n\r\nexport type HrmsPermissionTree = Record<string, HrmsPermissionNode>;\r\n\r\n// ─── Constants ────────────────────────────────────────────────────────────────\r\n\r\n// Only process entries belonging to this module\r\nconst ALLOWED_MODULES = ['hrms'] as const;\r\n\r\n// Maps BE short keys → FE permission flags for plain CRUD operations.\r\n// Only `:nop` and `:param` (no action suffix) are handled here.\r\n// Compound operations (with named action segments) bypass this map and go to node.actions.\r\nconst HRMS_CRUD_FLAG_MAP: Record<string, Record<':nop' | ':param', keyof HrmsPermissionNode>> = {\r\n r: { ':nop': 'canView', ':param': 'canViewById' },\r\n w: { ':nop': 'canAdd', ':param': 'canAdd' },\r\n u: { ':nop': 'canEdit', ':param': 'canEdit' },\r\n d: { ':nop': 'canDelete', ':param': 'canDelete' },\r\n e: { ':nop': 'canEdit', ':param': 'canEdit' },\r\n};\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\n/** \"active-loans\" → \"activeloans\", \"my-approvals\" → \"myapprovals\" */\r\nfunction toCamelCase(str: string): string {\r\n return str\r\n .replace(/[^a-zA-Z0-9\\s-]/g, ' ')\r\n .split(/[-\\s]+/)\r\n .filter(Boolean)\r\n .join('');\r\n}\r\n\r\n/**\r\n * Joins multiple camelCase parts into a single camelCase string.\r\n * [\"documents\", \"verify\"] → \"documentsVerify\"\r\n * [\"public\", \"welcome\"] → \"publicWelcome\"\r\n */\r\nfunction joinCamelParts(parts: string[]): string {\r\n return parts\r\n .map((p, i) => i === 0 ? p : p.charAt(0).toUpperCase() + p.slice(1))\r\n .join('');\r\n}\r\n\r\n/**\r\n * Checks whether a path segment is a parameter placeholder.\r\n * Matches \":param\", \":id\", \":param_id\", \":nop\", etc.\r\n */\r\nfunction isParamSegment(seg: string): boolean {\r\n return seg.startsWith(':');\r\n}\r\n\r\n// ─── Operation Resolver ───────────────────────────────────────────────────────\r\n\r\ninterface ResolvedOperation {\r\n /**\r\n * camelCase key of the named sub-route (null = write to root node).\r\n * e.g. \"active-loans\" → \"activeloans\"\r\n * \"public/welcome\" → \"publicWelcome\"\r\n */\r\n subRoute: string | null;\r\n\r\n /**\r\n * camelCase key of the specific action within the node (null = plain CRUD).\r\n * Populated when named segments appear *after* a param segment.\r\n * e.g. \":param/status\" → \"status\"\r\n * \":param/documents/:param_id/verify\" → \"documentsVerify\"\r\n * \"public/welcome/:param/reject\" → \"reject\" (sub-route = \"publicWelcome\")\r\n */\r\n action: string | null;\r\n\r\n /**\r\n * Whether a :param placeholder exists anywhere in the operation.\r\n * Determines canView vs canViewById for plain CRUD sub-route access.\r\n */\r\n hasParam: boolean;\r\n}\r\n\r\n/**\r\n * Generic operation parser — no hardcoded action names.\r\n *\r\n * Algorithm:\r\n * 1. Split operation by \"/\".\r\n * 2. Walk segments left-to-right, collecting:\r\n * - \"leading named\" segments (before the first param) → subRoute\r\n * - \"trailing named\" segments (after the first param) → action\r\n * 3. A pure \":nop\" / \":param\" operation has no named segments → plain CRUD.\r\n */\r\nfunction resolveOperation(operation: string): ResolvedOperation {\r\n if (!operation || operation === ':nop') {\r\n return { subRoute: null, action: null, hasParam: false };\r\n }\r\n\r\n const segments = operation.split('/');\r\n const leadingNamed: string[] = []; // named segs before first param\r\n const trailingNamed: string[] = []; // named segs after first param\r\n let passedParam = false;\r\n let hasParam = false;\r\n\r\n for (const seg of segments) {\r\n if (isParamSegment(seg)) {\r\n passedParam = true;\r\n hasParam = true;\r\n } else {\r\n const part = toCamelCase(seg);\r\n if (part) {\r\n if (!passedParam) {\r\n leadingNamed.push(part);\r\n } else {\r\n trailingNamed.push(part);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Pure :param (no named segments at all) → plain CRUD\r\n if (leadingNamed.length === 0 && trailingNamed.length === 0) {\r\n return { subRoute: null, action: null, hasParam };\r\n }\r\n\r\n const subRoute = leadingNamed.length > 0\r\n ? joinCamelParts(leadingNamed)\r\n : null;\r\n\r\n const action = trailingNamed.length > 0\r\n ? joinCamelParts(trailingNamed)\r\n : null;\r\n\r\n return { subRoute, action, hasParam };\r\n}\r\n\r\n// ─── Tree Builder ─────────────────────────────────────────────────────────────\r\n\r\nexport function buildHrmsPermissionTree(raw: Record<string, any>): HrmsPermissionTree {\r\n const tree: HrmsPermissionTree = {};\r\n\r\n for (const [rawModuleKey, crudBlock] of Object.entries(raw)) {\r\n\r\n // ── Step 1: normalise raw key → camelCase module name ──────────────────\r\n // \"loan-allotments\" → \"loanAllotments\"\r\n const formattedModule = formatLabel(\r\n rawModuleKey\r\n .split('/')[0] // strip path suffix e.g. \"/-p\"\r\n .replace(/p$/gi, \"\") // strip trailing p\r\n .replace(/-p-/gi, \"-\") // strip -p- infix\r\n .replace(/-+$/g, \"\") // clean leftover trailing dashes\r\n ).replace(/[^a-zA-Z0-9]/gi, \"\"); // strip non-alphanumeric\r\n\r\n // ── Step 2: split on capital letters ──────────────────────────────────\r\n // \"loanAllotments\" → moduleKey: \"loanAllotments\", moduleSubName: \"\"\r\n // \"loanAllotmentsMy\"→ moduleKey: \"loanAllotments\", moduleSubName: \"My\"\r\n const parts = formattedModule.split(/(?=[A-Z])/);\r\n const moduleKey = parts.slice(0, 2).join(\"\");\r\n const moduleSubName = parts.slice(2).join(\"\");\r\n\r\n if (!tree[moduleKey]) tree[moduleKey] = {};\r\n if (!crudBlock || typeof crudBlock !== 'object') continue;\r\n\r\n for (const [shortKey, entries] of Object.entries(crudBlock)) {\r\n const flagMap = HRMS_CRUD_FLAG_MAP[shortKey];\r\n if (!flagMap) continue;\r\n\r\n const list: any[] = Array.isArray(entries)\r\n ? entries\r\n : [{ ...entries, identity: null }];\r\n\r\n for (const entry of list) {\r\n // ── Filter: only process hrms module entries ────────────────────\r\n const entryModule = entry?.identity?.module;\r\n if (entryModule && !ALLOWED_MODULES.includes(entryModule)) continue;\r\n\r\n const operation = entry?.identity?.operation ?? ':nop';\r\n\r\n // ── Step 3: parse operation generically ────────────────────────\r\n const { subRoute, action, hasParam } = resolveOperation(operation);\r\n\r\n // ── Step 4: resolve target node ────────────────────────────────\r\n let targetNode: HrmsPermissionNode;\r\n\r\n if (moduleSubName) {\r\n if (!(tree[moduleKey] as any)[moduleSubName]) {\r\n (tree[moduleKey] as any)[moduleSubName] = {} as HrmsPermissionNode;\r\n }\r\n const subNameNode = (tree[moduleKey] as any)[moduleSubName] as any;\r\n\r\n // ── FIX: if operation also has a subRoute, nest inside moduleSubName ──\r\n if (subRoute) {\r\n const subKey = subRoute.charAt(0).toLowerCase() + subRoute.slice(1);\r\n if (!subNameNode[subKey]) subNameNode[subKey] = {} as HrmsPermissionNode;\r\n targetNode = subNameNode[subKey] as HrmsPermissionNode;\r\n } else {\r\n targetNode = subNameNode;\r\n }\r\n\r\n } else if (subRoute) {\r\n const subKey = subRoute.charAt(0).toLowerCase() + subRoute.slice(1);\r\n if (!(tree[moduleKey] as any)[subKey]) {\r\n (tree[moduleKey] as any)[subKey] = {} as HrmsPermissionNode;\r\n }\r\n targetNode = (tree[moduleKey] as any)[subKey] as HrmsPermissionNode;\r\n\r\n } else {\r\n targetNode = tree[moduleKey];\r\n }\r\n\r\n // ── Step 5: write permission into target node ───────────────────\r\n if (action) {\r\n // Compound operation with a named action suffix → generic actions map.\r\n // No flag enumeration needed — the action name IS the key.\r\n // e.g. \":param/status\" → node.actions.status\r\n // e.g. \":param/documents/:param_id/verify\" → node.actions.documentsVerify\r\n // e.g. \"public/welcome/:param/reject\" → subNode.actions.reject\r\n if (!targetNode.actions) targetNode.actions = {};\r\n targetNode.actions[action] = true;\r\n\r\n } else {\r\n // Plain CRUD operation → map to well-known flag\r\n const opKey: ':nop' | ':param' = hasParam ? ':param' : ':nop';\r\n const flag = flagMap[opKey];\r\n if (!flag) continue;\r\n targetNode[flag] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tree;\r\n}\r\n","/* eslint-disable react-refresh/only-export-components */\r\nimport React, { createContext, useMemo, ReactNode } from \"react\";\r\nimport { formatLabel } from \"../utils/format-text\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport { buildHrmsPermissionTree } from \"../utils/format-permissions\";\r\n\r\n// Define the types for permissions\r\ntype PermissionActions = \"canEdit\" | \"canView\" | \"canAdd\" | \"canDelete\" | \"canAddForOthers\";\r\ntype SubModulePermissions = Partial<Record<PermissionActions, boolean>>;\r\ntype ModulePermissions = SubModulePermissions & Record<string, SubModulePermissions>;\r\n\r\nexport interface PermissionsContextType {\r\n [module: string]: ModulePermissions;\r\n}\r\n\r\ninterface PermissionsProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\n// Create a context with a default value\r\nexport const PermissionsContext = createContext<PermissionsContextType | null>(null);\r\n\r\nexport const PermissionsProvider: React.FC<PermissionsProviderProps> = ({ children }) => {\r\n const { setIsPermissionLoaded = false } = useAppSelector(\r\n (store) => store.roles ?? {}\r\n );\r\n\r\n const storagePermission = useMemo(() => {\r\n return localStorage.getItem(\"role-permission\")\r\n }, [localStorage.getItem(\"role-permission\")])\r\n\r\n const permissions: Record<string, any> = useMemo(() => {\r\n const rawValue = storagePermission;\r\n\r\n if (!rawValue) {\r\n return {};\r\n }\r\n\r\n try {\r\n return JSON.parse(rawValue);\r\n } catch (error) {\r\n console.warn(\r\n \"[PermissionsProvider] Failed to parse stored permissions. Clearing corrupted value.\",\r\n error\r\n );\r\n localStorage.removeItem(\"role-permission\");\r\n return {};\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [setIsPermissionLoaded, storagePermission]);\r\n const computedPermissionsOld = useMemo(() => {\r\n const checkPermission = (module: string, action: string): boolean =>\r\n Boolean(permissions?.[module]?.[action]);\r\n\r\n const dynamicPermissions: PermissionsContextType = {};\r\n\r\n Object.keys(permissions)\r\n // .filter((key) => key.startsWith(\"rental-\"))\r\n .forEach((module) => {\r\n const formattedModule = formatLabel(\r\n module.replace(/p$/gi, \"\").replace(/-p-/gi, \"-\")\r\n ).replace(/[^a-zA-Z0-9]/gi, \"\");\r\n\r\n // Extract the main module name (e.g., \"RentalQuotations\")\r\n const [baseModule, subModule, ...subModuleParts] = formattedModule.split(/(?=[A-Z])/);\r\n const subModuleName = subModuleParts.join(\"\");\r\n const bModule = baseModule + (subModule || \"\")\r\n\r\n if (!dynamicPermissions[bModule]) {\r\n dynamicPermissions[bModule] = {};\r\n }\r\n\r\n const actionMap: Record<string, PermissionActions> = {\r\n u: \"canEdit\",\r\n e: \"canEdit\",\r\n r: \"canView\",\r\n w: \"canAdd\",\r\n d: \"canDelete\",\r\n wo: \"canAddForOthers\"\r\n };\r\n\r\n Object.entries(actionMap).forEach(([key, actionName]) => {\r\n if (subModuleName) {\r\n // Store sub-module actions separately\r\n if (!dynamicPermissions[bModule][subModuleName]) {\r\n dynamicPermissions[bModule][subModuleName] = {};\r\n }\r\n const currentValue = (dynamicPermissions[bModule][subModuleName] as SubModulePermissions)[actionName] || false;\r\n (dynamicPermissions[bModule][subModuleName] as SubModulePermissions)[actionName] = currentValue || checkPermission(module, key);\r\n } else {\r\n // Store main module actions\r\n const currentValue = (dynamicPermissions[bModule] as SubModulePermissions)[actionName] || false;\r\n (dynamicPermissions[bModule] as SubModulePermissions)[actionName] = currentValue || checkPermission(module, key);\r\n }\r\n });\r\n });\r\n\r\n\r\n return dynamicPermissions;\r\n }, [permissions]);\r\n \r\n const computedPermissions = useMemo(() => {\r\n return buildHrmsPermissionTree(permissions);\r\n }, [permissions]);\r\n\r\n return (\r\n <PermissionsContext.Provider value={computedPermissions}>\r\n {children}\r\n </PermissionsContext.Provider>\r\n );\r\n};\r\n","import React from \"react\"\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({theme})=>({\r\n color: theme.palette?.theme?.primary[500]||\"#1976d2\"\r\n}))\r\n\r\nconst ErpLoader = (props:CircularProgressProps) => {\r\n\treturn <Box position=\"fixed\" left='50%' top=\"50%\">\r\n <Loader size={50} {...props}/>\r\n </Box>\r\n};\r\n\r\nexport { ErpLoader };\r\nexport default ErpLoader;\r\n","/* eslint-disable react-refresh/only-export-components */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\n\r\nimport React, { createContext, useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\nimport {\r\n\tgetV1FilterResource,\r\n\tgetV1FormBuilder,\r\n\tgetV1FormBuilderSchemaFieldsName,\r\n\tgetV1PagesResource,\r\n\tpatchV1PagesPageId\r\n} from '../api-client/api.system-feature/api';\r\nimport { IResources, routeToColumnsMap, routeToResourceMap } from '../constants/route-page-map'; // Removed - should be passed as props or configured by consuming app\r\nimport { getToken } from '../utils/common';\r\nimport { removeIdStaticIdsFromMongoObject } from '../utils/common';\r\nimport { RuleGroupType } from 'react-querybuilder';\r\nimport { MaterialTableColumnProps } from '../components/material-table/material-table';\r\nimport _ from 'lodash';\r\nimport { formatLabel } from '../utils/format-text';\r\nimport ErpLoader from '../components/loaders/erp-loader';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useAuth } from '../hooks/useAuth';\r\n// import { usePermissions } from '../hooks/use-permissions';\r\n\r\n/* Interfaces and types */\r\nexport type ViewType = 'Table' | 'Grid' | 'Kanban' | 'Calendar' | 'Gantt' | '';\r\n\r\ninterface SchemaFields {\r\n\tselect: string;\r\n\talias: string;\r\n\ttype: string;\r\n\tfilter_type?: string;\r\n\tfilter_name?: string;\r\n\trequired?: boolean;\r\n\tisOrderAllowed?: boolean;\r\n\tisDefault?: boolean;\r\n\tisFilterAllowed?: boolean;\r\n\tlabel?: string;\r\n\tkey: string;\r\n\taccessorKey?: string;\r\n\tjoinKey?: string;\r\n\tenum?: string | string[];\r\n}\r\nexport interface SavedViewType {\r\n\tlabel: ViewType;\r\n\tposition: number;\r\n}\r\nexport interface PageState {\r\n\t_id: string | number;\r\n\tname: string;\r\n\tpage_size: number;\r\n\tcolumn_order: string[];\r\n\tvisible_columns: MaterialTableColumnProps[];\r\n\tviews: SavedViewType[];\r\n\tactive_view: ViewType;\r\n\tfilters: RuleGroupType;\r\n\tfilterQueryString: string;\r\n\tsort: Record<any, any> | null;\r\n\tsearch: string;\r\n\tenabled_views: ViewType[];\r\n\tisShared: boolean;\r\n\tcolumn_sizes: Record<string, number>;\r\n}\r\n\r\nexport interface GeneratedColumnsState {\r\n\tcolumns: MaterialTableColumnProps[];\r\n\torderKeys: string[];\r\n}\r\n\r\nexport const initialFilter: RuleGroupType = { combinator: 'and', rules: [] };\r\n\r\ninterface PageContextValue {\r\n\tpageTemplateId: string;\r\n\tactivePage: PageState;\r\n\tupdatePageInfo: (updates: Partial<PageState>) => void;\r\n\tloading: boolean;\r\n\tisSaving: boolean;\r\n\terror: string | null;\r\n\tpages: any[];\r\n\tsavePages: () => void;\r\n\tsetActivePage: (data: any) => void;\r\n\tsetPages: React.Dispatch<any>;\r\n\tschemaFields: SchemaFields[];\r\n\tinitializeColumns: (columns: MaterialTableColumnProps[]) => void;\r\n\tgeneratedColumns: GeneratedColumnsState;\r\n\tsharedPages: any[];\r\n\tupdateGeneratedColumns: (updates: Partial<GeneratedColumnsState>) => void;\r\n\tformData: Record<string, any>\r\n\tsetFormData: (data: Record<string, any>) => void\r\n}\r\n\r\nexport const defaultPageState: PageState = {\r\n\t_id: '',\r\n\tname: '',\r\n\tpage_size: 10,\r\n\tcolumn_order: ['id'],\r\n\tvisible_columns: [],\r\n\tviews: [],\r\n\tactive_view: '',\r\n\tfilters: initialFilter,\r\n\tfilterQueryString: '',\r\n\tsort: null,\r\n\tsearch: '',\r\n\tenabled_views: ['Table', 'Grid', 'Kanban', 'Calendar', 'Gantt'],\r\n\tisShared: false,\r\n\tcolumn_sizes: {}\r\n};\r\ninterface PageProviderProps {\r\n\tchildren: React.ReactNode;\r\n\trouteToColumnsMap?: Record<string, any>;\r\n\trouteToResourceMap?: Record<string, any>;\r\n}\r\n\r\nconst UpdatePageInfo = () => { };\r\nconst UpdateGeneratedColumns = () => { };\r\n\r\nexport const PageContext = createContext<PageContextValue>({\r\n\tpageTemplateId: '',\r\n\tactivePage: defaultPageState,\r\n\tupdatePageInfo: UpdatePageInfo,\r\n\tloading: false,\r\n\tisSaving: false,\r\n\terror: null,\r\n\tpages: [],\r\n\tsharedPages: [],\r\n\tsavePages: () => { },\r\n\tsetActivePage: () => { },\r\n\tsetPages: () => { },\r\n\tschemaFields: [],\r\n\tinitializeColumns: () => { },\r\n\tgeneratedColumns: { columns: [], orderKeys: [] },\r\n\tupdateGeneratedColumns: UpdateGeneratedColumns,\r\n});\r\n\r\nfunction mergeArraysKeepingOrder(array1: string[], array2: string[]): string[] {\r\n\t// Create a Set from the first array for efficient lookups\r\n\tconst array1Set = new Set(array1);\r\n\r\n\t// Filter the second array to find elements not in the first array\r\n\tconst elementsToAdd = array2.filter((item) => !array1Set.has(item));\r\n\r\n\t// Combine the original first array with the new elements\r\n\treturn [...array1, ...elementsToAdd];\r\n}\r\n\r\nconst generateColumnSchema = (\r\n\tdefaultColumns: MaterialTableColumnProps[],\r\n\tschemaFields: SchemaFields[],\r\n\tcolumnOrders: string[],\r\n\tdColumns?: any[],\r\n\tt?: any\r\n): { columns: MaterialTableColumnProps[]; orderKeys: string[] } => {\r\n\ttry {\r\n\t\t// if (dColumns && dColumns?.length) {\r\n\t\t// \tdefaultColumns = defaultColumns.map((column) => {\r\n\t\t// \t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\r\n\t\t// \t\treturn f || column\r\n\t\t// \t})\r\n\t\t// }\r\n\t\tif (dColumns && dColumns?.length) {\r\n\t\t\tdefaultColumns = defaultColumns.map((column) => {\r\n\t\t\t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\r\n\t\t\t\tconst merged = f ? { ...column, ...f } : column;\r\n\t\t\t\treturn merged\r\n\t\t\t})\r\n\t\t}\r\n\t\tlet orderKeys = columnOrders.length\r\n\t\t\t? columnOrders\r\n\t\t\t: (defaultColumns.map((column) => column.accessorKey) as string[]);\r\n\t\tconst getAccesorKeyViaField = (field: SchemaFields) =>\r\n\t\t\t(field.type === 'object' || field?.join) ? `${field.alias}.${field.accessorKey}` : field.key;\r\n\r\n\t\t// Clean up schema fields by removing \"__replaceKey\" from the keys\r\n\t\tconst updatedFields = schemaFields.map((field) => ({\r\n\t\t\t...field,\r\n\t\t\tkey: field.key.replace('__replaceKey', '')\r\n\t\t})).filter((field) => !field.is_inner_join);\r\n\r\n\t\tconst uniqueFields = _.differenceWith(\r\n\t\t\tupdatedFields,\r\n\t\t\tupdatedFields,\r\n\t\t\t(fieldA, fieldB) => fieldA.key === fieldB?.joinKey\r\n\t\t);\r\n\r\n\t\t// Find fields in schemaFields but not in defaultColumns based on accessorKey\r\n\t\tconst unmatchedFields = _.differenceWith(\r\n\t\t\tuniqueFields,\r\n\t\t\tdefaultColumns,\r\n\t\t\t(field, column) => getAccesorKeyViaField(field) === column.accessorKey\r\n\t\t);\r\n\r\n\t\t// Map unique fields to MaterialTableColumn structure\r\n\t\tconst additionalColumns: MaterialTableColumnProps[] = unmatchedFields.map(\r\n\t\t\t(field) => ({\r\n\t\t\t\theader: t ? formatLabel(t(field?.label)?.replace('_data', '') || '') : formatLabel(field?.label?.replace('_data', '') || ''),\r\n\t\t\t\taccessorKey: getAccesorKeyViaField(field),\r\n\t\t\t\tvisible: false,\r\n\t\t\t\ttype: field?.enum ? 'status' : field.type,\r\n\t\t\t\t...(field.type === 'array' && { typeArrayAccessorKey: field.accessorKey || '' }),\r\n\t\t\t\tenableSorting: (field.type === 'array' || field.type === 'object' || field?.join) ? false : true,\r\n\t\t\t\t...(field?.type === 'boolean' ? {\r\n\t\t\t\t\ttypeBooleanLabels: field?.values?.length ? _.mapValues(_.keyBy(\r\n\t\t\t\t\t\tfield?.values.map(item => ({\r\n\t\t\t\t\t\t\tkey: item.name,\r\n\t\t\t\t\t\t\tvalue: item.label\r\n\t\t\t\t\t\t})),\r\n\t\t\t\t\t\t'key'\r\n\t\t\t\t\t), 'value') : { 0: \"Inactive\", 1: \"Active\", false: \"Inactive\", true: \"Active\" }\r\n\t\t\t\t} : {})\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tconst updatedDefaultColumns = defaultColumns?.map((column) => {\r\n\t\t\tconst field = schemaFields.find((field) => getAccesorKeyViaField(field) === column.accessorKey);\r\n\t\t\treturn {\r\n\t\t\t\t...column,\r\n\t\t\t\t...((field?.type === 'object' || field?.joinKey || column.enableSorting === false) ? { enableSorting: false } : {})\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t// Combine default columns and additional columns\r\n\t\tconst columns = [...updatedDefaultColumns, ...additionalColumns];\r\n\r\n\t\t// Generate an array of column keys for ordering\r\n\t\tconst nOrderKeys = columns.map((column) => column.accessorKey) as string[];\r\n\r\n\t\torderKeys = mergeArraysKeepingOrder(orderKeys, nOrderKeys);\r\n\r\n\t\treturn { columns, orderKeys };\r\n\t} catch (error) {\r\n\t\treturn {\r\n\t\t\tcolumns: defaultColumns,\r\n\t\t\torderKeys: defaultColumns.map((column) => column.accessorKey) as string[]\r\n\t\t};\r\n\t}\r\n};\r\n\r\nexport const PageProvider: React.FC<PageProviderProps> = ({ children, routeToColumnsMap: customRouteToColumnsMap, routeToResourceMap: customRouteToResourceMap }) => {\r\n\tconsole.log(\"🚀 ~ PageProvider ~ customRouteToResourceMap:\", customRouteToResourceMap)\r\n\tconsole.log(\"🚀 ~ PageProvider ~ customRouteToColumnsMap:\", customRouteToColumnsMap)\r\n\tconst location = useLocation();\r\n\tconst [activePage, setActivePageData] = useState<PageState>(defaultPageState);\r\n\t// const permissions=usePermissions();\r\n\tconst [schemaFields, setSchemaFields] = useState<SchemaFields[]>([]);\r\n\tconst [loading, setLoading] = useState<boolean>(true);\r\n\tconst [isSaving, setIsSaving] = useState<boolean>(false);\r\n\tconst [error, setError] = useState<string | null>(null);\r\n\tconst [pages, setPages] = useState<any>([]);\r\n\tconst [sharedPages, setSharedPages] = useState<any>([]);\r\n\tconst [isChanged, setIsChanged] = useState<boolean>(false);\r\n\tconst [pageTemplateId, setPageTemplateId] = useState<string>('');\r\n\tconst [isInitialLoad, setIsInitialLoad] = useState<boolean>(true);\r\n\tconst [isCreatePage, setIsCreatePage] = useState<boolean>(false);\r\n\tconst [formData, setFormData] = useState<any>({});\r\n\tconst [generatedColumns, setGeneratedColumns] = useState<{\r\n\t\tcolumns: MaterialTableColumnProps[];\r\n\t\torderKeys: string[];\r\n\t}>({ columns: [], orderKeys: [] });\r\n\tconst { user } = useAuth()\r\n\t// Add ref to track current pathname for race condition prevention\r\n\tconst currentPathnameRef = useRef<string>(location.pathname);\r\n\tconst curPathName = useMemo(() => location.pathname, [location.pathname])\r\n\r\n\t// Get current page's default columns and resources\r\n\tconst defaultColumns: any[] = useMemo(() => {\r\n\t\tconst columns = (customRouteToColumnsMap?.[curPathName] || routeToColumnsMap[curPathName])?.defaultColumns || [];\r\n\t\treturn columns;\r\n\t}, [curPathName, customRouteToColumnsMap]);\r\n\r\n\tconst resources: IResources = useMemo(() => {\r\n\t\tconst resource = customRouteToResourceMap?.[curPathName] || routeToResourceMap[curPathName] || null;\r\n\t\treturn resource;\r\n\t}, [curPathName, customRouteToResourceMap]);\r\n\r\n\t//Translation\r\n\tconst { t } = useTranslation()\r\n\r\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n\tconst initializeColumns = (columns: MaterialTableColumnProps[]) => {\r\n\t\t//! Remove the function if not needed\r\n\t};\r\n\r\n\t// Fetch page-related information from API\r\n\tconst fetchPageData = useCallback(\r\n\t\tasync (currentPath: string, currentDefaultColumns: any[], currentResources: IResources) => {\r\n\t\t\tconsole.log('PageContext: Entering fetchPageData', { currentPath, currentDefaultColumnsLength: currentDefaultColumns?.length, hasResources: !!currentResources });\r\n\r\n\t\t\t// Check if this request is still valid (pathname hasn't changed)\r\n\t\t\tif (currentPathnameRef.current !== currentPath) {\r\n\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed', { ref: currentPathnameRef.current, current: currentPath });\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tsetLoading(true);\r\n\t\t\tsetError(null);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconsole.log('PageContext: Resources Check:', { currentDefaultColumns, currentResources });\r\n\t\t\t\tif (currentDefaultColumns.length && currentResources) {\r\n\t\t\t\t\tconst { pageResource = '', fieldResource = '', formResource = '' } = currentResources;\r\n\r\n\t\t\t\t\tconsole.log('PageContext: Pathname:', currentPath);\r\n\t\t\t\t\tconsole.log('PageContext: Default Columns:', currentDefaultColumns);\r\n\t\t\t\t\tconsole.log('PageContext: Resources:', currentResources);\r\n\r\n\t\t\t\t\t// Double-check pathname hasn't changed before making API calls\r\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst [pageResponse, fieldResponse, formResponse] = await Promise.all([\r\n\t\t\t\t\t\tpageResource ? getV1PagesResource({ ...getToken(), resource: pageResource }) : Promise.resolve(null),\r\n\r\n\t\t\t\t\t\tgetV1FormBuilderSchemaFieldsName({\r\n\t\t\t\t\t\t\tname: fieldResource,\r\n\t\t\t\t\t\t\t...getToken(),\r\n\t\t\t\t\t\t\tskip: 0,\r\n\t\t\t\t\t\t\tlimit: 999\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tgetV1FormBuilder({\r\n\t\t\t\t\t\t\t...getToken(),\r\n\t\t\t\t\t\t\tfilters: `(resource.eq=${formResource}&company_id.eq=${user?.company_id})`,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]);\r\n\r\n\t\t\t\t\tconsole.log('PageContext: API Responses:', { pageResponse, fieldResponse, formResponse });\r\n\r\n\t\t\t\t\t// Final check - ensure pathname still matches\r\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\r\n\t\t\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed after API call');\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst fields = fieldResponse?.data?.fields?.map(f => ({ ...f, label: !f?.label?.trim() ? formatLabel(f.key) : f.label }));\r\n\r\n\t\t\t\t\tconst gColumns = generateColumnSchema(currentDefaultColumns, fields, [], [], t);\r\n\t\t\t\t\tconsole.log('PageContext: Generated Columns:', gColumns);\r\n\r\n\t\t\t\t\tconst pages =\r\n\t\t\t\t\t\tpageResponse?.data?.pages?.map((p) => ({\r\n\t\t\t\t\t\t\t...defaultPageState,\r\n\t\t\t\t\t\t\t...p,\r\n\t\t\t\t\t\t\tvisible_columns: generateColumnSchema(\r\n\t\t\t\t\t\t\t\tp.visible_columns?.length ? p.visible_columns : currentDefaultColumns,\r\n\t\t\t\t\t\t\t\tfields,\r\n\t\t\t\t\t\t\t\tp.column_order || [],\r\n\t\t\t\t\t\t\t\tcurrentDefaultColumns,\r\n\t\t\t\t\t\t\t\tt\r\n\t\t\t\t\t\t\t).columns,\r\n\t\t\t\t\t\t\tcolumn_order: mergeArraysKeepingOrder(\r\n\t\t\t\t\t\t\t\tp.column_order || [],\r\n\t\t\t\t\t\t\t\t_.uniq(gColumns.orderKeys)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})) || [];\r\n\t\t\t\t\tconst sharedPages =\r\n\t\t\t\t\t\tpageResponse?.data?.shared_pages?.map((sPages) => ({\r\n\t\t\t\t\t\t\t...sPages.details,\r\n\t\t\t\t\t\t\tisShared: true,\r\n\t\t\t\t\t\t\towner: sPages.owner,\r\n\t\t\t\t\t\t\t_id: sPages.id\r\n\t\t\t\t\t\t})) || [];\r\n\r\n\t\t\t\t\tconst uPages = [...pages, ...sharedPages];\r\n\r\n\t\t\t\t\t// Only update state if we're still on the same path\r\n\t\t\t\t\tif (currentPathnameRef.current === currentPath) {\r\n\t\t\t\t\t\tawait Promise.all([\r\n\t\t\t\t\t\t\tsetSchemaFields(fields),\r\n\t\t\t\t\t\t\tsetGeneratedColumns(gColumns),\r\n\t\t\t\t\t\t\tsetPageTemplateId(pageResponse?.data?._id),\r\n\t\t\t\t\t\t\tsetSharedPages(sharedPages),\r\n\t\t\t\t\t\t\tsetPages(uPages || []),\r\n\t\t\t\t\t\t\tsetFormData(formResponse?.data?.form?.[0] || {}),\r\n\t\t\t\t\t\t\tsetActivePageData((prev) => ({\r\n\t\t\t\t\t\t\t\t...prev,\r\n\t\t\t\t\t\t\t\t...(pages?.[0] || {}) // Merge API response with current state\r\n\t\t\t\t\t\t\t}))\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (err) {\r\n\t\t\t\t// Only set error if we're still on the same path\r\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\r\n\t\t\t\t\tsetError('Failed to load page data');\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\t// Only update loading state if we're still on the same path\r\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t\t}, 1000);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t[] // Remove dependencies to prevent stale closures\r\n\t);\r\n\r\n\t// Update page state dynamically\r\n\tconst updatePageInfo = (updates: Partial<PageState>) => {\r\n\t\tsetActivePageData((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\t...updates\r\n\t\t}));\r\n\t\t!isInitialLoad && setIsChanged(true)\r\n\t\tsetIsInitialLoad(false)\r\n\t};\r\n\r\n\t// Update columns state dynamically\r\n\tconst updateGeneratedColumns = (updates: Partial<GeneratedColumnsState>) => {\r\n\t\tsetGeneratedColumns((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\t...updates\r\n\t\t}));\r\n\t};\r\n\r\n\tconst setActivePage = (page: PageState) => {\r\n\t\tconst uPages = pages.map((p) =>\r\n\t\t\tp._id == activePage?._id ? activePage : p\r\n\t\t);\r\n\t\tsetPages(uPages);\r\n\t\tsetActivePageData(page);\r\n\t};\r\n\r\n\tconst savePages = async () => {\r\n\t\tsetError(null);\r\n\t\tsetIsSaving(true);\r\n\t\tawait addOrDeletePage()\r\n\t\tsetTimeout(() => {\r\n\t\t\tsetIsSaving(false);\r\n\t\t}, 1000);\r\n\t};\r\n\tconst fetchSavedFilters = async (): Promise<void> => {\r\n\r\n\t\tawait getV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\r\n\r\n\t};\r\n\r\n\tconst addOrDeletePage = async (restPages?: any[]) => {\r\n\t\ttry {\r\n\t\t\tconst filteredPages = restPages?.length ? restPages : pages.filter((page) => !page.isShared);\r\n\t\t\tconst uPages = filteredPages.map((p) =>\r\n\t\t\t\t(p._id == activePage?._id && activePage.name == p.name) ? activePage : p\r\n\t\t\t);\r\n\t\t\tconst sanitizedPages = removeIdStaticIdsFromMongoObject(uPages);\r\n\r\n\t\t\tconst response = await patchV1PagesPageId({\r\n\t\t\t\t...getToken(),\r\n\t\t\t\t...{ page_id: pageTemplateId, pages: sanitizedPages }\r\n\t\t\t});\r\n\t\t\tif (response.status_code === 200) {\r\n\t\t\t\tconst updatedPages = response?.data?.pages || [];\r\n\t\t\t\tsetPages(updatedPages);\r\n\t\t\t\tfetchSavedFilters();\r\n\t\t\t\tsetActivePageData((prev) => ({\r\n\t\t\t\t\t...prev,\r\n\t\t\t\t\t...(updatedPages.find((p) => p.name == prev.name) || {})\r\n\t\t\t\t}));\r\n\t\t\t\tsetIsChanged(false);\r\n\t\t\t\tsetIsCreatePage(false);\r\n\t\t\t\tsetFormData(response?.data?.form?.[0] || {});\r\n\t\t\t\tconst msg = restPages?.length ? t('pages.msg.delete') : t('pages.msg.save')\r\n\t\t\t\tenqueueSnackbar(msg);\r\n\t\t\t}\r\n\t\t\treturn response\r\n\t\t} catch (err) {\r\n\t\t\tsetError('Failed to save page data');\r\n\t\t}\r\n\t}\r\n\r\n\tconst deletePage = async (pages: string) => {\r\n\t\taddOrDeletePage(pages);\r\n\t}\r\n\r\n\t// Handle pathname changes\r\n\tuseEffect(() => {\r\n\t\t// Update the ref immediately\r\n\t\tcurrentPathnameRef.current = curPathName;\r\n\r\n\t\t// Reset state for new page\r\n\t\tsetLoading(true);\r\n\t\tsetIsSaving(false);\r\n\t\tsetActivePageData(defaultPageState);\r\n\t\tsetIsChanged(false);\r\n\t\tsetIsInitialLoad(true);\r\n\r\n\t\t// Clear previous data to prevent showing stale data\r\n\t\tsetSchemaFields([]);\r\n\t\tsetGeneratedColumns({ columns: [], orderKeys: [] });\r\n\t\tsetPages([]);\r\n\t\tsetSharedPages([]);\r\n\t\tsetPageTemplateId('');\r\n\t\tsetError(null);\r\n\r\n\t\t// Fetch data for new page with current values\r\n\t\tconsole.log('PageContext: useEffect Triggered', { curPathName, defaultColumnsLength: defaultColumns?.length, hasResources: !!resources });\r\n\t\tfetchPageData(curPathName, defaultColumns, resources);\r\n\r\n\t\treturn () => { setLoading(true) }\r\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [curPathName, JSON.stringify(defaultColumns), JSON.stringify(resources)]); // Remove other dependencies to prevent issues\r\n\r\n\r\n\t// Removed loading check to prevent blank page during loading\r\n\tif ((loading || curPathName != currentPathnameRef.current) && resources) {\r\n\t\treturn <ErpLoader />; // Show loader before rendering anything else\r\n\t}\r\n\r\n\tif ((loading || curPathName != currentPathnameRef.current) && resources) {\r\n\t\treturn <ErpLoader />; // Show loader before rendering anything else\r\n\t}\r\n\r\n\treturn (\r\n\t\t<PageContext.Provider\r\n\t\t\tvalue={{\r\n\t\t\t\tpageTemplateId,\r\n\t\t\t\tactivePage,\r\n\t\t\t\tpages,\r\n\t\t\t\tsharedPages,\r\n\t\t\t\tschemaFields,\r\n\t\t\t\tsetPages,\r\n\t\t\t\tupdatePageInfo,\r\n\t\t\t\tsavePages,\r\n\t\t\t\tsetActivePage,\r\n\t\t\t\tisSaving,\r\n\t\t\t\tloading,\r\n\t\t\t\terror,\r\n\t\t\t\tinitializeColumns,\r\n\t\t\t\tgeneratedColumns,\r\n\t\t\t\tupdateGeneratedColumns,\r\n\t\t\t\tisChanged,\r\n\t\t\t\tdeletePage,\r\n\t\t\t\tisCreatePage,\r\n\t\t\t\tsetIsCreatePage,\r\n\t\t\t\taddOrDeletePage,\r\n\t\t\t\tsetIsChanged,\r\n\t\t\t\tformData\r\n\t\t\t}}>\r\n\t\t\t{children}\r\n\t\t</PageContext.Provider>\r\n\t);\r\n};\r\n"],"names":["jsx","field","_a","pages","sharedPages"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-context-qX5XKOOF.js","sources":["../../src/utils/format-permissions.ts","../../src/contexts/permission-context.tsx","../../src/components/loaders/erp-loader.tsx","../../src/contexts/page-context.tsx"],"sourcesContent":["import { formatLabel } from \"./format-text\";\r\n\r\nexport interface HrmsPermissionNode {\r\n canView?: boolean; // r + :nop\r\n canViewById?: boolean; // r + :param (plain)\r\n canAdd?: boolean; // w\r\n canEdit?: boolean; // u / e + :param (plain)\r\n canDelete?: boolean; // d\r\n /**\r\n * Dynamic action map for any compound operation path.\r\n * Key = camelCase of the named segments extracted from the operation.\r\n *\r\n * Examples:\r\n * \":param/status\" → actions.status\r\n * \":param/send\" → actions.send\r\n * \":param/contracts/:param_id\" → actions.contracts\r\n * \":param/documents/:param_id/verify\" → actions.documentsVerify\r\n * \"public/welcome/:param/reject\" → stored on sub-node \"publicWelcome\".actions.reject\r\n * \"public/welcome/:param/accept\" → stored on sub-node \"publicWelcome\".actions.accept\r\n */\r\n actions?: Record<string, boolean>;\r\n [subRoute: string]: HrmsPermissionNode | boolean | Record<string, boolean> | undefined;\r\n}\r\n\r\nexport type HrmsPermissionTree = Record<string, HrmsPermissionNode>;\r\n\r\n// ─── Constants ────────────────────────────────────────────────────────────────\r\n\r\n// Only process entries belonging to this module\r\nconst ALLOWED_MODULES = ['hrms'] as const;\r\n\r\n// Maps BE short keys → FE permission flags for plain CRUD operations.\r\n// Only `:nop` and `:param` (no action suffix) are handled here.\r\n// Compound operations (with named action segments) bypass this map and go to node.actions.\r\nconst HRMS_CRUD_FLAG_MAP: Record<string, Record<':nop' | ':param', keyof HrmsPermissionNode>> = {\r\n r: { ':nop': 'canView', ':param': 'canViewById' },\r\n w: { ':nop': 'canAdd', ':param': 'canAdd' },\r\n u: { ':nop': 'canEdit', ':param': 'canEdit' },\r\n d: { ':nop': 'canDelete', ':param': 'canDelete' },\r\n e: { ':nop': 'canEdit', ':param': 'canEdit' },\r\n};\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\n/** \"active-loans\" → \"activeloans\", \"my-approvals\" → \"myapprovals\" */\r\nfunction toCamelCase(str: string): string {\r\n return str\r\n .replace(/[^a-zA-Z0-9\\s-]/g, ' ')\r\n .split(/[-\\s]+/)\r\n .filter(Boolean)\r\n .join('');\r\n}\r\n\r\n/**\r\n * Joins multiple camelCase parts into a single camelCase string.\r\n * [\"documents\", \"verify\"] → \"documentsVerify\"\r\n * [\"public\", \"welcome\"] → \"publicWelcome\"\r\n */\r\nfunction joinCamelParts(parts: string[]): string {\r\n return parts\r\n .map((p, i) => i === 0 ? p : p.charAt(0).toUpperCase() + p.slice(1))\r\n .join('');\r\n}\r\n\r\n/**\r\n * Checks whether a path segment is a parameter placeholder.\r\n * Matches \":param\", \":id\", \":param_id\", \":nop\", etc.\r\n */\r\nfunction isParamSegment(seg: string): boolean {\r\n return seg.startsWith(':');\r\n}\r\n\r\n// ─── Operation Resolver ───────────────────────────────────────────────────────\r\n\r\ninterface ResolvedOperation {\r\n /**\r\n * camelCase key of the named sub-route (null = write to root node).\r\n * e.g. \"active-loans\" → \"activeloans\"\r\n * \"public/welcome\" → \"publicWelcome\"\r\n */\r\n subRoute: string | null;\r\n\r\n /**\r\n * camelCase key of the specific action within the node (null = plain CRUD).\r\n * Populated when named segments appear *after* a param segment.\r\n * e.g. \":param/status\" → \"status\"\r\n * \":param/documents/:param_id/verify\" → \"documentsVerify\"\r\n * \"public/welcome/:param/reject\" → \"reject\" (sub-route = \"publicWelcome\")\r\n */\r\n action: string | null;\r\n\r\n /**\r\n * Whether a :param placeholder exists anywhere in the operation.\r\n * Determines canView vs canViewById for plain CRUD sub-route access.\r\n */\r\n hasParam: boolean;\r\n}\r\n\r\n/**\r\n * Generic operation parser — no hardcoded action names.\r\n *\r\n * Algorithm:\r\n * 1. Split operation by \"/\".\r\n * 2. Walk segments left-to-right, collecting:\r\n * - \"leading named\" segments (before the first param) → subRoute\r\n * - \"trailing named\" segments (after the first param) → action\r\n * 3. A pure \":nop\" / \":param\" operation has no named segments → plain CRUD.\r\n */\r\nfunction resolveOperation(operation: string): ResolvedOperation {\r\n if (!operation || operation === ':nop') {\r\n return { subRoute: null, action: null, hasParam: false };\r\n }\r\n\r\n const segments = operation.split('/');\r\n const leadingNamed: string[] = []; // named segs before first param\r\n const trailingNamed: string[] = []; // named segs after first param\r\n let passedParam = false;\r\n let hasParam = false;\r\n\r\n for (const seg of segments) {\r\n if (isParamSegment(seg)) {\r\n passedParam = true;\r\n hasParam = true;\r\n } else {\r\n const part = toCamelCase(seg);\r\n if (part) {\r\n if (!passedParam) {\r\n leadingNamed.push(part);\r\n } else {\r\n trailingNamed.push(part);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Pure :param (no named segments at all) → plain CRUD\r\n if (leadingNamed.length === 0 && trailingNamed.length === 0) {\r\n return { subRoute: null, action: null, hasParam };\r\n }\r\n\r\n const subRoute = leadingNamed.length > 0\r\n ? joinCamelParts(leadingNamed)\r\n : null;\r\n\r\n const action = trailingNamed.length > 0\r\n ? joinCamelParts(trailingNamed)\r\n : null;\r\n\r\n return { subRoute, action, hasParam };\r\n}\r\n\r\n// ─── Tree Builder ─────────────────────────────────────────────────────────────\r\n\r\nexport function buildHrmsPermissionTree(raw: Record<string, any>): HrmsPermissionTree {\r\n const tree: HrmsPermissionTree = {};\r\n\r\n for (const [rawModuleKey, crudBlock] of Object.entries(raw)) {\r\n\r\n // ── Step 1: normalise raw key → camelCase module name ──────────────────\r\n // \"loan-allotments\" → \"loanAllotments\"\r\n const formattedModule = formatLabel(\r\n rawModuleKey\r\n .split('/')[0] // strip path suffix e.g. \"/-p\"\r\n .replace(/p$/gi, \"\") // strip trailing p\r\n .replace(/-p-/gi, \"-\") // strip -p- infix\r\n .replace(/-+$/g, \"\") // clean leftover trailing dashes\r\n ).replace(/[^a-zA-Z0-9]/gi, \"\"); // strip non-alphanumeric\r\n\r\n // ── Step 2: split on capital letters ──────────────────────────────────\r\n // \"loanAllotments\" → moduleKey: \"loanAllotments\", moduleSubName: \"\"\r\n // \"loanAllotmentsMy\"→ moduleKey: \"loanAllotments\", moduleSubName: \"My\"\r\n const parts = formattedModule.split(/(?=[A-Z])/);\r\n const moduleKey = parts.slice(0, 2).join(\"\");\r\n const moduleSubName = parts.slice(2).join(\"\");\r\n\r\n if (!tree[moduleKey]) tree[moduleKey] = {};\r\n if (!crudBlock || typeof crudBlock !== 'object') continue;\r\n\r\n for (const [shortKey, entries] of Object.entries(crudBlock)) {\r\n const flagMap = HRMS_CRUD_FLAG_MAP[shortKey];\r\n if (!flagMap) continue;\r\n\r\n const list: any[] = Array.isArray(entries)\r\n ? entries\r\n : [{ ...entries, identity: null }];\r\n\r\n for (const entry of list) {\r\n // ── Filter: only process hrms module entries ────────────────────\r\n const entryModule = entry?.identity?.module;\r\n if (entryModule && !ALLOWED_MODULES.includes(entryModule)) continue;\r\n\r\n const operation = entry?.identity?.operation ?? ':nop';\r\n\r\n // ── Step 3: parse operation generically ────────────────────────\r\n const { subRoute, action, hasParam } = resolveOperation(operation);\r\n\r\n // ── Step 4: resolve target node ────────────────────────────────\r\n let targetNode: HrmsPermissionNode;\r\n\r\n if (moduleSubName) {\r\n if (!(tree[moduleKey] as any)[moduleSubName]) {\r\n (tree[moduleKey] as any)[moduleSubName] = {} as HrmsPermissionNode;\r\n }\r\n const subNameNode = (tree[moduleKey] as any)[moduleSubName] as any;\r\n\r\n // ── FIX: if operation also has a subRoute, nest inside moduleSubName ──\r\n if (subRoute) {\r\n const subKey = subRoute.charAt(0).toLowerCase() + subRoute.slice(1);\r\n if (!subNameNode[subKey]) subNameNode[subKey] = {} as HrmsPermissionNode;\r\n targetNode = subNameNode[subKey] as HrmsPermissionNode;\r\n } else {\r\n targetNode = subNameNode;\r\n }\r\n\r\n } else if (subRoute) {\r\n const subKey = subRoute.charAt(0).toLowerCase() + subRoute.slice(1);\r\n if (!(tree[moduleKey] as any)[subKey]) {\r\n (tree[moduleKey] as any)[subKey] = {} as HrmsPermissionNode;\r\n }\r\n targetNode = (tree[moduleKey] as any)[subKey] as HrmsPermissionNode;\r\n\r\n } else {\r\n targetNode = tree[moduleKey];\r\n }\r\n\r\n // ── Step 5: write permission into target node ───────────────────\r\n if (action) {\r\n // Compound operation with a named action suffix → generic actions map.\r\n // No flag enumeration needed — the action name IS the key.\r\n // e.g. \":param/status\" → node.actions.status\r\n // e.g. \":param/documents/:param_id/verify\" → node.actions.documentsVerify\r\n // e.g. \"public/welcome/:param/reject\" → subNode.actions.reject\r\n if (!targetNode.actions) targetNode.actions = {};\r\n targetNode.actions[action] = true;\r\n\r\n } else {\r\n // Plain CRUD operation → map to well-known flag\r\n const opKey: ':nop' | ':param' = hasParam ? ':param' : ':nop';\r\n const flag = flagMap[opKey];\r\n if (!flag) continue;\r\n targetNode[flag] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tree;\r\n}\r\n","/* eslint-disable react-refresh/only-export-components */\r\nimport React, { createContext, useMemo, ReactNode } from \"react\";\r\nimport { formatLabel } from \"../utils/format-text\";\r\nimport { useAppSelector } from \"../redux/hooks\";\r\nimport { buildHrmsPermissionTree } from \"../utils/format-permissions\";\r\n\r\n// Define the types for permissions\r\ntype PermissionActions = \"canEdit\" | \"canView\" | \"canAdd\" | \"canDelete\" | \"canAddForOthers\";\r\ntype SubModulePermissions = Partial<Record<PermissionActions, boolean>>;\r\ntype ModulePermissions = SubModulePermissions & Record<string, SubModulePermissions>;\r\n\r\nexport interface PermissionsContextType {\r\n [module: string]: ModulePermissions;\r\n}\r\n\r\ninterface PermissionsProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\n// Create a context with a default value\r\nexport const PermissionsContext = createContext<PermissionsContextType | null>(null);\r\n\r\nexport const PermissionsProvider: React.FC<PermissionsProviderProps> = ({ children }) => {\r\n const { setIsPermissionLoaded = false } = useAppSelector(\r\n (store) => store.roles ?? {}\r\n );\r\n\r\n const storagePermission = useMemo(() => {\r\n return localStorage.getItem(\"role-permission\")\r\n }, [localStorage.getItem(\"role-permission\")])\r\n\r\n const permissions: Record<string, any> = useMemo(() => {\r\n const rawValue = storagePermission;\r\n\r\n if (!rawValue) {\r\n return {};\r\n }\r\n\r\n try {\r\n return JSON.parse(rawValue);\r\n } catch (error) {\r\n console.warn(\r\n \"[PermissionsProvider] Failed to parse stored permissions. Clearing corrupted value.\",\r\n error\r\n );\r\n localStorage.removeItem(\"role-permission\");\r\n return {};\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [setIsPermissionLoaded, storagePermission]);\r\n const computedPermissionsOld = useMemo(() => {\r\n const checkPermission = (module: string, action: string): boolean =>\r\n Boolean(permissions?.[module]?.[action]);\r\n\r\n const dynamicPermissions: PermissionsContextType = {};\r\n\r\n Object.keys(permissions)\r\n // .filter((key) => key.startsWith(\"rental-\"))\r\n .forEach((module) => {\r\n const formattedModule = formatLabel(\r\n module.replace(/p$/gi, \"\").replace(/-p-/gi, \"-\")\r\n ).replace(/[^a-zA-Z0-9]/gi, \"\");\r\n\r\n // Extract the main module name (e.g., \"RentalQuotations\")\r\n const [baseModule, subModule, ...subModuleParts] = formattedModule.split(/(?=[A-Z])/);\r\n const subModuleName = subModuleParts.join(\"\");\r\n const bModule = baseModule + (subModule || \"\")\r\n\r\n if (!dynamicPermissions[bModule]) {\r\n dynamicPermissions[bModule] = {};\r\n }\r\n\r\n const actionMap: Record<string, PermissionActions> = {\r\n u: \"canEdit\",\r\n e: \"canEdit\",\r\n r: \"canView\",\r\n w: \"canAdd\",\r\n d: \"canDelete\",\r\n wo: \"canAddForOthers\"\r\n };\r\n\r\n Object.entries(actionMap).forEach(([key, actionName]) => {\r\n if (subModuleName) {\r\n // Store sub-module actions separately\r\n if (!dynamicPermissions[bModule][subModuleName]) {\r\n dynamicPermissions[bModule][subModuleName] = {};\r\n }\r\n const currentValue = (dynamicPermissions[bModule][subModuleName] as SubModulePermissions)[actionName] || false;\r\n (dynamicPermissions[bModule][subModuleName] as SubModulePermissions)[actionName] = currentValue || checkPermission(module, key);\r\n } else {\r\n // Store main module actions\r\n const currentValue = (dynamicPermissions[bModule] as SubModulePermissions)[actionName] || false;\r\n (dynamicPermissions[bModule] as SubModulePermissions)[actionName] = currentValue || checkPermission(module, key);\r\n }\r\n });\r\n });\r\n\r\n\r\n return dynamicPermissions;\r\n }, [permissions]);\r\n \r\n const computedPermissions = useMemo(() => {\r\n return buildHrmsPermissionTree(permissions);\r\n }, [permissions]);\r\n\r\n return (\r\n <PermissionsContext.Provider value={computedPermissions}>\r\n {children}\r\n </PermissionsContext.Provider>\r\n );\r\n};\r\n","import React from \"react\"\r\nimport { Box, CircularProgress, CircularProgressProps } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\n\r\nconst Loader = styled(CircularProgress)(({theme})=>({\r\n color: theme.palette?.theme?.primary[500]||\"#1976d2\"\r\n}))\r\n\r\nconst ErpLoader = (props:CircularProgressProps) => {\r\n\treturn <Box position=\"fixed\" left='50%' top=\"50%\">\r\n <Loader size={50} {...props}/>\r\n </Box>\r\n};\r\n\r\nexport { ErpLoader };\r\nexport default ErpLoader;\r\n","/* eslint-disable react-refresh/only-export-components */\r\n/* eslint-disable no-mixed-spaces-and-tabs */\r\n\r\nimport React, { createContext, useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\nimport {\r\n\tgetV1FilterResource,\r\n\tgetV1FormBuilder,\r\n\tgetV1FormBuilderSchemaFieldsName,\r\n\tgetV1PagesResource,\r\n\tpatchV1PagesPageId\r\n} from '../api-client/api.system-feature/api';\r\nimport { IResources, routeToColumnsMap, routeToResourceMap } from '../constants/route-page-map'; // Removed - should be passed as props or configured by consuming app\r\nimport { getToken } from '../utils/common';\r\nimport { removeIdStaticIdsFromMongoObject } from '../utils/common';\r\nimport { RuleGroupType } from 'react-querybuilder';\r\nimport { MaterialTableColumnProps } from '../components/material-table/material-table';\r\nimport _ from 'lodash';\r\nimport { formatLabel } from '../utils/format-text';\r\nimport ErpLoader from '../components/loaders/erp-loader';\r\nimport { enqueueSnackbar } from 'notistack';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useAuth } from '../hooks/useAuth';\r\n// import { usePermissions } from '../hooks/use-permissions';\r\n\r\n/* Interfaces and types */\r\nexport type ViewType = 'Table' | 'Grid' | 'Kanban' | 'Calendar' | 'Gantt' | '';\r\n\r\ninterface SchemaFields {\r\n\tselect: string;\r\n\talias: string;\r\n\ttype: string;\r\n\tfilter_type?: string;\r\n\tfilter_name?: string;\r\n\trequired?: boolean;\r\n\tisOrderAllowed?: boolean;\r\n\tisDefault?: boolean;\r\n\tisFilterAllowed?: boolean;\r\n\tlabel?: string;\r\n\tkey: string;\r\n\taccessorKey?: string;\r\n\tjoinKey?: string;\r\n\tenum?: string | string[];\r\n}\r\nexport interface SavedViewType {\r\n\tlabel: ViewType;\r\n\tposition: number;\r\n}\r\nexport interface PageState {\r\n\t_id: string | number;\r\n\tname: string;\r\n\tpage_size: number;\r\n\tcolumn_order: string[];\r\n\tvisible_columns: MaterialTableColumnProps[];\r\n\tviews: SavedViewType[];\r\n\tactive_view: ViewType;\r\n\tfilters: RuleGroupType;\r\n\tfilterQueryString: string;\r\n\tsort: Record<any, any> | null;\r\n\tsearch: string;\r\n\tenabled_views: ViewType[];\r\n\tisShared: boolean;\r\n\tcolumn_sizes: Record<string, number>;\r\n}\r\n\r\nexport interface GeneratedColumnsState {\r\n\tcolumns: MaterialTableColumnProps[];\r\n\torderKeys: string[];\r\n}\r\n\r\nexport const initialFilter: RuleGroupType = { combinator: 'and', rules: [] };\r\n\r\ninterface PageContextValue {\r\n\tpageTemplateId: string;\r\n\tactivePage: PageState;\r\n\tupdatePageInfo: (updates: Partial<PageState>) => void;\r\n\tloading: boolean;\r\n\tisSaving: boolean;\r\n\terror: string | null;\r\n\tpages: any[];\r\n\tsavePages: () => void;\r\n\tsetActivePage: (data: any) => void;\r\n\tsetPages: React.Dispatch<any>;\r\n\tschemaFields: SchemaFields[];\r\n\tinitializeColumns: (columns: MaterialTableColumnProps[]) => void;\r\n\tgeneratedColumns: GeneratedColumnsState;\r\n\tsharedPages: any[];\r\n\tupdateGeneratedColumns: (updates: Partial<GeneratedColumnsState>) => void;\r\n\tformData: Record<string, any>\r\n\tsetFormData: (data: Record<string, any>) => void\r\n}\r\n\r\nexport const defaultPageState: PageState = {\r\n\t_id: '',\r\n\tname: '',\r\n\tpage_size: 10,\r\n\tcolumn_order: ['id'],\r\n\tvisible_columns: [],\r\n\tviews: [],\r\n\tactive_view: '',\r\n\tfilters: initialFilter,\r\n\tfilterQueryString: '',\r\n\tsort: null,\r\n\tsearch: '',\r\n\tenabled_views: ['Table', 'Grid', 'Kanban', 'Calendar', 'Gantt'],\r\n\tisShared: false,\r\n\tcolumn_sizes: {}\r\n};\r\ninterface PageProviderProps {\r\n\tchildren: React.ReactNode;\r\n\trouteToColumnsMap?: Record<string, any>;\r\n\trouteToResourceMap?: Record<string, any>;\r\n}\r\n\r\nconst UpdatePageInfo = () => { };\r\nconst UpdateGeneratedColumns = () => { };\r\n\r\nexport const PageContext = createContext<PageContextValue>({\r\n\tpageTemplateId: '',\r\n\tactivePage: defaultPageState,\r\n\tupdatePageInfo: UpdatePageInfo,\r\n\tloading: false,\r\n\tisSaving: false,\r\n\terror: null,\r\n\tpages: [],\r\n\tsharedPages: [],\r\n\tsavePages: () => { },\r\n\tsetActivePage: () => { },\r\n\tsetPages: () => { },\r\n\tschemaFields: [],\r\n\tinitializeColumns: () => { },\r\n\tgeneratedColumns: { columns: [], orderKeys: [] },\r\n\tupdateGeneratedColumns: UpdateGeneratedColumns,\r\n});\r\n\r\nfunction mergeArraysKeepingOrder(array1: string[], array2: string[]): string[] {\r\n\t// Create a Set from the first array for efficient lookups\r\n\tconst array1Set = new Set(array1);\r\n\r\n\t// Filter the second array to find elements not in the first array\r\n\tconst elementsToAdd = array2.filter((item) => !array1Set.has(item));\r\n\r\n\t// Combine the original first array with the new elements\r\n\treturn [...array1, ...elementsToAdd];\r\n}\r\n\r\nconst generateColumnSchema = (\r\n\tdefaultColumns: MaterialTableColumnProps[],\r\n\tschemaFields: SchemaFields[],\r\n\tcolumnOrders: string[],\r\n\tdColumns?: any[],\r\n\tt?: any\r\n): { columns: MaterialTableColumnProps[]; orderKeys: string[] } => {\r\n\ttry {\r\n\t\t// if (dColumns && dColumns?.length) {\r\n\t\t// \tdefaultColumns = defaultColumns.map((column) => {\r\n\t\t// \t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\r\n\t\t// \t\treturn f || column\r\n\t\t// \t})\r\n\t\t// }\r\n\t\tif (dColumns && dColumns?.length) {\r\n\t\t\tdefaultColumns = defaultColumns.map((column) => {\r\n\t\t\t\tconst f = dColumns.find((c) => c.accessorKey == column.accessorKey);\r\n\t\t\t\tconst merged = f ? { ...column, ...f } : column;\r\n\t\t\t\treturn merged\r\n\t\t\t})\r\n\t\t}\r\n\t\tlet orderKeys = columnOrders.length\r\n\t\t\t? columnOrders\r\n\t\t\t: (defaultColumns.map((column) => column.accessorKey) as string[]);\r\n\t\tconst getAccesorKeyViaField = (field: SchemaFields) =>\r\n\t\t\t(field.type === 'object' || field?.join) ? `${field.alias}.${field.accessorKey}` : field.key;\r\n\r\n\t\t// Clean up schema fields by removing \"__replaceKey\" from the keys\r\n\t\tconst updatedFields = schemaFields.map((field) => ({\r\n\t\t\t...field,\r\n\t\t\tkey: field.key.replace('__replaceKey', '')\r\n\t\t})).filter((field) => !field.is_inner_join);\r\n\r\n\t\tconst uniqueFields = _.differenceWith(\r\n\t\t\tupdatedFields,\r\n\t\t\tupdatedFields,\r\n\t\t\t(fieldA, fieldB) => fieldA.key === fieldB?.joinKey\r\n\t\t);\r\n\r\n\t\t// Find fields in schemaFields but not in defaultColumns based on accessorKey\r\n\t\tconst unmatchedFields = _.differenceWith(\r\n\t\t\tuniqueFields,\r\n\t\t\tdefaultColumns,\r\n\t\t\t(field, column) => getAccesorKeyViaField(field) === column.accessorKey\r\n\t\t);\r\n\r\n\t\t// Map unique fields to MaterialTableColumn structure\r\n\t\tconst additionalColumns: MaterialTableColumnProps[] = unmatchedFields.map(\r\n\t\t\t(field) => ({\r\n\t\t\t\theader: t ? formatLabel(t(field?.label)?.replace('_data', '') || '') : formatLabel(field?.label?.replace('_data', '') || ''),\r\n\t\t\t\taccessorKey: getAccesorKeyViaField(field),\r\n\t\t\t\tvisible: false,\r\n\t\t\t\ttype: field?.enum ? 'status' : field.type,\r\n\t\t\t\t...(field.type === 'array' && { typeArrayAccessorKey: field.accessorKey || '' }),\r\n\t\t\t\tenableSorting: (field.type === 'array' || field.type === 'object' || field?.join) ? false : true,\r\n\t\t\t\t...(field?.type === 'boolean' ? {\r\n\t\t\t\t\ttypeBooleanLabels: field?.values?.length ? _.mapValues(_.keyBy(\r\n\t\t\t\t\t\tfield?.values.map(item => ({\r\n\t\t\t\t\t\t\tkey: item.name,\r\n\t\t\t\t\t\t\tvalue: item.label\r\n\t\t\t\t\t\t})),\r\n\t\t\t\t\t\t'key'\r\n\t\t\t\t\t), 'value') : { 0: \"Inactive\", 1: \"Active\", false: \"Inactive\", true: \"Active\" }\r\n\t\t\t\t} : {})\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tconst updatedDefaultColumns = defaultColumns?.map((column) => {\r\n\t\t\tconst field = schemaFields.find((field) => getAccesorKeyViaField(field) === column.accessorKey);\r\n\t\t\treturn {\r\n\t\t\t\t...column,\r\n\t\t\t\t...((field?.type === 'object' || field?.joinKey || column.enableSorting === false) ? { enableSorting: false } : {})\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t// Combine default columns and additional columns\r\n\t\tconst columns = [...updatedDefaultColumns, ...additionalColumns];\r\n\r\n\t\t// Generate an array of column keys for ordering\r\n\t\tconst nOrderKeys = columns.map((column) => column.accessorKey) as string[];\r\n\r\n\t\torderKeys = mergeArraysKeepingOrder(orderKeys, nOrderKeys);\r\n\r\n\t\treturn { columns, orderKeys };\r\n\t} catch (error) {\r\n\t\treturn {\r\n\t\t\tcolumns: defaultColumns,\r\n\t\t\torderKeys: defaultColumns.map((column) => column.accessorKey) as string[]\r\n\t\t};\r\n\t}\r\n};\r\n\r\nexport const PageProvider: React.FC<PageProviderProps> = ({ children, routeToColumnsMap: customRouteToColumnsMap, routeToResourceMap: customRouteToResourceMap }) => {\r\n\tconsole.log(\"🚀 ~ PageProvider ~ customRouteToResourceMap:\", customRouteToResourceMap)\r\n\tconsole.log(\"🚀 ~ PageProvider ~ customRouteToColumnsMap:\", customRouteToColumnsMap)\r\n\tconst location = useLocation();\r\n\tconst [activePage, setActivePageData] = useState<PageState>(defaultPageState);\r\n\t// const permissions=usePermissions();\r\n\tconst [schemaFields, setSchemaFields] = useState<SchemaFields[]>([]);\r\n\tconst [loading, setLoading] = useState<boolean>(true);\r\n\tconst [isSaving, setIsSaving] = useState<boolean>(false);\r\n\tconst [error, setError] = useState<string | null>(null);\r\n\tconst [pages, setPages] = useState<any>([]);\r\n\tconst [sharedPages, setSharedPages] = useState<any>([]);\r\n\tconst [isChanged, setIsChanged] = useState<boolean>(false);\r\n\tconst [pageTemplateId, setPageTemplateId] = useState<string>('');\r\n\tconst [isInitialLoad, setIsInitialLoad] = useState<boolean>(true);\r\n\tconst [isCreatePage, setIsCreatePage] = useState<boolean>(false);\r\n\tconst [formData, setFormData] = useState<any>({});\r\n\tconst [generatedColumns, setGeneratedColumns] = useState<{\r\n\t\tcolumns: MaterialTableColumnProps[];\r\n\t\torderKeys: string[];\r\n\t}>({ columns: [], orderKeys: [] });\r\n\tconst { user } = useAuth()\r\n\t// Add ref to track current pathname for race condition prevention\r\n\tconst currentPathnameRef = useRef<string>(location.pathname);\r\n\tconst curPathName = useMemo(() => location.pathname, [location.pathname])\r\n\r\n\t// Get current page's default columns and resources\r\n\tconst defaultColumns: any[] = useMemo(() => {\r\n\t\tconst columns = (customRouteToColumnsMap?.[curPathName] || routeToColumnsMap[curPathName])?.defaultColumns || [];\r\n\t\treturn columns;\r\n\t}, [curPathName, customRouteToColumnsMap]);\r\n\r\n\tconst resources: IResources = useMemo(() => {\r\n\t\tconst resource = customRouteToResourceMap?.[curPathName] || routeToResourceMap[curPathName] || null;\r\n\t\treturn resource;\r\n\t}, [curPathName, customRouteToResourceMap]);\r\n\r\n\t//Translation\r\n\tconst { t } = useTranslation()\r\n\r\n\t// eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\r\n\tconst initializeColumns = (columns: MaterialTableColumnProps[]) => {\r\n\t\t//! Remove the function if not needed\r\n\t};\r\n\r\n\t// Fetch page-related information from API\r\n\tconst fetchPageData = useCallback(\r\n\t\tasync (currentPath: string, currentDefaultColumns: any[], currentResources: IResources) => {\r\n\t\t\tconsole.log('PageContext: Entering fetchPageData', { currentPath, currentDefaultColumnsLength: currentDefaultColumns?.length, hasResources: !!currentResources });\r\n\r\n\t\t\t// Check if this request is still valid (pathname hasn't changed)\r\n\t\t\tif (currentPathnameRef.current !== currentPath) {\r\n\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed', { ref: currentPathnameRef.current, current: currentPath });\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tsetLoading(true);\r\n\t\t\tsetError(null);\r\n\r\n\t\t\ttry {\r\n\t\t\t\tconsole.log('PageContext: Resources Check:', { currentDefaultColumns, currentResources });\r\n\t\t\t\tif (currentDefaultColumns.length && currentResources) {\r\n\t\t\t\t\tconst { pageResource = '', fieldResource = '', formResource = '' } = currentResources;\r\n\r\n\t\t\t\t\tconsole.log('PageContext: Pathname:', currentPath);\r\n\t\t\t\t\tconsole.log('PageContext: Default Columns:', currentDefaultColumns);\r\n\t\t\t\t\tconsole.log('PageContext: Resources:', currentResources);\r\n\r\n\t\t\t\t\t// Double-check pathname hasn't changed before making API calls\r\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst [pageResponse, fieldResponse, formResponse] = await Promise.all([\r\n\t\t\t\t\t\tpageResource ? getV1PagesResource({ ...getToken(), resource: pageResource }) : Promise.resolve(null),\r\n\r\n\t\t\t\t\t\tgetV1FormBuilderSchemaFieldsName({\r\n\t\t\t\t\t\t\tname: fieldResource,\r\n\t\t\t\t\t\t\t...getToken(),\r\n\t\t\t\t\t\t\tskip: 0,\r\n\t\t\t\t\t\t\tlimit: 999\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tgetV1FormBuilder({\r\n\t\t\t\t\t\t\t...getToken(),\r\n\t\t\t\t\t\t\tfilters: `(resource.eq=${formResource}&company_id.eq=${user?.company_id})`,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t]);\r\n\r\n\t\t\t\t\tconsole.log('PageContext: API Responses:', { pageResponse, fieldResponse, formResponse });\r\n\r\n\t\t\t\t\t// Final check - ensure pathname still matches\r\n\t\t\t\t\tif (currentPathnameRef.current !== currentPath) {\r\n\t\t\t\t\t\tconsole.log('Aborting fetchPageData - pathname changed after API call');\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst fields = fieldResponse?.data?.fields?.map(f => ({ ...f, label: !f?.label?.trim() ? formatLabel(f.key) : f.label }));\r\n\r\n\t\t\t\t\tconst gColumns = generateColumnSchema(currentDefaultColumns, fields, [], [], t);\r\n\t\t\t\t\tconsole.log('PageContext: Generated Columns:', gColumns);\r\n\r\n\t\t\t\t\tconst pages =\r\n\t\t\t\t\t\tpageResponse?.data?.pages?.map((p) => ({\r\n\t\t\t\t\t\t\t...defaultPageState,\r\n\t\t\t\t\t\t\t...p,\r\n\t\t\t\t\t\t\tvisible_columns: generateColumnSchema(\r\n\t\t\t\t\t\t\t\tp.visible_columns?.length ? p.visible_columns : currentDefaultColumns,\r\n\t\t\t\t\t\t\t\tfields,\r\n\t\t\t\t\t\t\t\tp.column_order || [],\r\n\t\t\t\t\t\t\t\tcurrentDefaultColumns,\r\n\t\t\t\t\t\t\t\tt\r\n\t\t\t\t\t\t\t).columns,\r\n\t\t\t\t\t\t\tcolumn_order: mergeArraysKeepingOrder(\r\n\t\t\t\t\t\t\t\tp.column_order || [],\r\n\t\t\t\t\t\t\t\t_.uniq(gColumns.orderKeys)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})) || [];\r\n\t\t\t\t\tconst sharedPages =\r\n\t\t\t\t\t\tpageResponse?.data?.shared_pages?.map((sPages) => ({\r\n\t\t\t\t\t\t\t...sPages.details,\r\n\t\t\t\t\t\t\tisShared: true,\r\n\t\t\t\t\t\t\towner: sPages.owner,\r\n\t\t\t\t\t\t\t_id: sPages.id\r\n\t\t\t\t\t\t})) || [];\r\n\r\n\t\t\t\t\tconst uPages = [...pages, ...sharedPages];\r\n\r\n\t\t\t\t\t// Only update state if we're still on the same path\r\n\t\t\t\t\tif (currentPathnameRef.current === currentPath) {\r\n\t\t\t\t\t\tawait Promise.all([\r\n\t\t\t\t\t\t\tsetSchemaFields(fields),\r\n\t\t\t\t\t\t\tsetGeneratedColumns(gColumns),\r\n\t\t\t\t\t\t\tsetPageTemplateId(pageResponse?.data?._id),\r\n\t\t\t\t\t\t\tsetSharedPages(sharedPages),\r\n\t\t\t\t\t\t\tsetPages(uPages || []),\r\n\t\t\t\t\t\t\tsetFormData(formResponse?.data?.form?.[0] || {}),\r\n\t\t\t\t\t\t\tsetActivePageData((prev) => ({\r\n\t\t\t\t\t\t\t\t...prev,\r\n\t\t\t\t\t\t\t\t...(pages?.[0] || {}) // Merge API response with current state\r\n\t\t\t\t\t\t\t}))\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (err) {\r\n\t\t\t\t// Only set error if we're still on the same path\r\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\r\n\t\t\t\t\tsetError('Failed to load page data');\r\n\t\t\t\t}\r\n\t\t\t} finally {\r\n\t\t\t\t// Only update loading state if we're still on the same path\r\n\t\t\t\tif (currentPathnameRef.current === currentPath) {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tsetLoading(false);\r\n\t\t\t\t\t}, 1000);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t\t[] // Remove dependencies to prevent stale closures\r\n\t);\r\n\r\n\t// Update page state dynamically\r\n\tconst updatePageInfo = (updates: Partial<PageState>) => {\r\n\t\tsetActivePageData((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\t...updates\r\n\t\t}));\r\n\t\t!isInitialLoad && setIsChanged(true)\r\n\t\tsetIsInitialLoad(false)\r\n\t};\r\n\r\n\t// Update columns state dynamically\r\n\tconst updateGeneratedColumns = (updates: Partial<GeneratedColumnsState>) => {\r\n\t\tsetGeneratedColumns((prev) => ({\r\n\t\t\t...prev,\r\n\t\t\t...updates\r\n\t\t}));\r\n\t};\r\n\r\n\tconst setActivePage = (page: PageState) => {\r\n\t\tconst uPages = pages.map((p) =>\r\n\t\t\tp._id == activePage?._id ? activePage : p\r\n\t\t);\r\n\t\tsetPages(uPages);\r\n\t\tsetActivePageData(page);\r\n\t};\r\n\r\n\tconst savePages = async () => {\r\n\t\tsetError(null);\r\n\t\tsetIsSaving(true);\r\n\t\tawait addOrDeletePage()\r\n\t\tsetTimeout(() => {\r\n\t\t\tsetIsSaving(false);\r\n\t\t}, 1000);\r\n\t};\r\n\tconst fetchSavedFilters = async (): Promise<void> => {\r\n\r\n\t\tawait getV1FilterResource({ ...getToken(), resource: resources?.pageResource || resources?.fieldResource })\r\n\r\n\t};\r\n\r\n\tconst addOrDeletePage = async (restPages?: any[]) => {\r\n\t\ttry {\r\n\t\t\tconst filteredPages = restPages?.length ? restPages : pages.filter((page) => !page.isShared);\r\n\t\t\tconst uPages = filteredPages.map((p) =>\r\n\t\t\t\t(p._id == activePage?._id && activePage.name == p.name) ? activePage : p\r\n\t\t\t);\r\n\t\t\tconst sanitizedPages = removeIdStaticIdsFromMongoObject(uPages);\r\n\r\n\t\t\tconst response = await patchV1PagesPageId({\r\n\t\t\t\t...getToken(),\r\n\t\t\t\t...{ page_id: pageTemplateId, pages: sanitizedPages }\r\n\t\t\t});\r\n\t\t\tif (response.status_code === 200) {\r\n\t\t\t\tconst updatedPages = response?.data?.pages || [];\r\n\t\t\t\tsetPages(updatedPages);\r\n\t\t\t\tfetchSavedFilters();\r\n\t\t\t\tsetActivePageData((prev) => ({\r\n\t\t\t\t\t...prev,\r\n\t\t\t\t\t...(updatedPages.find((p) => p.name == prev.name) || {})\r\n\t\t\t\t}));\r\n\t\t\t\tsetIsChanged(false);\r\n\t\t\t\tsetIsCreatePage(false);\r\n\t\t\t\tsetFormData(response?.data?.form?.[0] || {});\r\n\t\t\t\tconst msg = restPages?.length ? t('pages.msg.delete') : t('pages.msg.save')\r\n\t\t\t\tenqueueSnackbar(msg);\r\n\t\t\t}\r\n\t\t\treturn response\r\n\t\t} catch (err) {\r\n\t\t\tsetError('Failed to save page data');\r\n\t\t}\r\n\t}\r\n\r\n\tconst deletePage = async (pages: string) => {\r\n\t\taddOrDeletePage(pages);\r\n\t}\r\n\r\n\t// Handle pathname changes\r\n\tuseEffect(() => {\r\n\t\t// Update the ref immediately\r\n\t\tcurrentPathnameRef.current = curPathName;\r\n\r\n\t\t// Reset state for new page\r\n\t\tsetLoading(true);\r\n\t\tsetIsSaving(false);\r\n\t\tsetActivePageData(defaultPageState);\r\n\t\tsetIsChanged(false);\r\n\t\tsetIsInitialLoad(true);\r\n\r\n\t\t// Clear previous data to prevent showing stale data\r\n\t\tsetSchemaFields([]);\r\n\t\tsetGeneratedColumns({ columns: [], orderKeys: [] });\r\n\t\tsetPages([]);\r\n\t\tsetSharedPages([]);\r\n\t\tsetPageTemplateId('');\r\n\t\tsetError(null);\r\n\r\n\t\t// Fetch data for new page with current values\r\n\t\tconsole.log('PageContext: useEffect Triggered', { curPathName, defaultColumnsLength: defaultColumns?.length, hasResources: !!resources });\r\n\t\tfetchPageData(curPathName, defaultColumns, resources);\r\n\r\n\t\treturn () => { setLoading(true) }\r\n\t\t//eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [curPathName, JSON.stringify(defaultColumns), JSON.stringify(resources)]); // Remove other dependencies to prevent issues\r\n\r\n\r\n\t// Removed loading check to prevent blank page during loading\r\n\tif ((loading || curPathName != currentPathnameRef.current) && resources) {\r\n\t\treturn <ErpLoader />; // Show loader before rendering anything else\r\n\t}\r\n\r\n\tif ((loading || curPathName != currentPathnameRef.current) && resources) {\r\n\t\treturn <ErpLoader />; // Show loader before rendering anything else\r\n\t}\r\n\r\n\treturn (\r\n\t\t<PageContext.Provider\r\n\t\t\tvalue={{\r\n\t\t\t\tpageTemplateId,\r\n\t\t\t\tactivePage,\r\n\t\t\t\tpages,\r\n\t\t\t\tsharedPages,\r\n\t\t\t\tschemaFields,\r\n\t\t\t\tsetPages,\r\n\t\t\t\tupdatePageInfo,\r\n\t\t\t\tsavePages,\r\n\t\t\t\tsetActivePage,\r\n\t\t\t\tisSaving,\r\n\t\t\t\tloading,\r\n\t\t\t\terror,\r\n\t\t\t\tinitializeColumns,\r\n\t\t\t\tgeneratedColumns,\r\n\t\t\t\tupdateGeneratedColumns,\r\n\t\t\t\tisChanged,\r\n\t\t\t\tdeletePage,\r\n\t\t\t\tisCreatePage,\r\n\t\t\t\tsetIsCreatePage,\r\n\t\t\t\taddOrDeletePage,\r\n\t\t\t\tsetIsChanged,\r\n\t\t\t\tformData\r\n\t\t\t}}>\r\n\t\t\t{children}\r\n\t\t</PageContext.Provider>\r\n\t);\r\n};\r\n"],"names":["formatLabel","createContext","useAppSelector","useMemo","module","styled","CircularProgress","jsx","Box","field","useLocation","useState","useAuth","useRef","routeToColumnsMap","routeToResourceMap","useTranslation","useCallback","getV1PagesResource","getToken","getV1FormBuilderSchemaFieldsName","getV1FormBuilder","_a","pages","sharedPages","getV1FilterResource","removeIdStaticIdsFromMongoObject","patchV1PagesPageId","enqueueSnackbar","useEffect"],"mappings":"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"}
|