@burdenoff/microfe-store 2026.529.1 → 2026.601.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/StoreRoutes.js +38 -77
- package/dist/StoreRoutes.js.map +1 -1
- package/dist/pages/MarketplaceHomePage.js +368 -358
- package/dist/pages/MarketplaceHomePage.js.map +1 -1
- package/package.json +1 -1
- package/dist/pages/ProductCategoryPage.js +0 -85
- package/dist/pages/ProductCategoryPage.js.map +0 -1
- package/dist/pages/SearchResultsPage.js +0 -128
- package/dist/pages/SearchResultsPage.js.map +0 -1
- package/dist/pages/StoresPage.js +0 -153
- package/dist/pages/StoresPage.js.map +0 -1
package/dist/StoreRoutes.js
CHANGED
|
@@ -7,8 +7,8 @@ import { FeatureGate as s } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
|
7
7
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
8
|
import { Navigate as u, Route as d, Routes as f } from "react-router-dom";
|
|
9
9
|
//#region src/StoreRoutes.tsx
|
|
10
|
-
var p = o(() => import("./pages/MarketplaceHomePage.js").then((e) => ({ default: e.MarketplaceHomePage }))), m = o(() => import("./pages/InstalledAppsPage.js").then((e) => ({ default: e.InstalledAppsPage }))), h = o(() => import("./pages/ProductDetailPage.js").then((e) => ({ default: e.ProductDetailPage }))), g = o(() => import("./pages/CartPage.js").then((e) => ({ default: e.CartPage }))), _ = o(() => import("./pages/OrdersPage.js").then((e) => ({ default: e.OrdersPage }))), v = o(() => import("./pages/PublisherSubmitPage.js").then((e) => ({ default: e.PublisherSubmitPage }))), y = o(() => import("./pages/MyLicensesPage.js").then((e) => ({ default: e.MyLicensesPage }))), b = o(() => import("./pages/OrderConfirmationPage.js").then((e) => ({ default: e.OrderConfirmationPage }))), x = o(() => import("./pages/PublisherDashboardPage.js").then((e) => ({ default: e.PublisherDashboardPage }))), S = o(() => import("./pages/PublisherSubmissionsPage.js").then((e) => ({ default: e.PublisherSubmissionsPage }))), C = o(() => import("./pages/PublisherRevenuePage.js").then((e) => ({ default: e.PublisherRevenuePage }))), w = o(() => import("./pages/
|
|
11
|
-
function
|
|
10
|
+
var p = o(() => import("./pages/MarketplaceHomePage.js").then((e) => ({ default: e.MarketplaceHomePage }))), m = o(() => import("./pages/InstalledAppsPage.js").then((e) => ({ default: e.InstalledAppsPage }))), h = o(() => import("./pages/ProductDetailPage.js").then((e) => ({ default: e.ProductDetailPage }))), g = o(() => import("./pages/CartPage.js").then((e) => ({ default: e.CartPage }))), _ = o(() => import("./pages/OrdersPage.js").then((e) => ({ default: e.OrdersPage }))), v = o(() => import("./pages/PublisherSubmitPage.js").then((e) => ({ default: e.PublisherSubmitPage }))), y = o(() => import("./pages/MyLicensesPage.js").then((e) => ({ default: e.MyLicensesPage }))), b = o(() => import("./pages/OrderConfirmationPage.js").then((e) => ({ default: e.OrderConfirmationPage }))), x = o(() => import("./pages/PublisherDashboardPage.js").then((e) => ({ default: e.PublisherDashboardPage }))), S = o(() => import("./pages/PublisherSubmissionsPage.js").then((e) => ({ default: e.PublisherSubmissionsPage }))), C = o(() => import("./pages/PublisherRevenuePage.js").then((e) => ({ default: e.PublisherRevenuePage }))), w = o(() => import("./pages/AppDetailPage.js").then((e) => ({ default: e.AppDetailPage }))), T = o(() => import("./pages/AppSettingsPage.js").then((e) => ({ default: e.AppSettingsPage }))), E = o(() => import("./pages/ProductReviewsPage.js").then((e) => ({ default: e.ProductReviewsPage })));
|
|
11
|
+
function D({ title: e, featureFlag: t }) {
|
|
12
12
|
return /* @__PURE__ */ c("div", {
|
|
13
13
|
className: "flex min-h-[400px] items-center justify-center p-6",
|
|
14
14
|
children: /* @__PURE__ */ l("div", {
|
|
@@ -31,19 +31,19 @@ function A({ title: e, featureFlag: t }) {
|
|
|
31
31
|
})
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
-
function
|
|
34
|
+
function O({ title: e, featureFlag: t, allowed: n, isLoading: a, children: o }) {
|
|
35
35
|
return a ? /* @__PURE__ */ c(i, {}) : /* @__PURE__ */ c(s, {
|
|
36
36
|
flag: t,
|
|
37
37
|
defaultValue: !0,
|
|
38
|
-
fallback: /* @__PURE__ */ c(
|
|
38
|
+
fallback: /* @__PURE__ */ c(D, {
|
|
39
39
|
title: e,
|
|
40
40
|
featureFlag: t
|
|
41
41
|
}),
|
|
42
42
|
children: n ? o : /* @__PURE__ */ c(r, {})
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
-
var
|
|
46
|
-
let { basePath: r } = e(), { permissions: o, hasPermission: s, isLoading:
|
|
45
|
+
var k = () => {
|
|
46
|
+
let { basePath: r } = e(), { permissions: o, hasPermission: s, isLoading: D } = n();
|
|
47
47
|
return /* @__PURE__ */ l(f, { children: [
|
|
48
48
|
/* @__PURE__ */ c(d, {
|
|
49
49
|
index: !0,
|
|
@@ -54,50 +54,24 @@ var M = () => {
|
|
|
54
54
|
}),
|
|
55
55
|
/* @__PURE__ */ c(d, {
|
|
56
56
|
path: "marketplace",
|
|
57
|
-
element: /* @__PURE__ */ c(
|
|
57
|
+
element: /* @__PURE__ */ c(O, {
|
|
58
58
|
title: "Marketplace",
|
|
59
59
|
featureFlag: "store.marketplace",
|
|
60
60
|
allowed: o.canBrowse,
|
|
61
|
-
isLoading:
|
|
61
|
+
isLoading: D,
|
|
62
62
|
children: /* @__PURE__ */ c(a, {
|
|
63
63
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
64
64
|
children: /* @__PURE__ */ c(p, {})
|
|
65
65
|
})
|
|
66
66
|
})
|
|
67
67
|
}),
|
|
68
|
-
/* @__PURE__ */ c(d, {
|
|
69
|
-
path: "marketplace/category/:categorySlug",
|
|
70
|
-
element: /* @__PURE__ */ c(j, {
|
|
71
|
-
title: "Marketplace",
|
|
72
|
-
featureFlag: "store.marketplace",
|
|
73
|
-
allowed: o.canBrowse,
|
|
74
|
-
isLoading: A,
|
|
75
|
-
children: /* @__PURE__ */ c(a, {
|
|
76
|
-
fallback: /* @__PURE__ */ c(i, {}),
|
|
77
|
-
children: /* @__PURE__ */ c(w, {})
|
|
78
|
-
})
|
|
79
|
-
})
|
|
80
|
-
}),
|
|
81
|
-
/* @__PURE__ */ c(d, {
|
|
82
|
-
path: "marketplace/search",
|
|
83
|
-
element: /* @__PURE__ */ c(j, {
|
|
84
|
-
title: "Marketplace",
|
|
85
|
-
featureFlag: "store.marketplace",
|
|
86
|
-
allowed: o.canBrowse,
|
|
87
|
-
isLoading: A,
|
|
88
|
-
children: /* @__PURE__ */ c(a, {
|
|
89
|
-
fallback: /* @__PURE__ */ c(i, {}),
|
|
90
|
-
children: /* @__PURE__ */ c(T, {})
|
|
91
|
-
})
|
|
92
|
-
})
|
|
93
|
-
}),
|
|
94
68
|
/* @__PURE__ */ c(d, {
|
|
95
69
|
path: "marketplace/product/:productId",
|
|
96
|
-
element: /* @__PURE__ */ c(
|
|
70
|
+
element: /* @__PURE__ */ c(O, {
|
|
97
71
|
title: "Marketplace",
|
|
98
72
|
featureFlag: "store.marketplace",
|
|
99
73
|
allowed: o.canBrowse,
|
|
100
|
-
isLoading:
|
|
74
|
+
isLoading: D,
|
|
101
75
|
children: /* @__PURE__ */ c(a, {
|
|
102
76
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
103
77
|
children: /* @__PURE__ */ c(h, {})
|
|
@@ -106,11 +80,11 @@ var M = () => {
|
|
|
106
80
|
}),
|
|
107
81
|
/* @__PURE__ */ c(d, {
|
|
108
82
|
path: "cart",
|
|
109
|
-
element: /* @__PURE__ */ c(
|
|
83
|
+
element: /* @__PURE__ */ c(O, {
|
|
110
84
|
title: "Cart",
|
|
111
85
|
featureFlag: "store.cart",
|
|
112
86
|
allowed: o.canPurchase,
|
|
113
|
-
isLoading:
|
|
87
|
+
isLoading: D,
|
|
114
88
|
children: /* @__PURE__ */ c(a, {
|
|
115
89
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
116
90
|
children: /* @__PURE__ */ c(g, {})
|
|
@@ -119,11 +93,11 @@ var M = () => {
|
|
|
119
93
|
}),
|
|
120
94
|
/* @__PURE__ */ c(d, {
|
|
121
95
|
path: "orders/:orderId/confirmation",
|
|
122
|
-
element: /* @__PURE__ */ c(
|
|
96
|
+
element: /* @__PURE__ */ c(O, {
|
|
123
97
|
title: "Order confirmation",
|
|
124
98
|
featureFlag: "store.orders",
|
|
125
99
|
allowed: o.canPurchase,
|
|
126
|
-
isLoading:
|
|
100
|
+
isLoading: D,
|
|
127
101
|
children: /* @__PURE__ */ c(a, {
|
|
128
102
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
129
103
|
children: /* @__PURE__ */ c(b, {})
|
|
@@ -132,11 +106,11 @@ var M = () => {
|
|
|
132
106
|
}),
|
|
133
107
|
/* @__PURE__ */ c(d, {
|
|
134
108
|
path: "orders",
|
|
135
|
-
element: /* @__PURE__ */ c(
|
|
109
|
+
element: /* @__PURE__ */ c(O, {
|
|
136
110
|
title: "Orders",
|
|
137
111
|
featureFlag: "store.orders",
|
|
138
112
|
allowed: o.canPurchase,
|
|
139
|
-
isLoading:
|
|
113
|
+
isLoading: D,
|
|
140
114
|
children: /* @__PURE__ */ c(a, {
|
|
141
115
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
142
116
|
children: /* @__PURE__ */ c(_, {})
|
|
@@ -145,11 +119,11 @@ var M = () => {
|
|
|
145
119
|
}),
|
|
146
120
|
/* @__PURE__ */ c(d, {
|
|
147
121
|
path: "installed",
|
|
148
|
-
element: /* @__PURE__ */ c(
|
|
122
|
+
element: /* @__PURE__ */ c(O, {
|
|
149
123
|
title: "Installed apps",
|
|
150
124
|
featureFlag: "store.installed",
|
|
151
125
|
allowed: o.canInstall,
|
|
152
|
-
isLoading:
|
|
126
|
+
isLoading: D,
|
|
153
127
|
children: /* @__PURE__ */ c(a, {
|
|
154
128
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
155
129
|
children: /* @__PURE__ */ c(m, {})
|
|
@@ -158,63 +132,50 @@ var M = () => {
|
|
|
158
132
|
}),
|
|
159
133
|
/* @__PURE__ */ c(d, {
|
|
160
134
|
path: "installed/:installationId",
|
|
161
|
-
element: /* @__PURE__ */ c(
|
|
135
|
+
element: /* @__PURE__ */ c(O, {
|
|
162
136
|
title: "Installed apps",
|
|
163
137
|
featureFlag: "store.installed",
|
|
164
138
|
allowed: o.canInstall,
|
|
165
|
-
isLoading:
|
|
139
|
+
isLoading: D,
|
|
166
140
|
children: /* @__PURE__ */ c(a, {
|
|
167
141
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
168
|
-
children: /* @__PURE__ */ c(
|
|
142
|
+
children: /* @__PURE__ */ c(w, {})
|
|
169
143
|
})
|
|
170
144
|
})
|
|
171
145
|
}),
|
|
172
146
|
/* @__PURE__ */ c(d, {
|
|
173
147
|
path: "installed/:installationId/settings",
|
|
174
|
-
element: /* @__PURE__ */ c(
|
|
148
|
+
element: /* @__PURE__ */ c(O, {
|
|
175
149
|
title: "Installed apps",
|
|
176
150
|
featureFlag: "store.installed",
|
|
177
151
|
allowed: o.canInstall,
|
|
178
|
-
isLoading:
|
|
152
|
+
isLoading: D,
|
|
179
153
|
children: /* @__PURE__ */ c(a, {
|
|
180
154
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
181
|
-
children: /* @__PURE__ */ c(
|
|
155
|
+
children: /* @__PURE__ */ c(T, {})
|
|
182
156
|
})
|
|
183
157
|
})
|
|
184
158
|
}),
|
|
185
159
|
/* @__PURE__ */ c(d, {
|
|
186
160
|
path: "licenses",
|
|
187
|
-
element: /* @__PURE__ */ c(
|
|
161
|
+
element: /* @__PURE__ */ c(O, {
|
|
188
162
|
title: "Licenses",
|
|
189
163
|
featureFlag: "store.licenses",
|
|
190
164
|
allowed: o.canManageLicenses,
|
|
191
|
-
isLoading:
|
|
165
|
+
isLoading: D,
|
|
192
166
|
children: /* @__PURE__ */ c(a, {
|
|
193
167
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
194
168
|
children: /* @__PURE__ */ c(y, {})
|
|
195
169
|
})
|
|
196
170
|
})
|
|
197
171
|
}),
|
|
198
|
-
/* @__PURE__ */ c(d, {
|
|
199
|
-
path: "stores",
|
|
200
|
-
element: /* @__PURE__ */ c(j, {
|
|
201
|
-
title: "Stores",
|
|
202
|
-
featureFlag: "store.stores",
|
|
203
|
-
allowed: o.canBrowse,
|
|
204
|
-
isLoading: A,
|
|
205
|
-
children: /* @__PURE__ */ c(a, {
|
|
206
|
-
fallback: /* @__PURE__ */ c(i, {}),
|
|
207
|
-
children: /* @__PURE__ */ c(k, {})
|
|
208
|
-
})
|
|
209
|
-
})
|
|
210
|
-
}),
|
|
211
172
|
/* @__PURE__ */ c(d, {
|
|
212
173
|
path: "publisher",
|
|
213
|
-
element: /* @__PURE__ */ c(
|
|
174
|
+
element: /* @__PURE__ */ c(O, {
|
|
214
175
|
title: "Publisher portal",
|
|
215
176
|
featureFlag: "store.publisher-portal",
|
|
216
177
|
allowed: o.canPublish,
|
|
217
|
-
isLoading:
|
|
178
|
+
isLoading: D,
|
|
218
179
|
children: /* @__PURE__ */ c(a, {
|
|
219
180
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
220
181
|
children: /* @__PURE__ */ c(x, {})
|
|
@@ -223,11 +184,11 @@ var M = () => {
|
|
|
223
184
|
}),
|
|
224
185
|
/* @__PURE__ */ c(d, {
|
|
225
186
|
path: "publisher/submit",
|
|
226
|
-
element: /* @__PURE__ */ c(
|
|
187
|
+
element: /* @__PURE__ */ c(O, {
|
|
227
188
|
title: "Publisher portal",
|
|
228
189
|
featureFlag: "store.publisher-portal",
|
|
229
190
|
allowed: o.canPublish,
|
|
230
|
-
isLoading:
|
|
191
|
+
isLoading: D,
|
|
231
192
|
children: /* @__PURE__ */ c(a, {
|
|
232
193
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
233
194
|
children: /* @__PURE__ */ c(v, {})
|
|
@@ -236,11 +197,11 @@ var M = () => {
|
|
|
236
197
|
}),
|
|
237
198
|
/* @__PURE__ */ c(d, {
|
|
238
199
|
path: "publisher/submissions",
|
|
239
|
-
element: /* @__PURE__ */ c(
|
|
200
|
+
element: /* @__PURE__ */ c(O, {
|
|
240
201
|
title: "Publisher portal",
|
|
241
202
|
featureFlag: "store.publisher-portal",
|
|
242
203
|
allowed: o.canPublish,
|
|
243
|
-
isLoading:
|
|
204
|
+
isLoading: D,
|
|
244
205
|
children: /* @__PURE__ */ c(a, {
|
|
245
206
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
246
207
|
children: /* @__PURE__ */ c(S, {})
|
|
@@ -249,11 +210,11 @@ var M = () => {
|
|
|
249
210
|
}),
|
|
250
211
|
/* @__PURE__ */ c(d, {
|
|
251
212
|
path: "publisher/revenue",
|
|
252
|
-
element: /* @__PURE__ */ c(
|
|
213
|
+
element: /* @__PURE__ */ c(O, {
|
|
253
214
|
title: "Publisher revenue",
|
|
254
215
|
featureFlag: "store.publisher-portal.revenue",
|
|
255
216
|
allowed: s(t.EARNINGS_READ),
|
|
256
|
-
isLoading:
|
|
217
|
+
isLoading: D,
|
|
257
218
|
children: /* @__PURE__ */ c(a, {
|
|
258
219
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
259
220
|
children: /* @__PURE__ */ c(C, {})
|
|
@@ -262,14 +223,14 @@ var M = () => {
|
|
|
262
223
|
}),
|
|
263
224
|
/* @__PURE__ */ c(d, {
|
|
264
225
|
path: "publisher/product/:productId/reviews",
|
|
265
|
-
element: /* @__PURE__ */ c(
|
|
226
|
+
element: /* @__PURE__ */ c(O, {
|
|
266
227
|
title: "Publisher portal",
|
|
267
228
|
featureFlag: "store.publisher-portal",
|
|
268
229
|
allowed: o.canPublish,
|
|
269
|
-
isLoading:
|
|
230
|
+
isLoading: D,
|
|
270
231
|
children: /* @__PURE__ */ c(a, {
|
|
271
232
|
fallback: /* @__PURE__ */ c(i, {}),
|
|
272
|
-
children: /* @__PURE__ */ c(
|
|
233
|
+
children: /* @__PURE__ */ c(E, {})
|
|
273
234
|
})
|
|
274
235
|
})
|
|
275
236
|
}),
|
|
@@ -283,6 +244,6 @@ var M = () => {
|
|
|
283
244
|
] });
|
|
284
245
|
};
|
|
285
246
|
//#endregion
|
|
286
|
-
export {
|
|
247
|
+
export { k as StoreRoutes };
|
|
287
248
|
|
|
288
249
|
//# sourceMappingURL=StoreRoutes.js.map
|
package/dist/StoreRoutes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreRoutes.js","names":[],"sources":["../src/StoreRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useStore } from './providers/StoreProvider';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { AccessDenied, PageLoadingFallback } from './components/RouteGuards';\n\n// Lazy loaded pages\nconst MarketplaceHomePage = lazy(() =>\n import('./pages/MarketplaceHomePage').then((m) => ({ default: m.MarketplaceHomePage }))\n);\nconst InstalledAppsPage = lazy(() =>\n import('./pages/InstalledAppsPage').then((m) => ({ default: m.InstalledAppsPage }))\n);\nconst ProductDetailPage = lazy(() =>\n import('./pages/ProductDetailPage').then((m) => ({ default: m.ProductDetailPage }))\n);\nconst CartPage = lazy(() => import('./pages/CartPage').then((m) => ({ default: m.CartPage })));\nconst OrdersPage = lazy(() =>\n import('./pages/OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst PublisherSubmitPage = lazy(() =>\n import('./pages/PublisherSubmitPage').then((m) => ({ default: m.PublisherSubmitPage }))\n);\nconst MyLicensesPage = lazy(() =>\n import('./pages/MyLicensesPage').then((m) => ({ default: m.MyLicensesPage }))\n);\nconst OrderConfirmationPage = lazy(() =>\n import('./pages/OrderConfirmationPage').then((m) => ({ default: m.OrderConfirmationPage }))\n);\nconst PublisherDashboardPage = lazy(() =>\n import('./pages/PublisherDashboardPage').then((m) => ({ default: m.PublisherDashboardPage }))\n);\nconst PublisherSubmissionsPage = lazy(() =>\n import('./pages/PublisherSubmissionsPage').then((m) => ({ default: m.PublisherSubmissionsPage }))\n);\nconst PublisherRevenuePage = lazy(() =>\n import('./pages/PublisherRevenuePage').then((m) => ({ default: m.PublisherRevenuePage }))\n);\nconst ProductCategoryPage = lazy(() =>\n import('./pages/ProductCategoryPage').then((m) => ({ default: m.ProductCategoryPage }))\n);\nconst SearchResultsPage = lazy(() =>\n import('./pages/SearchResultsPage').then((m) => ({ default: m.SearchResultsPage }))\n);\nconst AppDetailPage = lazy(() =>\n import('./pages/AppDetailPage').then((m) => ({ default: m.AppDetailPage }))\n);\nconst AppSettingsPage = lazy(() =>\n import('./pages/AppSettingsPage').then((m) => ({ default: m.AppSettingsPage }))\n);\nconst ProductReviewsPage = lazy(() =>\n import('./pages/ProductReviewsPage').then((m) => ({ default: m.ProductReviewsPage }))\n);\nconst StoresPage = lazy(() =>\n import('./pages/StoresPage').then((m) => ({ default: m.StoresPage }))\n);\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\ninterface StoreRouteGateProps {\n title: string;\n featureFlag: string;\n allowed: boolean;\n isLoading: boolean;\n children: ReactNode;\n}\n\nfunction StoreRouteGate({ title, featureFlag, allowed, isLoading, children }: StoreRouteGateProps) {\n if (isLoading) {\n return <PageLoadingFallback />;\n }\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {allowed ? children : <AccessDenied />}\n </FeatureGate>\n );\n}\n\n/**\n * StoreRoutes component\n *\n * Internal routing for the Store microfrontend. Every route is gated by both\n * a live feature flag (via FeatureGate) and an RBAC permission check so that\n * features can be toggled per-org without a deployment.\n *\n * Flag namespace: store.*\n */\nexport const StoreRoutes: FC = () => {\n const { basePath } = useStore();\n const { permissions, hasPermission, isLoading } = useStorePermissions();\n\n return (\n <Routes>\n {/* Default redirect */}\n <Route index element={<Navigate to=\"marketplace\" replace />} />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MarketplaceHomePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/category/:categorySlug\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductCategoryPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/search\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <SearchResultsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/product/:productId\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Cart */}\n <Route\n path=\"cart\"\n element={\n <StoreRouteGate\n title=\"Cart\"\n featureFlag=\"store.cart\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <CartPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Orders */}\n <Route\n path=\"orders/:orderId/confirmation\"\n element={\n <StoreRouteGate\n title=\"Order confirmation\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrderConfirmationPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"orders\"\n element={\n <StoreRouteGate\n title=\"Orders\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrdersPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Installed Apps */}\n <Route\n path=\"installed\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <InstalledAppsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId/settings\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppSettingsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Licenses */}\n <Route\n path=\"licenses\"\n element={\n <StoreRouteGate\n title=\"Licenses\"\n featureFlag=\"store.licenses\"\n allowed={permissions.canManageLicenses}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MyLicensesPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Multi-store browsing */}\n <Route\n path=\"stores\"\n element={\n <StoreRouteGate\n title=\"Stores\"\n featureFlag=\"store.stores\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <StoresPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Publisher Portal */}\n <Route\n path=\"publisher\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherDashboardPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submit\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmitPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submissions\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmissionsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/revenue\"\n element={\n <StoreRouteGate\n title=\"Publisher revenue\"\n featureFlag=\"store.publisher-portal.revenue\"\n allowed={hasPermission(STORE_PERMISSIONS.EARNINGS_READ)}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherRevenuePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/product/:productId/reviews\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductReviewsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to={`${basePath}/marketplace`} replace />} />\n </Routes>\n );\n};\n"],"mappings":";;;;;;;;;AAQA,IAAM,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAW,QAAW,OAAO,uBAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EACxF,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAiB,QACrB,OAAO,6BAA0B,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAC9E,EACK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,IAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EACK,IAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAuB,QAC3B,OAAO,mCAAgC,MAAM,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAC1F,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAkB,QACtB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChF,EACK,IAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EACK,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE;AAED,SAAS,EAAgB,EAAE,UAAO,kBAAuD;AACvF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CAAuD,GAAM,kBAAoB;OACjF,kBAAC,KAAD;IAAG,WAAU;cAAb;KAAkD;KACb,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAmB,CAAA;KAAC;KAAI;KAEtF;MACA;;EACF,CAAA;;AAYV,SAAS,EAAe,EAAE,UAAO,gBAAa,YAAS,cAAW,eAAiC;AAIjG,QAHI,IACK,kBAAC,GAAD,EAAuB,CAAA,GAG9B,kBAAC,GAAD;EACE,MAAM;EACN,cAAA;EACA,UAAU,kBAAC,GAAD;GAAwB;GAAoB;GAAe,CAAA;YAEpE,IAAU,IAAW,kBAAC,GAAD,EAAgB,CAAA;EAC1B,CAAA;;AAalB,IAAa,UAAwB;CACnC,IAAM,EAAE,gBAAa,GAAU,EACzB,EAAE,gBAAa,kBAAe,iBAAc,GAAqB;AAEvE,QACE,kBAAC,GAAD,EAAA,UAAA;EAEE,kBAAC,GAAD;GAAO,OAAA;GAAM,SAAS,kBAAC,GAAD;IAAU,IAAG;IAAc,SAAA;IAAU,CAAA;GAAI,CAAA;EAG/D,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAY,CAAA;KACH,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAyB,CAAA;KAChB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAc,CAAA;KACL,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAiB,CAAA;KACR,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAc,CAAA;KACL,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAA0B,CAAA;KACjB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAA4B,CAAA;KACnB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAc,EAAkB,cAAc;IAC5C;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAwB,CAAA;KACf,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAsB,CAAA;KACb,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GAAO,MAAK;GAAI,SAAS,kBAAC,GAAD;IAAU,IAAI,GAAG,EAAS;IAAe,SAAA;IAAU,CAAA;GAAI,CAAA;EACzE,EAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"StoreRoutes.js","names":[],"sources":["../src/StoreRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useStore } from './providers/StoreProvider';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { AccessDenied, PageLoadingFallback } from './components/RouteGuards';\n\n// Lazy loaded pages\nconst MarketplaceHomePage = lazy(() =>\n import('./pages/MarketplaceHomePage').then((m) => ({ default: m.MarketplaceHomePage }))\n);\nconst InstalledAppsPage = lazy(() =>\n import('./pages/InstalledAppsPage').then((m) => ({ default: m.InstalledAppsPage }))\n);\nconst ProductDetailPage = lazy(() =>\n import('./pages/ProductDetailPage').then((m) => ({ default: m.ProductDetailPage }))\n);\nconst CartPage = lazy(() => import('./pages/CartPage').then((m) => ({ default: m.CartPage })));\nconst OrdersPage = lazy(() =>\n import('./pages/OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst PublisherSubmitPage = lazy(() =>\n import('./pages/PublisherSubmitPage').then((m) => ({ default: m.PublisherSubmitPage }))\n);\nconst MyLicensesPage = lazy(() =>\n import('./pages/MyLicensesPage').then((m) => ({ default: m.MyLicensesPage }))\n);\nconst OrderConfirmationPage = lazy(() =>\n import('./pages/OrderConfirmationPage').then((m) => ({ default: m.OrderConfirmationPage }))\n);\nconst PublisherDashboardPage = lazy(() =>\n import('./pages/PublisherDashboardPage').then((m) => ({ default: m.PublisherDashboardPage }))\n);\nconst PublisherSubmissionsPage = lazy(() =>\n import('./pages/PublisherSubmissionsPage').then((m) => ({ default: m.PublisherSubmissionsPage }))\n);\nconst PublisherRevenuePage = lazy(() =>\n import('./pages/PublisherRevenuePage').then((m) => ({ default: m.PublisherRevenuePage }))\n);\nconst AppDetailPage = lazy(() =>\n import('./pages/AppDetailPage').then((m) => ({ default: m.AppDetailPage }))\n);\nconst AppSettingsPage = lazy(() =>\n import('./pages/AppSettingsPage').then((m) => ({ default: m.AppSettingsPage }))\n);\nconst ProductReviewsPage = lazy(() =>\n import('./pages/ProductReviewsPage').then((m) => ({ default: m.ProductReviewsPage }))\n);\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\ninterface StoreRouteGateProps {\n title: string;\n featureFlag: string;\n allowed: boolean;\n isLoading: boolean;\n children: ReactNode;\n}\n\nfunction StoreRouteGate({ title, featureFlag, allowed, isLoading, children }: StoreRouteGateProps) {\n if (isLoading) {\n return <PageLoadingFallback />;\n }\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {allowed ? children : <AccessDenied />}\n </FeatureGate>\n );\n}\n\n/**\n * StoreRoutes component\n *\n * Internal routing for the Store microfrontend. Every route is gated by both\n * a live feature flag (via FeatureGate) and an RBAC permission check so that\n * features can be toggled per-org without a deployment.\n *\n * Flag namespace: store.*\n */\nexport const StoreRoutes: FC = () => {\n const { basePath } = useStore();\n const { permissions, hasPermission, isLoading } = useStorePermissions();\n\n return (\n <Routes>\n {/* Default redirect */}\n <Route index element={<Navigate to=\"marketplace\" replace />} />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MarketplaceHomePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/product/:productId\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Cart */}\n <Route\n path=\"cart\"\n element={\n <StoreRouteGate\n title=\"Cart\"\n featureFlag=\"store.cart\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <CartPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Orders */}\n <Route\n path=\"orders/:orderId/confirmation\"\n element={\n <StoreRouteGate\n title=\"Order confirmation\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrderConfirmationPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"orders\"\n element={\n <StoreRouteGate\n title=\"Orders\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrdersPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Installed Apps */}\n <Route\n path=\"installed\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <InstalledAppsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId/settings\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppSettingsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Licenses */}\n <Route\n path=\"licenses\"\n element={\n <StoreRouteGate\n title=\"Licenses\"\n featureFlag=\"store.licenses\"\n allowed={permissions.canManageLicenses}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MyLicensesPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Publisher Portal */}\n <Route\n path=\"publisher\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherDashboardPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submit\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmitPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submissions\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmissionsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/revenue\"\n element={\n <StoreRouteGate\n title=\"Publisher revenue\"\n featureFlag=\"store.publisher-portal.revenue\"\n allowed={hasPermission(STORE_PERMISSIONS.EARNINGS_READ)}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherRevenuePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/product/:productId/reviews\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductReviewsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to={`${basePath}/marketplace`} replace />} />\n </Routes>\n );\n};\n"],"mappings":"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"}
|