@burdenoff/microfe-admin 2026.805.1 → 2026.829.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/admin/AdminRoot.js +77 -72
- package/dist/admin/AdminRoot.js.map +1 -1
- package/dist/admin/AdminRoutes.js +28 -24
- package/dist/admin/AdminRoutes.js.map +1 -1
- package/dist/admin/components/TenantMembersPanel.js +105 -106
- package/dist/admin/components/TenantMembersPanel.js.map +1 -1
- package/dist/admin/hooks/useAdminPermissions.js +1 -0
- package/dist/admin/hooks/useAdminPermissions.js.map +1 -1
- package/dist/admin/hooks/useTr.js +14 -0
- package/dist/admin/hooks/useTr.js.map +1 -0
- package/dist/admin/pages/DashboardPage.js +71 -72
- package/dist/admin/pages/DashboardPage.js.map +1 -1
- package/dist/admin/pages/ExploreConversationsPage.js +419 -0
- package/dist/admin/pages/ExploreConversationsPage.js.map +1 -0
- package/dist/admin/pages/OrganizationsListPage.js +63 -62
- package/dist/admin/pages/OrganizationsListPage.js.map +1 -1
- package/dist/admin/pages/TenantDetailPage.js +148 -149
- package/dist/admin/pages/TenantDetailPage.js.map +1 -1
- package/dist/admin/pages/TenantsListPage.js +106 -107
- package/dist/admin/pages/TenantsListPage.js.map +1 -1
- package/dist/admin/pages/UsersListPage.js +87 -88
- package/dist/admin/pages/UsersListPage.js.map +1 -1
- package/dist/admin/pages/index.js +1 -0
- package/package.json +1 -1
package/dist/admin/AdminRoot.js
CHANGED
|
@@ -1,183 +1,188 @@
|
|
|
1
1
|
import { AdminProvider as e } from "./providers/AdminProvider.js";
|
|
2
2
|
import { joinPath as t } from "./utils/navigation.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { useTr as n } from "./hooks/useTr.js";
|
|
4
|
+
import { AdminRoutes as r } from "./AdminRoutes.js";
|
|
5
|
+
import { useEffect as i } from "react";
|
|
6
|
+
import { AlertOctagon as a, Box as o, Building as s, Building2 as c, CreditCard as l, FileText as u, GitBranch as d, Layout as f, LayoutDashboard as p, Link2 as m, Mail as h, Server as g, Settings as _, ShieldCheck as v, ToggleLeft as y, Users as b } from "lucide-react";
|
|
7
|
+
import { jsx as x } from "react/jsx-runtime";
|
|
8
|
+
import { FeatureFlagProvider as S } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
8
9
|
//#region src/admin/AdminRoot.tsx
|
|
9
|
-
var
|
|
10
|
-
let { registerNavItems:
|
|
11
|
-
return
|
|
12
|
-
if (
|
|
10
|
+
var C = (C) => {
|
|
11
|
+
let { registerNavItems: w, registerFooterItems: T, basePath: E = "", workspaceId: D } = C, O = n();
|
|
12
|
+
return i(() => {
|
|
13
|
+
if (w) return w([
|
|
13
14
|
{
|
|
14
15
|
id: "admin-dashboard",
|
|
15
|
-
label: "Dashboard",
|
|
16
|
-
path: t(
|
|
17
|
-
icon: /* @__PURE__ */
|
|
16
|
+
label: O("admin.nav.dashboard", "Dashboard"),
|
|
17
|
+
path: t(E, "dashboard"),
|
|
18
|
+
icon: /* @__PURE__ */ x(p, { size: 20 }),
|
|
18
19
|
order: 10,
|
|
19
20
|
group: "admin"
|
|
20
21
|
},
|
|
21
22
|
{
|
|
22
23
|
id: "admin-tenants",
|
|
23
|
-
label: "Tenants",
|
|
24
|
-
path: t(
|
|
25
|
-
icon: /* @__PURE__ */
|
|
24
|
+
label: O("admin.nav.tenants", "Tenants"),
|
|
25
|
+
path: t(E, "tenants"),
|
|
26
|
+
icon: /* @__PURE__ */ x(c, { size: 20 }),
|
|
26
27
|
order: 20,
|
|
27
28
|
group: "admin"
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
31
|
id: "admin-organizations",
|
|
31
|
-
label: "Organizations",
|
|
32
|
-
path: t(
|
|
33
|
-
icon: /* @__PURE__ */
|
|
32
|
+
label: O("admin.nav.organizations", "Organizations"),
|
|
33
|
+
path: t(E, "organizations"),
|
|
34
|
+
icon: /* @__PURE__ */ x(s, { size: 20 }),
|
|
34
35
|
order: 25,
|
|
35
36
|
group: "admin"
|
|
36
37
|
},
|
|
37
38
|
{
|
|
38
39
|
id: "admin-workspaces",
|
|
39
|
-
label: "Workspaces",
|
|
40
|
-
path: t(
|
|
41
|
-
icon: /* @__PURE__ */
|
|
40
|
+
label: O("admin.nav.workspaces", "Workspaces"),
|
|
41
|
+
path: t(E, "workspaces"),
|
|
42
|
+
icon: /* @__PURE__ */ x(f, { size: 20 }),
|
|
42
43
|
order: 26,
|
|
43
44
|
group: "admin"
|
|
44
45
|
},
|
|
45
46
|
{
|
|
46
47
|
id: "admin-users",
|
|
47
|
-
label: "Users",
|
|
48
|
-
path: t(
|
|
49
|
-
icon: /* @__PURE__ */ b
|
|
48
|
+
label: O("admin.nav.users", "Users"),
|
|
49
|
+
path: t(E, "users"),
|
|
50
|
+
icon: /* @__PURE__ */ x(b, { size: 20 }),
|
|
50
51
|
order: 30,
|
|
51
52
|
group: "admin"
|
|
52
53
|
},
|
|
53
54
|
{
|
|
54
55
|
id: "admin-roles",
|
|
55
|
-
label: "Roles & Permissions",
|
|
56
|
-
path: t(
|
|
57
|
-
icon: /* @__PURE__ */
|
|
56
|
+
label: O("admin.nav.rolesAndPermissions", "Roles & Permissions"),
|
|
57
|
+
path: t(E, "roles"),
|
|
58
|
+
icon: /* @__PURE__ */ x(v, { size: 20 }),
|
|
58
59
|
order: 35,
|
|
59
60
|
group: "admin"
|
|
60
61
|
},
|
|
61
62
|
{
|
|
62
63
|
id: "admin-billing",
|
|
63
|
-
label: "Billing",
|
|
64
|
-
path: t(
|
|
65
|
-
icon: /* @__PURE__ */
|
|
64
|
+
label: O("admin.nav.billing", "Billing"),
|
|
65
|
+
path: t(E, "billing"),
|
|
66
|
+
icon: /* @__PURE__ */ x(l, { size: 20 }),
|
|
66
67
|
order: 40,
|
|
67
68
|
group: "admin",
|
|
68
69
|
children: [
|
|
69
70
|
{
|
|
70
71
|
id: "admin-billing-subscriptions",
|
|
71
|
-
label: "Subscriptions",
|
|
72
|
-
path: t(
|
|
72
|
+
label: O("admin.nav.subscriptions", "Subscriptions"),
|
|
73
|
+
path: t(E, "billing/subscriptions"),
|
|
73
74
|
order: 1
|
|
74
75
|
},
|
|
75
76
|
{
|
|
76
77
|
id: "admin-billing-invoices",
|
|
77
|
-
label: "Invoices",
|
|
78
|
-
path: t(
|
|
78
|
+
label: O("admin.nav.invoices", "Invoices"),
|
|
79
|
+
path: t(E, "billing/invoices"),
|
|
79
80
|
order: 2
|
|
80
81
|
},
|
|
81
82
|
{
|
|
82
83
|
id: "admin-billing-plans",
|
|
83
|
-
label: "Plans",
|
|
84
|
-
path: t(
|
|
84
|
+
label: O("admin.nav.plans", "Plans"),
|
|
85
|
+
path: t(E, "billing/plans"),
|
|
85
86
|
order: 3
|
|
86
87
|
}
|
|
87
88
|
]
|
|
88
89
|
},
|
|
89
90
|
{
|
|
90
91
|
id: "admin-communications",
|
|
91
|
-
label: "Communications",
|
|
92
|
-
path: t(
|
|
93
|
-
icon: /* @__PURE__ */
|
|
92
|
+
label: O("admin.nav.communications", "Communications"),
|
|
93
|
+
path: t(E, "communications"),
|
|
94
|
+
icon: /* @__PURE__ */ x(h, { size: 20 }),
|
|
94
95
|
order: 50,
|
|
95
96
|
group: "admin"
|
|
96
97
|
},
|
|
97
98
|
{
|
|
98
99
|
id: "admin-feature-flags",
|
|
99
|
-
label: "Feature Flags",
|
|
100
|
-
path: t(
|
|
101
|
-
icon: /* @__PURE__ */
|
|
100
|
+
label: O("admin.nav.featureFlags", "Feature Flags"),
|
|
101
|
+
path: t(E, "feature-flags"),
|
|
102
|
+
icon: /* @__PURE__ */ x(y, { size: 20 }),
|
|
102
103
|
order: 60,
|
|
103
104
|
group: "admin"
|
|
104
105
|
},
|
|
105
106
|
{
|
|
106
107
|
id: "admin-workflows",
|
|
107
|
-
label: "Workflows",
|
|
108
|
-
path: t(
|
|
109
|
-
icon: /* @__PURE__ */
|
|
108
|
+
label: O("admin.nav.workflows", "Workflows"),
|
|
109
|
+
path: t(E, "workflows"),
|
|
110
|
+
icon: /* @__PURE__ */ x(d, { size: 20 }),
|
|
110
111
|
order: 70,
|
|
111
112
|
group: "admin"
|
|
112
113
|
},
|
|
113
114
|
{
|
|
114
115
|
id: "admin-sre",
|
|
115
|
-
label: "SRE",
|
|
116
|
-
path: t(
|
|
117
|
-
icon: /* @__PURE__ */
|
|
116
|
+
label: O("admin.nav.sre", "SRE"),
|
|
117
|
+
path: t(E, "sre"),
|
|
118
|
+
icon: /* @__PURE__ */ x(g, { size: 20 }),
|
|
118
119
|
order: 80,
|
|
119
120
|
group: "admin"
|
|
120
121
|
},
|
|
121
122
|
{
|
|
122
123
|
id: "admin-sync-failures",
|
|
123
|
-
label: "Sync Failures",
|
|
124
|
-
path: t(
|
|
125
|
-
icon: /* @__PURE__ */
|
|
124
|
+
label: O("admin.nav.syncFailures", "Sync Failures"),
|
|
125
|
+
path: t(E, "sync-failures"),
|
|
126
|
+
icon: /* @__PURE__ */ x(a, { size: 20 }),
|
|
126
127
|
order: 82,
|
|
127
128
|
group: "admin"
|
|
128
129
|
},
|
|
129
130
|
{
|
|
130
131
|
id: "admin-audit",
|
|
131
|
-
label: "Audit Logs",
|
|
132
|
-
path: t(
|
|
133
|
-
icon: /* @__PURE__ */
|
|
132
|
+
label: O("admin.nav.auditLogs", "Audit Logs"),
|
|
133
|
+
path: t(E, "audit"),
|
|
134
|
+
icon: /* @__PURE__ */ x(u, { size: 20 }),
|
|
134
135
|
order: 85,
|
|
135
136
|
group: "admin"
|
|
136
137
|
},
|
|
137
138
|
{
|
|
138
139
|
id: "admin-referrals",
|
|
139
|
-
label: "Referrals",
|
|
140
|
-
path: t(
|
|
141
|
-
icon: /* @__PURE__ */
|
|
140
|
+
label: O("admin.nav.referrals", "Referrals"),
|
|
141
|
+
path: t(E, "referrals"),
|
|
142
|
+
icon: /* @__PURE__ */ x(m, { size: 20 }),
|
|
142
143
|
order: 86,
|
|
143
144
|
group: "admin"
|
|
144
145
|
},
|
|
145
146
|
{
|
|
146
147
|
id: "admin-sandbox",
|
|
147
|
-
label: "Sandbox",
|
|
148
|
-
path: t(
|
|
149
|
-
icon: /* @__PURE__ */
|
|
148
|
+
label: O("admin.nav.sandbox", "Sandbox"),
|
|
149
|
+
path: t(E, "sandbox"),
|
|
150
|
+
icon: /* @__PURE__ */ x(o, { size: 20 }),
|
|
150
151
|
order: 87,
|
|
151
152
|
group: "admin"
|
|
152
153
|
},
|
|
153
154
|
{
|
|
154
155
|
id: "admin-settings",
|
|
155
|
-
label: "Settings",
|
|
156
|
-
path: t(
|
|
157
|
-
icon: /* @__PURE__ */
|
|
156
|
+
label: O("admin.nav.settings", "Settings"),
|
|
157
|
+
path: t(E, "settings"),
|
|
158
|
+
icon: /* @__PURE__ */ x(_, { size: 20 }),
|
|
158
159
|
order: 90,
|
|
159
160
|
group: "admin"
|
|
160
161
|
}
|
|
161
162
|
]);
|
|
162
|
-
}, [
|
|
163
|
-
|
|
163
|
+
}, [
|
|
164
|
+
w,
|
|
165
|
+
E,
|
|
166
|
+
O
|
|
167
|
+
]), i(() => {
|
|
168
|
+
if (T) return T([{
|
|
164
169
|
id: "admin-status",
|
|
165
|
-
label: "Admin Console Ready",
|
|
170
|
+
label: O("admin.footer.status", "Admin Console Ready"),
|
|
166
171
|
type: "status",
|
|
167
172
|
order: 10,
|
|
168
173
|
section: "left"
|
|
169
174
|
}]);
|
|
170
|
-
}, [
|
|
171
|
-
workspaceId:
|
|
175
|
+
}, [T, O]), /* @__PURE__ */ x(S, {
|
|
176
|
+
workspaceId: D || null,
|
|
172
177
|
gateway: "global",
|
|
173
178
|
defaultEnabled: !0,
|
|
174
|
-
children: /* @__PURE__ */
|
|
175
|
-
...
|
|
176
|
-
children: /* @__PURE__ */
|
|
179
|
+
children: /* @__PURE__ */ x(e, {
|
|
180
|
+
...C,
|
|
181
|
+
children: /* @__PURE__ */ x(r, {})
|
|
177
182
|
})
|
|
178
183
|
});
|
|
179
184
|
};
|
|
180
185
|
//#endregion
|
|
181
|
-
export {
|
|
186
|
+
export { C as AdminRoot };
|
|
182
187
|
|
|
183
188
|
//# sourceMappingURL=AdminRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminRoot.js","names":[],"sources":["../../src/admin/AdminRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport {\n LayoutDashboard,\n Building2,\n Users,\n CreditCard,\n Settings,\n Server,\n Mail,\n FileText,\n Box,\n Building,\n Layout,\n ToggleLeft,\n ShieldCheck,\n GitBranch,\n Link2,\n AlertOctagon,\n} from 'lucide-react';\nimport { AdminProvider } from './providers/AdminProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, AdminRootProps } from './types';\nimport { AdminRoutes } from './AdminRoutes';\nimport { joinPath } from './utils/navigation';\n\n/**\n * Root component for the Admin microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { AdminRoot, type AdminRootProps } from '@burdenoff/microfe-admin';\n *\n * function App() {\n * const props: AdminRootProps = {\n * basePath: '/admin',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'admin@example.com', role: 'PLATFORM_SUPERADMIN' },\n * tenantId: 'tenant-123',\n * apiGatewayUrl: 'https://api.example.com',\n * authToken: 'token',\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <AdminRoot {...props} />;\n * }\n * ```\n */\nexport const AdminRoot: FC<AdminRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '', workspaceId } = props;\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n {\n id: 'admin-dashboard',\n label: 'Dashboard',\n path: joinPath(basePath, 'dashboard'),\n icon: <LayoutDashboard size={20} />,\n order: 10,\n group: 'admin',\n },\n {\n id: 'admin-tenants',\n label: 'Tenants',\n path: joinPath(basePath, 'tenants'),\n icon: <Building2 size={20} />,\n order: 20,\n group: 'admin',\n },\n {\n id: 'admin-organizations',\n label: 'Organizations',\n path: joinPath(basePath, 'organizations'),\n icon: <Building size={20} />,\n order: 25,\n group: 'admin',\n },\n {\n id: 'admin-workspaces',\n label: 'Workspaces',\n path: joinPath(basePath, 'workspaces'),\n icon: <Layout size={20} />,\n order: 26,\n group: 'admin',\n },\n {\n id: 'admin-users',\n label: 'Users',\n path: joinPath(basePath, 'users'),\n icon: <Users size={20} />,\n order: 30,\n group: 'admin',\n },\n {\n id: 'admin-roles',\n label: 'Roles & Permissions',\n path: joinPath(basePath, 'roles'),\n icon: <ShieldCheck size={20} />,\n order: 35,\n group: 'admin',\n },\n {\n id: 'admin-billing',\n label: 'Billing',\n path: joinPath(basePath, 'billing'),\n icon: <CreditCard size={20} />,\n order: 40,\n group: 'admin',\n children: [\n {\n id: 'admin-billing-subscriptions',\n label: 'Subscriptions',\n path: joinPath(basePath, 'billing/subscriptions'),\n order: 1,\n },\n {\n id: 'admin-billing-invoices',\n label: 'Invoices',\n path: joinPath(basePath, 'billing/invoices'),\n order: 2,\n },\n {\n id: 'admin-billing-plans',\n label: 'Plans',\n path: joinPath(basePath, 'billing/plans'),\n order: 3,\n },\n ],\n },\n {\n id: 'admin-communications',\n label: 'Communications',\n path: joinPath(basePath, 'communications'),\n icon: <Mail size={20} />,\n order: 50,\n group: 'admin',\n },\n {\n id: 'admin-feature-flags',\n label: 'Feature Flags',\n path: joinPath(basePath, 'feature-flags'),\n icon: <ToggleLeft size={20} />,\n order: 60,\n group: 'admin',\n },\n {\n id: 'admin-workflows',\n label: 'Workflows',\n path: joinPath(basePath, 'workflows'),\n icon: <GitBranch size={20} />,\n order: 70,\n group: 'admin',\n },\n {\n id: 'admin-sre',\n label: 'SRE',\n path: joinPath(basePath, 'sre'),\n icon: <Server size={20} />,\n order: 80,\n group: 'admin',\n },\n {\n id: 'admin-sync-failures',\n label: 'Sync Failures',\n path: joinPath(basePath, 'sync-failures'),\n icon: <AlertOctagon size={20} />,\n order: 82,\n group: 'admin',\n },\n {\n id: 'admin-audit',\n label: 'Audit Logs',\n path: joinPath(basePath, 'audit'),\n icon: <FileText size={20} />,\n order: 85,\n group: 'admin',\n },\n {\n id: 'admin-referrals',\n label: 'Referrals',\n path: joinPath(basePath, 'referrals'),\n icon: <Link2 size={20} />,\n order: 86,\n group: 'admin',\n },\n {\n id: 'admin-sandbox',\n label: 'Sandbox',\n path: joinPath(basePath, 'sandbox'),\n icon: <Box size={20} />,\n order: 87,\n group: 'admin',\n },\n {\n id: 'admin-settings',\n label: 'Settings',\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 90,\n group: 'admin',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n }, [registerNavItems, basePath]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'admin-status',\n label: 'Admin Console Ready',\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId || null} gateway=\"global\" defaultEnabled={true}>\n <AdminProvider {...props}>\n <AdminRoutes />\n </AdminProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdminRoot.js","names":[],"sources":["../../src/admin/AdminRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect } from 'react';\nimport {\n LayoutDashboard,\n Building2,\n Users,\n CreditCard,\n Settings,\n Server,\n Mail,\n FileText,\n Box,\n Building,\n Layout,\n ToggleLeft,\n ShieldCheck,\n GitBranch,\n Link2,\n AlertOctagon,\n} from 'lucide-react';\nimport { AdminProvider } from './providers/AdminProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, AdminRootProps } from './types';\nimport { AdminRoutes } from './AdminRoutes';\nimport { joinPath } from './utils/navigation';\nimport { useTr } from './hooks/useTr';\n\n/**\n * Root component for the Admin microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { AdminRoot, type AdminRootProps } from '@burdenoff/microfe-admin';\n *\n * function App() {\n * const props: AdminRootProps = {\n * basePath: '/admin',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'admin@example.com', role: 'PLATFORM_SUPERADMIN' },\n * tenantId: 'tenant-123',\n * apiGatewayUrl: 'https://api.example.com',\n * authToken: 'token',\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <AdminRoot {...props} />;\n * }\n * ```\n */\nexport const AdminRoot: FC<AdminRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '', workspaceId } = props;\n const tr = useTr();\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n {\n id: 'admin-dashboard',\n label: tr('admin.nav.dashboard', 'Dashboard'),\n path: joinPath(basePath, 'dashboard'),\n icon: <LayoutDashboard size={20} />,\n order: 10,\n group: 'admin',\n },\n {\n id: 'admin-tenants',\n label: tr('admin.nav.tenants', 'Tenants'),\n path: joinPath(basePath, 'tenants'),\n icon: <Building2 size={20} />,\n order: 20,\n group: 'admin',\n },\n {\n id: 'admin-organizations',\n label: tr('admin.nav.organizations', 'Organizations'),\n path: joinPath(basePath, 'organizations'),\n icon: <Building size={20} />,\n order: 25,\n group: 'admin',\n },\n {\n id: 'admin-workspaces',\n label: tr('admin.nav.workspaces', 'Workspaces'),\n path: joinPath(basePath, 'workspaces'),\n icon: <Layout size={20} />,\n order: 26,\n group: 'admin',\n },\n {\n id: 'admin-users',\n label: tr('admin.nav.users', 'Users'),\n path: joinPath(basePath, 'users'),\n icon: <Users size={20} />,\n order: 30,\n group: 'admin',\n },\n {\n id: 'admin-roles',\n label: tr('admin.nav.rolesAndPermissions', 'Roles & Permissions'),\n path: joinPath(basePath, 'roles'),\n icon: <ShieldCheck size={20} />,\n order: 35,\n group: 'admin',\n },\n {\n id: 'admin-billing',\n label: tr('admin.nav.billing', 'Billing'),\n path: joinPath(basePath, 'billing'),\n icon: <CreditCard size={20} />,\n order: 40,\n group: 'admin',\n children: [\n {\n id: 'admin-billing-subscriptions',\n label: tr('admin.nav.subscriptions', 'Subscriptions'),\n path: joinPath(basePath, 'billing/subscriptions'),\n order: 1,\n },\n {\n id: 'admin-billing-invoices',\n label: tr('admin.nav.invoices', 'Invoices'),\n path: joinPath(basePath, 'billing/invoices'),\n order: 2,\n },\n {\n id: 'admin-billing-plans',\n label: tr('admin.nav.plans', 'Plans'),\n path: joinPath(basePath, 'billing/plans'),\n order: 3,\n },\n ],\n },\n {\n id: 'admin-communications',\n label: tr('admin.nav.communications', 'Communications'),\n path: joinPath(basePath, 'communications'),\n icon: <Mail size={20} />,\n order: 50,\n group: 'admin',\n },\n {\n id: 'admin-feature-flags',\n label: tr('admin.nav.featureFlags', 'Feature Flags'),\n path: joinPath(basePath, 'feature-flags'),\n icon: <ToggleLeft size={20} />,\n order: 60,\n group: 'admin',\n },\n {\n id: 'admin-workflows',\n label: tr('admin.nav.workflows', 'Workflows'),\n path: joinPath(basePath, 'workflows'),\n icon: <GitBranch size={20} />,\n order: 70,\n group: 'admin',\n },\n {\n id: 'admin-sre',\n label: tr('admin.nav.sre', 'SRE'),\n path: joinPath(basePath, 'sre'),\n icon: <Server size={20} />,\n order: 80,\n group: 'admin',\n },\n {\n id: 'admin-sync-failures',\n label: tr('admin.nav.syncFailures', 'Sync Failures'),\n path: joinPath(basePath, 'sync-failures'),\n icon: <AlertOctagon size={20} />,\n order: 82,\n group: 'admin',\n },\n {\n id: 'admin-audit',\n label: tr('admin.nav.auditLogs', 'Audit Logs'),\n path: joinPath(basePath, 'audit'),\n icon: <FileText size={20} />,\n order: 85,\n group: 'admin',\n },\n {\n id: 'admin-referrals',\n label: tr('admin.nav.referrals', 'Referrals'),\n path: joinPath(basePath, 'referrals'),\n icon: <Link2 size={20} />,\n order: 86,\n group: 'admin',\n },\n {\n id: 'admin-sandbox',\n label: tr('admin.nav.sandbox', 'Sandbox'),\n path: joinPath(basePath, 'sandbox'),\n icon: <Box size={20} />,\n order: 87,\n group: 'admin',\n },\n {\n id: 'admin-settings',\n label: tr('admin.nav.settings', 'Settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 90,\n group: 'admin',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n }, [registerNavItems, basePath, tr]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'admin-status',\n label: tr('admin.footer.status', 'Admin Console Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, tr]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId || null} gateway=\"global\" defaultEnabled={true}>\n <AdminProvider {...props}>\n <AdminRoutes />\n </AdminProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -9,14 +9,14 @@ import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
|
9
9
|
import { FeatureGate as d } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
10
10
|
import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
11
11
|
//#region src/admin/AdminRoutes.tsx
|
|
12
|
-
var p = a(() => import("./pages/TenantsListPage.js").then((e) => ({ default: e.TenantsListPage }))), m = a(() => import("./pages/TenantDetailPage.js").then((e) => ({ default: e.TenantDetailPage }))), h = a(() => import("./pages/TenantFormRoutePage.js").then((e) => ({ default: e.TenantFormRoutePage }))), g = a(() => import("./pages/UsersListPage.js").then((e) => ({ default: e.UsersListPage }))), _ = a(() => import("./pages/BillingPage.js").then((e) => ({ default: e.BillingPage }))), v = a(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), y = a(() => import("./pages/CommunicationsPage.js").then((e) => ({ default: e.CommunicationsPage }))), b = a(() => import("./pages/SREPage.js").then((e) => ({ default: e.SREPage }))), x = a(() => import("./pages/SyncFailuresPage.js").then((e) => ({ default: e.SyncFailuresPage }))), S = a(() => import("./pages/AuditLogsPage.js").then((e) => ({ default: e.AuditLogsPage }))), C = a(() => import("./pages/SandboxSettingsPage.js").then((e) => ({ default: e.SandboxSettingsPage }))),
|
|
13
|
-
function
|
|
12
|
+
var p = a(() => import("./pages/TenantsListPage.js").then((e) => ({ default: e.TenantsListPage }))), m = a(() => import("./pages/TenantDetailPage.js").then((e) => ({ default: e.TenantDetailPage }))), h = a(() => import("./pages/TenantFormRoutePage.js").then((e) => ({ default: e.TenantFormRoutePage }))), g = a(() => import("./pages/UsersListPage.js").then((e) => ({ default: e.UsersListPage }))), _ = a(() => import("./pages/BillingPage.js").then((e) => ({ default: e.BillingPage }))), v = a(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), y = a(() => import("./pages/CommunicationsPage.js").then((e) => ({ default: e.CommunicationsPage }))), b = a(() => import("./pages/SREPage.js").then((e) => ({ default: e.SREPage }))), x = a(() => import("./pages/SyncFailuresPage.js").then((e) => ({ default: e.SyncFailuresPage }))), S = a(() => import("./pages/AuditLogsPage.js").then((e) => ({ default: e.AuditLogsPage }))), C = a(() => import("./pages/ExploreConversationsPage.js").then((e) => ({ default: e.ExploreConversationsPage }))), w = a(() => import("./pages/SandboxSettingsPage.js").then((e) => ({ default: e.SandboxSettingsPage }))), T = a(() => import("./pages/OrganizationsListPage.js").then((e) => ({ default: e.OrganizationsListPage }))), E = a(() => import("./pages/WorkspacesListPage.js").then((e) => ({ default: e.WorkspacesListPage }))), D = a(() => import("./pages/FeatureFlagsPage.js").then((e) => ({ default: e.FeatureFlagsPage }))), O = a(() => import("./pages/RolesPermissionsPage.js").then((e) => ({ default: e.RolesPermissionsPage }))), k = a(() => import("./pages/WorkflowsPage.js").then((e) => ({ default: e.WorkflowsPage }))), A = a(() => import("./pages/ProductsPage.js").then((e) => ({ default: e.ProductsPage }))), j = a(() => import("./pages/ContentPagesPage.js").then((e) => ({ default: e.ContentPagesPage }))), M = a(() => import("./pages/WaitlistPage.js").then((e) => ({ default: e.WaitlistPage }))), N = a(() => import("./pages/ReferralsPage.js").then((e) => ({ default: e.ReferralsPage })));
|
|
13
|
+
function P() {
|
|
14
14
|
return /* @__PURE__ */ l("div", {
|
|
15
15
|
className: "flex h-64 items-center justify-center",
|
|
16
16
|
children: /* @__PURE__ */ l("div", { className: "h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent" })
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function F() {
|
|
20
20
|
let { t: e } = f();
|
|
21
21
|
return /* @__PURE__ */ l("div", {
|
|
22
22
|
className: "flex min-h-[400px] items-center justify-center p-8 text-center",
|
|
@@ -29,21 +29,21 @@ function P() {
|
|
|
29
29
|
})] })
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
-
function
|
|
32
|
+
function I(e, t, n) {
|
|
33
33
|
return /* @__PURE__ */ l(d, {
|
|
34
34
|
flag: e,
|
|
35
35
|
defaultValue: n,
|
|
36
|
-
fallback: /* @__PURE__ */ l(
|
|
36
|
+
fallback: /* @__PURE__ */ l(F, {}),
|
|
37
37
|
children: t
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
function
|
|
41
|
-
return e.reduceRight((e, t) =>
|
|
40
|
+
function L(e, t) {
|
|
41
|
+
return e.reduceRight((e, t) => I(t.flag, e, t.defaultValue), t);
|
|
42
42
|
}
|
|
43
|
-
function
|
|
43
|
+
function R() {
|
|
44
44
|
let { basePath: t } = e(), a = t || "/admin";
|
|
45
45
|
return /* @__PURE__ */ l(i, {
|
|
46
|
-
fallback: /* @__PURE__ */ l(
|
|
46
|
+
fallback: /* @__PURE__ */ l(P, {}),
|
|
47
47
|
children: /* @__PURE__ */ u(c, { children: [
|
|
48
48
|
/* @__PURE__ */ l(s, {
|
|
49
49
|
index: !0,
|
|
@@ -58,7 +58,7 @@ function L() {
|
|
|
58
58
|
}),
|
|
59
59
|
/* @__PURE__ */ l(s, {
|
|
60
60
|
path: "tenants",
|
|
61
|
-
element:
|
|
61
|
+
element: L([{
|
|
62
62
|
flag: r.management,
|
|
63
63
|
defaultValue: !0
|
|
64
64
|
}, {
|
|
@@ -68,7 +68,7 @@ function L() {
|
|
|
68
68
|
}),
|
|
69
69
|
/* @__PURE__ */ l(s, {
|
|
70
70
|
path: "tenants/new",
|
|
71
|
-
element:
|
|
71
|
+
element: L([{
|
|
72
72
|
flag: r.management,
|
|
73
73
|
defaultValue: !0
|
|
74
74
|
}, {
|
|
@@ -78,7 +78,7 @@ function L() {
|
|
|
78
78
|
}),
|
|
79
79
|
/* @__PURE__ */ l(s, {
|
|
80
80
|
path: "tenants/:tenantId",
|
|
81
|
-
element:
|
|
81
|
+
element: L([{
|
|
82
82
|
flag: r.management,
|
|
83
83
|
defaultValue: !0
|
|
84
84
|
}, {
|
|
@@ -88,7 +88,7 @@ function L() {
|
|
|
88
88
|
}),
|
|
89
89
|
/* @__PURE__ */ l(s, {
|
|
90
90
|
path: "tenants/:tenantId/edit",
|
|
91
|
-
element:
|
|
91
|
+
element: L([{
|
|
92
92
|
flag: r.management,
|
|
93
93
|
defaultValue: !0
|
|
94
94
|
}, {
|
|
@@ -98,11 +98,11 @@ function L() {
|
|
|
98
98
|
}),
|
|
99
99
|
/* @__PURE__ */ l(s, {
|
|
100
100
|
path: "organizations",
|
|
101
|
-
element: /* @__PURE__ */ l(
|
|
101
|
+
element: /* @__PURE__ */ l(T, {})
|
|
102
102
|
}),
|
|
103
103
|
/* @__PURE__ */ l(s, {
|
|
104
104
|
path: "workspaces",
|
|
105
|
-
element: /* @__PURE__ */ l(
|
|
105
|
+
element: /* @__PURE__ */ l(E, {})
|
|
106
106
|
}),
|
|
107
107
|
/* @__PURE__ */ l(s, {
|
|
108
108
|
path: "users",
|
|
@@ -114,15 +114,15 @@ function L() {
|
|
|
114
114
|
}),
|
|
115
115
|
/* @__PURE__ */ l(s, {
|
|
116
116
|
path: "roles",
|
|
117
|
-
element: /* @__PURE__ */ l(
|
|
117
|
+
element: /* @__PURE__ */ l(O, {})
|
|
118
118
|
}),
|
|
119
119
|
/* @__PURE__ */ l(s, {
|
|
120
120
|
path: "feature-flags",
|
|
121
|
-
element: /* @__PURE__ */ l(
|
|
121
|
+
element: /* @__PURE__ */ l(D, {})
|
|
122
122
|
}),
|
|
123
123
|
/* @__PURE__ */ l(s, {
|
|
124
124
|
path: "workflows",
|
|
125
|
-
element: /* @__PURE__ */ l(
|
|
125
|
+
element: /* @__PURE__ */ l(k, {})
|
|
126
126
|
}),
|
|
127
127
|
/* @__PURE__ */ l(s, {
|
|
128
128
|
path: "billing",
|
|
@@ -163,25 +163,29 @@ function L() {
|
|
|
163
163
|
path: "audit",
|
|
164
164
|
element: /* @__PURE__ */ l(S, {})
|
|
165
165
|
}),
|
|
166
|
+
/* @__PURE__ */ l(s, {
|
|
167
|
+
path: "explore",
|
|
168
|
+
element: /* @__PURE__ */ l(C, {})
|
|
169
|
+
}),
|
|
166
170
|
/* @__PURE__ */ l(s, {
|
|
167
171
|
path: "referrals",
|
|
168
|
-
element: /* @__PURE__ */ l(
|
|
172
|
+
element: /* @__PURE__ */ l(N, {})
|
|
169
173
|
}),
|
|
170
174
|
/* @__PURE__ */ l(s, {
|
|
171
175
|
path: "sandbox",
|
|
172
|
-
element: /* @__PURE__ */ l(
|
|
176
|
+
element: /* @__PURE__ */ l(w, {})
|
|
173
177
|
}),
|
|
174
178
|
/* @__PURE__ */ l(s, {
|
|
175
179
|
path: "products",
|
|
176
|
-
element: /* @__PURE__ */ l(
|
|
180
|
+
element: /* @__PURE__ */ l(A, {})
|
|
177
181
|
}),
|
|
178
182
|
/* @__PURE__ */ l(s, {
|
|
179
183
|
path: "content",
|
|
180
|
-
element: /* @__PURE__ */ l(
|
|
184
|
+
element: /* @__PURE__ */ l(j, {})
|
|
181
185
|
}),
|
|
182
186
|
/* @__PURE__ */ l(s, {
|
|
183
187
|
path: "waitlist",
|
|
184
|
-
element: /* @__PURE__ */ l(
|
|
188
|
+
element: /* @__PURE__ */ l(M, {})
|
|
185
189
|
}),
|
|
186
190
|
/* @__PURE__ */ l(s, {
|
|
187
191
|
path: "settings",
|
|
@@ -198,6 +202,6 @@ function L() {
|
|
|
198
202
|
});
|
|
199
203
|
}
|
|
200
204
|
//#endregion
|
|
201
|
-
export {
|
|
205
|
+
export { R as AdminRoutes };
|
|
202
206
|
|
|
203
207
|
//# sourceMappingURL=AdminRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminRoutes.js","names":[],"sources":["../../src/admin/AdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { Navigate, Route, Routes } from 'react-router';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { DashboardPage } from './pages';\nimport { useAdmin } from './providers/AdminProvider';\nimport { TENANT_FEATURE_FLAGS } from './constants/featureFlags';\nimport { tWithFallback } from './utils/i18n';\n\n// Lazy loaded pages\nconst TenantsListPage = lazy(() =>\n import('./pages/TenantsListPage').then((m) => ({ default: m.TenantsListPage }))\n);\nconst TenantDetailPage = lazy(() =>\n import('./pages/TenantDetailPage').then((m) => ({ default: m.TenantDetailPage }))\n);\nconst TenantFormRoutePage = lazy(() =>\n import('./pages/TenantFormRoutePage').then((m) => ({ default: m.TenantFormRoutePage }))\n);\nconst UsersListPage = lazy(() =>\n import('./pages/UsersListPage').then((m) => ({ default: m.UsersListPage }))\n);\nconst BillingPage = lazy(() =>\n import('./pages/BillingPage').then((m) => ({ default: m.BillingPage }))\n);\nconst SettingsPage = lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\nconst CommunicationsPage = lazy(() =>\n import('./pages/CommunicationsPage').then((m) => ({ default: m.CommunicationsPage }))\n);\nconst SREPage = lazy(() => import('./pages/SREPage').then((m) => ({ default: m.SREPage })));\nconst SyncFailuresPage = lazy(() =>\n import('./pages/SyncFailuresPage').then((m) => ({ default: m.SyncFailuresPage }))\n);\nconst AuditLogsPage = lazy(() =>\n import('./pages/AuditLogsPage').then((m) => ({ default: m.AuditLogsPage }))\n);\nconst SandboxSettingsPage = lazy(() =>\n import('./pages/SandboxSettingsPage').then((m) => ({ default: m.SandboxSettingsPage }))\n);\nconst OrganizationsListPage = lazy(() =>\n import('./pages/OrganizationsListPage').then((m) => ({ default: m.OrganizationsListPage }))\n);\nconst WorkspacesListPage = lazy(() =>\n import('./pages/WorkspacesListPage').then((m) => ({ default: m.WorkspacesListPage }))\n);\nconst FeatureFlagsPage = lazy(() =>\n import('./pages/FeatureFlagsPage').then((m) => ({ default: m.FeatureFlagsPage }))\n);\nconst RolesPermissionsPage = lazy(() =>\n import('./pages/RolesPermissionsPage').then((m) => ({ default: m.RolesPermissionsPage }))\n);\nconst WorkflowsPage = lazy(() =>\n import('./pages/WorkflowsPage').then((m) => ({ default: m.WorkflowsPage }))\n);\nconst ProductsPage = lazy(() =>\n import('./pages/ProductsPage').then((m) => ({ default: m.ProductsPage }))\n);\nconst ContentPagesPage = lazy(() =>\n import('./pages/ContentPagesPage').then((m) => ({ default: m.ContentPagesPage }))\n);\nconst WaitlistPage = lazy(() =>\n import('./pages/WaitlistPage').then((m) => ({ default: m.WaitlistPage }))\n);\nconst ReferralsPage = lazy(() =>\n import('./pages/ReferralsPage').then((m) => ({ default: m.ReferralsPage }))\n);\n\n// Loading fallback component\nfunction PageLoader() {\n return (\n <div className=\"flex h-64 items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n </div>\n );\n}\n\nfunction FeatureDisabledFallback() {\n const { t } = useI18n();\n\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-8 text-center\">\n <div>\n <h2 className=\"mb-2 text-lg font-semibold text-foreground\">\n {tWithFallback(\n t,\n 'admin.routes.tenantFeatureDisabledTitle',\n 'Tenant management unavailable'\n )}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {tWithFallback(\n t,\n 'admin.routes.tenantFeatureDisabled',\n 'This feature is currently disabled.'\n )}\n </p>\n </div>\n </div>\n );\n}\n\nfunction gated(flag: string, element: ReactNode, defaultValue: boolean): ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={defaultValue} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nfunction gatedAll(\n gates: Array<{ flag: string; defaultValue: boolean }>,\n element: ReactElement\n): ReactElement {\n return gates.reduceRight((child, gate) => gated(gate.flag, child, gate.defaultValue), element);\n}\n\n/**\n * Internal router for the Admin microfrontend.\n * This component handles routing within the microfrontend using React Router v7.\n *\n * Routes:\n * - / → Dashboard (redirect)\n * - /dashboard → Dashboard\n * - /tenants → Tenants list\n * - /tenants/new → Create new tenant\n * - /tenants/:tenantId → Tenant detail\n * - /tenants/:tenantId/edit → Edit tenant\n * - /users → Users list\n * - /users/:userId → User detail\n * - /billing → Billing overview\n * - /billing/subscriptions → Subscriptions list\n * - /billing/invoices → Invoices list\n * - /billing/plans → Plans management\n * - /support → Support overview\n * - /support/tickets → Tickets list\n * - /support/tickets/:ticketId → Ticket detail\n * - /products → Products management\n * - /communications → Communications center\n * - /sre → SRE Monitoring\n * - /audit → Audit logs\n * - /sandbox → Sandbox settings\n * - /settings → Settings\n */\nexport function AdminRoutes() {\n const { basePath } = useAdmin();\n const base = basePath || '/admin';\n\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Default redirect to dashboard */}\n <Route index element={<Navigate to={`${base}/dashboard`} replace />} />\n\n {/* Dashboard - eager loaded for fast initial render */}\n <Route path=\"dashboard\" element={<DashboardPage />} />\n\n {/* Tenants */}\n <Route\n path=\"tenants\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.list, defaultValue: true },\n ],\n <TenantsListPage />\n )}\n />\n <Route\n path=\"tenants/new\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.create, defaultValue: true },\n ],\n <TenantFormRoutePage mode=\"create\" />\n )}\n />\n <Route\n path=\"tenants/:tenantId\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.detail, defaultValue: true },\n ],\n <TenantDetailPage />\n )}\n />\n <Route\n path=\"tenants/:tenantId/edit\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.edit, defaultValue: true },\n ],\n <TenantFormRoutePage mode=\"edit\" />\n )}\n />\n\n {/* Organizations */}\n <Route path=\"organizations\" element={<OrganizationsListPage />} />\n\n {/* Workspaces */}\n <Route path=\"workspaces\" element={<WorkspacesListPage />} />\n\n {/* Users */}\n <Route path=\"users\" element={<UsersListPage />} />\n <Route path=\"users/:userId\" element={<UsersListPage />} />\n\n {/* Roles & Permissions */}\n <Route path=\"roles\" element={<RolesPermissionsPage />} />\n\n {/* Feature Flags */}\n <Route path=\"feature-flags\" element={<FeatureFlagsPage />} />\n\n {/* Workflows */}\n <Route path=\"workflows\" element={<WorkflowsPage />} />\n\n {/* Billing */}\n <Route path=\"billing\" element={<BillingPage />} />\n <Route path=\"billing/subscriptions\" element={<BillingPage />} />\n <Route path=\"billing/invoices\" element={<BillingPage />} />\n <Route path=\"billing/plans\" element={<BillingPage />} />\n\n {/* Support — redirects to shell-level /support/* route (microfe-support MFE) */}\n <Route path=\"support/*\" element={<Navigate to=\"/support\" replace />} />\n\n {/* Communications */}\n <Route path=\"communications\" element={<CommunicationsPage />} />\n\n {/* SRE Monitoring */}\n <Route path=\"sre\" element={<SREPage />} />\n\n {/* Sync Failures (cross-layer sync outbox) */}\n <Route path=\"sync-failures\" element={<SyncFailuresPage />} />\n\n {/* Audit Logs */}\n <Route path=\"audit\" element={<AuditLogsPage />} />\n\n {/* Referrals */}\n <Route path=\"referrals\" element={<ReferralsPage />} />\n\n {/* Sandbox */}\n <Route path=\"sandbox\" element={<SandboxSettingsPage />} />\n\n {/* Products */}\n <Route path=\"products\" element={<ProductsPage />} />\n\n {/* Content (blog / case studies / changelog) */}\n <Route path=\"content\" element={<ContentPagesPage />} />\n\n {/* Waitlist */}\n <Route path=\"waitlist\" element={<WaitlistPage />} />\n\n {/* Settings */}\n <Route path=\"settings\" element={<SettingsPage />} />\n\n {/* Catch-all route - redirect to dashboard (absolute path to prevent infinite loops) */}\n <Route path=\"*\" element={<Navigate to={`${base}/dashboard`} replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,IAAkB,QACtB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChF,EACK,IAAmB,QACvB,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClF,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAc,QAClB,OAAO,0BAAuB,MAAM,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CACxE,EACK,IAAe,QACnB,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAC1E,EACK,IAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EACK,IAAU,QAAW,OAAO,sBAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EACrF,IAAmB,QACvB,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClF,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,IAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EACK,IAAmB,QACvB,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClF,EACK,IAAuB,QAC3B,OAAO,mCAAgC,MAAM,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAC1F,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAe,QACnB,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAC1E,EACK,IAAmB,QACvB,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClF,EACK,IAAe,QACnB,OAAO,2BAAwB,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAC1E,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E;AAGD,SAAS,IAAa;AACpB,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA;;AAIV,SAAS,IAA0B;CACjC,IAAM,EAAE,SAAM,GAAS;AAEvB,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aACX,EACC,GACA,2CACA,gCACD;GACE,CAAA,EACL,kBAAC,KAAD;GAAG,WAAU;aACV,EACC,GACA,sCACA,sCACD;GACC,CAAA,CACA,EAAA,CAAA;EACF,CAAA;;AAIV,SAAS,EAAM,GAAc,GAAoB,GAAqC;AACpF,QACE,kBAAC,GAAD;EAAmB;EAAoB;EAAc,UAAU,kBAAC,GAAD,EAA2B,CAAA;YACvF;EACW,CAAA;;AAIlB,SAAS,EACP,GACA,GACc;AACd,QAAO,EAAM,aAAa,GAAO,MAAS,EAAM,EAAK,MAAM,GAAO,EAAK,aAAa,EAAE,EAAQ;;AA8BhG,SAAgB,IAAc;CAC5B,IAAM,EAAE,gBAAa,GAAU,EACzB,IAAO,KAAY;AAEzB,QACE,kBAAC,GAAD;EAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;YAChC,kBAAC,GAAD,EAAA,UAAA;GAEE,kBAAC,GAAD;IAAO,OAAA;IAAM,SAAS,kBAAC,GAAD;KAAU,IAAI,GAAG,EAAK;KAAa,SAAA;KAAU,CAAA;IAAI,CAAA;GAGvE,kBAAC,GAAD;IAAO,MAAK;IAAY,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAGtD,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,EACP,CACE;KAAE,MAAM,EAAqB;KAAY,cAAc;KAAM,EAC7D;KAAE,MAAM,EAAqB;KAAM,cAAc;KAAM,CACxD,EACD,kBAAC,GAAD,EAAmB,CAAA,CACpB;IACD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,EACP,CACE;KAAE,MAAM,EAAqB;KAAY,cAAc;KAAM,EAC7D;KAAE,MAAM,EAAqB;KAAQ,cAAc;KAAM,CAC1D,EACD,kBAAC,GAAD,EAAqB,MAAK,UAAW,CAAA,CACtC;IACD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,EACP,CACE;KAAE,MAAM,EAAqB;KAAY,cAAc;KAAM,EAC7D;KAAE,MAAM,EAAqB;KAAQ,cAAc;KAAM,CAC1D,EACD,kBAAC,GAAD,EAAoB,CAAA,CACrB;IACD,CAAA;GACF,kBAAC,GAAD;IACE,MAAK;IACL,SAAS,EACP,CACE;KAAE,MAAM,EAAqB;KAAY,cAAc;KAAM,EAC7D;KAAE,MAAM,EAAqB;KAAM,cAAc;KAAM,CACxD,EACD,kBAAC,GAAD,EAAqB,MAAK,QAAS,CAAA,CACpC;IACD,CAAA;GAGF,kBAAC,GAAD;IAAO,MAAK;IAAgB,SAAS,kBAAC,GAAD,EAAyB,CAAA;IAAI,CAAA;GAGlE,kBAAC,GAAD;IAAO,MAAK;IAAa,SAAS,kBAAC,GAAD,EAAsB,CAAA;IAAI,CAAA;GAG5D,kBAAC,GAAD;IAAO,MAAK;IAAQ,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAClD,kBAAC,GAAD;IAAO,MAAK;IAAgB,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAG1D,kBAAC,GAAD;IAAO,MAAK;IAAQ,SAAS,kBAAC,GAAD,EAAwB,CAAA;IAAI,CAAA;GAGzD,kBAAC,GAAD;IAAO,MAAK;IAAgB,SAAS,kBAAC,GAAD,EAAoB,CAAA;IAAI,CAAA;GAG7D,kBAAC,GAAD;IAAO,MAAK;IAAY,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAGtD,kBAAC,GAAD;IAAO,MAAK;IAAU,SAAS,kBAAC,GAAD,EAAe,CAAA;IAAI,CAAA;GAClD,kBAAC,GAAD;IAAO,MAAK;IAAwB,SAAS,kBAAC,GAAD,EAAe,CAAA;IAAI,CAAA;GAChE,kBAAC,GAAD;IAAO,MAAK;IAAmB,SAAS,kBAAC,GAAD,EAAe,CAAA;IAAI,CAAA;GAC3D,kBAAC,GAAD;IAAO,MAAK;IAAgB,SAAS,kBAAC,GAAD,EAAe,CAAA;IAAI,CAAA;GAGxD,kBAAC,GAAD;IAAO,MAAK;IAAY,SAAS,kBAAC,GAAD;KAAU,IAAG;KAAW,SAAA;KAAU,CAAA;IAAI,CAAA;GAGvE,kBAAC,GAAD;IAAO,MAAK;IAAiB,SAAS,kBAAC,GAAD,EAAsB,CAAA;IAAI,CAAA;GAGhE,kBAAC,GAAD;IAAO,MAAK;IAAM,SAAS,kBAAC,GAAD,EAAW,CAAA;IAAI,CAAA;GAG1C,kBAAC,GAAD;IAAO,MAAK;IAAgB,SAAS,kBAAC,GAAD,EAAoB,CAAA;IAAI,CAAA;GAG7D,kBAAC,GAAD;IAAO,MAAK;IAAQ,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAGlD,kBAAC,GAAD;IAAO,MAAK;IAAY,SAAS,kBAAC,GAAD,EAAiB,CAAA;IAAI,CAAA;GAGtD,kBAAC,GAAD;IAAO,MAAK;IAAU,SAAS,kBAAC,GAAD,EAAuB,CAAA;IAAI,CAAA;GAG1D,kBAAC,GAAD;IAAO,MAAK;IAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;IAAI,CAAA;GAGpD,kBAAC,GAAD;IAAO,MAAK;IAAU,SAAS,kBAAC,GAAD,EAAoB,CAAA;IAAI,CAAA;GAGvD,kBAAC,GAAD;IAAO,MAAK;IAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;IAAI,CAAA;GAGpD,kBAAC,GAAD;IAAO,MAAK;IAAW,SAAS,kBAAC,GAAD,EAAgB,CAAA;IAAI,CAAA;GAGpD,kBAAC,GAAD;IAAO,MAAK;IAAI,SAAS,kBAAC,GAAD;KAAU,IAAI,GAAG,EAAK;KAAa,SAAA;KAAU,CAAA;IAAI,CAAA;GACnE,EAAA,CAAA;EACA,CAAA"}
|
|
1
|
+
{"version":3,"file":"AdminRoutes.js","names":[],"sources":["../../src/admin/AdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { Navigate, Route, Routes } from 'react-router';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { DashboardPage } from './pages';\nimport { useAdmin } from './providers/AdminProvider';\nimport { TENANT_FEATURE_FLAGS } from './constants/featureFlags';\nimport { tWithFallback } from './utils/i18n';\n\n// Lazy loaded pages\nconst TenantsListPage = lazy(() =>\n import('./pages/TenantsListPage').then((m) => ({ default: m.TenantsListPage }))\n);\nconst TenantDetailPage = lazy(() =>\n import('./pages/TenantDetailPage').then((m) => ({ default: m.TenantDetailPage }))\n);\nconst TenantFormRoutePage = lazy(() =>\n import('./pages/TenantFormRoutePage').then((m) => ({ default: m.TenantFormRoutePage }))\n);\nconst UsersListPage = lazy(() =>\n import('./pages/UsersListPage').then((m) => ({ default: m.UsersListPage }))\n);\nconst BillingPage = lazy(() =>\n import('./pages/BillingPage').then((m) => ({ default: m.BillingPage }))\n);\nconst SettingsPage = lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\nconst CommunicationsPage = lazy(() =>\n import('./pages/CommunicationsPage').then((m) => ({ default: m.CommunicationsPage }))\n);\nconst SREPage = lazy(() => import('./pages/SREPage').then((m) => ({ default: m.SREPage })));\nconst SyncFailuresPage = lazy(() =>\n import('./pages/SyncFailuresPage').then((m) => ({ default: m.SyncFailuresPage }))\n);\nconst AuditLogsPage = lazy(() =>\n import('./pages/AuditLogsPage').then((m) => ({ default: m.AuditLogsPage }))\n);\nconst ExploreConversationsPage = lazy(() =>\n import('./pages/ExploreConversationsPage').then((m) => ({\n default: m.ExploreConversationsPage,\n }))\n);\nconst SandboxSettingsPage = lazy(() =>\n import('./pages/SandboxSettingsPage').then((m) => ({ default: m.SandboxSettingsPage }))\n);\nconst OrganizationsListPage = lazy(() =>\n import('./pages/OrganizationsListPage').then((m) => ({ default: m.OrganizationsListPage }))\n);\nconst WorkspacesListPage = lazy(() =>\n import('./pages/WorkspacesListPage').then((m) => ({ default: m.WorkspacesListPage }))\n);\nconst FeatureFlagsPage = lazy(() =>\n import('./pages/FeatureFlagsPage').then((m) => ({ default: m.FeatureFlagsPage }))\n);\nconst RolesPermissionsPage = lazy(() =>\n import('./pages/RolesPermissionsPage').then((m) => ({ default: m.RolesPermissionsPage }))\n);\nconst WorkflowsPage = lazy(() =>\n import('./pages/WorkflowsPage').then((m) => ({ default: m.WorkflowsPage }))\n);\nconst ProductsPage = lazy(() =>\n import('./pages/ProductsPage').then((m) => ({ default: m.ProductsPage }))\n);\nconst ContentPagesPage = lazy(() =>\n import('./pages/ContentPagesPage').then((m) => ({ default: m.ContentPagesPage }))\n);\nconst WaitlistPage = lazy(() =>\n import('./pages/WaitlistPage').then((m) => ({ default: m.WaitlistPage }))\n);\nconst ReferralsPage = lazy(() =>\n import('./pages/ReferralsPage').then((m) => ({ default: m.ReferralsPage }))\n);\n\n// Loading fallback component\nfunction PageLoader() {\n return (\n <div className=\"flex h-64 items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n </div>\n );\n}\n\nfunction FeatureDisabledFallback() {\n const { t } = useI18n();\n\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-8 text-center\">\n <div>\n <h2 className=\"mb-2 text-lg font-semibold text-foreground\">\n {tWithFallback(\n t,\n 'admin.routes.tenantFeatureDisabledTitle',\n 'Tenant management unavailable'\n )}\n </h2>\n <p className=\"text-sm text-muted-foreground\">\n {tWithFallback(\n t,\n 'admin.routes.tenantFeatureDisabled',\n 'This feature is currently disabled.'\n )}\n </p>\n </div>\n </div>\n );\n}\n\nfunction gated(flag: string, element: ReactNode, defaultValue: boolean): ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={defaultValue} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nfunction gatedAll(\n gates: Array<{ flag: string; defaultValue: boolean }>,\n element: ReactElement\n): ReactElement {\n return gates.reduceRight((child, gate) => gated(gate.flag, child, gate.defaultValue), element);\n}\n\n/**\n * Internal router for the Admin microfrontend.\n * This component handles routing within the microfrontend using React Router v7.\n *\n * Routes:\n * - / → Dashboard (redirect)\n * - /dashboard → Dashboard\n * - /tenants → Tenants list\n * - /tenants/new → Create new tenant\n * - /tenants/:tenantId → Tenant detail\n * - /tenants/:tenantId/edit → Edit tenant\n * - /users → Users list\n * - /users/:userId → User detail\n * - /billing → Billing overview\n * - /billing/subscriptions → Subscriptions list\n * - /billing/invoices → Invoices list\n * - /billing/plans → Plans management\n * - /support → Support overview\n * - /support/tickets → Tickets list\n * - /support/tickets/:ticketId → Ticket detail\n * - /products → Products management\n * - /communications → Communications center\n * - /sre → SRE Monitoring\n * - /audit → Audit logs\n * - /sandbox → Sandbox settings\n * - /settings → Settings\n */\nexport function AdminRoutes() {\n const { basePath } = useAdmin();\n const base = basePath || '/admin';\n\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Default redirect to dashboard */}\n <Route index element={<Navigate to={`${base}/dashboard`} replace />} />\n\n {/* Dashboard - eager loaded for fast initial render */}\n <Route path=\"dashboard\" element={<DashboardPage />} />\n\n {/* Tenants */}\n <Route\n path=\"tenants\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.list, defaultValue: true },\n ],\n <TenantsListPage />\n )}\n />\n <Route\n path=\"tenants/new\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.create, defaultValue: true },\n ],\n <TenantFormRoutePage mode=\"create\" />\n )}\n />\n <Route\n path=\"tenants/:tenantId\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.detail, defaultValue: true },\n ],\n <TenantDetailPage />\n )}\n />\n <Route\n path=\"tenants/:tenantId/edit\"\n element={gatedAll(\n [\n { flag: TENANT_FEATURE_FLAGS.management, defaultValue: true },\n { flag: TENANT_FEATURE_FLAGS.edit, defaultValue: true },\n ],\n <TenantFormRoutePage mode=\"edit\" />\n )}\n />\n\n {/* Organizations */}\n <Route path=\"organizations\" element={<OrganizationsListPage />} />\n\n {/* Workspaces */}\n <Route path=\"workspaces\" element={<WorkspacesListPage />} />\n\n {/* Users */}\n <Route path=\"users\" element={<UsersListPage />} />\n <Route path=\"users/:userId\" element={<UsersListPage />} />\n\n {/* Roles & Permissions */}\n <Route path=\"roles\" element={<RolesPermissionsPage />} />\n\n {/* Feature Flags */}\n <Route path=\"feature-flags\" element={<FeatureFlagsPage />} />\n\n {/* Workflows */}\n <Route path=\"workflows\" element={<WorkflowsPage />} />\n\n {/* Billing */}\n <Route path=\"billing\" element={<BillingPage />} />\n <Route path=\"billing/subscriptions\" element={<BillingPage />} />\n <Route path=\"billing/invoices\" element={<BillingPage />} />\n <Route path=\"billing/plans\" element={<BillingPage />} />\n\n {/* Support — redirects to shell-level /support/* route (microfe-support MFE) */}\n <Route path=\"support/*\" element={<Navigate to=\"/support\" replace />} />\n\n {/* Communications */}\n <Route path=\"communications\" element={<CommunicationsPage />} />\n\n {/* SRE Monitoring */}\n <Route path=\"sre\" element={<SREPage />} />\n\n {/* Sync Failures (cross-layer sync outbox) */}\n <Route path=\"sync-failures\" element={<SyncFailuresPage />} />\n\n {/* Audit Logs */}\n <Route path=\"audit\" element={<AuditLogsPage />} />\n <Route path=\"explore\" element={<ExploreConversationsPage />} />\n\n {/* Referrals */}\n <Route path=\"referrals\" element={<ReferralsPage />} />\n\n {/* Sandbox */}\n <Route path=\"sandbox\" element={<SandboxSettingsPage />} />\n\n {/* Products */}\n <Route path=\"products\" element={<ProductsPage />} />\n\n {/* Content (blog / case studies / changelog) */}\n <Route path=\"content\" element={<ContentPagesPage />} />\n\n {/* Waitlist */}\n <Route path=\"waitlist\" element={<WaitlistPage />} />\n\n {/* Settings */}\n <Route path=\"settings\" element={<SettingsPage />} />\n\n {/* Catch-all route - redirect to dashboard (absolute path to prevent infinite loops) */}\n <Route path=\"*\" element={<Navigate to={`${base}/dashboard`} replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
|