@mesob/auth-react 0.5.0 → 0.5.2
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/{chunk-5E3XN6SW.js → chunk-22WQJ3NP.js} +4 -4
- package/dist/{chunk-ECF6S2Y2.js → chunk-24E7XFGP.js} +2 -2
- package/dist/{chunk-AWSAC7RT.js → chunk-2XIZ27DU.js} +4 -1
- package/dist/{chunk-AWSAC7RT.js.map → chunk-2XIZ27DU.js.map} +1 -1
- package/dist/{chunk-DG6GRTPG.js → chunk-4CUQIZ2Q.js} +2 -2
- package/dist/{chunk-5BFG47VF.js → chunk-55WFD2Y2.js} +4 -4
- package/dist/{chunk-GVEBIL3O.js → chunk-6L4K26KM.js} +2 -2
- package/dist/{chunk-MWMSZVH3.js → chunk-BIP5XEDV.js} +4 -4
- package/dist/{chunk-YFQNNSSC.js → chunk-C34HWZA5.js} +2 -2
- package/dist/{chunk-T34HJRUW.js → chunk-CDX5V66G.js} +3 -3
- package/dist/{chunk-V6ZHX4LT.js → chunk-DJWX4ENN.js} +2 -2
- package/dist/chunk-G2XRGSQE.js +22 -0
- package/dist/chunk-G2XRGSQE.js.map +1 -0
- package/dist/{chunk-6THPM5LB.js → chunk-GXWBGB6G.js} +4 -4
- package/dist/{chunk-6IEX2RLA.js → chunk-HVAYVDIM.js} +3 -3
- package/dist/{chunk-5HAABEAS.js → chunk-J4Q7RYYY.js} +2 -2
- package/dist/{chunk-OXUOGOG3.js → chunk-JNVJWNJT.js} +87 -20
- package/dist/chunk-JNVJWNJT.js.map +1 -0
- package/dist/{chunk-RMJNENJB.js → chunk-K2523VB5.js} +2 -2
- package/dist/{chunk-5AEV7RAN.js → chunk-KWL6FBP7.js} +3 -3
- package/dist/{chunk-IQNQGPIT.js → chunk-LJIZEECR.js} +4 -4
- package/dist/{chunk-SGDXNT7M.js → chunk-LQX2365R.js} +3 -3
- package/dist/{chunk-MVVAPYUD.js → chunk-NLK2J4UG.js} +2 -2
- package/dist/{chunk-ZZ6D4KE4.js → chunk-NUCDZRXS.js} +2 -2
- package/dist/{chunk-EQWOGD4F.js → chunk-OPSVSBOB.js} +2 -2
- package/dist/{chunk-5SDS2E3F.js → chunk-PCBJBXEK.js} +2 -2
- package/dist/{chunk-VVKXFEAN.js → chunk-PFUTYTDB.js} +4 -4
- package/dist/{chunk-WY2JJNZW.js → chunk-QHHVGLHT.js} +2 -2
- package/dist/{chunk-W3D4HG5W.js → chunk-QJOBPOTR.js} +3 -3
- package/dist/{chunk-MQI6Q2S4.js → chunk-R6ME7P5U.js} +147 -4
- package/dist/chunk-R6ME7P5U.js.map +1 -0
- package/dist/{chunk-N4JFMKGK.js → chunk-RPKO5EQ5.js} +5 -5
- package/dist/{chunk-CP4TTRV4.js → chunk-RZFCA4YG.js} +2 -2
- package/dist/{chunk-7CLKBH5Z.js → chunk-S772WZD7.js} +3 -3
- package/dist/{chunk-73ZNGEWU.js → chunk-SBSAOWP5.js} +5 -5
- package/dist/{chunk-H7JRQFFI.js → chunk-TEARMXTQ.js} +3 -3
- package/dist/{chunk-UY55LEIG.js → chunk-UN6YBSRS.js} +2 -2
- package/dist/{chunk-TEHMLZFI.js → chunk-UOQGT574.js} +3 -3
- package/dist/{chunk-2PV7RYNK.js → chunk-VVFBMIIB.js} +86 -16
- package/dist/chunk-VVFBMIIB.js.map +1 -0
- package/dist/{chunk-TLQMK2QF.js → chunk-WBRGSWKX.js} +4 -4
- package/dist/{chunk-Z34NJZRL.js → chunk-WFHQTVY6.js} +3 -3
- package/dist/{chunk-X2BHF4KC.js → chunk-WTAKMSWN.js} +2 -2
- package/dist/{chunk-UGQP733V.js → chunk-XGE6G3EK.js} +2 -2
- package/dist/{chunk-4ABXALRN.js → chunk-XL2DCDFZ.js} +2 -2
- package/dist/{chunk-EPEXIGKB.js → chunk-XUV6CYTY.js} +2 -2
- package/dist/{chunk-H5PUZDNU.js → chunk-YQLGGIE4.js} +4 -4
- package/dist/{chunk-4X3CJHKR.js → chunk-ZGDN6MQA.js} +3 -3
- package/dist/{chunk-4NUO6F3J.js → chunk-ZMJUIRZ6.js} +2 -2
- package/dist/components/auth/countdown.js +3 -3
- package/dist/components/auth/forgot-password.js +3 -3
- package/dist/components/auth/reset-password-form.js +3 -3
- package/dist/components/auth/set-password.js +3 -3
- package/dist/components/auth/sign-in.js +3 -3
- package/dist/components/auth/sign-up.js +3 -3
- package/dist/components/auth/verification-form.js +4 -4
- package/dist/components/auth/verify-email.js +5 -5
- package/dist/components/auth/verify-phone.js +5 -5
- package/dist/components/authorization/deny.js +2 -2
- package/dist/components/authorization/grant.js +2 -2
- package/dist/components/error-boundary.d.ts +1 -1
- package/dist/components/iam/domains-page.js +6 -6
- package/dist/components/iam/iam-guard.js +3 -3
- package/dist/components/iam/permission-selector.js +2 -2
- package/dist/components/iam/permissions-page.js +4 -4
- package/dist/components/iam/permissions.js +2 -2
- package/dist/components/iam/role-detail-layout.js +2 -2
- package/dist/components/iam/role-detail-page.js +4 -4
- package/dist/components/iam/role-permissions-page.js +5 -5
- package/dist/components/iam/roles-page.js +6 -7
- package/dist/components/iam/roles.js +2 -2
- package/dist/components/iam/sessions-page.js +6 -6
- package/dist/components/iam/sessions.js +2 -2
- package/dist/components/iam/tenants-page.js +6 -6
- package/dist/components/iam/tenants.js +2 -2
- package/dist/components/iam/users-page.js +7 -7
- package/dist/components/iam/users.js +2 -2
- package/dist/components/profile/account.js +2 -2
- package/dist/components/profile/change-email-form.js +8 -8
- package/dist/components/profile/change-password-form.js +2 -2
- package/dist/components/profile/change-phone-form.js +8 -8
- package/dist/components/profile/otp-verification-modal.js +5 -5
- package/dist/components/profile/profile-layout.js +3 -3
- package/dist/components/profile/request-change-email-form.js +2 -2
- package/dist/components/profile/request-change-phone-form.js +2 -2
- package/dist/components/profile/security.js +13 -13
- package/dist/components/profile/verify-change-email-form.js +6 -6
- package/dist/components/profile/verify-change-phone-form.js +6 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.js +975 -63
- package/dist/index.js.map +1 -1
- package/dist/pages/__import_guard_probe.d.ts +4 -0
- package/dist/pages/auth/forgot-password.js +1 -8
- package/dist/pages/auth/forgot-password.js.map +1 -1
- package/dist/pages/auth/layout.js +6 -4
- package/dist/pages/auth/layout.js.map +1 -1
- package/dist/pages/auth/reset-password.js +1 -8
- package/dist/pages/auth/reset-password.js.map +1 -1
- package/dist/pages/auth/set-password.js +1 -9
- package/dist/pages/auth/set-password.js.map +1 -1
- package/dist/pages/auth/sign-in.js +1 -9
- package/dist/pages/auth/sign-in.js.map +1 -1
- package/dist/pages/auth/sign-up.js +1 -8
- package/dist/pages/auth/sign-up.js.map +1 -1
- package/dist/pages/auth/verify-email.js +1 -10
- package/dist/pages/auth/verify-email.js.map +1 -1
- package/dist/pages/auth/verify-phone.js +1 -10
- package/dist/pages/auth/verify-phone.js.map +1 -1
- package/dist/pages/iam/domains.d.ts +1 -1
- package/dist/pages/iam/permissions.d.ts +1 -1
- package/dist/pages/iam/permissions.js +3 -7
- package/dist/pages/iam/permissions.js.map +1 -1
- package/dist/pages/iam/role-detail-layout.js +1 -5
- package/dist/pages/iam/role-detail-layout.js.map +1 -1
- package/dist/pages/iam/role-detail.js +1 -7
- package/dist/pages/iam/role-detail.js.map +1 -1
- package/dist/pages/iam/role-permissions.js +1 -8
- package/dist/pages/iam/role-permissions.js.map +1 -1
- package/dist/pages/iam/role-users.js +1 -13
- package/dist/pages/iam/role-users.js.map +1 -1
- package/dist/pages/iam/roles.d.ts +1 -1
- package/dist/pages/iam/roles.js +3 -11
- package/dist/pages/iam/roles.js.map +1 -1
- package/dist/pages/iam/sessions.d.ts +1 -1
- package/dist/pages/iam/sessions.js +3 -9
- package/dist/pages/iam/sessions.js.map +1 -1
- package/dist/pages/iam/tenant-detail.js +1 -8
- package/dist/pages/iam/tenant-detail.js.map +1 -1
- package/dist/pages/iam/tenants/tenant-selector.js +3 -3
- package/dist/pages/iam/tenants.d.ts +1 -1
- package/dist/pages/iam/tenants.js +3 -10
- package/dist/pages/iam/tenants.js.map +1 -1
- package/dist/pages/iam/user-activity.js +1 -12
- package/dist/pages/iam/user-activity.js.map +1 -1
- package/dist/pages/iam/user-detail-layout.js +1 -7
- package/dist/pages/iam/user-detail-layout.js.map +1 -1
- package/dist/pages/iam/user-detail.js +1 -7
- package/dist/pages/iam/user-detail.js.map +1 -1
- package/dist/pages/iam/users/user-selector.js +149 -7
- package/dist/pages/iam/users/user-selector.js.map +1 -1
- package/dist/pages/iam/users.d.ts +1 -1
- package/dist/pages/iam/users.js +3 -11
- package/dist/pages/iam/users.js.map +1 -1
- package/dist/pages/profile/account.js +2 -5
- package/dist/pages/profile/account.js.map +1 -1
- package/dist/pages/profile/layout.d.ts +1 -1
- package/dist/pages/profile/layout.js +3 -5
- package/dist/pages/profile/layout.js.map +1 -1
- package/dist/pages/profile/security.js +2 -16
- package/dist/pages/profile/security.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/utils/safe-redirect.d.ts +2 -0
- package/package.json +3 -3
- package/dist/chunk-2PV7RYNK.js.map +0 -1
- package/dist/chunk-GBDNBY6K.js +0 -153
- package/dist/chunk-GBDNBY6K.js.map +0 -1
- package/dist/chunk-MQI6Q2S4.js.map +0 -1
- package/dist/chunk-NFGFJPCX.js +0 -313
- package/dist/chunk-NFGFJPCX.js.map +0 -1
- package/dist/chunk-NJMNRSJH.js +0 -83
- package/dist/chunk-NJMNRSJH.js.map +0 -1
- package/dist/chunk-OXUOGOG3.js.map +0 -1
- package/dist/chunk-QPEUVMSP.js +0 -149
- package/dist/chunk-QPEUVMSP.js.map +0 -1
- package/dist/chunk-RCQTWNAG.js +0 -150
- package/dist/chunk-RCQTWNAG.js.map +0 -1
- package/dist/chunk-SGUROG23.js +0 -356
- package/dist/chunk-SGUROG23.js.map +0 -1
- package/dist/chunk-X6EUQZSZ.js +0 -81
- package/dist/chunk-X6EUQZSZ.js.map +0 -1
- /package/dist/{chunk-5E3XN6SW.js.map → chunk-22WQJ3NP.js.map} +0 -0
- /package/dist/{chunk-ECF6S2Y2.js.map → chunk-24E7XFGP.js.map} +0 -0
- /package/dist/{chunk-DG6GRTPG.js.map → chunk-4CUQIZ2Q.js.map} +0 -0
- /package/dist/{chunk-5BFG47VF.js.map → chunk-55WFD2Y2.js.map} +0 -0
- /package/dist/{chunk-GVEBIL3O.js.map → chunk-6L4K26KM.js.map} +0 -0
- /package/dist/{chunk-MWMSZVH3.js.map → chunk-BIP5XEDV.js.map} +0 -0
- /package/dist/{chunk-YFQNNSSC.js.map → chunk-C34HWZA5.js.map} +0 -0
- /package/dist/{chunk-T34HJRUW.js.map → chunk-CDX5V66G.js.map} +0 -0
- /package/dist/{chunk-V6ZHX4LT.js.map → chunk-DJWX4ENN.js.map} +0 -0
- /package/dist/{chunk-6THPM5LB.js.map → chunk-GXWBGB6G.js.map} +0 -0
- /package/dist/{chunk-6IEX2RLA.js.map → chunk-HVAYVDIM.js.map} +0 -0
- /package/dist/{chunk-5HAABEAS.js.map → chunk-J4Q7RYYY.js.map} +0 -0
- /package/dist/{chunk-RMJNENJB.js.map → chunk-K2523VB5.js.map} +0 -0
- /package/dist/{chunk-5AEV7RAN.js.map → chunk-KWL6FBP7.js.map} +0 -0
- /package/dist/{chunk-IQNQGPIT.js.map → chunk-LJIZEECR.js.map} +0 -0
- /package/dist/{chunk-SGDXNT7M.js.map → chunk-LQX2365R.js.map} +0 -0
- /package/dist/{chunk-MVVAPYUD.js.map → chunk-NLK2J4UG.js.map} +0 -0
- /package/dist/{chunk-ZZ6D4KE4.js.map → chunk-NUCDZRXS.js.map} +0 -0
- /package/dist/{chunk-EQWOGD4F.js.map → chunk-OPSVSBOB.js.map} +0 -0
- /package/dist/{chunk-5SDS2E3F.js.map → chunk-PCBJBXEK.js.map} +0 -0
- /package/dist/{chunk-VVKXFEAN.js.map → chunk-PFUTYTDB.js.map} +0 -0
- /package/dist/{chunk-WY2JJNZW.js.map → chunk-QHHVGLHT.js.map} +0 -0
- /package/dist/{chunk-W3D4HG5W.js.map → chunk-QJOBPOTR.js.map} +0 -0
- /package/dist/{chunk-N4JFMKGK.js.map → chunk-RPKO5EQ5.js.map} +0 -0
- /package/dist/{chunk-CP4TTRV4.js.map → chunk-RZFCA4YG.js.map} +0 -0
- /package/dist/{chunk-7CLKBH5Z.js.map → chunk-S772WZD7.js.map} +0 -0
- /package/dist/{chunk-73ZNGEWU.js.map → chunk-SBSAOWP5.js.map} +0 -0
- /package/dist/{chunk-H7JRQFFI.js.map → chunk-TEARMXTQ.js.map} +0 -0
- /package/dist/{chunk-UY55LEIG.js.map → chunk-UN6YBSRS.js.map} +0 -0
- /package/dist/{chunk-TEHMLZFI.js.map → chunk-UOQGT574.js.map} +0 -0
- /package/dist/{chunk-TLQMK2QF.js.map → chunk-WBRGSWKX.js.map} +0 -0
- /package/dist/{chunk-Z34NJZRL.js.map → chunk-WFHQTVY6.js.map} +0 -0
- /package/dist/{chunk-X2BHF4KC.js.map → chunk-WTAKMSWN.js.map} +0 -0
- /package/dist/{chunk-UGQP733V.js.map → chunk-XGE6G3EK.js.map} +0 -0
- /package/dist/{chunk-4ABXALRN.js.map → chunk-XL2DCDFZ.js.map} +0 -0
- /package/dist/{chunk-EPEXIGKB.js.map → chunk-XUV6CYTY.js.map} +0 -0
- /package/dist/{chunk-H5PUZDNU.js.map → chunk-YQLGGIE4.js.map} +0 -0
- /package/dist/{chunk-4X3CJHKR.js.map → chunk-ZGDN6MQA.js.map} +0 -0
- /package/dist/{chunk-4NUO6F3J.js.map → chunk-ZMJUIRZ6.js.map} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OtpVerificationModal
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XGE6G3EK.js";
|
|
4
4
|
import {
|
|
5
5
|
useApi,
|
|
6
6
|
useSession
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2XIZ27DU.js";
|
|
8
8
|
|
|
9
9
|
// src/components/profile/verify-change-email-form.tsx
|
|
10
10
|
import { useState } from "react";
|
|
@@ -136,4 +136,4 @@ function VerifyChangeEmailForm({
|
|
|
136
136
|
export {
|
|
137
137
|
VerifyChangeEmailForm
|
|
138
138
|
};
|
|
139
|
-
//# sourceMappingURL=chunk-
|
|
139
|
+
//# sourceMappingURL=chunk-KWL6FBP7.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PermissionSelector
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6L4K26KM.js";
|
|
4
4
|
import {
|
|
5
5
|
IAMGuard
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DJWX4ENN.js";
|
|
7
7
|
import {
|
|
8
8
|
useApi
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2XIZ27DU.js";
|
|
10
10
|
|
|
11
11
|
// src/components/iam/role-permissions-page.tsx
|
|
12
12
|
import {
|
|
@@ -289,4 +289,4 @@ function RolePermissionsPageContent({ roleId }) {
|
|
|
289
289
|
export {
|
|
290
290
|
RolePermissionsPage
|
|
291
291
|
};
|
|
292
|
-
//# sourceMappingURL=chunk-
|
|
292
|
+
//# sourceMappingURL=chunk-LJIZEECR.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AppLink
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QHHVGLHT.js";
|
|
4
4
|
import {
|
|
5
5
|
useSession
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2XIZ27DU.js";
|
|
7
7
|
|
|
8
8
|
// src/pages/profile/_components/profile-sidebar.tsx
|
|
9
9
|
import { Avatar, AvatarFallback, AvatarImage } from "@mesob/ui/components";
|
|
@@ -92,4 +92,4 @@ export {
|
|
|
92
92
|
ProfileSidebar,
|
|
93
93
|
ProfileLayout
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-LQX2365R.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-TFVBER3Y.js";
|
|
4
4
|
import {
|
|
5
5
|
useApi
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2XIZ27DU.js";
|
|
7
7
|
|
|
8
8
|
// src/components/iam/permissions.tsx
|
|
9
9
|
import { Badge, Button } from "@mesob/ui/components";
|
|
@@ -95,4 +95,4 @@ function Permissions() {
|
|
|
95
95
|
export {
|
|
96
96
|
Permissions
|
|
97
97
|
};
|
|
98
|
-
//# sourceMappingURL=chunk-
|
|
98
|
+
//# sourceMappingURL=chunk-NLK2J4UG.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2XIZ27DU.js";
|
|
4
4
|
|
|
5
5
|
// src/components/profile/change-password-form.tsx
|
|
6
6
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
@@ -236,4 +236,4 @@ function ChangePasswordForm() {
|
|
|
236
236
|
export {
|
|
237
237
|
ChangePasswordForm
|
|
238
238
|
};
|
|
239
|
-
//# sourceMappingURL=chunk-
|
|
239
|
+
//# sourceMappingURL=chunk-NUCDZRXS.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useApi,
|
|
3
3
|
useConfig
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2XIZ27DU.js";
|
|
5
5
|
|
|
6
6
|
// src/components/iam/role-detail-layout.tsx
|
|
7
7
|
import {
|
|
@@ -100,4 +100,4 @@ function RoleDetailLayout({
|
|
|
100
100
|
export {
|
|
101
101
|
RoleDetailLayout
|
|
102
102
|
};
|
|
103
|
-
//# sourceMappingURL=chunk-
|
|
103
|
+
//# sourceMappingURL=chunk-OPSVSBOB.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2XIZ27DU.js";
|
|
4
4
|
|
|
5
5
|
// src/components/authorization/grant.tsx
|
|
6
6
|
import { grant as canGrant } from "@mesob/common";
|
|
@@ -25,4 +25,4 @@ function Grant({
|
|
|
25
25
|
export {
|
|
26
26
|
Grant
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-PCBJBXEK.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VerificationForm
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WFHQTVY6.js";
|
|
4
4
|
import {
|
|
5
5
|
handleError
|
|
6
6
|
} from "./chunk-RRLFPSSM.js";
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
} from "./chunk-DPH2PHK3.js";
|
|
10
10
|
import {
|
|
11
11
|
useTranslator
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XUV6CYTY.js";
|
|
13
13
|
import {
|
|
14
14
|
useApi,
|
|
15
15
|
useConfig
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2XIZ27DU.js";
|
|
17
17
|
|
|
18
18
|
// src/components/auth/verify-email.tsx
|
|
19
19
|
import { Alert, AlertDescription, AlertTitle } from "@mesob/ui/components";
|
|
@@ -180,4 +180,4 @@ var VerifyEmail = ({
|
|
|
180
180
|
export {
|
|
181
181
|
VerifyEmail
|
|
182
182
|
};
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
183
|
+
//# sourceMappingURL=chunk-PFUTYTDB.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2XIZ27DU.js";
|
|
4
4
|
|
|
5
5
|
// src/pages/iam/shared/navigation.tsx
|
|
6
6
|
import { useMesob } from "@mesob/ui/providers";
|
|
@@ -31,4 +31,4 @@ export {
|
|
|
31
31
|
AppLink,
|
|
32
32
|
useNavigate
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
34
|
+
//# sourceMappingURL=chunk-QHHVGLHT.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AppLink,
|
|
3
3
|
useNavigate
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QHHVGLHT.js";
|
|
5
5
|
import {
|
|
6
6
|
useApi
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2XIZ27DU.js";
|
|
8
8
|
|
|
9
9
|
// src/pages/iam/shared/page-helpers.tsx
|
|
10
10
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -33,4 +33,4 @@ export {
|
|
|
33
33
|
Link,
|
|
34
34
|
useRouter
|
|
35
35
|
};
|
|
36
|
-
//# sourceMappingURL=chunk-
|
|
36
|
+
//# sourceMappingURL=chunk-QJOBPOTR.js.map
|
|
@@ -5,7 +5,37 @@ import {
|
|
|
5
5
|
Link,
|
|
6
6
|
authApi$,
|
|
7
7
|
useRouter
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QJOBPOTR.js";
|
|
9
|
+
import {
|
|
10
|
+
defaultEntityQueryOptions
|
|
11
|
+
} from "./chunk-NPW7D2HZ.js";
|
|
12
|
+
import {
|
|
13
|
+
IAMGuard
|
|
14
|
+
} from "./chunk-DJWX4ENN.js";
|
|
15
|
+
import {
|
|
16
|
+
useApi,
|
|
17
|
+
useConfig
|
|
18
|
+
} from "./chunk-2XIZ27DU.js";
|
|
19
|
+
|
|
20
|
+
// src/components/iam/roles-page.tsx
|
|
21
|
+
import {
|
|
22
|
+
Button as Button2,
|
|
23
|
+
EntityDrawerTrigger,
|
|
24
|
+
EntityFilter,
|
|
25
|
+
EntityHeader,
|
|
26
|
+
EntitySearch,
|
|
27
|
+
EntitySort,
|
|
28
|
+
EntityViewToggle,
|
|
29
|
+
PageBody,
|
|
30
|
+
PageContainer,
|
|
31
|
+
useBreadcrumbs,
|
|
32
|
+
useEntityPagination,
|
|
33
|
+
useEntityParams
|
|
34
|
+
} from "@mesob/ui/components";
|
|
35
|
+
import { IconShield as IconShield2 } from "@tabler/icons-react";
|
|
36
|
+
import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
|
|
37
|
+
import { useState as useState2 } from "react";
|
|
38
|
+
import { toast } from "sonner";
|
|
9
39
|
|
|
10
40
|
// src/pages/iam/roles/_components/role-form.tsx
|
|
11
41
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
@@ -440,9 +470,122 @@ function RolesList({
|
|
|
440
470
|
] });
|
|
441
471
|
}
|
|
442
472
|
|
|
473
|
+
// src/components/iam/roles-page.tsx
|
|
474
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
475
|
+
function RolesPage() {
|
|
476
|
+
return /* @__PURE__ */ jsx4(IAMGuard, { children: /* @__PURE__ */ jsx4(RolesPageContent, {}) });
|
|
477
|
+
}
|
|
478
|
+
function RolesPageContent() {
|
|
479
|
+
const { hooks } = useApi();
|
|
480
|
+
const { config } = useConfig();
|
|
481
|
+
const homeHref = config.navigation?.defaultRedirectUrl || "/";
|
|
482
|
+
const qc = useQueryClient2();
|
|
483
|
+
useBreadcrumbs({
|
|
484
|
+
items: [
|
|
485
|
+
{ label: "Home", href: homeHref },
|
|
486
|
+
{ label: "IAM", href: "/iam/roles" },
|
|
487
|
+
{ label: "Roles" }
|
|
488
|
+
]
|
|
489
|
+
});
|
|
490
|
+
const [createOpen, setCreateOpen] = useState2(false);
|
|
491
|
+
const { queryConfig, params, setParams } = useEntityParams({
|
|
492
|
+
searchKey: "search"
|
|
493
|
+
});
|
|
494
|
+
const rolesQuery = queryConfig;
|
|
495
|
+
const { data, isPending, isFetching } = hooks.useQuery(
|
|
496
|
+
"get",
|
|
497
|
+
"/roles",
|
|
498
|
+
rolesQuery,
|
|
499
|
+
defaultEntityQueryOptions
|
|
500
|
+
);
|
|
501
|
+
const seedRoles = hooks.useMutation("post", "/roles/seed", {
|
|
502
|
+
onSuccess: () => {
|
|
503
|
+
qc.invalidateQueries({ queryKey: ["get", "/roles"] });
|
|
504
|
+
toast.success("Roles seeded");
|
|
505
|
+
},
|
|
506
|
+
onError: () => {
|
|
507
|
+
toast.error("Failed to seed roles");
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
const isLoading = isPending || isFetching;
|
|
511
|
+
const roles = data?.roles ?? [];
|
|
512
|
+
const { total, pageCount } = useEntityPagination({
|
|
513
|
+
items: roles,
|
|
514
|
+
total: data?.total,
|
|
515
|
+
pageSize: params.pageSize
|
|
516
|
+
});
|
|
517
|
+
return /* @__PURE__ */ jsx4(PageContainer, { className: "flex flex-1 flex-col gap-4 p-4 pt-0", children: /* @__PURE__ */ jsxs4(PageBody, { className: "px-0", children: [
|
|
518
|
+
/* @__PURE__ */ jsx4(
|
|
519
|
+
EntityHeader,
|
|
520
|
+
{
|
|
521
|
+
icon: /* @__PURE__ */ jsx4(IconShield2, { className: "h-5 w-5" }),
|
|
522
|
+
title: "Roles",
|
|
523
|
+
actions: /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
|
|
524
|
+
/* @__PURE__ */ jsx4(
|
|
525
|
+
Button2,
|
|
526
|
+
{
|
|
527
|
+
variant: "outline",
|
|
528
|
+
onClick: () => seedRoles.mutate({}),
|
|
529
|
+
loading: seedRoles.isPending,
|
|
530
|
+
children: "Seed Roles"
|
|
531
|
+
}
|
|
532
|
+
),
|
|
533
|
+
/* @__PURE__ */ jsx4(
|
|
534
|
+
EntityDrawerTrigger,
|
|
535
|
+
{
|
|
536
|
+
mode: "new",
|
|
537
|
+
entity: "Role",
|
|
538
|
+
open: createOpen,
|
|
539
|
+
onOpenChange: setCreateOpen,
|
|
540
|
+
children: (open, onClose) => /* @__PURE__ */ jsx4(RoleForm, { mode: "new", open, onClose })
|
|
541
|
+
}
|
|
542
|
+
)
|
|
543
|
+
] }),
|
|
544
|
+
search: /* @__PURE__ */ jsx4(EntitySearch, { paramKey: "search", placeholder: "Search roles..." }),
|
|
545
|
+
filter: /* @__PURE__ */ jsx4(
|
|
546
|
+
EntityFilter,
|
|
547
|
+
{
|
|
548
|
+
options: [
|
|
549
|
+
{ label: "All", value: "" },
|
|
550
|
+
{ label: "By Code", value: "code" }
|
|
551
|
+
],
|
|
552
|
+
placeholder: "Filter"
|
|
553
|
+
}
|
|
554
|
+
),
|
|
555
|
+
sort: /* @__PURE__ */ jsx4(
|
|
556
|
+
EntitySort,
|
|
557
|
+
{
|
|
558
|
+
options: [
|
|
559
|
+
{ label: "Created", value: "createdAt" },
|
|
560
|
+
{ label: "Updated", value: "updatedAt" },
|
|
561
|
+
{ label: "Code", value: "code" }
|
|
562
|
+
]
|
|
563
|
+
}
|
|
564
|
+
),
|
|
565
|
+
view: /* @__PURE__ */ jsx4(EntityViewToggle, { views: ["table", "card"] })
|
|
566
|
+
}
|
|
567
|
+
),
|
|
568
|
+
/* @__PURE__ */ jsx4(
|
|
569
|
+
RolesList,
|
|
570
|
+
{
|
|
571
|
+
data: roles,
|
|
572
|
+
isLoading,
|
|
573
|
+
view: params.view || "table",
|
|
574
|
+
pageIndex: params.page - 1,
|
|
575
|
+
pageSize: params.pageSize,
|
|
576
|
+
pageCount,
|
|
577
|
+
totalRows: total,
|
|
578
|
+
onCreateNew: () => setCreateOpen(true),
|
|
579
|
+
onPageChange: (p) => setParams({ page: p + 1 }),
|
|
580
|
+
onPageSizeChange: (size) => setParams({ pageSize: size, page: 1 })
|
|
581
|
+
}
|
|
582
|
+
)
|
|
583
|
+
] }) });
|
|
584
|
+
}
|
|
585
|
+
|
|
443
586
|
export {
|
|
444
|
-
RoleForm,
|
|
445
587
|
RoleCard,
|
|
446
|
-
RolesList
|
|
588
|
+
RolesList,
|
|
589
|
+
RolesPage
|
|
447
590
|
};
|
|
448
|
-
//# sourceMappingURL=chunk-
|
|
591
|
+
//# sourceMappingURL=chunk-R6ME7P5U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/iam/roles-page.tsx","../src/pages/iam/roles/_components/role-form.tsx","../src/pages/iam/roles/_components/roles-list.tsx","../src/pages/iam/roles/_components/role-card.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n EntityDrawerTrigger,\n EntityFilter,\n EntityHeader,\n EntitySearch,\n EntitySort,\n EntityViewToggle,\n PageBody,\n PageContainer,\n useBreadcrumbs,\n useEntityPagination,\n useEntityParams,\n} from '@mesob/ui/components';\nimport { IconShield } from '@tabler/icons-react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport type { paths } from '../../data/openapi';\nimport { defaultEntityQueryOptions } from '../../lib/query-options';\nimport { RoleForm } from '../../pages/iam/roles/_components/role-form';\nimport { RolesList } from '../../pages/iam/roles/_components/roles-list';\nimport { useApi, useConfig } from '../../provider';\nimport { IAMGuard } from './iam-guard';\n\nexport function RolesPage() {\n return (\n <IAMGuard>\n <RolesPageContent />\n </IAMGuard>\n );\n}\n\nfunction RolesPageContent() {\n const { hooks } = useApi();\n const { config } = useConfig();\n const homeHref = config.navigation?.defaultRedirectUrl || '/';\n const qc = useQueryClient();\n useBreadcrumbs({\n items: [\n { label: 'Home', href: homeHref },\n { label: 'IAM', href: '/iam/roles' },\n { label: 'Roles' },\n ],\n });\n\n const [createOpen, setCreateOpen] = useState(false);\n const { queryConfig, params, setParams } = useEntityParams({\n searchKey: 'search',\n });\n const rolesQuery = queryConfig as {\n params: {\n query: NonNullable<paths['/roles']['get']['parameters']['query']>;\n };\n };\n\n const { data, isPending, isFetching } = hooks.useQuery(\n 'get',\n '/roles',\n rolesQuery,\n defaultEntityQueryOptions,\n );\n\n const seedRoles = hooks.useMutation('post', '/roles/seed', {\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: ['get', '/roles'] });\n toast.success('Roles seeded');\n },\n onError: () => {\n toast.error('Failed to seed roles');\n },\n });\n\n const isLoading = isPending || isFetching;\n const roles = data?.roles ?? [];\n const { total, pageCount } = useEntityPagination({\n items: roles,\n total: data?.total,\n pageSize: params.pageSize,\n });\n\n return (\n <PageContainer className=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n <PageBody className=\"px-0\">\n <EntityHeader\n icon={<IconShield className=\"h-5 w-5\" />}\n title=\"Roles\"\n actions={\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => seedRoles.mutate({})}\n loading={seedRoles.isPending}\n >\n Seed Roles\n </Button>\n <EntityDrawerTrigger\n mode=\"new\"\n entity=\"Role\"\n open={createOpen}\n onOpenChange={setCreateOpen}\n >\n {(open, onClose) => (\n <RoleForm mode=\"new\" open={open} onClose={onClose} />\n )}\n </EntityDrawerTrigger>\n </div>\n }\n search={\n <EntitySearch paramKey=\"search\" placeholder=\"Search roles...\" />\n }\n filter={\n <EntityFilter\n options={[\n { label: 'All', value: '' },\n { label: 'By Code', value: 'code' },\n ]}\n placeholder=\"Filter\"\n />\n }\n sort={\n <EntitySort\n options={[\n { label: 'Created', value: 'createdAt' },\n { label: 'Updated', value: 'updatedAt' },\n { label: 'Code', value: 'code' },\n ]}\n />\n }\n view={<EntityViewToggle views={['table', 'card']} />}\n />\n <RolesList\n data={roles}\n isLoading={isLoading}\n view={(params.view || 'table') as 'table' | 'card'}\n pageIndex={params.page - 1}\n pageSize={params.pageSize}\n pageCount={pageCount}\n totalRows={total}\n onCreateNew={() => setCreateOpen(true)}\n onPageChange={(p) => setParams({ page: p + 1 })}\n onPageSizeChange={(size) => setParams({ pageSize: size, page: 1 })}\n />\n </PageBody>\n </PageContainer>\n );\n}\n","'use client';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport {\n EntityDrawer,\n EntityFormActions,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n LocaleInputText,\n LocaleInputTextarea,\n Skeleton,\n} from '@mesob/ui/components';\nimport { useLocaleConfig, useLocaleSchemas } from '@mesob/ui/providers';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useMemo } from 'react';\nimport type { Resolver } from 'react-hook-form';\nimport { useForm, useWatch } from 'react-hook-form';\nimport { z } from 'zod';\nimport { authApi$ } from '../../shared/page-helpers';\n\ntype RoleFormData = {\n name: Record<string, string>;\n code: string;\n description: Record<string, string>;\n permissionIds: string[];\n};\n\ntype RoleFormProps = {\n mode: 'new' | 'edit';\n roleId?: string;\n open: boolean;\n onClose: () => void;\n onSuccess?: () => void;\n};\n\nexport function RoleForm({\n mode,\n roleId,\n open,\n onClose,\n onSuccess,\n}: RoleFormProps) {\n const qc = useQueryClient();\n const { localeInputDefault, requiredSchema, optionalSchema } =\n useLocaleSchemas();\n const { defaultLanguage } = useLocaleConfig();\n const schema = useMemo(\n () =>\n z.object({\n name: requiredSchema,\n code: z.string().min(1, 'Code is required'),\n description: optionalSchema,\n permissionIds: z.array(z.string()),\n }),\n [requiredSchema, optionalSchema],\n );\n const defaults: RoleFormData = useMemo(\n () => ({\n name: { ...localeInputDefault },\n code: '',\n description: { ...localeInputDefault },\n permissionIds: [],\n }),\n [localeInputDefault],\n );\n\n const { data, isLoading } = authApi$.useQuery(\n 'get',\n '/roles/{id}',\n { params: { path: { id: roleId ?? '' } } },\n { enabled: mode === 'edit' && !!roleId },\n );\n const create = authApi$.useMutation('post', '/roles', {\n onSuccess: () => qc.invalidateQueries({ queryKey: ['get', '/roles'] }),\n });\n const update = authApi$.useMutation('put', '/roles/{id}', {\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: ['get', '/roles'] });\n if (roleId) {\n qc.invalidateQueries({ queryKey: ['get', '/roles/{id}'] });\n }\n },\n });\n const del = authApi$.useMutation('delete', '/roles/{id}', {\n onSuccess: () => qc.invalidateQueries({ queryKey: ['get', '/roles'] }),\n });\n\n const form = useForm<RoleFormData>({\n resolver: zodResolver(schema) as Resolver<RoleFormData>,\n defaultValues: defaults,\n });\n\n const { reset, formState, control, register, setValue } = form;\n const nameVal = useWatch({ control, name: 'name' });\n const codeVal = useWatch({ control, name: 'code' });\n\n useEffect(() => {\n const nameDefault =\n typeof nameVal === 'object' &&\n nameVal !== null &&\n defaultLanguage in nameVal\n ? ((nameVal as Record<string, string>)[defaultLanguage] ?? '')\n : '';\n if (\n mode === 'new' &&\n typeof nameDefault === 'string' &&\n nameDefault.trim().length > 0 &&\n !codeVal\n ) {\n const code = nameDefault\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9-]/g, '');\n if (code) {\n setValue('code', code);\n }\n }\n }, [mode, nameVal, setValue, codeVal, defaultLanguage]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n if (mode === 'edit' && data?.role && !isLoading) {\n const r = data.role;\n reset({\n name: (r.name ?? {}) as RoleFormData['name'],\n code: r.code,\n description: (r.description ?? {}) as RoleFormData['description'],\n permissionIds: r.permissionIds ?? [],\n });\n } else {\n reset({ ...defaults, permissionIds: [] });\n }\n }, [mode, data, open, isLoading, reset, defaults]);\n\n const onSubmit = form.handleSubmit(async (d) => {\n const body = {\n name: d.name,\n code: d.code,\n description: d.description ?? undefined,\n permissionIds: d.permissionIds,\n };\n if (mode === 'new') {\n await create.mutateAsync({ body });\n } else if (roleId) {\n await update.mutateAsync({\n params: { path: { id: roleId } },\n body,\n });\n }\n onSuccess?.();\n onClose();\n });\n\n const onDelete = async () => {\n if (!roleId) {\n return;\n }\n await del.mutateAsync({ params: { path: { id: roleId } } });\n onSuccess?.();\n onClose();\n };\n\n const editable = mode === 'new' || data?.role?.isEditable !== false;\n\n return (\n <EntityDrawer\n title={mode === 'new' ? 'New role' : 'Edit role'}\n open={open}\n onClose={onClose}\n isDirty={formState.isDirty}\n size=\"md\"\n form={\n isLoading ? (\n <FormSkeleton />\n ) : (\n <Form {...form}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <LocaleInputText\n label=\"Name\"\n field=\"name\"\n required\n register={register}\n errors={formState.errors}\n placeholder=\"e.g. Administrator\"\n disabled={!editable}\n />\n <FormField\n control={control}\n name=\"code\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n Code <span className=\"text-destructive\">*</span>\n </FormLabel>\n <FormControl>\n <Input\n placeholder=\"e.g. admin\"\n disabled={!editable}\n {...field}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <LocaleInputTextarea\n label=\"Description\"\n field=\"description\"\n register={register}\n errors={formState.errors}\n placeholder=\"Description\"\n rows={3}\n disabled={!editable}\n />\n </form>\n </Form>\n )\n }\n actions={\n <EntityFormActions\n mode={mode}\n onSubmit={onSubmit}\n onReset={mode === 'new' ? () => reset(defaults) : undefined}\n onDelete={mode === 'edit' ? onDelete : undefined}\n isSubmitting={create.isPending || update.isPending}\n isDeleting={del.isPending}\n disabled={isLoading || !editable}\n itemName=\"role\"\n />\n }\n />\n );\n}\n\nfunction FormSkeleton() {\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-16\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-14\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-20 w-full\" />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport {\n Badge,\n DataTableAction,\n DataTablePagination,\n DisplayTable,\n EntityEmptyState,\n EntityLoadingState,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n} from '@mesob/ui/components';\nimport { IconCalendar, IconShield } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport { Link } from '../../shared/page-helpers';\nimport { RoleCard } from './role-card';\nimport { RoleForm } from './role-form';\nimport type { Role } from './roles-data';\nimport { str } from './roles-data';\n\nconst TABLE_COLUMN_COUNT = 5;\n\ntype RolesListProps = {\n data: Role[];\n isLoading?: boolean;\n view: 'table' | 'card';\n pageIndex: number;\n pageSize: number;\n pageCount: number;\n totalRows: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n onCreateNew?: () => void;\n};\n\nexport function RolesList({\n data,\n isLoading,\n view,\n pageIndex,\n pageSize,\n pageCount,\n totalRows,\n onPageChange,\n onPageSizeChange,\n onCreateNew,\n}: RolesListProps) {\n const [drawerRole, setDrawerRole] = useState<Role | null>(null);\n\n if (isLoading) {\n return (\n <EntityLoadingState\n view={view}\n rowCount={pageSize}\n columnCount={TABLE_COLUMN_COUNT}\n cardCount={pageSize}\n />\n );\n }\n if (totalRows === 0) {\n return (\n <EntityEmptyState\n icon={IconShield}\n entityName=\"role\"\n title=\"No roles yet\"\n description=\"Create your first role to get started.\"\n onAction={onCreateNew}\n />\n );\n }\n if (view === 'table') {\n return (\n <div className=\"space-y-4\">\n {drawerRole ? (\n <RoleForm\n mode=\"edit\"\n roleId={drawerRole.id}\n open\n onClose={() => setDrawerRole(null)}\n onSuccess={() => setDrawerRole(null)}\n />\n ) : null}\n <DisplayTable withTableBorder>\n <Thead>\n <Tr>\n <Th>Role</Th>\n <Th>Description</Th>\n <Th>Access</Th>\n <Th>Created</Th>\n <Th className=\"w-[50px]\" />\n </Tr>\n </Thead>\n <Tbody>\n {data.map((role) => (\n <Tr key={role.id} className=\"group\">\n <Td>\n <Link\n href={`/iam/roles/${role.id}`}\n className=\"block text-left font-medium hover:text-primary hover:underline cursor-pointer\"\n >\n <p>{str(role.name) || role.code}</p>\n </Link>\n </Td>\n <Td>\n <span className=\"text-muted-foreground line-clamp-1 max-w-[200px]\">\n {str(role.description) || '—'}\n </span>\n </Td>\n <Td>\n <div className=\"flex flex-wrap gap-2\">\n {role.isSystem ? <Badge>System</Badge> : null}\n <Badge variant=\"secondary\">\n {role.permissionCount ?? role.permissionIds?.length ?? 0}{' '}\n permissions\n </Badge>\n </div>\n </Td>\n <Td>\n <div className=\"flex items-center gap-1 text-muted-foreground\">\n <IconCalendar className=\"h-4 w-4\" />\n {new Date(role.createdAt).toLocaleDateString()}\n </div>\n </Td>\n <Td>\n <DataTableAction onClick={() => setDrawerRole(role)} />\n </Td>\n </Tr>\n ))}\n </Tbody>\n </DisplayTable>\n <DataTablePagination\n pageIndex={pageIndex}\n pageSize={pageSize}\n pageCount={pageCount}\n totalRows={totalRows}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n />\n </div>\n );\n }\n return (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {data.map((r) => (\n <RoleCard key={r.id} role={r} />\n ))}\n </div>\n <DataTablePagination\n pageIndex={pageIndex}\n pageSize={pageSize}\n pageCount={pageCount}\n totalRows={totalRows}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n />\n </div>\n );\n}\n","'use client';\n\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n} from '@mesob/ui/components';\nimport { IconDots, IconExternalLink } from '@tabler/icons-react';\nimport { useRouter } from '../../shared/page-helpers';\nimport type { Role } from './roles-data';\nimport { str } from './roles-data';\n\ntype RoleCardProps = {\n role: Role;\n mode?: 'navigate' | 'static';\n};\n\nexport function RoleCard({ role, mode = 'navigate' }: RoleCardProps) {\n const router = useRouter();\n const canNavigate = mode === 'navigate';\n\n return (\n <Card className=\"group transition-shadow hover:shadow-md\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-start justify-between\">\n <button\n type=\"button\"\n onClick={() => {\n if (canNavigate) {\n router.push(`/iam/roles/${role.id}`);\n }\n }}\n className=\"text-left font-semibold hover:text-primary hover:underline\"\n >\n {str(role.name) || role.code}\n </button>\n {canNavigate ? (\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 opacity-0 transition-opacity group-hover:opacity-100\"\n />\n }\n >\n <IconDots className=\"h-4 w-4\" />\n </DropdownMenuTrigger>\n <DropdownMenuPortal>\n <DropdownMenuContent>\n <DropdownMenuItem\n onClick={() => router.push(`/iam/roles/${role.id}`)}\n >\n <IconExternalLink className=\"mr-2 h-4 w-4\" />\n Open\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenuPortal>\n </DropdownMenu>\n ) : null}\n </div>\n <Badge variant=\"outline\" className=\"text-xs\">\n {role.code}\n </Badge>\n </CardHeader>\n <CardContent>\n <div className=\"mb-3 flex flex-wrap gap-2\">\n {role.isSystem ? <Badge>System</Badge> : null}\n <Badge variant=\"secondary\">\n {role.permissionCount ?? role.permissionIds?.length ?? 0}{' '}\n permissions\n </Badge>\n <Badge variant=\"outline\">{role.userCount ?? 0} users</Badge>\n </div>\n {str(role.description) && (\n <p className=\"line-clamp-2 text-sm text-muted-foreground\">\n {str(role.description)}\n </p>\n )}\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Created {new Date(role.createdAt).toLocaleDateString()}\n </p>\n </CardContent>\n </Card>\n );\n}\n"],"mappings":"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","names":["Button","IconShield","useQueryClient","useState","Badge","jsx","jsxs","jsx","jsxs","Badge","jsx","jsxs","useQueryClient","useState","IconShield","Button"]}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UserCard,
|
|
3
3
|
UserForm
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-24E7XFGP.js";
|
|
5
5
|
import {
|
|
6
6
|
Link,
|
|
7
7
|
authApi$
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QJOBPOTR.js";
|
|
9
9
|
import {
|
|
10
10
|
defaultEntityQueryOptions
|
|
11
11
|
} from "./chunk-NPW7D2HZ.js";
|
|
12
12
|
import {
|
|
13
13
|
IAMGuard
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-DJWX4ENN.js";
|
|
15
15
|
import {
|
|
16
16
|
useApi,
|
|
17
17
|
useConfig
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-2XIZ27DU.js";
|
|
19
19
|
|
|
20
20
|
// src/components/iam/users-page.tsx
|
|
21
21
|
import {
|
|
@@ -1167,4 +1167,4 @@ function UsersPageContent() {
|
|
|
1167
1167
|
export {
|
|
1168
1168
|
UsersPage
|
|
1169
1169
|
};
|
|
1170
|
-
//# sourceMappingURL=chunk-
|
|
1170
|
+
//# sourceMappingURL=chunk-RPKO5EQ5.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2XIZ27DU.js";
|
|
4
4
|
|
|
5
5
|
// src/components/authorization/deny.tsx
|
|
6
6
|
import { deny as canDeny } from "@mesob/common";
|
|
@@ -20,4 +20,4 @@ function Deny({ permissions, userPermissions, children }) {
|
|
|
20
20
|
export {
|
|
21
21
|
Deny
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-RZFCA4YG.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IAMGuard
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DJWX4ENN.js";
|
|
4
4
|
import {
|
|
5
5
|
useApi,
|
|
6
6
|
useConfig
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2XIZ27DU.js";
|
|
8
8
|
|
|
9
9
|
// src/components/iam/role-detail-page.tsx
|
|
10
10
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
@@ -200,4 +200,4 @@ function RoleDetailSkeleton() {
|
|
|
200
200
|
export {
|
|
201
201
|
RoleDetailPage
|
|
202
202
|
};
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
203
|
+
//# sourceMappingURL=chunk-S772WZD7.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ChangeEmailForm
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-55WFD2Y2.js";
|
|
4
4
|
import {
|
|
5
5
|
ChangePasswordForm
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NUCDZRXS.js";
|
|
7
7
|
import {
|
|
8
8
|
ChangePhoneForm
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WBRGSWKX.js";
|
|
10
10
|
import {
|
|
11
11
|
useSession
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-2XIZ27DU.js";
|
|
13
13
|
|
|
14
14
|
// src/components/profile/security.tsx
|
|
15
15
|
import { Badge, Card, CardContent, Separator } from "@mesob/ui/components";
|
|
@@ -62,4 +62,4 @@ function Security() {
|
|
|
62
62
|
export {
|
|
63
63
|
Security
|
|
64
64
|
};
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-SBSAOWP5.js.map
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
} from "./chunk-DPH2PHK3.js";
|
|
7
7
|
import {
|
|
8
8
|
useTranslator
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XUV6CYTY.js";
|
|
10
10
|
import {
|
|
11
11
|
useApi,
|
|
12
12
|
useConfig
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2XIZ27DU.js";
|
|
14
14
|
|
|
15
15
|
// src/components/auth/reset-password-form.tsx
|
|
16
16
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
@@ -283,4 +283,4 @@ var ResetPasswordForm = ({
|
|
|
283
283
|
export {
|
|
284
284
|
ResetPasswordForm
|
|
285
285
|
};
|
|
286
|
-
//# sourceMappingURL=chunk-
|
|
286
|
+
//# sourceMappingURL=chunk-TEARMXTQ.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-TFVBER3Y.js";
|
|
4
4
|
import {
|
|
5
5
|
useApi
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2XIZ27DU.js";
|
|
7
7
|
|
|
8
8
|
// src/components/iam/tenants.tsx
|
|
9
9
|
import { Badge, Button } from "@mesob/ui/components";
|
|
@@ -101,4 +101,4 @@ function Tenants() {
|
|
|
101
101
|
export {
|
|
102
102
|
Tenants
|
|
103
103
|
};
|
|
104
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-UN6YBSRS.js.map
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
} from "./chunk-DPH2PHK3.js";
|
|
10
10
|
import {
|
|
11
11
|
useTranslator
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XUV6CYTY.js";
|
|
13
13
|
import {
|
|
14
14
|
useApi,
|
|
15
15
|
useConfig
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2XIZ27DU.js";
|
|
17
17
|
|
|
18
18
|
// src/components/auth/set-password.tsx
|
|
19
19
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
@@ -302,4 +302,4 @@ var SetPassword = function SetPassword2({
|
|
|
302
302
|
export {
|
|
303
303
|
SetPassword
|
|
304
304
|
};
|
|
305
|
-
//# sourceMappingURL=chunk-
|
|
305
|
+
//# sourceMappingURL=chunk-UOQGT574.js.map
|