@burdenoff/microfe-store 2026.1028.1 → 2026.1102.1
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/StoreAdminRoutes.js +22 -12
- package/dist/StoreAdminRoutes.js.map +1 -1
- package/dist/StoreRoot.js +47 -36
- package/dist/StoreRoot.js.map +1 -1
- package/dist/StoreRoutes.js +72 -59
- package/dist/StoreRoutes.js.map +1 -1
- package/dist/components/TemplateRevisionsQueue.d.ts +10 -0
- package/dist/components/TemplateRevisionsQueue.js +300 -0
- package/dist/components/TemplateRevisionsQueue.js.map +1 -0
- package/dist/components/WorkflowTemplatePreviewPanel.d.ts +50 -0
- package/dist/components/WorkflowTemplatePreviewPanel.js +221 -0
- package/dist/components/WorkflowTemplatePreviewPanel.js.map +1 -0
- package/dist/components/governance/ReportListingCard.d.ts +11 -0
- package/dist/components/governance/ReportListingCard.js +100 -0
- package/dist/components/governance/ReportListingCard.js.map +1 -0
- package/dist/pages/AdminDashboardPage.js +48 -27
- package/dist/pages/AdminDashboardPage.js.map +1 -1
- package/dist/pages/AdminGovernancePage.d.ts +3 -0
- package/dist/pages/AdminGovernancePage.js +883 -0
- package/dist/pages/AdminGovernancePage.js.map +1 -0
- package/dist/pages/AdminSubmissionsQueuePage.js +468 -335
- package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
- package/dist/pages/ProductDetailPage.js +220 -215
- package/dist/pages/ProductDetailPage.js.map +1 -1
- package/dist/pages/PublisherGovernancePage.d.ts +3 -0
- package/dist/pages/PublisherGovernancePage.js +230 -0
- package/dist/pages/PublisherGovernancePage.js.map +1 -0
- package/dist/utils/governance.d.ts +158 -0
- package/dist/utils/governance.js +129 -0
- package/dist/utils/governance.js.map +1 -0
- package/package.json +1 -1
package/dist/StoreAdminRoutes.js
CHANGED
|
@@ -5,8 +5,8 @@ import { Suspense as i, lazy as a } from "react";
|
|
|
5
5
|
import { Navigate as o, Route as s, Routes as c } from "react-router";
|
|
6
6
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
7
7
|
//#region src/StoreAdminRoutes.tsx
|
|
8
|
-
var d = a(() => import("./pages/AdminDashboardPage.js").then((e) => ({ default: e.AdminDashboardPage }))), f = a(() => import("./pages/AdminSubmissionsQueuePage.js").then((e) => ({ default: e.AdminSubmissionsQueuePage }))), p = a(() => import("./pages/AdminStoresPage.js").then((e) => ({ default: e.AdminStoresPage }))), m = a(() => import("./pages/AdminReviewModerationPage.js").then((e) => ({ default: e.AdminReviewModerationPage }))), h = a(() => import("./pages/AdminOrdersPage.js").then((e) => ({ default: e.AdminOrdersPage }))),
|
|
9
|
-
let { hasPermission: a } = t(),
|
|
8
|
+
var d = a(() => import("./pages/AdminDashboardPage.js").then((e) => ({ default: e.AdminDashboardPage }))), f = a(() => import("./pages/AdminSubmissionsQueuePage.js").then((e) => ({ default: e.AdminSubmissionsQueuePage }))), p = a(() => import("./pages/AdminStoresPage.js").then((e) => ({ default: e.AdminStoresPage }))), m = a(() => import("./pages/AdminReviewModerationPage.js").then((e) => ({ default: e.AdminReviewModerationPage }))), h = a(() => import("./pages/AdminGovernancePage.js").then((e) => ({ default: e.AdminGovernancePage }))), g = a(() => import("./pages/AdminOrdersPage.js").then((e) => ({ default: e.AdminOrdersPage }))), _ = a(() => import("./pages/AdminFulfillmentLogsPage.js").then((e) => ({ default: e.AdminFulfillmentLogsPage }))), v = a(() => import("./pages/AdminNodeSandboxBuildsPage.js").then((e) => ({ default: e.AdminNodeSandboxBuildsPage }))), y = () => {
|
|
9
|
+
let { hasPermission: a } = t(), y = a(e.REVIEW_ADMIN) || a(e.PRODUCT_ADMIN);
|
|
10
10
|
return /* @__PURE__ */ u(c, { children: [
|
|
11
11
|
/* @__PURE__ */ l(s, {
|
|
12
12
|
index: !0,
|
|
@@ -18,7 +18,7 @@ var d = a(() => import("./pages/AdminDashboardPage.js").then((e) => ({ default:
|
|
|
18
18
|
/* @__PURE__ */ l(s, {
|
|
19
19
|
path: "dashboard",
|
|
20
20
|
element: /* @__PURE__ */ l(n, {
|
|
21
|
-
allowed:
|
|
21
|
+
allowed: y,
|
|
22
22
|
children: /* @__PURE__ */ l(i, {
|
|
23
23
|
fallback: /* @__PURE__ */ l(r, {}),
|
|
24
24
|
children: /* @__PURE__ */ l(d, {})
|
|
@@ -28,17 +28,27 @@ var d = a(() => import("./pages/AdminDashboardPage.js").then((e) => ({ default:
|
|
|
28
28
|
/* @__PURE__ */ l(s, {
|
|
29
29
|
path: "submissions",
|
|
30
30
|
element: /* @__PURE__ */ l(n, {
|
|
31
|
-
allowed:
|
|
31
|
+
allowed: y,
|
|
32
32
|
children: /* @__PURE__ */ l(i, {
|
|
33
33
|
fallback: /* @__PURE__ */ l(r, {}),
|
|
34
34
|
children: /* @__PURE__ */ l(f, {})
|
|
35
35
|
})
|
|
36
36
|
})
|
|
37
37
|
}),
|
|
38
|
+
/* @__PURE__ */ l(s, {
|
|
39
|
+
path: "governance",
|
|
40
|
+
element: /* @__PURE__ */ l(n, {
|
|
41
|
+
allowed: y,
|
|
42
|
+
children: /* @__PURE__ */ l(i, {
|
|
43
|
+
fallback: /* @__PURE__ */ l(r, {}),
|
|
44
|
+
children: /* @__PURE__ */ l(h, {})
|
|
45
|
+
})
|
|
46
|
+
})
|
|
47
|
+
}),
|
|
38
48
|
/* @__PURE__ */ l(s, {
|
|
39
49
|
path: "stores",
|
|
40
50
|
element: /* @__PURE__ */ l(n, {
|
|
41
|
-
allowed:
|
|
51
|
+
allowed: y,
|
|
42
52
|
children: /* @__PURE__ */ l(i, {
|
|
43
53
|
fallback: /* @__PURE__ */ l(r, {}),
|
|
44
54
|
children: /* @__PURE__ */ l(p, {})
|
|
@@ -48,30 +58,30 @@ var d = a(() => import("./pages/AdminDashboardPage.js").then((e) => ({ default:
|
|
|
48
58
|
/* @__PURE__ */ l(s, {
|
|
49
59
|
path: "orders",
|
|
50
60
|
element: /* @__PURE__ */ l(n, {
|
|
51
|
-
allowed:
|
|
61
|
+
allowed: y,
|
|
52
62
|
children: /* @__PURE__ */ l(i, {
|
|
53
63
|
fallback: /* @__PURE__ */ l(r, {}),
|
|
54
|
-
children: /* @__PURE__ */ l(
|
|
64
|
+
children: /* @__PURE__ */ l(g, {})
|
|
55
65
|
})
|
|
56
66
|
})
|
|
57
67
|
}),
|
|
58
68
|
/* @__PURE__ */ l(s, {
|
|
59
69
|
path: "fulfillment-logs",
|
|
60
70
|
element: /* @__PURE__ */ l(n, {
|
|
61
|
-
allowed:
|
|
71
|
+
allowed: y,
|
|
62
72
|
children: /* @__PURE__ */ l(i, {
|
|
63
73
|
fallback: /* @__PURE__ */ l(r, {}),
|
|
64
|
-
children: /* @__PURE__ */ l(
|
|
74
|
+
children: /* @__PURE__ */ l(_, {})
|
|
65
75
|
})
|
|
66
76
|
})
|
|
67
77
|
}),
|
|
68
78
|
/* @__PURE__ */ l(s, {
|
|
69
79
|
path: "sandbox-builds",
|
|
70
80
|
element: /* @__PURE__ */ l(n, {
|
|
71
|
-
allowed:
|
|
81
|
+
allowed: y,
|
|
72
82
|
children: /* @__PURE__ */ l(i, {
|
|
73
83
|
fallback: /* @__PURE__ */ l(r, {}),
|
|
74
|
-
children: /* @__PURE__ */ l(
|
|
84
|
+
children: /* @__PURE__ */ l(v, {})
|
|
75
85
|
})
|
|
76
86
|
})
|
|
77
87
|
}),
|
|
@@ -95,6 +105,6 @@ var d = a(() => import("./pages/AdminDashboardPage.js").then((e) => ({ default:
|
|
|
95
105
|
] });
|
|
96
106
|
};
|
|
97
107
|
//#endregion
|
|
98
|
-
export {
|
|
108
|
+
export { y as StoreAdminRoutes };
|
|
99
109
|
|
|
100
110
|
//# sourceMappingURL=StoreAdminRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreAdminRoutes.js","names":[],"sources":["../src/StoreAdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC } from 'react';\nimport { Routes, Route, Navigate } from 'react-router';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { PageLoadingFallback, PermissionGuard } from './components/RouteGuards';\n\nconst AdminDashboardPage = lazy(() =>\n import('./pages/AdminDashboardPage').then((m) => ({\n default: m.AdminDashboardPage,\n }))\n);\n\nconst AdminSubmissionsQueuePage = lazy(() =>\n import('./pages/AdminSubmissionsQueuePage').then((m) => ({\n default: m.AdminSubmissionsQueuePage,\n }))\n);\n\nconst AdminStoresPage = lazy(() =>\n import('./pages/AdminStoresPage').then((m) => ({\n default: m.AdminStoresPage,\n }))\n);\n\nconst AdminReviewModerationPage = lazy(() =>\n import('./pages/AdminReviewModerationPage').then((m) => ({\n default: m.AdminReviewModerationPage,\n }))\n);\n\nconst AdminOrdersPage = lazy(() =>\n import('./pages/AdminOrdersPage').then((m) => ({\n default: m.AdminOrdersPage,\n }))\n);\n\nconst AdminFulfillmentLogsPage = lazy(() =>\n import('./pages/AdminFulfillmentLogsPage').then((m) => ({\n default: m.AdminFulfillmentLogsPage,\n }))\n);\n\nconst AdminNodeSandboxBuildsPage = lazy(() =>\n import('./pages/AdminNodeSandboxBuildsPage').then((m) => ({\n default: m.AdminNodeSandboxBuildsPage,\n }))\n);\n\n/**\n * StoreAdminRoutes component\n *\n * Admin-only routing for the Store microfrontend.\n * Mounted by the admin app shell via StoreAdminRoot.\n */\nexport const StoreAdminRoutes: FC = () => {\n const { hasPermission } = useStorePermissions();\n const isAdmin =\n hasPermission(STORE_PERMISSIONS.REVIEW_ADMIN) || hasPermission(STORE_PERMISSIONS.PRODUCT_ADMIN);\n\n return (\n <Routes>\n {/* Default redirect to dashboard */}\n <Route index element={<Navigate to=\"/store/dashboard\" replace />} />\n\n <Route\n path=\"dashboard\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminDashboardPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"submissions\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminSubmissionsQueuePage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"stores\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminStoresPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"orders\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminOrdersPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"fulfillment-logs\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminFulfillmentLogsPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"sandbox-builds\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminNodeSandboxBuildsPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"reviews\"\n element={\n <PermissionGuard allowed={hasPermission(STORE_PERMISSIONS.REVIEW_ADMIN)}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminReviewModerationPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to=\"/store/dashboard\" replace />} />\n </Routes>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StoreAdminRoutes.js","names":[],"sources":["../src/StoreAdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC } from 'react';\nimport { Routes, Route, Navigate } from 'react-router';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { PageLoadingFallback, PermissionGuard } from './components/RouteGuards';\n\nconst AdminDashboardPage = lazy(() =>\n import('./pages/AdminDashboardPage').then((m) => ({\n default: m.AdminDashboardPage,\n }))\n);\n\nconst AdminSubmissionsQueuePage = lazy(() =>\n import('./pages/AdminSubmissionsQueuePage').then((m) => ({\n default: m.AdminSubmissionsQueuePage,\n }))\n);\n\nconst AdminStoresPage = lazy(() =>\n import('./pages/AdminStoresPage').then((m) => ({\n default: m.AdminStoresPage,\n }))\n);\n\nconst AdminReviewModerationPage = lazy(() =>\n import('./pages/AdminReviewModerationPage').then((m) => ({\n default: m.AdminReviewModerationPage,\n }))\n);\n\nconst AdminGovernancePage = lazy(() =>\n import('./pages/AdminGovernancePage').then((m) => ({\n default: m.AdminGovernancePage,\n }))\n);\n\nconst AdminOrdersPage = lazy(() =>\n import('./pages/AdminOrdersPage').then((m) => ({\n default: m.AdminOrdersPage,\n }))\n);\n\nconst AdminFulfillmentLogsPage = lazy(() =>\n import('./pages/AdminFulfillmentLogsPage').then((m) => ({\n default: m.AdminFulfillmentLogsPage,\n }))\n);\n\nconst AdminNodeSandboxBuildsPage = lazy(() =>\n import('./pages/AdminNodeSandboxBuildsPage').then((m) => ({\n default: m.AdminNodeSandboxBuildsPage,\n }))\n);\n\n/**\n * StoreAdminRoutes component\n *\n * Admin-only routing for the Store microfrontend.\n * Mounted by the admin app shell via StoreAdminRoot.\n */\nexport const StoreAdminRoutes: FC = () => {\n const { hasPermission } = useStorePermissions();\n const isAdmin =\n hasPermission(STORE_PERMISSIONS.REVIEW_ADMIN) || hasPermission(STORE_PERMISSIONS.PRODUCT_ADMIN);\n\n return (\n <Routes>\n {/* Default redirect to dashboard */}\n <Route index element={<Navigate to=\"/store/dashboard\" replace />} />\n\n <Route\n path=\"dashboard\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminDashboardPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"submissions\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminSubmissionsQueuePage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"governance\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminGovernancePage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"stores\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminStoresPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"orders\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminOrdersPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"fulfillment-logs\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminFulfillmentLogsPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"sandbox-builds\"\n element={\n <PermissionGuard allowed={isAdmin}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminNodeSandboxBuildsPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n <Route\n path=\"reviews\"\n element={\n <PermissionGuard allowed={hasPermission(STORE_PERMISSIONS.REVIEW_ADMIN)}>\n <Suspense fallback={<PageLoadingFallback />}>\n <AdminReviewModerationPage />\n </Suspense>\n </PermissionGuard>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to=\"/store/dashboard\" replace />} />\n </Routes>\n );\n};\n"],"mappings":"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"}
|
package/dist/StoreRoot.js
CHANGED
|
@@ -7,34 +7,34 @@ import { useLocation as c } from "react-router";
|
|
|
7
7
|
import { ErrorBoundary as l } from "@burdenoff/fe-libs/shared/components";
|
|
8
8
|
import { FeatureFlagProvider as u } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
9
9
|
import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
10
|
-
import { Key as f, Package as p, PackageSearch as m, Receipt as h,
|
|
11
|
-
import { jsx as
|
|
10
|
+
import { Key as f, Package as p, PackageSearch as m, Receipt as h, Scale as g, ShoppingBag as _, ShoppingCart as v, TicketCheck as y } from "lucide-react";
|
|
11
|
+
import { jsx as b } from "react/jsx-runtime";
|
|
12
12
|
//#region src/StoreRoot.tsx
|
|
13
|
-
var
|
|
13
|
+
var x = (t) => {
|
|
14
14
|
let { t: n } = d();
|
|
15
|
-
return /* @__PURE__ */
|
|
15
|
+
return /* @__PURE__ */ b(u, {
|
|
16
16
|
workspaceId: t.workspaceId ?? null,
|
|
17
17
|
gateway: "global",
|
|
18
18
|
defaultEnabled: !0,
|
|
19
|
-
children: /* @__PURE__ */
|
|
20
|
-
fallback: /* @__PURE__ */
|
|
19
|
+
children: /* @__PURE__ */ b(l, {
|
|
20
|
+
fallback: /* @__PURE__ */ b("div", {
|
|
21
21
|
className: "p-6 text-center text-text-secondary",
|
|
22
22
|
children: n("common.moduleLoadError", { defaultValue: "Something went wrong loading this module. Please refresh the page." })
|
|
23
23
|
}),
|
|
24
|
-
children: /* @__PURE__ */
|
|
24
|
+
children: /* @__PURE__ */ b(e, {
|
|
25
25
|
...t,
|
|
26
|
-
children: /* @__PURE__ */
|
|
26
|
+
children: /* @__PURE__ */ b(S, { children: /* @__PURE__ */ b(C, { ...t }) })
|
|
27
27
|
})
|
|
28
28
|
})
|
|
29
29
|
});
|
|
30
|
-
},
|
|
30
|
+
}, S = ({ children: e }) => {
|
|
31
31
|
let { user: r, authToken: i } = t(), { pathname: a } = c(), o = a.includes("/publisher/sourcing/opportunities/");
|
|
32
|
-
return /* @__PURE__ */
|
|
32
|
+
return /* @__PURE__ */ b(n, {
|
|
33
33
|
enabled: !!(r?.id || i),
|
|
34
34
|
includeProducts: o,
|
|
35
35
|
children: e
|
|
36
36
|
});
|
|
37
|
-
},
|
|
37
|
+
}, C = ({ registerNavItems: e, registerFooterItems: t, basePath: n = "/" }) => {
|
|
38
38
|
let { itemCount: c } = a(), { profile: l } = r(), { t: u } = d();
|
|
39
39
|
o(() => {
|
|
40
40
|
if (!e) return;
|
|
@@ -44,7 +44,7 @@ var b = (t) => {
|
|
|
44
44
|
id: "store-marketplace",
|
|
45
45
|
label: u("nav.marketplace", { defaultValue: "Marketplace" }),
|
|
46
46
|
path: t(n, "marketplace"),
|
|
47
|
-
icon: /* @__PURE__ */
|
|
47
|
+
icon: /* @__PURE__ */ b(_, { size: 20 }),
|
|
48
48
|
order: 10,
|
|
49
49
|
group: "store"
|
|
50
50
|
},
|
|
@@ -52,7 +52,7 @@ var b = (t) => {
|
|
|
52
52
|
id: "store-cart",
|
|
53
53
|
label: u("nav.cart", { defaultValue: "Cart" }),
|
|
54
54
|
path: t(n, "cart"),
|
|
55
|
-
icon: /* @__PURE__ */
|
|
55
|
+
icon: /* @__PURE__ */ b(v, { size: 20 }),
|
|
56
56
|
badge: c > 0 ? c : void 0,
|
|
57
57
|
order: 20,
|
|
58
58
|
group: "store"
|
|
@@ -61,7 +61,7 @@ var b = (t) => {
|
|
|
61
61
|
id: "store-orders",
|
|
62
62
|
label: u("nav.orders", { defaultValue: "My Orders" }),
|
|
63
63
|
path: t(n, "orders"),
|
|
64
|
-
icon: /* @__PURE__ */
|
|
64
|
+
icon: /* @__PURE__ */ b(h, { size: 20 }),
|
|
65
65
|
order: 30,
|
|
66
66
|
group: "store"
|
|
67
67
|
},
|
|
@@ -69,30 +69,41 @@ var b = (t) => {
|
|
|
69
69
|
id: "store-sourcing-requests",
|
|
70
70
|
label: u("nav.sourcingRequests", { defaultValue: "Sourcing requests" }),
|
|
71
71
|
path: t(n, "sourcing/requests"),
|
|
72
|
-
icon: /* @__PURE__ */
|
|
72
|
+
icon: /* @__PURE__ */ b(m, { size: 20 }),
|
|
73
73
|
order: 35,
|
|
74
74
|
group: "store"
|
|
75
75
|
},
|
|
76
|
-
...l ? [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
76
|
+
...l ? [
|
|
77
|
+
{
|
|
78
|
+
id: "store-sourcing-opportunities",
|
|
79
|
+
label: u("nav.sourcingOpportunities", { defaultValue: "Sourcing opportunities" }),
|
|
80
|
+
path: t(n, "publisher/sourcing/opportunities"),
|
|
81
|
+
icon: /* @__PURE__ */ b(m, { size: 20 }),
|
|
82
|
+
order: 36,
|
|
83
|
+
group: "store"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: "store-sourcing-offers",
|
|
87
|
+
label: u("nav.sourcingOffers", { defaultValue: "My sourcing offers" }),
|
|
88
|
+
path: t(n, "publisher/sourcing/offers"),
|
|
89
|
+
icon: /* @__PURE__ */ b(y, { size: 20 }),
|
|
90
|
+
order: 37,
|
|
91
|
+
group: "store"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: "store-publisher-governance",
|
|
95
|
+
label: u("nav.publisherGovernance", { defaultValue: "Store actions & appeals" }),
|
|
96
|
+
path: t(n, "publisher/governance"),
|
|
97
|
+
icon: /* @__PURE__ */ b(g, { size: 20 }),
|
|
98
|
+
order: 38,
|
|
99
|
+
group: "store"
|
|
100
|
+
}
|
|
101
|
+
] : [],
|
|
91
102
|
{
|
|
92
103
|
id: "store-installed",
|
|
93
104
|
label: u("nav.installed", { defaultValue: "Installed Apps" }),
|
|
94
105
|
path: t(n, "installed"),
|
|
95
|
-
icon: /* @__PURE__ */
|
|
106
|
+
icon: /* @__PURE__ */ b(p, { size: 20 }),
|
|
96
107
|
order: 40,
|
|
97
108
|
group: "store"
|
|
98
109
|
},
|
|
@@ -100,7 +111,7 @@ var b = (t) => {
|
|
|
100
111
|
id: "store-licenses",
|
|
101
112
|
label: u("nav.licenses", { defaultValue: "Licenses" }),
|
|
102
113
|
path: t(n, "licenses"),
|
|
103
|
-
icon: /* @__PURE__ */
|
|
114
|
+
icon: /* @__PURE__ */ b(f, { size: 20 }),
|
|
104
115
|
order: 50,
|
|
105
116
|
group: "store"
|
|
106
117
|
}
|
|
@@ -112,7 +123,7 @@ var b = (t) => {
|
|
|
112
123
|
l,
|
|
113
124
|
u
|
|
114
125
|
]);
|
|
115
|
-
let
|
|
126
|
+
let x = s(() => [{
|
|
116
127
|
id: "store-status",
|
|
117
128
|
label: u("store.footer.ready", { defaultValue: "Store Ready" }),
|
|
118
129
|
type: "status",
|
|
@@ -120,10 +131,10 @@ var b = (t) => {
|
|
|
120
131
|
section: "left"
|
|
121
132
|
}], [u]);
|
|
122
133
|
return o(() => {
|
|
123
|
-
if (t) return t(
|
|
124
|
-
}, [t,
|
|
134
|
+
if (t) return t(x);
|
|
135
|
+
}, [t, x]), /* @__PURE__ */ b(i, {});
|
|
125
136
|
};
|
|
126
137
|
//#endregion
|
|
127
|
-
export {
|
|
138
|
+
export { x as StoreRoot };
|
|
128
139
|
|
|
129
140
|
//# sourceMappingURL=StoreRoot.js.map
|
package/dist/StoreRoot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreRoot.js","names":[],"sources":["../src/StoreRoot.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useLocation } from 'react-router';\nimport { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n ShoppingBag,\n ShoppingCart,\n Receipt,\n Package,\n Key,\n PackageSearch,\n TicketCheck,\n} from 'lucide-react';\nimport { StoreProvider, useStore } from './providers/StoreProvider';\nimport {\n PublisherSourcingAccessProvider,\n usePublisherSourcingAccess,\n} from './providers/SourcingAccessProvider';\nimport type { NavItem, StoreRootProps } from './types';\nimport { StoreRoutes } from './StoreRoutes';\nimport { useCart } from './hooks/useCart';\n\n/**\n * Root component for the Store 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 { StoreRoot, type StoreRootProps } from '@burdenoff/micro-fe/store';\n *\n * function App() {\n * const props: StoreRootProps = {\n * basePath: '/store',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * organizationId: 'org-123',\n * apiGatewayUrl: 'https://api.example.com/tenant/graphql',\n * authToken: 'token',\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <StoreRoot {...props} />;\n * }\n * ```\n */\nexport const StoreRoot: FC<StoreRootProps> = (props) => {\n const { t } = useI18n();\n\n return (\n <FeatureFlagProvider\n workspaceId={props.workspaceId ?? null}\n gateway=\"global\"\n defaultEnabled={true}\n >\n <ErrorBoundary\n fallback={\n <div className=\"p-6 text-center text-text-secondary\">\n {t('common.moduleLoadError', {\n defaultValue: 'Something went wrong loading this module. Please refresh the page.',\n })}\n </div>\n }\n >\n <StoreProvider {...props}>\n <StoreSourcingAccessBoundary>\n <StoreNavigationRegistration {...props} />\n </StoreSourcingAccessBoundary>\n </StoreProvider>\n </ErrorBoundary>\n </FeatureFlagProvider>\n );\n};\n\nconst StoreSourcingAccessBoundary: FC<{ children: ReactNode }> = ({ children }) => {\n const { user, authToken } = useStore();\n const { pathname } = useLocation();\n const includeProducts = pathname.includes('/publisher/sourcing/opportunities/');\n return (\n <PublisherSourcingAccessProvider\n enabled={Boolean(user?.id || authToken)}\n includeProducts={includeProducts}\n >\n {children}\n </PublisherSourcingAccessProvider>\n );\n};\n\n/**\n * Internal component that handles navigation registration\n */\nconst StoreNavigationRegistration: FC<StoreRootProps> = ({\n registerNavItems,\n registerFooterItems,\n basePath = '/',\n}) => {\n const { itemCount } = useCart();\n const { profile: sellerProfile } = usePublisherSourcingAccess();\n const { t } = useI18n();\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems) return;\n\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n const navItems: NavItem[] = [\n {\n id: 'store-marketplace',\n label: t('nav.marketplace', { defaultValue: 'Marketplace' }),\n path: joinPath(basePath, 'marketplace'),\n icon: <ShoppingBag size={20} />,\n order: 10,\n group: 'store',\n },\n {\n id: 'store-cart',\n label: t('nav.cart', { defaultValue: 'Cart' }),\n path: joinPath(basePath, 'cart'),\n icon: <ShoppingCart size={20} />,\n badge: itemCount > 0 ? itemCount : undefined,\n order: 20,\n group: 'store',\n },\n {\n id: 'store-orders',\n label: t('nav.orders', { defaultValue: 'My Orders' }),\n path: joinPath(basePath, 'orders'),\n icon: <Receipt size={20} />,\n order: 30,\n group: 'store',\n },\n {\n id: 'store-sourcing-requests',\n label: t('nav.sourcingRequests', { defaultValue: 'Sourcing requests' }),\n path: joinPath(basePath, 'sourcing/requests'),\n icon: <PackageSearch size={20} />,\n order: 35,\n group: 'store',\n },\n ...(sellerProfile\n ? [\n {\n id: 'store-sourcing-opportunities',\n label: t('nav.sourcingOpportunities', { defaultValue: 'Sourcing opportunities' }),\n path: joinPath(basePath, 'publisher/sourcing/opportunities'),\n icon: <PackageSearch size={20} />,\n order: 36,\n group: 'store',\n },\n {\n id: 'store-sourcing-offers',\n label: t('nav.sourcingOffers', { defaultValue: 'My sourcing offers' }),\n path: joinPath(basePath, 'publisher/sourcing/offers'),\n icon: <TicketCheck size={20} />,\n order: 37,\n group: 'store',\n },\n ]\n : []),\n {\n id: 'store-installed',\n label: t('nav.installed', { defaultValue: 'Installed Apps' }),\n path: joinPath(basePath, 'installed'),\n icon: <Package size={20} />,\n order: 40,\n group: 'store',\n },\n {\n id: 'store-licenses',\n label: t('nav.licenses', { defaultValue: 'Licenses' }),\n path: joinPath(basePath, 'licenses'),\n icon: <Key size={20} />,\n order: 50,\n group: 'store',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, itemCount, sellerProfile, t]);\n\n // Register footer items — memoized to avoid re-registering on every render.\n const footerItems = useMemo(\n () => [\n {\n id: 'store-status',\n label: t('store.footer.ready', { defaultValue: 'Store Ready' }),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ],\n [t]\n );\n\n useEffect(() => {\n if (!registerFooterItems) return;\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, footerItems]);\n\n return <StoreRoutes />;\n};\n"],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"StoreRoot.js","names":[],"sources":["../src/StoreRoot.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useLocation } from 'react-router';\nimport { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n ShoppingBag,\n ShoppingCart,\n Receipt,\n Package,\n Key,\n PackageSearch,\n TicketCheck,\n Scale,\n} from 'lucide-react';\nimport { StoreProvider, useStore } from './providers/StoreProvider';\nimport {\n PublisherSourcingAccessProvider,\n usePublisherSourcingAccess,\n} from './providers/SourcingAccessProvider';\nimport type { NavItem, StoreRootProps } from './types';\nimport { StoreRoutes } from './StoreRoutes';\nimport { useCart } from './hooks/useCart';\n\n/**\n * Root component for the Store 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 { StoreRoot, type StoreRootProps } from '@burdenoff/micro-fe/store';\n *\n * function App() {\n * const props: StoreRootProps = {\n * basePath: '/store',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * organizationId: 'org-123',\n * apiGatewayUrl: 'https://api.example.com/tenant/graphql',\n * authToken: 'token',\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <StoreRoot {...props} />;\n * }\n * ```\n */\nexport const StoreRoot: FC<StoreRootProps> = (props) => {\n const { t } = useI18n();\n\n return (\n <FeatureFlagProvider\n workspaceId={props.workspaceId ?? null}\n gateway=\"global\"\n defaultEnabled={true}\n >\n <ErrorBoundary\n fallback={\n <div className=\"p-6 text-center text-text-secondary\">\n {t('common.moduleLoadError', {\n defaultValue: 'Something went wrong loading this module. Please refresh the page.',\n })}\n </div>\n }\n >\n <StoreProvider {...props}>\n <StoreSourcingAccessBoundary>\n <StoreNavigationRegistration {...props} />\n </StoreSourcingAccessBoundary>\n </StoreProvider>\n </ErrorBoundary>\n </FeatureFlagProvider>\n );\n};\n\nconst StoreSourcingAccessBoundary: FC<{ children: ReactNode }> = ({ children }) => {\n const { user, authToken } = useStore();\n const { pathname } = useLocation();\n const includeProducts = pathname.includes('/publisher/sourcing/opportunities/');\n return (\n <PublisherSourcingAccessProvider\n enabled={Boolean(user?.id || authToken)}\n includeProducts={includeProducts}\n >\n {children}\n </PublisherSourcingAccessProvider>\n );\n};\n\n/**\n * Internal component that handles navigation registration\n */\nconst StoreNavigationRegistration: FC<StoreRootProps> = ({\n registerNavItems,\n registerFooterItems,\n basePath = '/',\n}) => {\n const { itemCount } = useCart();\n const { profile: sellerProfile } = usePublisherSourcingAccess();\n const { t } = useI18n();\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems) return;\n\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n const navItems: NavItem[] = [\n {\n id: 'store-marketplace',\n label: t('nav.marketplace', { defaultValue: 'Marketplace' }),\n path: joinPath(basePath, 'marketplace'),\n icon: <ShoppingBag size={20} />,\n order: 10,\n group: 'store',\n },\n {\n id: 'store-cart',\n label: t('nav.cart', { defaultValue: 'Cart' }),\n path: joinPath(basePath, 'cart'),\n icon: <ShoppingCart size={20} />,\n badge: itemCount > 0 ? itemCount : undefined,\n order: 20,\n group: 'store',\n },\n {\n id: 'store-orders',\n label: t('nav.orders', { defaultValue: 'My Orders' }),\n path: joinPath(basePath, 'orders'),\n icon: <Receipt size={20} />,\n order: 30,\n group: 'store',\n },\n {\n id: 'store-sourcing-requests',\n label: t('nav.sourcingRequests', { defaultValue: 'Sourcing requests' }),\n path: joinPath(basePath, 'sourcing/requests'),\n icon: <PackageSearch size={20} />,\n order: 35,\n group: 'store',\n },\n ...(sellerProfile\n ? [\n {\n id: 'store-sourcing-opportunities',\n label: t('nav.sourcingOpportunities', { defaultValue: 'Sourcing opportunities' }),\n path: joinPath(basePath, 'publisher/sourcing/opportunities'),\n icon: <PackageSearch size={20} />,\n order: 36,\n group: 'store',\n },\n {\n id: 'store-sourcing-offers',\n label: t('nav.sourcingOffers', { defaultValue: 'My sourcing offers' }),\n path: joinPath(basePath, 'publisher/sourcing/offers'),\n icon: <TicketCheck size={20} />,\n order: 37,\n group: 'store',\n },\n {\n id: 'store-publisher-governance',\n label: t('nav.publisherGovernance', { defaultValue: 'Store actions & appeals' }),\n path: joinPath(basePath, 'publisher/governance'),\n icon: <Scale size={20} />,\n order: 38,\n group: 'store',\n },\n ]\n : []),\n {\n id: 'store-installed',\n label: t('nav.installed', { defaultValue: 'Installed Apps' }),\n path: joinPath(basePath, 'installed'),\n icon: <Package size={20} />,\n order: 40,\n group: 'store',\n },\n {\n id: 'store-licenses',\n label: t('nav.licenses', { defaultValue: 'Licenses' }),\n path: joinPath(basePath, 'licenses'),\n icon: <Key size={20} />,\n order: 50,\n group: 'store',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, itemCount, sellerProfile, t]);\n\n // Register footer items — memoized to avoid re-registering on every render.\n const footerItems = useMemo(\n () => [\n {\n id: 'store-status',\n label: t('store.footer.ready', { defaultValue: 'Store Ready' }),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ],\n [t]\n );\n\n useEffect(() => {\n if (!registerFooterItems) return;\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, footerItems]);\n\n return <StoreRoutes />;\n};\n"],"mappings":"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"}
|