@cobaltcore-dev/aurora 0.4.0 → 0.6.0
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/README.md +73 -77
- package/dist/client/AuroraApp.d.ts +15 -0
- package/dist/client/{AuthProvider-D-5Jpa6F.mjs → AuthProvider-Co4d0WzB.mjs} +3 -3
- package/dist/client/{AuthProvider-D-5Jpa6F.mjs.map → AuthProvider-Co4d0WzB.mjs.map} +1 -1
- package/dist/client/{ContentHeader-BXZoN3B9.mjs → ContentHeader-kx1Th5Sq.mjs} +29 -29
- package/dist/client/{ContentHeader-BXZoN3B9.mjs.map → ContentHeader-kx1Th5Sq.mjs.map} +1 -1
- package/dist/client/DeleteFlavorModal-C3cb7YiJ.mjs +638 -0
- package/dist/client/DeleteFlavorModal-C3cb7YiJ.mjs.map +1 -0
- package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs → EditSecurityGroupModal-CpP54WIK.mjs} +22 -22
- package/dist/client/{EditSecurityGroupModal-DK3WYikA.mjs.map → EditSecurityGroupModal-CpP54WIK.mjs.map} +1 -1
- package/dist/client/{FiltersInput-OVeIJzIo.mjs → FiltersInput-DxcyR6Bp.mjs} +18 -18
- package/dist/client/{FiltersInput-OVeIJzIo.mjs.map → FiltersInput-DxcyR6Bp.mjs.map} +1 -1
- package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs → FloatingIpActionModals-BP8RWHbu.mjs} +77 -77
- package/dist/client/{FloatingIpActionModals-Dok7fJss.mjs.map → FloatingIpActionModals-BP8RWHbu.mjs.map} +1 -1
- package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs +1219 -0
- package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs.map +1 -0
- package/dist/client/{RouteError-pDEWC_k7.mjs → RouteError-QSV7qOoJ.mjs} +6 -6
- package/dist/client/{RouteError-pDEWC_k7.mjs.map → RouteError-QSV7qOoJ.mjs.map} +1 -1
- package/dist/client/{SortInput-DXWSqSny.mjs → SortInput-CYv2_Pur.mjs} +6 -6
- package/dist/client/{SortInput-DXWSqSny.mjs.map → SortInput-CYv2_Pur.mjs.map} +1 -1
- package/dist/client/{_auth-CJj1Cnbm.mjs → _auth-DXJkv9QO.mjs} +3 -3
- package/dist/client/{_auth-CJj1Cnbm.mjs.map → _auth-DXJkv9QO.mjs.map} +1 -1
- package/dist/client/{_flavorId-BoNcxYmF.mjs → _flavorId-C2x43-6S.mjs} +15 -15
- package/dist/client/_flavorId-C2x43-6S.mjs.map +1 -0
- package/dist/client/_flavorId-CR8ZUI-P.mjs +194 -0
- package/dist/client/_flavorId-CR8ZUI-P.mjs.map +1 -0
- package/dist/client/{_floatingIpId-D33bOEmH.mjs → _floatingIpId-BCk41_Lb.mjs} +3 -3
- package/dist/client/{_floatingIpId-D33bOEmH.mjs.map → _floatingIpId-BCk41_Lb.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-DF_BSJN6.mjs → _floatingIpId-BGrOAmPT.mjs} +48 -48
- package/dist/client/{_floatingIpId-DF_BSJN6.mjs.map → _floatingIpId-BGrOAmPT.mjs.map} +1 -1
- package/dist/client/_imageId-CvfD832b.mjs +534 -0
- package/dist/client/_imageId-CvfD832b.mjs.map +1 -0
- package/dist/client/_pcaId-BxBt5DXi.mjs +459 -0
- package/dist/client/_pcaId-BxBt5DXi.mjs.map +1 -0
- package/dist/client/{_pcaId-BYCoeK6_.mjs → _pcaId-DOHycvCf.mjs} +3 -3
- package/dist/client/{_pcaId-BYCoeK6_.mjs.map → _pcaId-DOHycvCf.mjs.map} +1 -1
- package/dist/client/_projectId-BDSWnMGj.mjs +46 -0
- package/dist/client/_projectId-BDSWnMGj.mjs.map +1 -0
- package/dist/client/{_projectId-OW2xkK43.mjs → _projectId-DOgwFiqD.mjs} +3 -3
- package/dist/client/{_projectId-OW2xkK43.mjs.map → _projectId-DOgwFiqD.mjs.map} +1 -1
- package/dist/client/_projectId-DS4nR59B.mjs +299 -0
- package/dist/client/_projectId-DS4nR59B.mjs.map +1 -0
- package/dist/client/{_projectId-BwLMEMGC.mjs → _projectId-MxcHrXW4.mjs} +21 -21
- package/dist/client/_projectId-MxcHrXW4.mjs.map +1 -0
- package/dist/client/{_securityGroupId-B-Z-CzLp.mjs → _securityGroupId-CJJanWiY.mjs} +3 -3
- package/dist/client/{_securityGroupId-B-Z-CzLp.mjs.map → _securityGroupId-CJJanWiY.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-B1bOYRbX.mjs → _securityGroupId-KKw4RPdH.mjs} +445 -446
- package/dist/client/{_securityGroupId-B1bOYRbX.mjs.map → _securityGroupId-KKw4RPdH.mjs.map} +1 -1
- package/dist/client/{containers-BjWqjNOx.mjs → _storageType-4wSxI__0.mjs} +19 -16
- package/dist/client/_storageType-4wSxI__0.mjs.map +1 -0
- package/dist/client/_storageType-DYjo-6ej.mjs +3243 -0
- package/dist/client/_storageType-DYjo-6ej.mjs.map +1 -0
- package/dist/client/_storageType-zeSZe--V.mjs +7 -0
- package/dist/client/_storageType-zeSZe--V.mjs.map +1 -0
- package/dist/client/about-Bo9vxGHy.mjs +92 -0
- package/dist/client/{about-DLn1ShhF.mjs.map → about-Bo9vxGHy.mjs.map} +1 -1
- package/dist/client/aurora-DDzsst74.mjs +19 -0
- package/dist/client/{aurora-CRcxVUCo.mjs.map → aurora-DDzsst74.mjs.map} +1 -1
- package/dist/client/{build-BJDfnAyi.mjs → build-DeJcDjPi.mjs} +3802 -3376
- package/dist/client/build-DeJcDjPi.mjs.map +1 -0
- package/dist/client/{buildFilterParams-TeyosGyK.mjs → buildFilterParams-DoZzMKX9.mjs} +1 -1
- package/dist/client/{buildFilterParams-TeyosGyK.mjs.map → buildFilterParams-DoZzMKX9.mjs.map} +1 -1
- package/dist/client/{cn-C3laVXMm.mjs → cn-DM4Cy3jv.mjs} +1 -1
- package/dist/client/{cn-C3laVXMm.mjs.map → cn-DM4Cy3jv.mjs.map} +1 -1
- package/dist/client/constants-BmcGYeR-.mjs +153 -0
- package/dist/client/constants-BmcGYeR-.mjs.map +1 -0
- package/dist/client/{flavors-D8oElC2K.mjs → flavors-BxFVqgnb.mjs} +2 -2
- package/dist/client/{flavors-D8oElC2K.mjs.map → flavors-BxFVqgnb.mjs.map} +1 -1
- package/dist/client/flavors-CfdgjsZY.mjs +632 -0
- package/dist/client/flavors-CfdgjsZY.mjs.map +1 -0
- package/dist/client/{flavors-BXPYAFyQ.mjs → flavors-DWMZ6TuJ.mjs} +2 -2
- package/dist/client/{flavors-BXPYAFyQ.mjs.map → flavors-DWMZ6TuJ.mjs.map} +1 -1
- package/dist/client/{floatingips-Fa6ocNUu.mjs → floatingips-ByRb82wS.mjs} +138 -139
- package/dist/client/{floatingips-Fa6ocNUu.mjs.map → floatingips-ByRb82wS.mjs.map} +1 -1
- package/dist/client/{formatBytes-tQBEnPoL.mjs → formatBytes-CZv_XyCY.mjs} +1 -1
- package/dist/client/{formatBytes-tQBEnPoL.mjs.map → formatBytes-CZv_XyCY.mjs.map} +1 -1
- package/dist/client/{helpers--JWXi40U.mjs → helpers-1PpYf-fC.mjs} +1 -1
- package/dist/client/{helpers--JWXi40U.mjs.map → helpers-1PpYf-fC.mjs.map} +1 -1
- package/dist/client/hooks-dSArr2Ca.mjs +2 -0
- package/dist/client/images-CKqIXUq52.mjs +1873 -0
- package/dist/client/images-CKqIXUq52.mjs.map +1 -0
- package/dist/client/{images-tYfyOkX8.mjs → images-C_dX7nY6.mjs} +3 -3
- package/dist/client/{images-tYfyOkX8.mjs.map → images-C_dX7nY6.mjs.map} +1 -1
- package/dist/client/{images-CTLCY-yY.mjs → images-CenluYV8.mjs} +2 -2
- package/dist/client/{images-CTLCY-yY.mjs.map → images-CenluYV8.mjs.map} +1 -1
- package/dist/client/{images-DM9I8G0p.mjs → images-NBf2bV43.mjs} +2 -2
- package/dist/client/{images-DM9I8G0p.mjs.map → images-NBf2bV43.mjs.map} +1 -1
- package/dist/client/index.js +428 -477
- package/dist/client/index.js.map +1 -1
- package/dist/client/{md-BivyCkGC.mjs → md-CYTrL5dq.mjs} +58 -22
- package/dist/client/{md-BivyCkGC.mjs.map → md-CYTrL5dq.mjs.map} +1 -1
- package/dist/client/{network-rYLHyf15.mjs → network-DuZm76BZ.mjs} +2 -2
- package/dist/client/{network-rYLHyf15.mjs.map → network-DuZm76BZ.mjs.map} +1 -1
- package/dist/client/objects-BJM6YeuF.mjs +5708 -0
- package/dist/client/objects-BJM6YeuF.mjs.map +1 -0
- package/dist/client/objects-gxSjvbvF.mjs +101 -0
- package/dist/client/objects-gxSjvbvF.mjs.map +1 -0
- package/dist/client/objects-o2Cj_ndZ.mjs +8 -0
- package/dist/client/objects-o2Cj_ndZ.mjs.map +1 -0
- package/dist/client/{pca-COmKvp3J.mjs → pca-Bl8NmoVZ.mjs} +2 -2
- package/dist/client/{pca-COmKvp3J.mjs.map → pca-Bl8NmoVZ.mjs.map} +1 -1
- package/dist/client/pca-RSiWpJs9.mjs +182 -0
- package/dist/client/pca-RSiWpJs9.mjs.map +1 -0
- package/dist/client/projects-CgclWI16.mjs +105 -0
- package/dist/client/projects-CgclWI16.mjs.map +1 -0
- package/dist/client/{projects-DI_L4oDw.mjs → projects-D2iewAzu.mjs} +2 -2
- package/dist/client/{projects-DI_L4oDw.mjs.map → projects-D2iewAzu.mjs.map} +1 -1
- package/dist/client/{projects-Dl5XkXUP.mjs → projects-pe2_dCnV.mjs} +3 -3
- package/dist/client/{projects-Dl5XkXUP.mjs.map → projects-pe2_dCnV.mjs.map} +1 -1
- package/dist/client/{projects-HoQ0gE5Y.mjs → projects-yiK0HGSA.mjs} +2 -2
- package/dist/client/{projects-HoQ0gE5Y.mjs.map → projects-yiK0HGSA.mjs.map} +1 -1
- package/dist/client/{securitygroups-BjkmHk2J.mjs → securitygroups-DahZkVYQ.mjs} +139 -140
- package/dist/client/{securitygroups-BjkmHk2J.mjs.map → securitygroups-DahZkVYQ.mjs.map} +1 -1
- package/dist/client/{trpcClient-BxguzNYF.mjs → trpcClient-BzPUgiM2.mjs} +1 -1
- package/dist/client/{trpcClient-BxguzNYF.mjs.map → trpcClient-BzPUgiM2.mjs.map} +1 -1
- package/dist/client/{useErrorTranslation-TZVwIAzq.mjs → useErrorTranslation-Dc0eE8Zt.mjs} +1 -1
- package/dist/client/{useErrorTranslation-TZVwIAzq.mjs.map → useErrorTranslation-Dc0eE8Zt.mjs.map} +1 -1
- package/dist/client/useListWithFiltering-DaYcu5AB.mjs +157 -0
- package/dist/client/useListWithFiltering-DaYcu5AB.mjs.map +1 -0
- package/dist/client/{useModal-DxxlilRm.mjs → useModal-DCs1OJh7.mjs} +1 -1
- package/dist/client/{useModal-DxxlilRm.mjs.map → useModal-DCs1OJh7.mjs.map} +1 -1
- package/dist/client/{useProjectId-OQv2KBbG.mjs → useProjectId-DBc5lpoU.mjs} +1 -1
- package/dist/client/{useProjectId-OQv2KBbG.mjs.map → useProjectId-DBc5lpoU.mjs.map} +1 -1
- package/dist/server/index.js +1285 -435
- package/package.json +5 -4
- package/dist/client/DeleteFlavorModal-BusYn32r.mjs +0 -629
- package/dist/client/DeleteFlavorModal-BusYn32r.mjs.map +0 -1
- package/dist/client/ImageToastNotifications-BG9LPnXf.mjs +0 -1267
- package/dist/client/ImageToastNotifications-BG9LPnXf.mjs.map +0 -1
- package/dist/client/ListToolbar-BojRTNbo.mjs +0 -129
- package/dist/client/ListToolbar-BojRTNbo.mjs.map +0 -1
- package/dist/client/_flavorId-BRonXvCo.mjs +0 -188
- package/dist/client/_flavorId-BRonXvCo.mjs.map +0 -1
- package/dist/client/_flavorId-BoNcxYmF.mjs.map +0 -1
- package/dist/client/_imageId-BL0I5_pv.mjs +0 -527
- package/dist/client/_imageId-BL0I5_pv.mjs.map +0 -1
- package/dist/client/_pcaId-CbBhBrX1.mjs +0 -466
- package/dist/client/_pcaId-CbBhBrX1.mjs.map +0 -1
- package/dist/client/_projectId-5NiasyXm.mjs +0 -26
- package/dist/client/_projectId-5NiasyXm.mjs.map +0 -1
- package/dist/client/_projectId-BwLMEMGC.mjs.map +0 -1
- package/dist/client/_projectId-D35MN1kY.mjs +0 -316
- package/dist/client/_projectId-D35MN1kY.mjs.map +0 -1
- package/dist/client/about-DLn1ShhF.mjs +0 -92
- package/dist/client/aurora-CRcxVUCo.mjs +0 -19
- package/dist/client/build-BJDfnAyi.mjs.map +0 -1
- package/dist/client/constants-B-P2r5F1.mjs +0 -128
- package/dist/client/constants-B-P2r5F1.mjs.map +0 -1
- package/dist/client/containers-BjWqjNOx.mjs.map +0 -1
- package/dist/client/containers-DsRWc1L5.mjs +0 -7
- package/dist/client/containers-DsRWc1L5.mjs.map +0 -1
- package/dist/client/containers-J7WFA18U.mjs +0 -3120
- package/dist/client/containers-J7WFA18U.mjs.map +0 -1
- package/dist/client/flavors-qvgPSI7J.mjs +0 -613
- package/dist/client/flavors-qvgPSI7J.mjs.map +0 -1
- package/dist/client/hooks-DEjb9d1F.mjs +0 -2
- package/dist/client/images-CSFfefAu.mjs +0 -1901
- package/dist/client/images-CSFfefAu.mjs.map +0 -1
- package/dist/client/objects-BciXwZ00.mjs +0 -86
- package/dist/client/objects-BciXwZ00.mjs.map +0 -1
- package/dist/client/objects-Cdew99tK.mjs +0 -8
- package/dist/client/objects-Cdew99tK.mjs.map +0 -1
- package/dist/client/objects-DaElrban.mjs +0 -5340
- package/dist/client/objects-DaElrban.mjs.map +0 -1
- package/dist/client/overview-BMhjFMIV.mjs +0 -15
- package/dist/client/overview-BMhjFMIV.mjs.map +0 -1
- package/dist/client/overview-BYIRj7_X.mjs +0 -15
- package/dist/client/overview-BYIRj7_X.mjs.map +0 -1
- package/dist/client/overview-DRCKNBH2.mjs +0 -15
- package/dist/client/overview-DRCKNBH2.mjs.map +0 -1
- package/dist/client/overview-urYLOVQE.mjs +0 -173
- package/dist/client/overview-urYLOVQE.mjs.map +0 -1
- package/dist/client/pca-oc7J0_Xd.mjs +0 -167
- package/dist/client/pca-oc7J0_Xd.mjs.map +0 -1
- package/dist/client/projects-BUabCzvw.mjs +0 -95
- package/dist/client/projects-BUabCzvw.mjs.map +0 -1
- package/dist/client/useListWithFiltering-CbhHJO4V.mjs +0 -32
- package/dist/client/useListWithFiltering-CbhHJO4V.mjs.map +0 -1
|
@@ -1,39 +1,42 @@
|
|
|
1
|
-
import { t as e } from "./helpers
|
|
1
|
+
import { t as e } from "./helpers-1PpYf-fC.mjs";
|
|
2
2
|
import { createFileRoute as t, lazyRouteComponent as n, redirect as r } from "@tanstack/react-router";
|
|
3
3
|
import { z as i } from "zod";
|
|
4
|
-
//#region src/client/routes/_auth/projects/$projectId/storage/$provider/
|
|
5
|
-
var a = () => import("./
|
|
4
|
+
//#region src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/index.tsx
|
|
5
|
+
var a = () => import("./_storageType-zeSZe--V.mjs"), o = () => import("./_storageType-DYjo-6ej.mjs"), s = (t, n) => {
|
|
6
6
|
let { provider: i, projectId: a } = n, o = e(t);
|
|
7
7
|
if (!o["object-store"]) throw r({
|
|
8
8
|
to: "/projects/$projectId",
|
|
9
9
|
params: { projectId: a }
|
|
10
10
|
});
|
|
11
|
-
let s = !!o["object-store"].swift, c = !!o["object-store"].ceph || !0, l = s ? "swift" : c ? "ceph" : null;
|
|
12
|
-
if (i !== "swift" && i !== "ceph") throw r(l ? {
|
|
13
|
-
to: "/projects/$projectId
|
|
11
|
+
let s = !!o["object-store"].swift, c = !!o["object-store"].ceph || !0, l = s ? "swift" : c ? "ceph" : null, u = s ? "containers" : c ? "buckets" : null;
|
|
12
|
+
if (i !== "swift" && i !== "ceph") throw r(!l || !u ? {
|
|
13
|
+
to: "/projects/$projectId",
|
|
14
|
+
params: { projectId: a }
|
|
15
|
+
} : {
|
|
16
|
+
to: "/projects/$projectId/storage/$provider/$storageType",
|
|
14
17
|
params: {
|
|
15
18
|
...n,
|
|
16
|
-
provider: l
|
|
19
|
+
provider: l,
|
|
20
|
+
storageType: u
|
|
17
21
|
}
|
|
18
|
-
} : {
|
|
19
|
-
to: "/projects/$projectId",
|
|
20
|
-
params: { projectId: a }
|
|
21
22
|
});
|
|
22
23
|
if (i === "swift" && !s) throw r(c ? {
|
|
23
|
-
to: "/projects/$projectId/storage/$provider
|
|
24
|
+
to: "/projects/$projectId/storage/$provider/$storageType",
|
|
24
25
|
params: {
|
|
25
26
|
...n,
|
|
26
|
-
provider: "ceph"
|
|
27
|
+
provider: "ceph",
|
|
28
|
+
storageType: "buckets"
|
|
27
29
|
}
|
|
28
30
|
} : {
|
|
29
31
|
to: "/projects/$projectId",
|
|
30
32
|
params: { projectId: a }
|
|
31
33
|
});
|
|
32
34
|
if (i === "ceph" && !c) throw r(s ? {
|
|
33
|
-
to: "/projects/$projectId/storage/$provider
|
|
35
|
+
to: "/projects/$projectId/storage/$provider/$storageType",
|
|
34
36
|
params: {
|
|
35
37
|
...n,
|
|
36
|
-
provider: "swift"
|
|
38
|
+
provider: "swift",
|
|
39
|
+
storageType: "containers"
|
|
37
40
|
}
|
|
38
41
|
} : {
|
|
39
42
|
to: "/projects/$projectId",
|
|
@@ -48,7 +51,7 @@ var a = () => import("./containers-DsRWc1L5.mjs"), o = () => import("./container
|
|
|
48
51
|
]).optional(),
|
|
49
52
|
sortDirection: i.enum(["asc", "desc"]).optional(),
|
|
50
53
|
search: i.string().optional()
|
|
51
|
-
}), l = t("/_auth/projects/$projectId/storage/$provider/
|
|
54
|
+
}), l = t("/_auth/projects/$projectId/storage/$provider/$storageType/")({
|
|
52
55
|
staticData: {
|
|
53
56
|
section: "storage",
|
|
54
57
|
service: "containers",
|
|
@@ -74,4 +77,4 @@ var a = () => import("./containers-DsRWc1L5.mjs"), o = () => import("./container
|
|
|
74
77
|
//#endregion
|
|
75
78
|
export { l as t };
|
|
76
79
|
|
|
77
|
-
//# sourceMappingURL=
|
|
80
|
+
//# sourceMappingURL=_storageType-4wSxI__0.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_storageType-4wSxI__0.mjs","names":["createFileRoute","redirect","z","getServiceIndex","checkServiceAvailability","availableServices","type","name","params","projectId","provider","serviceIndex","to","hasSwift","Boolean","hasCeph","cephFallbackEnabled","hasEffectiveCeph","fallbackProvider","fallbackStorageType","storageType","containersSearchSchema","object","sortBy","enum","optional","sortDirection","search","string","Route","staticData","section","service","sectionCrumb","labelKey","crumb","useParamAsLabel","RouteInfo","validateSearch","head","match","meta","title","component","lazyRouteComponent","$$splitComponentImporter","notFoundComponent","$$splitNotFoundComponentImporter","loader","context","trpcClient","auth","getAvailableServices","query","client","beforeLoad"],"sources":["../../src/client/routes/_auth/projects/$projectId/storage/$provider/$storageType/index.tsx"],"sourcesContent":["import { createFileRoute, redirect, useParams } from \"@tanstack/react-router\"\nimport { z } from \"zod\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { SwiftContainers } from \"../../-components/Swift/Containers\"\nimport { CephBuckets } from \"../../-components/Ceph/Buckets\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\n/**\n * Validates that the requested storage provider is available for the given project,\n * and redirects to an appropriate fallback route when it is not.\n *\n * Redirect rules (in priority order):\n * 1. No `object-store` service at all → redirect to the project overview.\n * 2. Unknown provider (neither \"swift\" nor \"ceph\") → redirect to the first\n * available provider, or to the project overview if none exist.\n * 3. Requested provider unavailable → redirect to the other provider,\n * or to the project overview if no alternative exists.\n *\n * Ceph has a temporary fallback flag (`cephFallbackEnabled`) that treats it as\n * available even when absent from the OpenStack service catalog.\n *\n * @throws {redirect} - Always throws a TanStack Router redirect; never returns normally\n * when the requested provider/project combination is unavailable.\n */\nexport const checkServiceAvailability = (\n availableServices: {\n type: string\n name: string\n }[],\n params: {\n projectId: string\n provider: string\n }\n) => {\n const { provider, projectId } = params\n\n const serviceIndex = getServiceIndex(availableServices)\n\n // Redirect to the \"Projects Overview\" page if no storage services available\n if (!serviceIndex[\"object-store\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n // Check provider availability\n const hasSwift = Boolean(serviceIndex[\"object-store\"][\"swift\"])\n const hasCeph = Boolean(serviceIndex[\"object-store\"][\"ceph\"])\n\n // TEMPORARY: Allow Ceph access even if not in catalog (relies on env config)\n // TODO: Properly register Ceph in OpenStack service catalog\n const cephFallbackEnabled = true // Set to false once Ceph is in catalog\n\n // Effective availability includes fallback flag for Ceph\n const hasEffectiveCeph = hasCeph || cephFallbackEnabled\n const fallbackProvider = hasSwift ? \"swift\" : hasEffectiveCeph ? \"ceph\" : null\n const fallbackStorageType = hasSwift ? \"containers\" : hasEffectiveCeph ? \"buckets\" : null\n\n if (provider !== \"swift\" && provider !== \"ceph\") {\n if (!fallbackProvider || !fallbackStorageType) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n throw redirect({\n to: \"/projects/$projectId/storage/$provider/$storageType\",\n params: { ...params, provider: fallbackProvider, storageType: fallbackStorageType },\n })\n }\n\n if (provider === \"swift\" && !hasSwift) {\n if (!hasEffectiveCeph) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n throw redirect({\n to: \"/projects/$projectId/storage/$provider/$storageType\",\n params: { ...params, provider: \"ceph\", storageType: \"buckets\" },\n })\n }\n\n if (provider === \"ceph\" && !hasEffectiveCeph) {\n if (!hasSwift) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n throw redirect({\n to: \"/projects/$projectId/storage/$provider/$storageType\",\n params: { ...params, provider: \"swift\", storageType: \"containers\" },\n })\n }\n}\n\n// Search params schema\n// - sortBy: active sort column — persisted for deep links and back navigation\n// - sortDirection: \"asc\" | \"desc\" — persisted alongside sortBy\n// - search: active filter string — persisted so deep links preserve the current search\nconst containersSearchSchema = z.object({\n sortBy: z.enum([\"name\", \"count\", \"bytes\", \"last_modified\"]).optional(),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional(),\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/storage/$provider/$storageType/\")({\n staticData: {\n section: \"storage\",\n service: \"containers\",\n sectionCrumb: { labelKey: \"Storage\" },\n crumb: { useParamAsLabel: \"provider\" },\n } satisfies RouteInfo,\n validateSearch: containersSearchSchema,\n head: ({ match }) => ({\n meta: [\n {\n title:\n match.params.provider === \"swift\"\n ? \"Object Storage (Swift)\"\n : match.params.provider === \"ceph\"\n ? \"Object Storage (Ceph)\"\n : \"Storage Overview\",\n },\n ],\n }),\n component: () => {\n return <StorageDashboard />\n },\n notFoundComponent: () => {\n return <p>Storage service not found</p>\n },\n loader: async ({ context }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n\n return {\n client: trpcClient,\n availableServices,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const availableServices = await trpcClient?.auth.getAvailableServices.query()\n checkServiceAvailability(availableServices!, params)\n },\n})\n\nfunction StorageDashboard() {\n const { project, provider } = useParams({\n from: \"/_auth/projects/$projectId/storage/$provider/$storageType/\",\n select: (params) => {\n return { project: params.projectId, provider: params.provider, storageType: params.storageType }\n },\n })\n\n const { t } = useLingui()\n\n let pageTitle: string\n switch (provider) {\n case \"swift\":\n pageTitle = t`Object Storage (Swift)`\n break\n case \"ceph\":\n pageTitle = t`Object Storage (Ceph)`\n break\n default:\n pageTitle = t`Storage Overview`\n }\n\n return (\n <div>\n <ContentHeader title={pageTitle} projectId={project} />\n {project ? (\n <ErrorBoundary\n resetKeys={[project, provider]}\n fallback={\n <div className=\"p-4 text-center\">\n <Trans>Error loading component</Trans>\n </div>\n }\n >\n {(() => {\n switch (provider) {\n case \"swift\":\n return <SwiftContainers />\n case \"ceph\":\n return <CephBuckets />\n default:\n return <div>Storage Overview Page</div> // replace when available\n }\n })()}\n </ErrorBoundary>\n ) : (\n <div className=\"p-4 text-center\">\n <Trans>No project selected</Trans>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":";;;;sGA2BaI,KACXC,GAIAG,MAAAA;CAKA,IAAM,EAAEE,aAAUD,iBAAcD,GAE1BG,IAAeR,EAAgBE,CAAAA;CAGrC,IAAI,CAACM,EAAa,iBAChB,MAAMV,EAAS;EACbW,IAAI;EACJJ,QAAQ,EAAEC,aAAU;CACtB,CAAA;CAIF,IAAMI,IAAWC,EAAQH,EAAa,gBAAgB,OAQhDM,IAPUH,EAAQH,EAAa,gBAAgB,QAOjBK,IAC9BE,IAAmBL,IAAW,UAAUI,IAAmB,SAAS,MACpEE,IAAsBN,IAAW,eAAeI,IAAmB,YAAY;CAErF,IAAIP,MAAa,WAAWA,MAAa,QAOvC,MALQT,EADJ,CAACiB,KAAoB,CAACC,IACT;EACbP,IAAI;EACJJ,QAAQ,EAAEC,aAAU;CACtB,IAEa;EACbG,IAAI;EACJJ,QAAQ;GAAE,GAAGA;GAAQE,UAAUQ;GAAkBE,aAAaD;EAAoB;CACpF,CALE;CAQJ,IAAIT,MAAa,WAAW,CAACG,GAQ3B,MAAMZ,EAPDgB,IAOU;EACbL,IAAI;EACJJ,QAAQ;GAAE,GAAGA;GAAQE,UAAU;GAAQU,aAAa;EAAU;CAChE,IATiB;EACbR,IAAI;EACJJ,QAAQ,EAAEC,aAAU;CACtB,CAAA;CASJ,IAAIC,MAAa,UAAU,CAACO,GAQ1B,MAAMhB,EAPDY,IAOU;EACbD,IAAI;EACJJ,QAAQ;GAAE,GAAGA;GAAQE,UAAU;GAASU,aAAa;EAAa;CACpE,IATiB;EACbR,IAAI;EACJJ,QAAQ,EAAEC,aAAU;CACtB,CAAA;AAQN,GAMMY,IAAyBnB,EAAEoB,OAAO;CACtCC,QAAQrB,EAAEsB,KAAK;EAAC;EAAQ;EAAS;EAAS;EAAgB,EAAEC,SAAQ;CACpEC,eAAexB,EAAEsB,KAAK,CAAC,OAAO,MAAA,CAAO,EAAEC,SAAQ;CAC/CE,QAAQzB,EAAE0B,OAAM,EAAGH,SAAQ;AAC7B,CAAA,GAEaI,IAAQ7B,EAAgB,4DAAA,EAA8D;CACjG8B,YAAY;EACVC,SAAS;EACTC,SAAS;EACTC,cAAc,EAAEC,UAAU,UAAU;EACpCC,OAAO,EAAEC,iBAAiB,WAAW;CACvC;CACAE,gBAAgBjB;CAChBkB,OAAO,EAAEC,gBAAa,EACpBC,MAAM,CACJ,EACEC,OACEF,EAAMhC,OAAOE,aAAa,UACtB,2BACA8B,EAAMhC,OAAOE,aAAa,SACxB,0BACA,mBACV,CAAA,EAEJ;CACAiC,WAASC,EAAAC,GAAA,WAAA;CAGTC,mBAAiBF,EAAAG,GAAA,mBAAA;CAGjBC,QAAQ,OAAO,EAAEC,iBAAS;EACxB,IAAM,EAAEC,kBAAeD;EAGvB,OAAO;GACLK,QAAQJ;GACR7C,mBAAAA,MAJ8B6C,GAAYC,KAAKC,qBAAqBC,MAAAA;EAKtE;CACF;CACAE,YAAY,OAAO,EAAEN,YAASzC,gBAAQ;EACpC,IAAM,EAAE0C,kBAAeD;EAEvB7C,EAAyBC,MADO6C,GAAYC,KAAKC,qBAAqBC,MAAAA,GACzB7C,CAAAA;CAC/C;AACF,CAAA"}
|