@cobaltcore-dev/aurora 0.22.0 → 0.23.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/client/{AuthProvider-p1e1DuKU.mjs → AuthProvider-CQ6Yppoh.mjs} +2 -2
- package/dist/client/{AuthProvider-p1e1DuKU.mjs.map → AuthProvider-CQ6Yppoh.mjs.map} +1 -1
- package/dist/client/{BucketToastNotifications-BGd2wVmh.mjs → BucketToastNotifications-Dq4dudkM.mjs} +224 -172
- package/dist/client/BucketToastNotifications-Dq4dudkM.mjs.map +1 -0
- package/dist/client/{ContentHeader-BIScbvb4.mjs → ContentHeader-9KZdhOoA.mjs} +2 -2
- package/dist/client/{ContentHeader-BIScbvb4.mjs.map → ContentHeader-9KZdhOoA.mjs.map} +1 -1
- package/dist/client/{DeleteFlavorModal-lFMExcq_.mjs → DeleteFlavorModal-Be2qZo4w.mjs} +2 -2
- package/dist/client/{DeleteFlavorModal-lFMExcq_.mjs.map → DeleteFlavorModal-Be2qZo4w.mjs.map} +1 -1
- package/dist/client/{DeletePcaModal-Dg9dej-H.mjs → DeletePcaModal-CIFsGWyj.mjs} +4 -4
- package/dist/client/{DeletePcaModal-Dg9dej-H.mjs.map → DeletePcaModal-CIFsGWyj.mjs.map} +1 -1
- package/dist/client/{DetailsInfo-DwCo9P1o.mjs → DetailsInfo-CHVD7d-W.mjs} +3 -3
- package/dist/client/{DetailsInfo-DwCo9P1o.mjs.map → DetailsInfo-CHVD7d-W.mjs.map} +1 -1
- package/dist/client/{FiltersInput-cOaaRpcQ.mjs → FiltersInput-DqT08Ib-.mjs} +2 -2
- package/dist/client/{FiltersInput-cOaaRpcQ.mjs.map → FiltersInput-DqT08Ib-.mjs.map} +1 -1
- package/dist/client/{FloatingIpActionModals-CDF8LVtX.mjs → FloatingIpActionModals-BcceUHcg.mjs} +4 -4
- package/dist/client/{FloatingIpActionModals-CDF8LVtX.mjs.map → FloatingIpActionModals-BcceUHcg.mjs.map} +1 -1
- package/dist/client/{ImageToastNotifications-Dzq6jNTm.mjs → ImageToastNotifications-BGyX2J6j.mjs} +5 -5
- package/dist/client/ImageToastNotifications-BGyX2J6j.mjs.map +1 -0
- package/dist/client/{RouteError-BmZRk_ss.mjs → RouteError-Rm08PcxN.mjs} +2 -2
- package/dist/client/{RouteError-BmZRk_ss.mjs.map → RouteError-Rm08PcxN.mjs.map} +1 -1
- package/dist/client/{SortInput-DjaEHvcO.mjs → SortInput-D_q_jDfe.mjs} +2 -2
- package/dist/client/{SortInput-DjaEHvcO.mjs.map → SortInput-D_q_jDfe.mjs.map} +1 -1
- package/dist/client/{StatusError-CLB026fg.mjs → StatusError-2ZU1gFpu.mjs} +2 -2
- package/dist/client/{StatusError-CLB026fg.mjs.map → StatusError-2ZU1gFpu.mjs.map} +1 -1
- package/dist/client/{_auth-Dut7CaMR.mjs → _auth-D5_QNUos.mjs} +2 -2
- package/dist/client/{_auth-Dut7CaMR.mjs.map → _auth-D5_QNUos.mjs.map} +1 -1
- package/dist/client/{_flavorId-DUWdFEMH.mjs → _flavorId-BsmqS9hP.mjs} +7 -7
- package/dist/client/{_flavorId-DUWdFEMH.mjs.map → _flavorId-BsmqS9hP.mjs.map} +1 -1
- package/dist/client/{_flavorId-BMJcnI7H.mjs → _flavorId-CFmkmg2Y.mjs} +2 -2
- package/dist/client/{_flavorId-BMJcnI7H.mjs.map → _flavorId-CFmkmg2Y.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-KcWWq9ZW2.mjs → _floatingIpId-Bb9ZEJ6b.mjs} +6 -6
- package/dist/client/_floatingIpId-Bb9ZEJ6b.mjs.map +1 -0
- package/dist/client/{_floatingIpId-CjQLzpC5.mjs → _floatingIpId-Dzh6_JCI.mjs} +2 -2
- package/dist/client/{_floatingIpId-CjQLzpC5.mjs.map → _floatingIpId-Dzh6_JCI.mjs.map} +1 -1
- package/dist/client/{_imageId-BkEpwbCr.mjs → _imageId-C3As7sHE.mjs} +5 -5
- package/dist/client/{_imageId-BkEpwbCr.mjs.map → _imageId-C3As7sHE.mjs.map} +1 -1
- package/dist/client/{_pcaId-BcwGho7g.mjs → _pcaId-n0q0aDb6.mjs} +6 -6
- package/dist/client/{_pcaId-BcwGho7g.mjs.map → _pcaId-n0q0aDb6.mjs.map} +1 -1
- package/dist/client/{_projectId-hMtrqW6m.mjs → _projectId-BuBIFdgG.mjs} +3 -3
- package/dist/client/{_projectId-hMtrqW6m.mjs.map → _projectId-BuBIFdgG.mjs.map} +1 -1
- package/dist/client/{_projectId-CoMD6nq6.mjs → _projectId-CAQkJHZ4.mjs} +3 -3
- package/dist/client/{_projectId-CoMD6nq6.mjs.map → _projectId-CAQkJHZ4.mjs.map} +1 -1
- package/dist/client/_projectId-D-b7paXE.mjs +29 -0
- package/dist/client/_projectId-D-b7paXE.mjs.map +1 -0
- package/dist/client/{_projectId-D8FHe0gr.mjs → _projectId-DNZsNxJw.mjs} +3 -3
- package/dist/client/{_projectId-D8FHe0gr.mjs.map → _projectId-DNZsNxJw.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-B5-gJe1u.mjs → _securityGroupId-DFdNKa2l.mjs} +641 -504
- package/dist/client/_securityGroupId-DFdNKa2l.mjs.map +1 -0
- package/dist/client/{_securityGroupId-fPJWtDPU.mjs → _securityGroupId-DRkY3Gt6.mjs} +2 -2
- package/dist/client/_securityGroupId-DRkY3Gt6.mjs.map +1 -0
- package/dist/client/{_storageType-CI5f4CsI.mjs → _storageType-Cn7TSOki.mjs} +2 -2
- package/dist/client/{_storageType-CI5f4CsI.mjs.map → _storageType-Cn7TSOki.mjs.map} +1 -1
- package/dist/client/{_storageType-DePX1Aah.mjs → _storageType-_8Ambhxc.mjs} +832 -843
- package/dist/client/_storageType-_8Ambhxc.mjs.map +1 -0
- package/dist/client/{about-B4sGnxeW.mjs → about-C8tTrQaW.mjs} +2 -2
- package/dist/client/{about-B4sGnxeW.mjs.map → about-C8tTrQaW.mjs.map} +1 -1
- package/dist/client/assets/objectDownload.worker-BAc5Au4B.js.map +1 -0
- package/dist/client/{aurora-Dp_NPGe8.mjs → aurora-jyvXcI4T.mjs} +2 -2
- package/dist/client/{aurora-Dp_NPGe8.mjs.map → aurora-jyvXcI4T.mjs.map} +1 -1
- package/dist/client/{build-DgeVmENN.mjs → build-CRLQyqu2.mjs} +2616 -3346
- package/dist/client/{build-DgeVmENN.mjs.map → build-CRLQyqu2.mjs.map} +1 -1
- package/dist/client/{flavors-DkGuWvge.mjs → flavors-BfTXqmoD.mjs} +6 -6
- package/dist/client/{flavors-DkGuWvge.mjs.map → flavors-BfTXqmoD.mjs.map} +1 -1
- package/dist/client/{flavors-DLxUiBhE.mjs → flavors-Dy-2mRGv.mjs} +2 -2
- package/dist/client/{flavors-DLxUiBhE.mjs.map → flavors-Dy-2mRGv.mjs.map} +1 -1
- package/dist/client/floatingips-zhNK6Xxn.mjs +562 -0
- package/dist/client/floatingips-zhNK6Xxn.mjs.map +1 -0
- package/dist/client/hooks/useAvailableViewportHeight.d.ts +30 -0
- package/dist/client/hooks/useVirtualizedTableBody.d.ts +39 -0
- package/dist/client/{hooks-D0wGUhRF.mjs → hooks-Bw3sHHOg.mjs} +2 -2
- package/dist/client/{hooks-D0wGUhRF.mjs.map → hooks-Bw3sHHOg.mjs.map} +1 -1
- package/dist/client/{images-h9i7S4LN.mjs → images-DPKUXryV.mjs} +2 -2
- package/dist/client/{images-h9i7S4LN.mjs.map → images-DPKUXryV.mjs.map} +1 -1
- package/dist/client/{images-D9nfOtSC.mjs → images-DhZnqUG_.mjs} +29 -29
- package/dist/client/images-DhZnqUG_.mjs.map +1 -0
- package/dist/client/images-NBf2bV43.mjs.map +1 -1
- package/dist/client/index.js +303 -312
- package/dist/client/index.js.map +1 -1
- package/dist/client/{objects-CGOfO00N.mjs → objects-B3mbk6V0.mjs} +1361 -1082
- package/dist/client/objects-B3mbk6V0.mjs.map +1 -0
- package/dist/client/{objects-B3Z8h4RU.mjs → objects-BQ8xvSW8.mjs} +2 -2
- package/dist/client/{objects-B3Z8h4RU.mjs.map → objects-BQ8xvSW8.mjs.map} +1 -1
- package/dist/client/{pca-Nppb8aVa.mjs → pca-B60iWWfG.mjs} +7 -7
- package/dist/client/{pca-Nppb8aVa.mjs.map → pca-B60iWWfG.mjs.map} +1 -1
- package/dist/client/{pca-C7cMT8fW.mjs → pca-D0kKxHp4.mjs} +2 -2
- package/dist/client/{pca-C7cMT8fW.mjs.map → pca-D0kKxHp4.mjs.map} +1 -1
- package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
- package/dist/client/{routes-CaqfgBYu.mjs → routes-BOf-GDMM.mjs} +4 -4
- package/dist/client/{routes-CaqfgBYu.mjs.map → routes-BOf-GDMM.mjs.map} +1 -1
- package/dist/client/{routes-Bz4zb2H4.mjs → routes-CtfnI-aY.mjs} +2 -2
- package/dist/client/{routes-Bz4zb2H4.mjs.map → routes-CtfnI-aY.mjs.map} +1 -1
- package/dist/client/securitygroups-B8aLyFK7.mjs +17 -0
- package/dist/client/securitygroups-B8aLyFK7.mjs.map +1 -0
- package/dist/client/securitygroups-DRhFle2O.mjs +589 -0
- package/dist/client/securitygroups-DRhFle2O.mjs.map +1 -0
- package/dist/client/trpcClient-Di56hpVv.mjs +71 -0
- package/dist/client/trpcClient-Di56hpVv.mjs.map +1 -0
- package/dist/client/trpcClient.d.ts +40 -4
- package/dist/client/useListWithFiltering-aPTUNRaW.mjs +32 -0
- package/dist/client/useListWithFiltering-aPTUNRaW.mjs.map +1 -0
- package/dist/client/useSecurityGroupPermissions-BPS1ibWq.mjs +161 -0
- package/dist/client/useSecurityGroupPermissions-BPS1ibWq.mjs.map +1 -0
- package/dist/server/index.d.ts +56 -53
- package/dist/server/index.js +297 -20
- package/package.json +14 -14
- package/dist/client/BucketToastNotifications-BGd2wVmh.mjs.map +0 -1
- package/dist/client/EditSecurityGroupModal-BGPXglju.mjs +0 -137
- package/dist/client/EditSecurityGroupModal-BGPXglju.mjs.map +0 -1
- package/dist/client/ImageToastNotifications-Dzq6jNTm.mjs.map +0 -1
- package/dist/client/_floatingIpId-KcWWq9ZW2.mjs.map +0 -1
- package/dist/client/_projectId-MjFv839t.mjs +0 -25
- package/dist/client/_projectId-MjFv839t.mjs.map +0 -1
- package/dist/client/_securityGroupId-B5-gJe1u.mjs.map +0 -1
- package/dist/client/_securityGroupId-fPJWtDPU.mjs.map +0 -1
- package/dist/client/_storageType-DePX1Aah.mjs.map +0 -1
- package/dist/client/buildFilterParams-DoZzMKX9.mjs +0 -15
- package/dist/client/buildFilterParams-DoZzMKX9.mjs.map +0 -1
- package/dist/client/floatingips-DC5OrR8h.mjs +0 -434
- package/dist/client/floatingips-DC5OrR8h.mjs.map +0 -1
- package/dist/client/images-B5ktfqg6.mjs +0 -8
- package/dist/client/images-B5ktfqg6.mjs.map +0 -1
- package/dist/client/images-D9nfOtSC.mjs.map +0 -1
- package/dist/client/objects-CGOfO00N.mjs.map +0 -1
- package/dist/client/projects-DvSiI5Vg.mjs +0 -12
- package/dist/client/projects-DvSiI5Vg.mjs.map +0 -1
- package/dist/client/securitygroups-JMvcJLpb.mjs +0 -440
- package/dist/client/securitygroups-JMvcJLpb.mjs.map +0 -1
- package/dist/client/trpcClient-BxcNKnhv.mjs +0 -65
- package/dist/client/trpcClient-BxcNKnhv.mjs.map +0 -1
- package/dist/client/useListWithFiltering-BuhE81I6.mjs +0 -157
- package/dist/client/useListWithFiltering-BuhE81I6.mjs.map +0 -1
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
//#region src/client/utils/buildFilterParams.ts
|
|
2
|
-
var e = (e) => {
|
|
3
|
-
let t = {};
|
|
4
|
-
return e.selectedFilters?.length && e.selectedFilters.filter((e) => !e.inactive).forEach((e) => {
|
|
5
|
-
if (e.value === "true" || e.value === "false") {
|
|
6
|
-
t[e.name] = e.value === "true";
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
t[e.name] = e.value;
|
|
10
|
-
}), t;
|
|
11
|
-
};
|
|
12
|
-
//#endregion
|
|
13
|
-
export { e as t };
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=buildFilterParams-DoZzMKX9.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildFilterParams-DoZzMKX9.mjs","names":["buildFilterParams","filterSettings","params","selectedFilters","length","filter","sf","inactive","forEach","value","name"],"sources":["../../src/client/utils/buildFilterParams.ts"],"sourcesContent":["import { FilterSettings } from \"@/client/components/ListToolbar/types\"\n\n/**\n * Builds filter parameters from current filter settings\n */\nexport const buildFilterParams = (filterSettings: FilterSettings): Record<string, string | boolean> => {\n const params: Record<string, string | boolean> = {}\n\n if (!filterSettings.selectedFilters?.length) return params\n\n filterSettings.selectedFilters\n .filter((sf) => !sf.inactive)\n .forEach((sf) => {\n if (sf.value === \"true\" || sf.value === \"false\") {\n params[sf.name] = sf.value === \"true\"\n return\n }\n params[sf.name] = sf.value\n })\n return params\n}\n"],"mappings":";AAKA,IAAaA,KAAqBC,MAAAA;CAChC,IAAMC,IAA2C,CAAC;CAalD,OAXKD,EAAeE,iBAAiBC,UAErCH,EAAeE,gBACZE,QAAQC,MAAO,CAACA,EAAGC,QAAQ,EAC3BC,SAASF,MAAAA;EACR,IAAIA,EAAGG,UAAU,UAAUH,EAAGG,UAAU,SAAS;GAC/CP,EAAOI,EAAGI,QAAQJ,EAAGG,UAAU;GAC/B;EACF;EACAP,EAAOI,EAAGI,QAAQJ,EAAGG;CACvB,CAAA,GAVkDP;AAYtD"}
|
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
import { A as e, B as t, E as n, G as r, H as i, K as a, P as o, R as s, U as c, Y as l, at as u, dt as d, et as f, m as p, o as m, r as h, rt as g, tt as _, y as v } from "./build-DgeVmENN.mjs";
|
|
2
|
-
import { r as y } from "./trpcClient-BxcNKnhv.mjs";
|
|
3
|
-
import { t as b } from "./useProjectId-DBc5lpoU.mjs";
|
|
4
|
-
import "./hooks-D0wGUhRF.mjs";
|
|
5
|
-
import { t as x } from "./useModal-DCs1OJh7.mjs";
|
|
6
|
-
import { t as S } from "./FloatingIpActionModals-CDF8LVtX.mjs";
|
|
7
|
-
import { n as C, t as w } from "./useListWithFiltering-BuhE81I6.mjs";
|
|
8
|
-
import { t as T } from "./buildFilterParams-DoZzMKX9.mjs";
|
|
9
|
-
import { m as E, r as D, s as O } from "./md-CyCflQee.mjs";
|
|
10
|
-
import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
11
|
-
import { useNavigate as M } from "@tanstack/react-router";
|
|
12
|
-
import { Trans as N, useLingui as P } from "@lingui/react";
|
|
13
|
-
import { z as F } from "zod";
|
|
14
|
-
import { i18n as I } from "@lingui/core";
|
|
15
|
-
import { useForm as L, useStore as R } from "@tanstack/react-form";
|
|
16
|
-
//#region src/client/routes/_auth/projects/$projectId/network/floatingips/-components/-table/constants.tsx
|
|
17
|
-
var z = {
|
|
18
|
-
ACTIVE: {
|
|
19
|
-
text: "Active",
|
|
20
|
-
icon: /*#__PURE__*/ A(D, {
|
|
21
|
-
size: 18,
|
|
22
|
-
color: "white",
|
|
23
|
-
fill: "#4FB81C"
|
|
24
|
-
})
|
|
25
|
-
},
|
|
26
|
-
DOWN: {
|
|
27
|
-
text: "Down",
|
|
28
|
-
icon: /*#__PURE__*/ A(E, {
|
|
29
|
-
size: 18,
|
|
30
|
-
color: "white",
|
|
31
|
-
fill: "#969696"
|
|
32
|
-
})
|
|
33
|
-
},
|
|
34
|
-
ERROR: {
|
|
35
|
-
text: "Error",
|
|
36
|
-
icon: /*#__PURE__*/ A(O, {
|
|
37
|
-
size: 18,
|
|
38
|
-
color: "white",
|
|
39
|
-
fill: "#C70000"
|
|
40
|
-
})
|
|
41
|
-
}
|
|
42
|
-
}, B = () => [
|
|
43
|
-
I._({ id: "uAQUqI" }),
|
|
44
|
-
I._({ id: "xNG/3n" }),
|
|
45
|
-
I._({ id: "Nc7QKU" }),
|
|
46
|
-
I._({ id: "7NC3vm" }),
|
|
47
|
-
I._({ id: "Nu4oKW" }),
|
|
48
|
-
""
|
|
49
|
-
], V = ({ floatingIp: t }) => {
|
|
50
|
-
let { i18n: i, _: a } = P(), o = M(), s = b(), c = () => {
|
|
51
|
-
o({
|
|
52
|
-
to: "/projects/$projectId/network/floatingips/$floatingIpId",
|
|
53
|
-
params: {
|
|
54
|
-
projectId: s,
|
|
55
|
-
floatingIpId: t.id
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
};
|
|
59
|
-
return /*#__PURE__*/ j(n, {
|
|
60
|
-
"data-testid": `floating-ip-row-${t.id}`,
|
|
61
|
-
onClick: c,
|
|
62
|
-
children: [
|
|
63
|
-
/*#__PURE__*/ A(r, { children: /*#__PURE__*/ j("div", {
|
|
64
|
-
className: "flex items-center gap-2",
|
|
65
|
-
children: [z[t.status].icon, z[t.status].text]
|
|
66
|
-
}) }),
|
|
67
|
-
/*#__PURE__*/ A(r, { children: t.floating_ip_address }),
|
|
68
|
-
/*#__PURE__*/ A(r, { children: t.fixed_ip_address || "—" }),
|
|
69
|
-
/*#__PURE__*/ A(r, { children: t.floating_network_id }),
|
|
70
|
-
/*#__PURE__*/ A(r, { children: t.description || "—" }),
|
|
71
|
-
/*#__PURE__*/ A(r, {
|
|
72
|
-
onClick: (e) => e.stopPropagation(),
|
|
73
|
-
className: "items-end pr-0",
|
|
74
|
-
children: /*#__PURE__*/ A(S, {
|
|
75
|
-
floatingIp: t,
|
|
76
|
-
children: ({ toggleEditModal: t, toggleAttachModal: n, toggleDetachModal: r, toggleReleaseModal: a }) => /*#__PURE__*/ A(g, { children: /*#__PURE__*/ j(e, { children: [
|
|
77
|
-
/*#__PURE__*/ A(u, {
|
|
78
|
-
label: i._({ id: "rdUucN" }),
|
|
79
|
-
onClick: c
|
|
80
|
-
}),
|
|
81
|
-
/*#__PURE__*/ A(u, {
|
|
82
|
-
label: i._({ id: "n22YIM" }),
|
|
83
|
-
onClick: t
|
|
84
|
-
}),
|
|
85
|
-
/*#__PURE__*/ A(u, {
|
|
86
|
-
label: i._({ id: "igVDFt" }),
|
|
87
|
-
onClick: n
|
|
88
|
-
}),
|
|
89
|
-
/*#__PURE__*/ A(u, {
|
|
90
|
-
label: i._({ id: "FOcBn3" }),
|
|
91
|
-
onClick: r
|
|
92
|
-
}),
|
|
93
|
-
/*#__PURE__*/ A(u, {
|
|
94
|
-
label: i._({ id: "H+a5j6" }),
|
|
95
|
-
onClick: a
|
|
96
|
-
})
|
|
97
|
-
] }) })
|
|
98
|
-
})
|
|
99
|
-
})
|
|
100
|
-
]
|
|
101
|
-
}, t.id);
|
|
102
|
-
}, H = ({ floatingIps: e, isLoading: t, isError: i, error: c }) => {
|
|
103
|
-
let { i18n: u, _: d } = P(), f = B();
|
|
104
|
-
return t ? /*#__PURE__*/ j(_, {
|
|
105
|
-
className: "py-8",
|
|
106
|
-
distribution: "center",
|
|
107
|
-
alignment: "center",
|
|
108
|
-
direction: "vertical",
|
|
109
|
-
children: [/*#__PURE__*/ A(a, {
|
|
110
|
-
variant: "primary",
|
|
111
|
-
size: "large",
|
|
112
|
-
className: "mb-2"
|
|
113
|
-
}), /*#__PURE__*/ A(N, { id: "Z3FXyt" })]
|
|
114
|
-
}) : i ? /*#__PURE__*/ A(_, {
|
|
115
|
-
className: "py-8",
|
|
116
|
-
distribution: "center",
|
|
117
|
-
alignment: "center",
|
|
118
|
-
direction: "vertical",
|
|
119
|
-
children: c?.message ?? u._({ id: "+Nx1wc" })
|
|
120
|
-
}) : e.length === 0 ? /*#__PURE__*/ A(o, {
|
|
121
|
-
columns: f.length,
|
|
122
|
-
className: "floating-ips",
|
|
123
|
-
"data-testid": "no-floating-ips",
|
|
124
|
-
children: /*#__PURE__*/ A(n, { children: /*#__PURE__*/ j(r, {
|
|
125
|
-
colSpan: f.length,
|
|
126
|
-
children: [/*#__PURE__*/ A(l, { children: /*#__PURE__*/ A(N, { id: "WCLyHI" }) }), /*#__PURE__*/ A("p", { children: /*#__PURE__*/ A(N, { id: "0eY8Mz" }) })]
|
|
127
|
-
}) })
|
|
128
|
-
}) : /*#__PURE__*/ j(o, {
|
|
129
|
-
columns: f.length,
|
|
130
|
-
children: [/*#__PURE__*/ A(n, { children: f.map((e) => /*#__PURE__*/ A(s, { children: e }, e)) }), e.map((e) => /*#__PURE__*/ A(V, { floatingIp: e }, e.id))]
|
|
131
|
-
});
|
|
132
|
-
}, U = /^(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}$/, W = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(([0-9a-fA-F]{1,4}:){1,7}:)|(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|([0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}))|(:((:[0-9a-fA-F]{1,4}){1,7}|:))|(::([fF]{4}(:0{1,4})?:)?((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|(([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})))$/, G = (e) => U.test(e) || W.test(e), K = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/, q = ({ open: e, onClose: n }) => {
|
|
133
|
-
let { i18n: r, _: o } = P(), s = b(), l = y.useUtils(), { isPending: u, ...g } = y.network.floatingIp.create.useMutation({ onSettled: () => l.network.floatingIp.list.invalidate() }), { data: _ = [], isLoading: v, error: x } = y.network.floatingIp.listExternalNetworks.useQuery({ project_id: s }), { data: S = [], isLoading: C, error: w } = y.network.floatingIp.listDnsDomains.useQuery({ project_id: s }), { data: T = [], isLoading: E, error: D } = y.network.floatingIp.listAvailablePorts.useQuery({ project_id: s }), O = L({
|
|
134
|
-
defaultValues: {
|
|
135
|
-
floating_network_id: "",
|
|
136
|
-
dns_domain: "",
|
|
137
|
-
dns_name: "",
|
|
138
|
-
description: "",
|
|
139
|
-
floating_ip_address: "",
|
|
140
|
-
port_id: "",
|
|
141
|
-
fixed_ip_address: ""
|
|
142
|
-
},
|
|
143
|
-
validators: { onSubmit: F.object({
|
|
144
|
-
floating_network_id: F.string(),
|
|
145
|
-
dns_domain: F.string(),
|
|
146
|
-
dns_name: F.string().trim().max(63, r._({ id: "Zq6Y5u" })).refine((e) => e === "" || K.test(e), { message: r._({ id: "R6kcsL" }) }),
|
|
147
|
-
description: F.string().trim().max(255, r._({ id: "lZvIXd" })),
|
|
148
|
-
floating_ip_address: F.string().trim().refine((e) => e === "" || G(e), { message: r._({ id: "AZyHwC" }) }),
|
|
149
|
-
port_id: F.string(),
|
|
150
|
-
fixed_ip_address: F.string()
|
|
151
|
-
}) },
|
|
152
|
-
onSubmit: async ({ value: e }) => {
|
|
153
|
-
u || (await g.mutateAsync({
|
|
154
|
-
project_id: s,
|
|
155
|
-
tenant_id: s,
|
|
156
|
-
floating_network_id: e.floating_network_id,
|
|
157
|
-
...e.dns_domain && { dns_domain: e.dns_domain },
|
|
158
|
-
...e.dns_name && { dns_name: e.dns_name },
|
|
159
|
-
...e.description && { description: e.description },
|
|
160
|
-
...e.floating_ip_address && { floating_ip_address: e.floating_ip_address },
|
|
161
|
-
...e.port_id && { port_id: e.port_id },
|
|
162
|
-
...e.fixed_ip_address && { fixed_ip_address: e.fixed_ip_address }
|
|
163
|
-
}), k());
|
|
164
|
-
}
|
|
165
|
-
}), k = () => {
|
|
166
|
-
u || (O.reset(), g.reset(), n());
|
|
167
|
-
}, M = R(O.store, (e) => e.values.port_id), I = R(O.store, (e) => e.values.floating_network_id), z = T.find((e) => e.id === M)?.fixed_ips ?? [], B = (x?.message || w?.message || D?.message) ?? g.error?.message ?? null;
|
|
168
|
-
return /*#__PURE__*/ j(h, {
|
|
169
|
-
open: e,
|
|
170
|
-
size: "large",
|
|
171
|
-
title: r._({ id: "h99+4y" }),
|
|
172
|
-
onCancel: k,
|
|
173
|
-
cancelButtonLabel: r._({ id: "dEgA5A" }),
|
|
174
|
-
confirmButtonLabel: r._({ id: "9X8lAk" }),
|
|
175
|
-
onConfirm: O.handleSubmit,
|
|
176
|
-
disableConfirmButton: u || !I,
|
|
177
|
-
children: [
|
|
178
|
-
B && /*#__PURE__*/ A(t, {
|
|
179
|
-
dismissible: !1,
|
|
180
|
-
variant: "error",
|
|
181
|
-
className: "mb-4",
|
|
182
|
-
children: B
|
|
183
|
-
}),
|
|
184
|
-
u && /*#__PURE__*/ j("div", {
|
|
185
|
-
className: "mb-4 flex items-center justify-center gap-2",
|
|
186
|
-
children: [/*#__PURE__*/ A(a, { variant: "primary" }), /*#__PURE__*/ A("span", {
|
|
187
|
-
className: "text-theme-high text-sm",
|
|
188
|
-
children: /*#__PURE__*/ A(N, { id: "HuA8iQ" })
|
|
189
|
-
})]
|
|
190
|
-
}),
|
|
191
|
-
!u && /*#__PURE__*/ j(m, {
|
|
192
|
-
className: "mb-0",
|
|
193
|
-
id: "allocate-floating-ip-form",
|
|
194
|
-
onSubmit: (e) => {
|
|
195
|
-
e.preventDefault(), O.handleSubmit();
|
|
196
|
-
},
|
|
197
|
-
children: [
|
|
198
|
-
/*#__PURE__*/ A(i, {
|
|
199
|
-
className: "mb-4",
|
|
200
|
-
children: /*#__PURE__*/ A(O.Field, {
|
|
201
|
-
name: "floating_network_id",
|
|
202
|
-
children: (e) => /*#__PURE__*/ A(d, {
|
|
203
|
-
id: e.name,
|
|
204
|
-
name: e.name,
|
|
205
|
-
value: e.state.value,
|
|
206
|
-
onChange: (t) => e.handleChange(typeof t == "string" ? t : ""),
|
|
207
|
-
label: r._({ id: "kA2lMP" }),
|
|
208
|
-
helptext: r._({ id: "BoIAP6" }),
|
|
209
|
-
placeholder: r._({ id: "T6Gm5y" }),
|
|
210
|
-
disabled: u || v,
|
|
211
|
-
required: !0,
|
|
212
|
-
loading: v,
|
|
213
|
-
children: _.map(({ id: e, name: t }) => /*#__PURE__*/ A(p, {
|
|
214
|
-
value: e,
|
|
215
|
-
label: t ? `${t} (${e})` : e
|
|
216
|
-
}, e))
|
|
217
|
-
})
|
|
218
|
-
})
|
|
219
|
-
}),
|
|
220
|
-
/*#__PURE__*/ A(i, {
|
|
221
|
-
className: "mb-4",
|
|
222
|
-
children: /*#__PURE__*/ A(O.Field, {
|
|
223
|
-
name: "dns_domain",
|
|
224
|
-
children: (e) => /*#__PURE__*/ A(d, {
|
|
225
|
-
id: e.name,
|
|
226
|
-
name: e.name,
|
|
227
|
-
value: e.state.value,
|
|
228
|
-
onChange: (t) => e.handleChange(typeof t == "string" ? t : ""),
|
|
229
|
-
label: r._({ id: "WlpcJv" }),
|
|
230
|
-
helptext: r._({ id: "1ojTVo" }),
|
|
231
|
-
disabled: u || C,
|
|
232
|
-
loading: C,
|
|
233
|
-
children: S.map(({ id: e, name: t }) => /*#__PURE__*/ A(p, {
|
|
234
|
-
value: t,
|
|
235
|
-
label: t
|
|
236
|
-
}, e))
|
|
237
|
-
})
|
|
238
|
-
})
|
|
239
|
-
}),
|
|
240
|
-
/*#__PURE__*/ A(i, {
|
|
241
|
-
className: "mb-4",
|
|
242
|
-
children: /*#__PURE__*/ A(O.Field, {
|
|
243
|
-
name: "dns_name",
|
|
244
|
-
children: (e) => /*#__PURE__*/ A(c, {
|
|
245
|
-
id: e.name,
|
|
246
|
-
name: e.name,
|
|
247
|
-
value: e.state.value,
|
|
248
|
-
onBlur: e.handleBlur,
|
|
249
|
-
onChange: (t) => e.handleChange(t.target.value),
|
|
250
|
-
label: r._({ id: "eGEHJE" }),
|
|
251
|
-
placeholder: r._({ id: "SLEH7X" }),
|
|
252
|
-
helptext: r._({ id: "Tx4Ym+" }),
|
|
253
|
-
errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
|
|
254
|
-
disabled: u
|
|
255
|
-
})
|
|
256
|
-
})
|
|
257
|
-
}),
|
|
258
|
-
/*#__PURE__*/ A(i, {
|
|
259
|
-
className: "mb-4",
|
|
260
|
-
children: /*#__PURE__*/ A(O.Field, {
|
|
261
|
-
name: "description",
|
|
262
|
-
children: (e) => /*#__PURE__*/ A(f, {
|
|
263
|
-
id: e.name,
|
|
264
|
-
name: e.name,
|
|
265
|
-
value: e.state.value,
|
|
266
|
-
onBlur: e.handleBlur,
|
|
267
|
-
onChange: (t) => e.handleChange(t.target.value),
|
|
268
|
-
placeholder: r._({ id: "Nu4oKW" }),
|
|
269
|
-
errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
|
|
270
|
-
disabled: u
|
|
271
|
-
})
|
|
272
|
-
})
|
|
273
|
-
}),
|
|
274
|
-
/*#__PURE__*/ A(i, {
|
|
275
|
-
className: "mb-4",
|
|
276
|
-
children: /*#__PURE__*/ A(O.Field, {
|
|
277
|
-
name: "floating_ip_address",
|
|
278
|
-
children: (e) => /*#__PURE__*/ A(c, {
|
|
279
|
-
id: e.name,
|
|
280
|
-
name: e.name,
|
|
281
|
-
value: e.state.value,
|
|
282
|
-
onBlur: e.handleBlur,
|
|
283
|
-
onChange: (t) => e.handleChange(t.target.value),
|
|
284
|
-
label: r._({ id: "xNG/3n" }),
|
|
285
|
-
placeholder: r._({ id: "5/wyf8" }),
|
|
286
|
-
helptext: r._({ id: "PAKSdy" }),
|
|
287
|
-
errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
|
|
288
|
-
disabled: u
|
|
289
|
-
})
|
|
290
|
-
})
|
|
291
|
-
}),
|
|
292
|
-
/*#__PURE__*/ A(i, {
|
|
293
|
-
className: "mb-4",
|
|
294
|
-
children: /*#__PURE__*/ A(O.Field, {
|
|
295
|
-
name: "port_id",
|
|
296
|
-
children: (e) => /*#__PURE__*/ A(d, {
|
|
297
|
-
id: e.name,
|
|
298
|
-
name: e.name,
|
|
299
|
-
value: e.state.value,
|
|
300
|
-
onChange: (t) => {
|
|
301
|
-
let n = typeof t == "string" ? t : "";
|
|
302
|
-
e.handleChange(n);
|
|
303
|
-
let r = T.find((e) => e.id === n)?.fixed_ips ?? [];
|
|
304
|
-
O.setFieldValue("fixed_ip_address", r.length === 1 ? r[0].ip_address : "");
|
|
305
|
-
},
|
|
306
|
-
label: r._({ id: "eks7oA" }),
|
|
307
|
-
placeholder: r._({ id: "UztfYZ" }),
|
|
308
|
-
errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
|
|
309
|
-
disabled: u || E,
|
|
310
|
-
loading: E,
|
|
311
|
-
children: T.map((e) => /*#__PURE__*/ A(p, {
|
|
312
|
-
value: e.id,
|
|
313
|
-
label: e.name ? `${e.name} (${e.id})` : e.id
|
|
314
|
-
}, e.id))
|
|
315
|
-
})
|
|
316
|
-
})
|
|
317
|
-
}),
|
|
318
|
-
/*#__PURE__*/ A(i, { children: /*#__PURE__*/ A(O.Field, {
|
|
319
|
-
name: "fixed_ip_address",
|
|
320
|
-
children: (e) => /*#__PURE__*/ A(d, {
|
|
321
|
-
id: e.name,
|
|
322
|
-
name: e.name,
|
|
323
|
-
value: e.state.value,
|
|
324
|
-
onBlur: e.handleBlur,
|
|
325
|
-
onChange: (t) => e.handleChange(typeof t == "string" ? t : ""),
|
|
326
|
-
label: r._({ id: "Nc7QKU" }),
|
|
327
|
-
placeholder: r._({ id: "i41Xuw" }),
|
|
328
|
-
helptext: r._({ id: "PtjzS+" }),
|
|
329
|
-
errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
|
|
330
|
-
disabled: u || z.length === 0,
|
|
331
|
-
children: z.map(({ ip_address: e }) => /*#__PURE__*/ A(p, {
|
|
332
|
-
value: e,
|
|
333
|
-
label: e
|
|
334
|
-
}, e))
|
|
335
|
-
})
|
|
336
|
-
}) })
|
|
337
|
-
]
|
|
338
|
-
})
|
|
339
|
-
]
|
|
340
|
-
});
|
|
341
|
-
}, J = "fixed_ip_address", Y = "asc", X = () => {
|
|
342
|
-
let { i18n: e, _: t } = P(), n = b(), [r, i] = x(!1), { searchTerm: a, handleSearchChange: o, sortSettings: s, handleSortChange: c, filterSettings: l, handleFilterChange: u } = w({
|
|
343
|
-
defaultSortKey: J,
|
|
344
|
-
defaultSortDir: Y,
|
|
345
|
-
sortOptions: [
|
|
346
|
-
{
|
|
347
|
-
label: e._({ id: "Nc7QKU" }),
|
|
348
|
-
value: "fixed_ip_address"
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
label: e._({ id: "xNG/3n" }),
|
|
352
|
-
value: "floating_ip_address"
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
label: e._({ id: "2cJIlz" }),
|
|
356
|
-
value: "floating_network_id"
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
label: e._({ id: "S0kLOH" }),
|
|
360
|
-
value: "id"
|
|
361
|
-
},
|
|
362
|
-
{
|
|
363
|
-
label: e._({ id: "/bUiYk" }),
|
|
364
|
-
value: "router_id"
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
label: e._({ id: "uAQUqI" }),
|
|
368
|
-
value: "status"
|
|
369
|
-
},
|
|
370
|
-
{
|
|
371
|
-
label: e._({ id: "T9Mtpi" }),
|
|
372
|
-
value: "tenant_id"
|
|
373
|
-
},
|
|
374
|
-
{
|
|
375
|
-
label: e._({ id: "mSfwLL" }),
|
|
376
|
-
value: "project_id"
|
|
377
|
-
}
|
|
378
|
-
],
|
|
379
|
-
filterSettings: { filters: [{
|
|
380
|
-
displayName: e._({ id: "uAQUqI" }),
|
|
381
|
-
filterName: "status",
|
|
382
|
-
values: [
|
|
383
|
-
"ACTIVE",
|
|
384
|
-
"DOWN",
|
|
385
|
-
"ERROR"
|
|
386
|
-
],
|
|
387
|
-
supportsMultiValue: !1
|
|
388
|
-
}] }
|
|
389
|
-
}), { data: d = [], isLoading: f, isError: p, error: m } = y.network.floatingIp.list.useQuery({
|
|
390
|
-
project_id: n,
|
|
391
|
-
sort_key: s.sortBy,
|
|
392
|
-
sort_dir: s.sortDirection,
|
|
393
|
-
...T(l),
|
|
394
|
-
...a ? { searchTerm: a } : {}
|
|
395
|
-
});
|
|
396
|
-
return /*#__PURE__*/ j("div", {
|
|
397
|
-
className: "relative",
|
|
398
|
-
children: [
|
|
399
|
-
/*#__PURE__*/ A(C, {
|
|
400
|
-
searchTerm: a,
|
|
401
|
-
onSearch: o,
|
|
402
|
-
sortSettings: s,
|
|
403
|
-
onSort: c,
|
|
404
|
-
filterSettings: l,
|
|
405
|
-
onFilter: u,
|
|
406
|
-
actions: /*#__PURE__*/ A(v, {
|
|
407
|
-
variant: "primary",
|
|
408
|
-
label: e._({ id: "h99+4y" }),
|
|
409
|
-
onClick: i
|
|
410
|
-
})
|
|
411
|
-
}),
|
|
412
|
-
/*#__PURE__*/ A(H, {
|
|
413
|
-
floatingIps: d,
|
|
414
|
-
isLoading: f,
|
|
415
|
-
isError: p,
|
|
416
|
-
error: m
|
|
417
|
-
}),
|
|
418
|
-
r && /*#__PURE__*/ A(q, {
|
|
419
|
-
open: r,
|
|
420
|
-
onClose: i
|
|
421
|
-
})
|
|
422
|
-
]
|
|
423
|
-
});
|
|
424
|
-
};
|
|
425
|
-
//#endregion
|
|
426
|
-
//#region src/client/routes/_auth/projects/$projectId/network/floatingips/index.tsx?tsr-split=component
|
|
427
|
-
function Z() {
|
|
428
|
-
let { i18n: e, _: t } = P();
|
|
429
|
-
return /*#__PURE__*/ j(k, { children: [/*#__PURE__*/ A(l, { children: e._({ id: "u77/s4" }) }), /*#__PURE__*/ A(X, {})] });
|
|
430
|
-
}
|
|
431
|
-
//#endregion
|
|
432
|
-
export { Z as component };
|
|
433
|
-
|
|
434
|
-
//# sourceMappingURL=floatingips-DC5OrR8h.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"floatingips-DC5OrR8h.mjs","names":["MdError","MdRemoveCircle","MdCheckCircle","STATUS_CONFIG","ACTIVE","text","icon","size","color","fill","DOWN","ERROR","TABLE_COLUMNS","t","useNavigate","DataGridCell","DataGridRow","PopupMenu","PopupMenuItem","PopupMenuOptions","STATUS_CONFIG","FloatingIpActionModals","useProjectId","FloatingIpTableRow","floatingIp","useLingui","navigate","projectId","navigateToDetailsPage","to","params","floatingIpId","id","data-testid","onClick","div","className","status","icon","text","floating_ip_address","fixed_ip_address","floating_network_id","description","e","stopPropagation","toggleEditModal","toggleAttachModal","toggleDetachModal","toggleReleaseModal","label","t","DataGrid","DataGridHeadCell","DataGridRow","DataGridCell","ContentHeading","Stack","Spinner","FloatingIpTableRow","TABLE_COLUMNS","FloatingIpListContainer","floatingIps","isLoading","isError","error","useLingui","columns","className","distribution","alignment","direction","variant","size","message","t","length","data-testid","colSpan","p","map","label","ip","floatingIp","id","z","useForm","useStore","Modal","Form","FormSection","Spinner","Message","Textarea","TextInput","Select","SelectOption","trpcReact","useProjectId","ipv4Regex","ipv6Regex","isValidIpAddress","value","test","dnsNameRegex","AllocateFloatingIpModal","open","onClose","useLingui","projectId","utils","useUtils","isPending","createFloatingIpMutation","network","floatingIp","create","useMutation","onSettled","list","invalidate","data","externalNetworks","isLoading","isExternalNetworksLoading","error","externalNetworksError","listExternalNetworks","useQuery","project_id","dnsDomains","isDnsDomainsLoading","dnsDomainsError","listDnsDomains","availablePorts","isPortsLoading","portsError","listAvailablePorts","formSchema","object","floating_network_id","string","dns_domain","dns_name","trim","max","t","refine","message","description","floating_ip_address","port_id","fixed_ip_address","form","defaultValues","validators","onSubmit","mutateAsync","tenant_id","handleClose","reset","currentPortId","store","state","values","currentFloatingNetworkId","selectedPort","find","port","id","portFixedIps","fixed_ips","formErrorMessage","size","title","onCancel","cancelButtonLabel","confirmButtonLabel","onConfirm","handleSubmit","disableConfirmButton","dismissible","variant","className","div","span","e","preventDefault","Field","name","children","field","onChange","handleChange","label","helptext","placeholder","disabled","required","loading","map","onBlur","handleBlur","target","errortext","meta","errors","join","portId","p","ips","setFieldValue","length","ip_address","Button","ListToolbar","trpcReact","buildFilterParams","useListWithFiltering","useModal","useProjectId","FloatingIpListContainer","AllocateFloatingIpModal","DEFAULT_SORT_KEY","DEFAULT_SORT_DIR","FloatingIpsList","useLingui","projectId","allocateModalOpen","toggleAllocateModal","searchTerm","handleSearchChange","sortSettings","handleSortChange","filterSettings","handleFilterChange","defaultSortKey","defaultSortDir","sortOptions","label","t","value","filters","displayName","filterName","values","supportsMultiValue","data","floatingIps","isLoading","isError","error","network","floatingIp","list","useQuery","project_id","sort_key","sortBy","sort_dir","sortDirection","div","className","onSearch","onSort","onFilter","actions","variant","onClick","open","onClose","useLingui","FloatingIpsList","ContentHeading","Route","RouteComponent","t","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/network/floatingips/-components/-table/constants.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/-components/-table/FloatingIpTableRow.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/-components/-table/FloatingIpListContainer.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/-components/-modals/AllocateFloatingIpModal.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/-components/FloatingIpsList.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/index.tsx?tsr-split=component"],"sourcesContent":["import { MdError, MdRemoveCircle, MdCheckCircle } from \"react-icons/md\"\nimport { t } from \"@lingui/core/macro\"\nimport { FloatingIpStatus } from \"@/server/Network/types/floatingIp\"\n\ntype FloatingIpStatusDisplay = {\n text: string\n icon: React.ReactNode\n}\n\nexport const STATUS_CONFIG: Record<FloatingIpStatus, FloatingIpStatusDisplay> = {\n ACTIVE: {\n text: \"Active\",\n icon: <MdCheckCircle size={18} color=\"white\" fill=\"#4FB81C\" />,\n },\n DOWN: {\n text: \"Down\",\n icon: <MdRemoveCircle size={18} color=\"white\" fill=\"#969696\" />,\n },\n ERROR: {\n text: \"Error\",\n icon: <MdError size={18} color=\"white\" fill=\"#C70000\" />,\n },\n} as const\n\nexport const TABLE_COLUMNS = () =>\n [\n t`Status`,\n t`Floating IP Address`,\n t`Fixed IP Address`,\n t`Subnet`,\n t`Description`,\n \"\", // empty column for item-actions with context menu containing \"Preview\", \"Edit Description\", \"Attach\", \"Detach\" and \"Release\"\n ] as const\n","import { useNavigate } from \"@tanstack/react-router\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n DataGridCell,\n DataGridRow,\n PopupMenu,\n PopupMenuItem,\n PopupMenuOptions,\n} from \"@cloudoperators/juno-ui-components\"\nimport { FloatingIp } from \"@/server/Network/types/floatingIp\"\nimport { STATUS_CONFIG } from \"./constants\"\nimport { FloatingIpActionModals } from \"../-modals/FloatingIpActionModals\"\nimport { useProjectId } from \"@/client/hooks\"\n\ninterface FloatingIpTableRowProps {\n floatingIp: FloatingIp\n}\n\nexport const FloatingIpTableRow = ({ floatingIp }: FloatingIpTableRowProps) => {\n const { t } = useLingui()\n const navigate = useNavigate()\n const projectId = useProjectId()\n\n const navigateToDetailsPage = () => {\n navigate({\n to: \"/projects/$projectId/network/floatingips/$floatingIpId\",\n params: { projectId, floatingIpId: floatingIp.id },\n })\n }\n\n return (\n <DataGridRow key={floatingIp.id} data-testid={`floating-ip-row-${floatingIp.id}`} onClick={navigateToDetailsPage}>\n <DataGridCell>\n <div className=\"flex items-center gap-2\">\n {STATUS_CONFIG[floatingIp.status].icon}\n {STATUS_CONFIG[floatingIp.status].text}\n </div>\n </DataGridCell>\n <DataGridCell>{floatingIp.floating_ip_address}</DataGridCell>\n <DataGridCell>{floatingIp.fixed_ip_address || \"—\"}</DataGridCell>\n <DataGridCell>{floatingIp.floating_network_id}</DataGridCell>\n <DataGridCell>{floatingIp.description || \"—\"}</DataGridCell>\n <DataGridCell onClick={(e) => e.stopPropagation()} className=\"items-end pr-0\">\n <FloatingIpActionModals floatingIp={floatingIp}>\n {({ toggleEditModal, toggleAttachModal, toggleDetachModal, toggleReleaseModal }) => (\n <PopupMenu>\n <PopupMenuOptions>\n <PopupMenuItem label={t`Preview`} onClick={navigateToDetailsPage} />\n <PopupMenuItem label={t`Edit Description`} onClick={toggleEditModal} />\n <PopupMenuItem label={t`Attach`} onClick={toggleAttachModal} />\n <PopupMenuItem label={t`Detach`} onClick={toggleDetachModal} />\n <PopupMenuItem label={t`Release`} onClick={toggleReleaseModal} />\n </PopupMenuOptions>\n </PopupMenu>\n )}\n </FloatingIpActionModals>\n </DataGridCell>\n </DataGridRow>\n )\n}\n","import { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n DataGrid,\n DataGridHeadCell,\n DataGridRow,\n DataGridCell,\n ContentHeading,\n Stack,\n Spinner,\n} from \"@cloudoperators/juno-ui-components\"\nimport { FloatingIp } from \"@/server/Network/types/floatingIp\"\nimport { FloatingIpTableRow } from \"./FloatingIpTableRow\"\nimport { TABLE_COLUMNS } from \"./constants\"\n\ninterface FloatingIpListContainerProps {\n floatingIps: FloatingIp[]\n isLoading: boolean\n isError: boolean\n error: { message?: string } | null\n}\n\nexport const FloatingIpListContainer = ({ floatingIps, isLoading, isError, error }: FloatingIpListContainerProps) => {\n const { t } = useLingui()\n const columns = TABLE_COLUMNS()\n\n if (isLoading) {\n return (\n <Stack className=\"py-8\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading...</Trans>\n </Stack>\n )\n }\n\n if (isError) {\n return (\n <Stack className=\"py-8\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n {error?.message ?? t`Failed to load Floating IPs`}\n </Stack>\n )\n }\n\n if (floatingIps.length === 0) {\n return (\n <DataGrid columns={columns.length} className=\"floating-ips\" data-testid=\"no-floating-ips\">\n <DataGridRow>\n <DataGridCell colSpan={columns.length}>\n <ContentHeading>\n <Trans>No Floating IPs found</Trans>\n </ContentHeading>\n <p>\n <Trans>\n There are no Floating IPs available for this project. Floating IPs allow you to map public IP addresses\n to instances.\n </Trans>\n </p>\n </DataGridCell>\n </DataGridRow>\n </DataGrid>\n )\n }\n\n return (\n <DataGrid columns={columns.length}>\n <DataGridRow>\n {columns.map((label) => (\n <DataGridHeadCell key={label}>{label}</DataGridHeadCell>\n ))}\n </DataGridRow>\n {floatingIps.map((ip) => (\n <FloatingIpTableRow key={ip.id} floatingIp={ip} />\n ))}\n </DataGrid>\n )\n}\n","import { z } from \"zod\"\nimport { useForm, useStore } from \"@tanstack/react-form\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n Modal,\n Form,\n FormSection,\n Spinner,\n Message,\n Textarea,\n TextInput,\n Select,\n SelectOption,\n} from \"@cloudoperators/juno-ui-components\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { useProjectId } from \"@/client/hooks\"\n\nexport interface AllocateFloatingIpModalProps {\n open: boolean\n onClose: () => void\n}\n\nconst ipv4Regex = /^(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}$/\nconst ipv6Regex =\n /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(([0-9a-fA-F]{1,4}:){1,7}:)|(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|([0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}))|(:((:[0-9a-fA-F]{1,4}){1,7}|:))|(::([fF]{4}(:0{1,4})?:)?((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|(([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})))$/\nconst isValidIpAddress = (value: string) => ipv4Regex.test(value) || ipv6Regex.test(value)\nconst dnsNameRegex = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/\n\nexport const AllocateFloatingIpModal = ({ open, onClose }: AllocateFloatingIpModalProps) => {\n const { t } = useLingui()\n const projectId = useProjectId()\n const utils = trpcReact.useUtils()\n\n const { isPending, ...createFloatingIpMutation } = trpcReact.network.floatingIp.create.useMutation({\n onSettled: () => utils.network.floatingIp.list.invalidate(),\n })\n\n const {\n data: externalNetworks = [],\n isLoading: isExternalNetworksLoading,\n error: externalNetworksError,\n } = trpcReact.network.floatingIp.listExternalNetworks.useQuery({ project_id: projectId })\n\n const {\n data: dnsDomains = [],\n isLoading: isDnsDomainsLoading,\n error: dnsDomainsError,\n } = trpcReact.network.floatingIp.listDnsDomains.useQuery({ project_id: projectId })\n\n const {\n data: availablePorts = [],\n isLoading: isPortsLoading,\n error: portsError,\n } = trpcReact.network.floatingIp.listAvailablePorts.useQuery({ project_id: projectId })\n\n const formSchema = z.object({\n floating_network_id: z.string(),\n dns_domain: z.string(),\n dns_name: z\n .string()\n .trim()\n .max(63, t`DNS name must be at most 63 characters.`)\n .refine((value) => value === \"\" || dnsNameRegex.test(value), {\n message: t`Must be a valid PQDN or FQDN (alphanumeric and hyphens only, cannot start or end with hyphen).`,\n }),\n description: z\n .string()\n .trim()\n .max(255, t`Description must be at most 255 characters.`),\n floating_ip_address: z\n .string()\n .trim()\n .refine((value) => value === \"\" || isValidIpAddress(value), {\n message: t`Must be a valid IPv4 or IPv6 address (for example: 172.24.4.228 or 2001:db8::1).`,\n }),\n port_id: z.string(),\n fixed_ip_address: z.string(),\n })\n\n const form = useForm({\n defaultValues: {\n floating_network_id: \"\",\n dns_domain: \"\",\n dns_name: \"\",\n description: \"\",\n floating_ip_address: \"\",\n port_id: \"\",\n fixed_ip_address: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n if (isPending) return\n\n await createFloatingIpMutation.mutateAsync({\n project_id: projectId,\n tenant_id: projectId,\n floating_network_id: value.floating_network_id,\n ...(value.dns_domain && { dns_domain: value.dns_domain }),\n ...(value.dns_name && { dns_name: value.dns_name }),\n ...(value.description && { description: value.description }),\n ...(value.floating_ip_address && { floating_ip_address: value.floating_ip_address }),\n ...(value.port_id && { port_id: value.port_id }),\n ...(value.fixed_ip_address && { fixed_ip_address: value.fixed_ip_address }),\n })\n handleClose()\n },\n })\n\n const handleClose = () => {\n if (isPending) return\n\n form.reset()\n createFloatingIpMutation.reset()\n onClose()\n }\n\n const currentPortId = useStore(form.store, (state) => state.values.port_id)\n const currentFloatingNetworkId = useStore(form.store, (state) => state.values.floating_network_id)\n const selectedPort = availablePorts.find((port) => port.id === currentPortId)\n const portFixedIps = selectedPort?.fixed_ips ?? []\n\n const formErrorMessage =\n (externalNetworksError?.message || dnsDomainsError?.message || portsError?.message) ??\n createFloatingIpMutation.error?.message ??\n null\n\n return (\n <Modal\n open={open}\n size=\"large\"\n title={t`Allocate Floating IP`}\n onCancel={handleClose}\n cancelButtonLabel={t`Cancel`}\n confirmButtonLabel={t`Allocate`}\n onConfirm={form.handleSubmit}\n disableConfirmButton={isPending || !currentFloatingNetworkId}\n >\n {formErrorMessage && (\n <Message dismissible={false} variant=\"error\" className=\"mb-4\">\n {formErrorMessage}\n </Message>\n )}\n\n {isPending && (\n <div className=\"mb-4 flex items-center justify-center gap-2\">\n <Spinner variant=\"primary\" />\n <span className=\"text-theme-high text-sm\">\n <Trans>Allocating Floating IP...</Trans>\n </span>\n </div>\n )}\n\n {!isPending && (\n <Form\n className=\"mb-0\"\n id=\"allocate-floating-ip-form\"\n onSubmit={(e) => {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"floating_network_id\"\n children={(field) => (\n <Select\n id={field.name}\n name={field.name}\n value={field.state.value}\n onChange={(value) => field.handleChange(typeof value === \"string\" ? value : \"\")}\n label={t`External Network`}\n helptext={t`The ID of the network associated with the floating IP.`}\n placeholder={t`Select an external network`}\n disabled={isPending || isExternalNetworksLoading}\n required\n loading={isExternalNetworksLoading}\n >\n {externalNetworks.map(({ id, name }) => (\n <SelectOption key={id} value={id} label={name ? `${name} (${id})` : id} />\n ))}\n </Select>\n )}\n />\n </FormSection>\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"dns_domain\"\n children={(field) => (\n <Select\n id={field.name}\n name={field.name}\n value={field.state.value}\n onChange={(value) => field.handleChange(typeof value === \"string\" ? value : \"\")}\n label={t`DNS Domain`}\n helptext={t`Select a DNS domain.`}\n disabled={isPending || isDnsDomainsLoading}\n loading={isDnsDomainsLoading}\n >\n {dnsDomains.map(({ id, name }) => (\n <SelectOption key={id} value={name} label={name} />\n ))}\n </Select>\n )}\n />\n </FormSection>\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"dns_name\"\n children={(field) => (\n <TextInput\n id={field.name}\n name={field.name}\n value={field.state.value}\n onBlur={field.handleBlur}\n onChange={(e) => field.handleChange(e.target.value)}\n label={t`DNS Name`}\n placeholder={t`Enter DNS name`}\n helptext={t`Enter a valid PQDN or FQDN (max 63 characters) to associate with the floating IP. A and PTR records are created automatically.`}\n errortext={field.state.meta.errors.map((e) => e?.message).join(\", \")}\n disabled={isPending}\n />\n )}\n />\n </FormSection>\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"description\"\n children={(field) => (\n <Textarea\n id={field.name}\n name={field.name}\n value={field.state.value}\n onBlur={field.handleBlur}\n onChange={(e) => field.handleChange(e.target.value)}\n placeholder={t`Description`}\n errortext={field.state.meta.errors.map((e) => e?.message).join(\", \")}\n disabled={isPending}\n />\n )}\n />\n </FormSection>\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"floating_ip_address\"\n children={(field) => (\n <TextInput\n id={field.name}\n name={field.name}\n value={field.state.value}\n onBlur={field.handleBlur}\n onChange={(e) => field.handleChange(e.target.value)}\n label={t`Floating IP Address`}\n placeholder={t`Enter a floating IP`}\n helptext={t`Enter a floating IP or leave blank to auto-assign one`}\n errortext={field.state.meta.errors.map((e) => e?.message).join(\", \")}\n disabled={isPending}\n />\n )}\n />\n </FormSection>\n <FormSection className=\"mb-4\">\n <form.Field\n name=\"port_id\"\n children={(field) => (\n <Select\n id={field.name}\n name={field.name}\n value={field.state.value}\n onChange={(value) => {\n const portId = typeof value === \"string\" ? value : \"\"\n field.handleChange(portId)\n const port = availablePorts.find((p) => p.id === portId)\n const ips = port?.fixed_ips ?? []\n form.setFieldValue(\"fixed_ip_address\", ips.length === 1 ? ips[0].ip_address : \"\")\n }}\n label={t`Port ID`}\n placeholder={t`Select port to associate`}\n errortext={field.state.meta.errors.map((e) => e?.message).join(\", \")}\n disabled={isPending || isPortsLoading}\n loading={isPortsLoading}\n >\n {availablePorts.map((port) => (\n <SelectOption\n key={port.id}\n value={port.id}\n label={port.name ? `${port.name} (${port.id})` : port.id}\n />\n ))}\n </Select>\n )}\n />\n </FormSection>\n <FormSection>\n <form.Field\n name=\"fixed_ip_address\"\n children={(field) => (\n <Select\n id={field.name}\n name={field.name}\n value={field.state.value}\n onBlur={field.handleBlur}\n onChange={(value) => field.handleChange(typeof value === \"string\" ? value : \"\")}\n label={t`Fixed IP Address`}\n placeholder={t`Select a fixed IP address`}\n helptext={t`Associates on the selected port. If the port has multiple IPs, select the desired fixed IP address.`}\n errortext={field.state.meta.errors.map((e) => e?.message).join(\", \")}\n disabled={isPending || portFixedIps.length === 0}\n >\n {portFixedIps.map(({ ip_address }) => (\n <SelectOption key={ip_address} value={ip_address} label={ip_address} />\n ))}\n </Select>\n )}\n />\n </FormSection>\n </Form>\n )}\n </Modal>\n )\n}\n","import { useLingui } from \"@lingui/react/macro\"\nimport { Button } from \"@cloudoperators/juno-ui-components\"\nimport { FloatingIpQueryParameters } from \"@/server/Network/types/floatingIp\"\nimport { ListToolbar } from \"@/client/components/ListToolbar\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { buildFilterParams } from \"@/client/utils/buildFilterParams\"\nimport { useListWithFiltering } from \"@/client/utils/useListWithFiltering\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { FloatingIpListContainer } from \"./-table/FloatingIpListContainer\"\nimport { AllocateFloatingIpModal } from \"./-modals/AllocateFloatingIpModal\"\n\nconst DEFAULT_SORT_KEY = \"fixed_ip_address\"\nconst DEFAULT_SORT_DIR = \"asc\"\nexport type FloatingIpsSortKey = NonNullable<FloatingIpQueryParameters[\"sort_key\"]>\n\nexport const FloatingIpsList = () => {\n const { t } = useLingui()\n const projectId = useProjectId()\n const [allocateModalOpen, toggleAllocateModal] = useModal(false)\n\n const { searchTerm, handleSearchChange, sortSettings, handleSortChange, filterSettings, handleFilterChange } =\n useListWithFiltering<FloatingIpsSortKey>({\n defaultSortKey: DEFAULT_SORT_KEY,\n defaultSortDir: DEFAULT_SORT_DIR,\n sortOptions: [\n { label: t`Fixed IP Address`, value: \"fixed_ip_address\" },\n { label: t`Floating IP Address`, value: \"floating_ip_address\" },\n { label: t`Floating Network ID`, value: \"floating_network_id\" },\n { label: t`ID`, value: \"id\" },\n { label: t`Router ID`, value: \"router_id\" },\n { label: t`Status`, value: \"status\" },\n // Tenant_id was kept for backward compatibility in case the deprecated tenant ID was used to sort instead of the project ID.\n { label: t`Tenant ID`, value: \"tenant_id\" },\n { label: t`Project ID`, value: \"project_id\" },\n ],\n filterSettings: {\n filters: [\n {\n displayName: t`Status`,\n filterName: \"status\",\n values: [\"ACTIVE\", \"DOWN\", \"ERROR\"],\n supportsMultiValue: false,\n },\n ],\n },\n })\n\n const {\n data: floatingIps = [],\n isLoading,\n isError,\n error,\n } = trpcReact.network.floatingIp.list.useQuery({\n project_id: projectId,\n sort_key: sortSettings.sortBy,\n sort_dir: sortSettings.sortDirection,\n ...buildFilterParams(filterSettings),\n ...(searchTerm ? { searchTerm } : {}),\n })\n\n return (\n <div className=\"relative\">\n <ListToolbar\n searchTerm={searchTerm}\n onSearch={handleSearchChange}\n sortSettings={sortSettings}\n onSort={handleSortChange}\n filterSettings={filterSettings}\n onFilter={handleFilterChange}\n actions={<Button variant=\"primary\" label={t`Allocate Floating IP`} onClick={toggleAllocateModal} />}\n />\n\n <FloatingIpListContainer floatingIps={floatingIps} isLoading={isLoading} isError={isError} error={error} />\n\n {allocateModalOpen && <AllocateFloatingIpModal open={allocateModalOpen} onClose={toggleAllocateModal} />}\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { FloatingIpsList } from \"./-components/FloatingIpsList\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/floatingips/\")({\n staticData: {\n section: \"network\",\n service: \"floatingips\",\n analytics: {\n name: \"network.floatingips.list\",\n },\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Floating IPs\" },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Floating IPs` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n return (\n <>\n <ContentHeading>{t`Floating IPs`}</ContentHeading>\n <FloatingIpsList />\n </>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./RouteError-BmZRk_ss.mjs";
|
|
2
|
-
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
-
//#region src/client/routes/_auth/projects/$projectId/compute/images.tsx?tsr-split=errorComponent
|
|
4
|
-
var n = ({ error: n }) => /*#__PURE__*/ t(e, { error: n });
|
|
5
|
-
//#endregion
|
|
6
|
-
export { n as errorComponent };
|
|
7
|
-
|
|
8
|
-
//# sourceMappingURL=images-B5ktfqg6.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"images-B5ktfqg6.mjs","names":["RouteError","Route","SplitErrorComponent","error","errorComponent"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/images.tsx?tsr-split=errorComponent"],"sourcesContent":["import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { z } from \"zod\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\n\nconst multiValueEnum = (allowedValues: string[]) => {\n return z.string().refine((val) => {\n const values = val.startsWith(\"in:\") ? val.replace(\"in:\", \"\").split(\",\") : [val]\n return values.every((v) => allowedValues.includes(v))\n })\n}\n\nconst imagesSearchFields = {\n status: multiValueEnum([\n \"queued\",\n \"saving\",\n \"active\",\n \"deactivated\",\n \"killed\",\n \"deleted\",\n \"pending_delete\",\n ]).optional(),\n visibility: z.enum([\"public\", \"private\", \"shared\", \"community\", \"all\"]).optional(),\n disk_format: multiValueEnum([\n \"ami\",\n \"ari\",\n \"aki\",\n \"vhd\",\n \"vhdx\",\n \"vmdk\",\n \"raw\",\n \"qcow2\",\n \"vdi\",\n \"iso\",\n \"ploop\",\n ]).optional(),\n container_format: multiValueEnum([\"ami\", \"ari\", \"aki\", \"bare\", \"ovf\", \"ova\", \"docker\"]).optional(),\n protected: z.enum([\"true\", \"false\"]).optional(),\n search: z.string().optional(),\n sortBy: z.enum([\"created_at\", \"updated_at\", \"name\", \"size\", \"status\"]).optional(),\n sortDirection: z.enum([\"asc\", \"desc\"]).optional(),\n memberStatus: z.enum([\"all\", \"accepted\", \"pending\"]).optional(),\n page: z.number().int().positive().optional(),\n}\n\nconst imagesSearchSchema = z.object(imagesSearchFields).passthrough()\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/images\")({\n staticData: {\n section: \"compute\",\n service: \"images\",\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Images\" },\n } satisfies RouteInfo,\n errorComponent: ({ error }) => <RouteError error={error} />,\n validateSearch: (search) => {\n const result = imagesSearchSchema.safeParse(search)\n if (result.success) return result.data\n return {\n ...search,\n status: imagesSearchFields.status.safeParse(search.status).success ? search.status : undefined,\n visibility: imagesSearchFields.visibility.safeParse(search.visibility).success ? search.visibility : undefined,\n disk_format: imagesSearchFields.disk_format.safeParse(search.disk_format).success\n ? search.disk_format\n : undefined,\n container_format: imagesSearchFields.container_format.safeParse(search.container_format).success\n ? search.container_format\n : undefined,\n protected: imagesSearchFields.protected.safeParse(search.protected).success ? search.protected : undefined,\n search: imagesSearchFields.search.safeParse(search.search).success ? search.search : undefined,\n sortBy: imagesSearchFields.sortBy.safeParse(search.sortBy).success ? search.sortBy : undefined,\n sortDirection: imagesSearchFields.sortDirection.safeParse(search.sortDirection).success\n ? search.sortDirection\n : undefined,\n memberStatus: imagesSearchFields.memberStatus.safeParse(search.memberStatus).success\n ? search.memberStatus\n : undefined,\n page: imagesSearchFields.page.safeParse(search.page).success ? (search.page as number) : undefined,\n }\n },\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n if (!trpcClient) {\n throw new Error(\"trpcClient is not available in route context\")\n }\n\n const availableServices = await trpcClient.auth.getAvailableServices.query()\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"image\"]?.[\"glance\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n component: () => <Outlet />,\n})\n"],"mappings":";;;AAIiE,IAAAE,KAmD9C,EAAEC,eAAY,gBAAC,GAAA,EAAkBA,SAAAA,CAAAA"}
|