@cobaltcore-dev/aurora 0.5.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.
Files changed (113) hide show
  1. package/dist/client/{ContentHeader-xQVhO2yT.mjs → ContentHeader-kx1Th5Sq.mjs} +18 -18
  2. package/dist/client/{ContentHeader-xQVhO2yT.mjs.map → ContentHeader-kx1Th5Sq.mjs.map} +1 -1
  3. package/dist/client/{DeleteFlavorModal-CHTUZ3YV.mjs → DeleteFlavorModal-C3cb7YiJ.mjs} +155 -155
  4. package/dist/client/{DeleteFlavorModal-CHTUZ3YV.mjs.map → DeleteFlavorModal-C3cb7YiJ.mjs.map} +1 -1
  5. package/dist/client/{EditSecurityGroupModal-CWHHx2Xk.mjs → EditSecurityGroupModal-CpP54WIK.mjs} +18 -18
  6. package/dist/client/{EditSecurityGroupModal-CWHHx2Xk.mjs.map → EditSecurityGroupModal-CpP54WIK.mjs.map} +1 -1
  7. package/dist/client/{FiltersInput-UKJpNFdr.mjs → FiltersInput-DxcyR6Bp.mjs} +18 -18
  8. package/dist/client/{FiltersInput-UKJpNFdr.mjs.map → FiltersInput-DxcyR6Bp.mjs.map} +1 -1
  9. package/dist/client/{FloatingIpActionModals-caXn6bYo.mjs → FloatingIpActionModals-BP8RWHbu.mjs} +55 -55
  10. package/dist/client/{FloatingIpActionModals-caXn6bYo.mjs.map → FloatingIpActionModals-BP8RWHbu.mjs.map} +1 -1
  11. package/dist/client/{ImageToastNotifications-BWimIzu_.mjs → ImageToastNotifications-TZ3EfQg-.mjs} +323 -371
  12. package/dist/client/ImageToastNotifications-TZ3EfQg-.mjs.map +1 -0
  13. package/dist/client/{RouteError-CUj_m3gu.mjs → RouteError-QSV7qOoJ.mjs} +2 -2
  14. package/dist/client/{RouteError-CUj_m3gu.mjs.map → RouteError-QSV7qOoJ.mjs.map} +1 -1
  15. package/dist/client/{SortInput-GQlQBlAj.mjs → SortInput-CYv2_Pur.mjs} +5 -5
  16. package/dist/client/{SortInput-GQlQBlAj.mjs.map → SortInput-CYv2_Pur.mjs.map} +1 -1
  17. package/dist/client/{_flavorId-sUWG0xuy.mjs → _flavorId-C2x43-6S.mjs} +9 -9
  18. package/dist/client/{_flavorId-sUWG0xuy.mjs.map → _flavorId-C2x43-6S.mjs.map} +1 -1
  19. package/dist/client/{_flavorId-C5dc1N_j.mjs → _flavorId-CR8ZUI-P.mjs} +46 -46
  20. package/dist/client/{_flavorId-C5dc1N_j.mjs.map → _flavorId-CR8ZUI-P.mjs.map} +1 -1
  21. package/dist/client/{_floatingIpId-CT4y-60o.mjs → _floatingIpId-BCk41_Lb.mjs} +2 -2
  22. package/dist/client/{_floatingIpId-CT4y-60o.mjs.map → _floatingIpId-BCk41_Lb.mjs.map} +1 -1
  23. package/dist/client/{_floatingIpId-COK_TBrz2.mjs → _floatingIpId-BGrOAmPT.mjs} +33 -33
  24. package/dist/client/_floatingIpId-BGrOAmPT.mjs.map +1 -0
  25. package/dist/client/_imageId-CvfD832b.mjs +534 -0
  26. package/dist/client/{_imageId-n3RcnhAR.mjs.map → _imageId-CvfD832b.mjs.map} +1 -1
  27. package/dist/client/_pcaId-BxBt5DXi.mjs +459 -0
  28. package/dist/client/_pcaId-BxBt5DXi.mjs.map +1 -0
  29. package/dist/client/{_pcaId-ChnM_t-9.mjs → _pcaId-DOHycvCf.mjs} +2 -2
  30. package/dist/client/{_pcaId-ChnM_t-9.mjs.map → _pcaId-DOHycvCf.mjs.map} +1 -1
  31. package/dist/client/{_projectId-26bw-_rm.mjs → _projectId-BDSWnMGj.mjs} +3 -3
  32. package/dist/client/{_projectId-26bw-_rm.mjs.map → _projectId-BDSWnMGj.mjs.map} +1 -1
  33. package/dist/client/{_projectId-Dhb4AyBD.mjs → _projectId-DOgwFiqD.mjs} +2 -2
  34. package/dist/client/{_projectId-Dhb4AyBD.mjs.map → _projectId-DOgwFiqD.mjs.map} +1 -1
  35. package/dist/client/_projectId-DS4nR59B.mjs +299 -0
  36. package/dist/client/_projectId-DS4nR59B.mjs.map +1 -0
  37. package/dist/client/{_projectId-BK9UqeYw.mjs → _projectId-MxcHrXW4.mjs} +12 -12
  38. package/dist/client/_projectId-MxcHrXW4.mjs.map +1 -0
  39. package/dist/client/{_securityGroupId-CR1mKICQ.mjs → _securityGroupId-CJJanWiY.mjs} +2 -2
  40. package/dist/client/{_securityGroupId-CR1mKICQ.mjs.map → _securityGroupId-CJJanWiY.mjs.map} +1 -1
  41. package/dist/client/{_securityGroupId-DroYG6cA.mjs → _securityGroupId-KKw4RPdH.mjs} +328 -328
  42. package/dist/client/{_securityGroupId-DroYG6cA.mjs.map → _securityGroupId-KKw4RPdH.mjs.map} +1 -1
  43. package/dist/client/{containers-DGY2hoWw.mjs → _storageType-4wSxI__0.mjs} +18 -15
  44. package/dist/client/_storageType-4wSxI__0.mjs.map +1 -0
  45. package/dist/client/{containers-ZMFTRaQL.mjs → _storageType-DYjo-6ej.mjs} +1054 -1088
  46. package/dist/client/_storageType-DYjo-6ej.mjs.map +1 -0
  47. package/dist/client/{containers-xfsYgRyf.mjs → _storageType-zeSZe--V.mjs} +2 -2
  48. package/dist/client/_storageType-zeSZe--V.mjs.map +1 -0
  49. package/dist/client/{about-969pIiZ9.mjs → about-Bo9vxGHy.mjs} +8 -8
  50. package/dist/client/{about-969pIiZ9.mjs.map → about-Bo9vxGHy.mjs.map} +1 -1
  51. package/dist/client/{build-DracvfrJ.mjs → build-DeJcDjPi.mjs} +3798 -3372
  52. package/dist/client/build-DeJcDjPi.mjs.map +1 -0
  53. package/dist/client/constants-BmcGYeR-.mjs +153 -0
  54. package/dist/client/constants-BmcGYeR-.mjs.map +1 -0
  55. package/dist/client/{flavors-C4GtoybP.mjs → flavors-BxFVqgnb.mjs} +2 -2
  56. package/dist/client/{flavors-C4GtoybP.mjs.map → flavors-BxFVqgnb.mjs.map} +1 -1
  57. package/dist/client/{flavors-CpirO_nr.mjs → flavors-CfdgjsZY.mjs} +192 -192
  58. package/dist/client/{flavors-CpirO_nr.mjs.map → flavors-CfdgjsZY.mjs.map} +1 -1
  59. package/dist/client/{floatingips-BUf_oLRl.mjs → floatingips-ByRb82wS.mjs} +123 -123
  60. package/dist/client/{floatingips-BUf_oLRl.mjs.map → floatingips-ByRb82wS.mjs.map} +1 -1
  61. package/dist/client/{images-Da1t5KPh.mjs → images-CKqIXUq52.mjs} +613 -613
  62. package/dist/client/images-CKqIXUq52.mjs.map +1 -0
  63. package/dist/client/{images-CsonlmFx.mjs → images-C_dX7nY6.mjs} +2 -2
  64. package/dist/client/{images-CsonlmFx.mjs.map → images-C_dX7nY6.mjs.map} +1 -1
  65. package/dist/client/{images-QnWf63uj.mjs → images-CenluYV8.mjs} +2 -2
  66. package/dist/client/{images-QnWf63uj.mjs.map → images-CenluYV8.mjs.map} +1 -1
  67. package/dist/client/index.js +382 -425
  68. package/dist/client/index.js.map +1 -1
  69. package/dist/client/{md-sBiSNVSQ.mjs → md-CYTrL5dq.mjs} +52 -16
  70. package/dist/client/{md-sBiSNVSQ.mjs.map → md-CYTrL5dq.mjs.map} +1 -1
  71. package/dist/client/{objects-H0NN_Sja.mjs → objects-BJM6YeuF.mjs} +2131 -1883
  72. package/dist/client/objects-BJM6YeuF.mjs.map +1 -0
  73. package/dist/client/{objects-B89dYCBq.mjs → objects-gxSjvbvF.mjs} +36 -21
  74. package/dist/client/objects-gxSjvbvF.mjs.map +1 -0
  75. package/dist/client/{objects-CuFLUOe1.mjs → objects-o2Cj_ndZ.mjs} +2 -2
  76. package/dist/client/objects-o2Cj_ndZ.mjs.map +1 -0
  77. package/dist/client/{pca-CtU6REww.mjs → pca-Bl8NmoVZ.mjs} +2 -2
  78. package/dist/client/{pca-CtU6REww.mjs.map → pca-Bl8NmoVZ.mjs.map} +1 -1
  79. package/dist/client/pca-RSiWpJs9.mjs +182 -0
  80. package/dist/client/pca-RSiWpJs9.mjs.map +1 -0
  81. package/dist/client/{projects-DNXsDnJM.mjs → projects-CgclWI16.mjs} +33 -27
  82. package/dist/client/{projects-DNXsDnJM.mjs.map → projects-CgclWI16.mjs.map} +1 -1
  83. package/dist/client/{projects-dhnQkuvV.mjs → projects-D2iewAzu.mjs} +2 -2
  84. package/dist/client/{projects-dhnQkuvV.mjs.map → projects-D2iewAzu.mjs.map} +1 -1
  85. package/dist/client/{projects-C-sjd9T5.mjs → projects-pe2_dCnV.mjs} +2 -2
  86. package/dist/client/{projects-C-sjd9T5.mjs.map → projects-pe2_dCnV.mjs.map} +1 -1
  87. package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
  88. package/dist/client/{securitygroups-wHdrxZXd.mjs → securitygroups-DahZkVYQ.mjs} +111 -111
  89. package/dist/client/{securitygroups-wHdrxZXd.mjs.map → securitygroups-DahZkVYQ.mjs.map} +1 -1
  90. package/dist/client/{useListWithFiltering-DrgUwXef.mjs → useListWithFiltering-DaYcu5AB.mjs} +12 -12
  91. package/dist/client/{useListWithFiltering-DrgUwXef.mjs.map → useListWithFiltering-DaYcu5AB.mjs.map} +1 -1
  92. package/dist/server/index.js +7 -6
  93. package/package.json +4 -4
  94. package/dist/client/ImageToastNotifications-BWimIzu_.mjs.map +0 -1
  95. package/dist/client/_floatingIpId-COK_TBrz2.mjs.map +0 -1
  96. package/dist/client/_imageId-n3RcnhAR.mjs +0 -534
  97. package/dist/client/_pcaId-B-f_6kqs.mjs +0 -466
  98. package/dist/client/_pcaId-B-f_6kqs.mjs.map +0 -1
  99. package/dist/client/_projectId-BK9UqeYw.mjs.map +0 -1
  100. package/dist/client/_projectId-CCtpAQ8m.mjs +0 -299
  101. package/dist/client/_projectId-CCtpAQ8m.mjs.map +0 -1
  102. package/dist/client/build-DracvfrJ.mjs.map +0 -1
  103. package/dist/client/constants-4lVQXort.mjs +0 -128
  104. package/dist/client/constants-4lVQXort.mjs.map +0 -1
  105. package/dist/client/containers-DGY2hoWw.mjs.map +0 -1
  106. package/dist/client/containers-ZMFTRaQL.mjs.map +0 -1
  107. package/dist/client/containers-xfsYgRyf.mjs.map +0 -1
  108. package/dist/client/images-Da1t5KPh.mjs.map +0 -1
  109. package/dist/client/objects-B89dYCBq.mjs.map +0 -1
  110. package/dist/client/objects-CuFLUOe1.mjs.map +0 -1
  111. package/dist/client/objects-H0NN_Sja.mjs.map +0 -1
  112. package/dist/client/pca-C-UFjicP.mjs +0 -167
  113. package/dist/client/pca-C-UFjicP.mjs.map +0 -1
@@ -1,68 +1,68 @@
1
- import { E as e, L as t, N as n, Q as r, R as i, W as a, Y as o, c as s, et as c, h as l, j as u, nt as d } from "./build-DracvfrJ.mjs";
1
+ import { A as e, C as t, K as n, P as r, Q as i, R as a, T as o, ct as s, i as c, it as l, q as u, tt as d } from "./build-DeJcDjPi.mjs";
2
2
  import { r as f } from "./trpcClient-BzPUgiM2.mjs";
3
- import { n as p, t as m } from "./_flavorId-sUWG0xuy.mjs";
3
+ import { n as p, t as m } from "./_flavorId-C2x43-6S.mjs";
4
4
  import { t as h } from "./useErrorTranslation-Dc0eE8Zt.mjs";
5
- import { n as g, t as _ } from "./ContentHeader-xQVhO2yT.mjs";
6
- import { n as v, r as y, t as b } from "./DeleteFlavorModal-CHTUZ3YV.mjs";
5
+ import { n as g, t as _ } from "./ContentHeader-kx1Th5Sq.mjs";
6
+ import { n as v, r as y, t as b } from "./DeleteFlavorModal-C3cb7YiJ.mjs";
7
7
  import { t as x } from "./useModal-DCs1OJh7.mjs";
8
8
  import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
9
9
  import T from "react";
10
10
  import { useNavigate as E, useParams as D } from "@tanstack/react-router";
11
11
  import { Trans as O, useLingui as k } from "@lingui/react";
12
12
  //#region src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx
13
- function A({ flavor: e }) {
13
+ function A({ flavor: t }) {
14
14
  let r = (e, t = "MB") => e === 0 ? `0 ${t}` : `${e} ${t}`;
15
- return /*#__PURE__*/ w(d, {
15
+ return /*#__PURE__*/ w(i, {
16
16
  direction: "vertical",
17
17
  gap: "6",
18
18
  className: "mt-6",
19
19
  children: [
20
- /*#__PURE__*/ w(d, {
20
+ /*#__PURE__*/ w(i, {
21
21
  direction: "vertical",
22
22
  gap: "2",
23
- children: [/*#__PURE__*/ C(u, { children: /*#__PURE__*/ C(O, { id: "jIPNJG" }) }), /*#__PURE__*/ w(a, {
23
+ children: [/*#__PURE__*/ C(u, { children: /*#__PURE__*/ C(O, { id: "jIPNJG" }) }), /*#__PURE__*/ w(e, {
24
24
  alignTerms: "right",
25
25
  children: [
26
26
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "S0kLOH" }) }),
27
- /*#__PURE__*/ C(t, { children: /*#__PURE__*/ C(g, { text: e.id }) }),
27
+ /*#__PURE__*/ C(o, { children: /*#__PURE__*/ C(g, { text: t.id }) }),
28
28
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "6YtxFj" }) }),
29
- /*#__PURE__*/ C(t, { children: e.name }),
29
+ /*#__PURE__*/ C(o, { children: t.name }),
30
30
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "Nu4oKW" }) }),
31
- /*#__PURE__*/ C(t, { children: e?.description }),
31
+ /*#__PURE__*/ C(o, { children: t?.description }),
32
32
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "7d1a0d" }) }),
33
- /*#__PURE__*/ C(t, { children: e["os-flavor-access:is_public"] ? /*#__PURE__*/ C(O, { id: "l75CjT" }) : /*#__PURE__*/ C(O, { id: "1UzENP" }) }),
33
+ /*#__PURE__*/ C(o, { children: t["os-flavor-access:is_public"] ? /*#__PURE__*/ C(O, { id: "l75CjT" }) : /*#__PURE__*/ C(O, { id: "1UzENP" }) }),
34
34
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "E/QGRL" }) }),
35
- /*#__PURE__*/ C(t, { children: e["OS-FLV-DISABLED:disabled"] ? /*#__PURE__*/ C(O, { id: "l75CjT" }) : /*#__PURE__*/ C(O, { id: "1UzENP" }) })
35
+ /*#__PURE__*/ C(o, { children: t["OS-FLV-DISABLED:disabled"] ? /*#__PURE__*/ C(O, { id: "l75CjT" }) : /*#__PURE__*/ C(O, { id: "1UzENP" }) })
36
36
  ]
37
37
  })]
38
38
  }),
39
- /*#__PURE__*/ w(d, {
39
+ /*#__PURE__*/ w(i, {
40
40
  direction: "vertical",
41
41
  gap: "2",
42
- children: [/*#__PURE__*/ C(u, { children: /*#__PURE__*/ C(O, { id: "qQ1QBh" }) }), /*#__PURE__*/ w(a, {
42
+ children: [/*#__PURE__*/ C(u, { children: /*#__PURE__*/ C(O, { id: "qQ1QBh" }) }), /*#__PURE__*/ w(e, {
43
43
  alignTerms: "right",
44
44
  children: [
45
45
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "MZGbkp" }) }),
46
- /*#__PURE__*/ C(t, { children: e.vcpus }),
46
+ /*#__PURE__*/ C(o, { children: t.vcpus }),
47
47
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "RGhYAo" }) }),
48
- /*#__PURE__*/ C(t, { children: r(e.ram, "MiB") }),
48
+ /*#__PURE__*/ C(o, { children: r(t.ram, "MiB") }),
49
49
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "sPFHpI" }) }),
50
- /*#__PURE__*/ C(t, { children: r(e.disk, "GiB") }),
50
+ /*#__PURE__*/ C(o, { children: r(t.disk, "GiB") }),
51
51
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "r9Aac8" }) }),
52
- /*#__PURE__*/ C(t, { children: r(e["OS-FLV-EXT-DATA:ephemeral"] || 0, "GiB") }),
52
+ /*#__PURE__*/ C(o, { children: r(t["OS-FLV-EXT-DATA:ephemeral"] || 0, "GiB") }),
53
53
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "vH2C/2" }) }),
54
- /*#__PURE__*/ C(t, { children: e.swap === 0 || e.swap === "" ? /*#__PURE__*/ C(O, { id: "EdQY6l" }) : r(Number(e.swap), "MiB") }),
54
+ /*#__PURE__*/ C(o, { children: t.swap === 0 || t.swap === "" ? /*#__PURE__*/ C(O, { id: "EdQY6l" }) : r(Number(t.swap), "MiB") }),
55
55
  /*#__PURE__*/ C(n, { children: /*#__PURE__*/ C(O, { id: "u5HztT" }) }),
56
- /*#__PURE__*/ C(t, { children: e.rxtx_factor })
56
+ /*#__PURE__*/ C(o, { children: t.rxtx_factor })
57
57
  ]
58
58
  })]
59
59
  }),
60
- e.extra_specs && Object.keys(e.extra_specs).length > 0 && /*#__PURE__*/ w(d, {
60
+ t.extra_specs && Object.keys(t.extra_specs).length > 0 && /*#__PURE__*/ w(i, {
61
61
  direction: "vertical",
62
62
  gap: "2",
63
- children: [/*#__PURE__*/ C(u, { children: /*#__PURE__*/ C(O, { id: "DKkOPx" }) }), /*#__PURE__*/ C(a, {
63
+ children: [/*#__PURE__*/ C(u, { children: /*#__PURE__*/ C(O, { id: "DKkOPx" }) }), /*#__PURE__*/ C(e, {
64
64
  alignTerms: "right",
65
- children: Object.entries(e.extra_specs).map(([e, r]) => /*#__PURE__*/ w(T.Fragment, { children: [/*#__PURE__*/ C(n, { children: e }), /*#__PURE__*/ C(t, { children: r })] }, e))
65
+ children: Object.entries(t.extra_specs).map(([e, t]) => /*#__PURE__*/ w(T.Fragment, { children: [/*#__PURE__*/ C(n, { children: e }), /*#__PURE__*/ C(o, { children: t })] }, e))
66
66
  })]
67
67
  })
68
68
  ]
@@ -71,11 +71,11 @@ function A({ flavor: e }) {
71
71
  //#endregion
72
72
  //#region src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component
73
73
  function j() {
74
- let { projectId: t, flavorId: n } = D({ from: "/_auth/projects/$projectId/compute/flavors/$flavorId" }), { trpcClient: a } = m.useRouteContext(), u = E(), { i18n: g, _: T } = k(), { translateError: j, isRetryableError: M } = h(), { data: N, status: P, error: F, refetch: I } = f.compute.getFlavorById.useQuery({
75
- project_id: t,
74
+ let { projectId: e, flavorId: n } = D({ from: "/_auth/projects/$projectId/compute/flavors/$flavorId" }), { trpcClient: o } = m.useRouteContext(), u = E(), { i18n: g, _: T } = k(), { translateError: j, isRetryableError: M } = h(), { data: N, status: P, error: F, refetch: I } = f.compute.getFlavorById.useQuery({
75
+ project_id: e,
76
76
  flavorId: n
77
77
  }), { data: L } = f.compute.canUser.useQuery({
78
- project_id: t,
78
+ project_id: e,
79
79
  permission: [
80
80
  "flavors:delete",
81
81
  "flavors:list_projects",
@@ -86,22 +86,22 @@ function j() {
86
86
  }), R = L?.[0] ?? !1, z = L?.[1] ?? !1, B = (L?.[2] ?? !1) || (L?.[3] ?? !1), V = L?.[4] ?? !1, [H, U] = x(), [W, G] = x(), [K, q] = x(), J = () => {
87
87
  u({
88
88
  to: "/projects/$projectId/compute/flavors",
89
- params: { projectId: t }
89
+ params: { projectId: e }
90
90
  });
91
91
  }, Y = () => {
92
92
  u({
93
93
  to: "/projects/$projectId",
94
- params: { projectId: t }
94
+ params: { projectId: e }
95
95
  });
96
96
  }, X = () => {
97
97
  I();
98
98
  };
99
- if (P === "pending") return /*#__PURE__*/ w(d, {
99
+ if (P === "pending") return /*#__PURE__*/ w(i, {
100
100
  className: "fixed inset-0",
101
101
  distribution: "center",
102
102
  alignment: "center",
103
103
  direction: "vertical",
104
- children: [/*#__PURE__*/ C(r, {
104
+ children: [/*#__PURE__*/ C(a, {
105
105
  variant: "primary",
106
106
  size: "large",
107
107
  className: "mb-2"
@@ -130,23 +130,23 @@ function j() {
130
130
  onBackClick: J,
131
131
  onHomeClick: Y
132
132
  });
133
- let Z = N["os-flavor-access:is_public"] !== !1, Q = z || R || B || V ? /*#__PURE__*/ C(l, { children: /*#__PURE__*/ w(c, { children: [/*#__PURE__*/ C(i, {
133
+ let Z = N["os-flavor-access:is_public"] !== !1, Q = z || R || B || V ? /*#__PURE__*/ C(c, { children: /*#__PURE__*/ w(r, { children: [/*#__PURE__*/ C(t, {
134
134
  as: "div",
135
135
  children: /*#__PURE__*/ C(s, {
136
136
  icon: "moreVert",
137
137
  children: /*#__PURE__*/ C(O, { id: "PgNNGl" })
138
138
  })
139
- }), /*#__PURE__*/ w(e, { children: [
140
- (B || V) && /*#__PURE__*/ C(o, {
139
+ }), /*#__PURE__*/ w(d, { children: [
140
+ (B || V) && /*#__PURE__*/ C(l, {
141
141
  label: B ? g._({ id: "SIfYq6" }) : g._({ id: "6GBt0m" }),
142
142
  onClick: U
143
143
  }),
144
- z && /*#__PURE__*/ C(o, {
144
+ z && /*#__PURE__*/ C(l, {
145
145
  label: g._({ id: "cWbW6w" }),
146
146
  onClick: G,
147
147
  disabled: Z
148
148
  }),
149
- R && /*#__PURE__*/ C(o, {
149
+ R && /*#__PURE__*/ C(l, {
150
150
  label: g._({ id: "JT3I1g" }),
151
151
  onClick: q
152
152
  })
@@ -154,34 +154,34 @@ function j() {
154
154
  return /*#__PURE__*/ w(S, { children: [
155
155
  /*#__PURE__*/ C(_, {
156
156
  title: N.name,
157
- projectId: t,
157
+ projectId: e,
158
158
  actions: Q
159
159
  }),
160
- /*#__PURE__*/ C(d, {
160
+ /*#__PURE__*/ C(i, {
161
161
  direction: "vertical",
162
162
  children: /*#__PURE__*/ C(A, { flavor: N })
163
163
  }),
164
- a && /*#__PURE__*/ w(S, { children: [
164
+ o && /*#__PURE__*/ w(S, { children: [
165
165
  H && /*#__PURE__*/ C(y, {
166
- client: a,
166
+ client: o,
167
167
  isOpen: H,
168
168
  onClose: U,
169
- project: t,
169
+ project: e,
170
170
  flavor: N,
171
171
  canEdit: B
172
172
  }),
173
173
  W && /*#__PURE__*/ C(v, {
174
- client: a,
174
+ client: o,
175
175
  isOpen: W,
176
176
  onClose: G,
177
- project: t,
177
+ project: e,
178
178
  flavor: N
179
179
  }),
180
180
  K && /*#__PURE__*/ C(b, {
181
- client: a,
181
+ client: o,
182
182
  isOpen: K,
183
183
  onClose: q,
184
- project: t,
184
+ project: e,
185
185
  flavor: N,
186
186
  onSuccess: J
187
187
  })
@@ -191,4 +191,4 @@ function j() {
191
191
  //#endregion
192
192
  export { j as component };
193
193
 
194
- //# sourceMappingURL=_flavorId-C5dc1N_j.mjs.map
194
+ //# sourceMappingURL=_flavorId-CR8ZUI-P.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_flavorId-C5dc1N_j.mjs","names":["React","Stack","DescriptionList","DescriptionTerm","DescriptionDefinition","ContentHeading","ClipboardText","FlavorDetailsView","flavor","formatBytes","bytes","unit","direction","gap","className","alignTerms","text","id","name","description","vcpus","ram","disk","swap","Number","rxtx_factor","extra_specs","Object","keys","length","entries","map","key","value","Fragment","Button","ButtonRow","Stack","Spinner","PopupMenu","PopupMenuToggle","PopupMenuOptions","PopupMenuItem","useNavigate","useParams","Trans","useLingui","trpcReact","FlavorDetailsView","StatusError","useErrorTranslation","EditSpecModal","ManageAccessModal","DeleteFlavorModal","useModal","ContentHeader","Route","RouteComponent","projectId","flavorId","from","trpcClient","useRouteContext","navigate","t","translateError","isRetryableError","data","flavor","status","error","refetch","compute","getFlavorById","useQuery","project_id","permissionsData","canUser","permission","canDeleteFlavor","canManageAccess","canManageSpecs","canListSpecs","specModalOpen","toggleSpecModal","accessModalOpen","toggleAccessModal","deleteModalOpen","toggleDeleteModal","handleBack","to","params","handleHome","handleRetry","errorCode","message","translatedError","canRetry","getStatusCode","code","includes","undefined","isPublicFlavor","hasMoreActions","headerActions","name","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component"],"sourcesContent":["import React from \"react\"\nimport {\n Stack,\n DescriptionList,\n DescriptionTerm,\n DescriptionDefinition,\n ContentHeading,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { Flavor } from \"@/server/Compute/types/flavor\"\nimport ClipboardText from \"@/client/components/ClipboardText\"\n\ninterface FlavorDetailsViewProps {\n flavor: Flavor\n}\n\nexport function FlavorDetailsView({ flavor }: FlavorDetailsViewProps) {\n const formatBytes = (bytes: number, unit: string = \"MB\") => {\n if (bytes === 0) return `0 ${unit}`\n return `${bytes} ${unit}`\n }\n\n return (\n <Stack direction=\"vertical\" gap=\"6\" className=\"mt-6\">\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Basic Information</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>ID</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n <ClipboardText text={flavor.id} />\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Name</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.name}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Description</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor?.description}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Public</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"os-flavor-access:is_public\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disabled</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"OS-FLV-DISABLED:disabled\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Hardware Specifications</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>VCPUs</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.vcpus}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RAM</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.ram, \"MiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.disk, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Ephemeral Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor[\"OS-FLV-EXT-DATA:ephemeral\"] || 0, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Swap</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor.swap === 0 || flavor.swap === \"\" ? <Trans>None</Trans> : formatBytes(Number(flavor.swap), \"MiB\")}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RX/TX Factor</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.rxtx_factor}</DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n {flavor.extra_specs && Object.keys(flavor.extra_specs).length > 0 && (\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Extra Specs</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n {Object.entries(flavor.extra_specs).map(([key, value]) => (\n <React.Fragment key={key}>\n <DescriptionTerm>{key}</DescriptionTerm>\n <DescriptionDefinition>{value}</DescriptionDefinition>\n </React.Fragment>\n ))}\n </DescriptionList>\n </Stack>\n )}\n </Stack>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams } from \"@tanstack/react-router\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FlavorDetailsView } from \"./-components/FlavorDetailsView\"\nimport { StatusError } from \"@/client/components/Error/StatusError\"\nimport { useErrorTranslation } from \"@/client/utils/useErrorTranslation\"\nimport { EditSpecModal } from \"../-components/Flavors/-components/EditSpecModal\"\nimport { ManageAccessModal } from \"../-components/Flavors/-components/ManageAccessModal\"\nimport { DeleteFlavorModal } from \"../-components/Flavors/-components/DeleteFlavorModal\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors/$flavorId\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\", to: \"/projects/$projectId/compute/flavors\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const flavor = await context.trpcClient?.compute.getFlavorById.query({\n project_id: params.projectId,\n flavorId: params.flavorId,\n })\n return { flavorName: flavor?.name ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.flavorName ?? \"Flavor Details\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"flavor\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, flavorId } = useParams({\n from: \"/_auth/projects/$projectId/compute/flavors/$flavorId\",\n })\n const { trpcClient } = Route.useRouteContext()\n const navigate = useNavigate()\n const { t } = useLingui()\n const { translateError, isRetryableError } = useErrorTranslation()\n\n const {\n data: flavor,\n status,\n error,\n refetch,\n } = trpcReact.compute.getFlavorById.useQuery({\n project_id: projectId,\n flavorId,\n })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\n \"flavors:delete\",\n \"flavors:list_projects\",\n \"flavor_specs:create\",\n \"flavor_specs:delete\",\n \"flavor_specs:list\",\n ],\n })\n\n const canDeleteFlavor = permissionsData?.[0] ?? false\n const canManageAccess = permissionsData?.[1] ?? false\n const canManageSpecs = (permissionsData?.[2] ?? false) || (permissionsData?.[3] ?? false)\n const canListSpecs = permissionsData?.[4] ?? false\n\n const [specModalOpen, toggleSpecModal] = useModal()\n const [accessModalOpen, toggleAccessModal] = useModal()\n const [deleteModalOpen, toggleDeleteModal] = useModal()\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/flavors\",\n params: { projectId },\n })\n }\n\n const handleHome = () => {\n navigate({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n const handleRetry = () => {\n refetch()\n }\n\n if (status === \"pending\") {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Flavor Details...</Trans>\n </Stack>\n )\n }\n\n if (status === \"error\") {\n const errorCode = error?.message || \"UNKNOWN_ERROR\"\n const translatedError = translateError(errorCode)\n const canRetry = isRetryableError(errorCode)\n\n const getStatusCode = (code: string): number | undefined => {\n if (code.includes(\"UNAUTHORIZED\")) return 401\n if (code.includes(\"FORBIDDEN\")) return 403\n if (code.includes(\"NOT_FOUND\")) return 404\n if (code.includes(\"SERVER_ERROR\")) return 500\n return undefined\n }\n\n return (\n <StatusError\n message={translatedError}\n statusCode={getStatusCode(errorCode)}\n title={t`Error Loading Flavor`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n reset={canRetry ? handleRetry : undefined}\n />\n )\n }\n\n if (!flavor) {\n return (\n <StatusError\n message={t`The requested flavor could not be found. It may have been deleted or you may not have access to it.`}\n statusCode={404}\n title={t`Flavor Not Found`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n />\n )\n }\n\n const isPublicFlavor = flavor[\"os-flavor-access:is_public\"] !== false\n const hasMoreActions = canManageAccess || canDeleteFlavor || canManageSpecs || canListSpecs\n\n const headerActions = hasMoreActions ? (\n <ButtonRow>\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\">\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {(canManageSpecs || canListSpecs) && (\n <PopupMenuItem label={canManageSpecs ? t`Edit Metadata` : t`Metadata`} onClick={toggleSpecModal} />\n )}\n {canManageAccess && (\n <PopupMenuItem label={t`Manage Access`} onClick={toggleAccessModal} disabled={isPublicFlavor} />\n )}\n {canDeleteFlavor && <PopupMenuItem label={t`Delete Flavor`} onClick={toggleDeleteModal} />}\n </PopupMenuOptions>\n </PopupMenu>\n </ButtonRow>\n ) : undefined\n\n return (\n <>\n <ContentHeader title={flavor.name} projectId={projectId} actions={headerActions} />\n <Stack direction=\"vertical\">\n <FlavorDetailsView flavor={flavor} />\n </Stack>\n\n {trpcClient && (\n <>\n {specModalOpen && (\n <EditSpecModal\n client={trpcClient}\n isOpen={specModalOpen}\n onClose={toggleSpecModal}\n project={projectId}\n flavor={flavor}\n canEdit={canManageSpecs}\n />\n )}\n\n {accessModalOpen && (\n <ManageAccessModal\n client={trpcClient}\n isOpen={accessModalOpen}\n onClose={toggleAccessModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteFlavorModal\n client={trpcClient}\n isOpen={deleteModalOpen}\n onClose={toggleDeleteModal}\n project={projectId}\n flavor={flavor}\n onSuccess={handleBack}\n />\n )}\n </>\n )}\n </>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"_flavorId-CR8ZUI-P.mjs","names":["React","Stack","DescriptionList","DescriptionTerm","DescriptionDefinition","ContentHeading","ClipboardText","FlavorDetailsView","flavor","formatBytes","bytes","unit","direction","gap","className","alignTerms","text","id","name","description","vcpus","ram","disk","swap","Number","rxtx_factor","extra_specs","Object","keys","length","entries","map","key","value","Fragment","Button","ButtonRow","Stack","Spinner","PopupMenu","PopupMenuToggle","PopupMenuOptions","PopupMenuItem","useNavigate","useParams","Trans","useLingui","trpcReact","FlavorDetailsView","StatusError","useErrorTranslation","EditSpecModal","ManageAccessModal","DeleteFlavorModal","useModal","ContentHeader","Route","RouteComponent","projectId","flavorId","from","trpcClient","useRouteContext","navigate","t","translateError","isRetryableError","data","flavor","status","error","refetch","compute","getFlavorById","useQuery","project_id","permissionsData","canUser","permission","canDeleteFlavor","canManageAccess","canManageSpecs","canListSpecs","specModalOpen","toggleSpecModal","accessModalOpen","toggleAccessModal","deleteModalOpen","toggleDeleteModal","handleBack","to","params","handleHome","handleRetry","errorCode","message","translatedError","canRetry","getStatusCode","code","includes","undefined","isPublicFlavor","hasMoreActions","headerActions","name","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx","../../src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx?tsr-split=component"],"sourcesContent":["import React from \"react\"\nimport {\n Stack,\n DescriptionList,\n DescriptionTerm,\n DescriptionDefinition,\n ContentHeading,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { Flavor } from \"@/server/Compute/types/flavor\"\nimport ClipboardText from \"@/client/components/ClipboardText\"\n\ninterface FlavorDetailsViewProps {\n flavor: Flavor\n}\n\nexport function FlavorDetailsView({ flavor }: FlavorDetailsViewProps) {\n const formatBytes = (bytes: number, unit: string = \"MB\") => {\n if (bytes === 0) return `0 ${unit}`\n return `${bytes} ${unit}`\n }\n\n return (\n <Stack direction=\"vertical\" gap=\"6\" className=\"mt-6\">\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Basic Information</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>ID</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n <ClipboardText text={flavor.id} />\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Name</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.name}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Description</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor?.description}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Public</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"os-flavor-access:is_public\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disabled</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor[\"OS-FLV-DISABLED:disabled\"] ? <Trans>Yes</Trans> : <Trans>No</Trans>}\n </DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Hardware Specifications</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n <DescriptionTerm>\n <Trans>VCPUs</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.vcpus}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RAM</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.ram, \"MiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor.disk, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Ephemeral Disk</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{formatBytes(flavor[\"OS-FLV-EXT-DATA:ephemeral\"] || 0, \"GiB\")}</DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>Swap</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>\n {flavor.swap === 0 || flavor.swap === \"\" ? <Trans>None</Trans> : formatBytes(Number(flavor.swap), \"MiB\")}\n </DescriptionDefinition>\n\n <DescriptionTerm>\n <Trans>RX/TX Factor</Trans>\n </DescriptionTerm>\n <DescriptionDefinition>{flavor.rxtx_factor}</DescriptionDefinition>\n </DescriptionList>\n </Stack>\n\n {flavor.extra_specs && Object.keys(flavor.extra_specs).length > 0 && (\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Extra Specs</Trans>\n </ContentHeading>\n <DescriptionList alignTerms=\"right\">\n {Object.entries(flavor.extra_specs).map(([key, value]) => (\n <React.Fragment key={key}>\n <DescriptionTerm>{key}</DescriptionTerm>\n <DescriptionDefinition>{value}</DescriptionDefinition>\n </React.Fragment>\n ))}\n </DescriptionList>\n </Stack>\n )}\n </Stack>\n )\n}\n","import {\n Button,\n ButtonRow,\n Stack,\n Spinner,\n PopupMenu,\n PopupMenuToggle,\n PopupMenuOptions,\n PopupMenuItem,\n} from \"@cloudoperators/juno-ui-components/index\"\nimport { createFileRoute, redirect, useNavigate, useParams } from \"@tanstack/react-router\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FlavorDetailsView } from \"./-components/FlavorDetailsView\"\nimport { StatusError } from \"@/client/components/Error/StatusError\"\nimport { useErrorTranslation } from \"@/client/utils/useErrorTranslation\"\nimport { EditSpecModal } from \"../-components/Flavors/-components/EditSpecModal\"\nimport { ManageAccessModal } from \"../-components/Flavors/-components/ManageAccessModal\"\nimport { DeleteFlavorModal } from \"../-components/Flavors/-components/DeleteFlavorModal\"\nimport { useModal } from \"@/client/utils/useModal\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors/$flavorId\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Compute\" },\n crumb: { labelKey: \"Flavors\", to: \"/projects/$projectId/compute/flavors\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const flavor = await context.trpcClient?.compute.getFlavorById.query({\n project_id: params.projectId,\n flavorId: params.flavorId,\n })\n return { flavorName: flavor?.name ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.flavorName ?? \"Flavor Details\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n const { projectId } = params\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n\n const serviceIndex = getServiceIndex(availableServices)\n\n if (!serviceIndex[\"flavor\"] && !serviceIndex[\"compute\"]) {\n throw redirect({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { projectId, flavorId } = useParams({\n from: \"/_auth/projects/$projectId/compute/flavors/$flavorId\",\n })\n const { trpcClient } = Route.useRouteContext()\n const navigate = useNavigate()\n const { t } = useLingui()\n const { translateError, isRetryableError } = useErrorTranslation()\n\n const {\n data: flavor,\n status,\n error,\n refetch,\n } = trpcReact.compute.getFlavorById.useQuery({\n project_id: projectId,\n flavorId,\n })\n\n const { data: permissionsData } = trpcReact.compute.canUser.useQuery({\n project_id: projectId,\n permission: [\n \"flavors:delete\",\n \"flavors:list_projects\",\n \"flavor_specs:create\",\n \"flavor_specs:delete\",\n \"flavor_specs:list\",\n ],\n })\n\n const canDeleteFlavor = permissionsData?.[0] ?? false\n const canManageAccess = permissionsData?.[1] ?? false\n const canManageSpecs = (permissionsData?.[2] ?? false) || (permissionsData?.[3] ?? false)\n const canListSpecs = permissionsData?.[4] ?? false\n\n const [specModalOpen, toggleSpecModal] = useModal()\n const [accessModalOpen, toggleAccessModal] = useModal()\n const [deleteModalOpen, toggleDeleteModal] = useModal()\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/compute/flavors\",\n params: { projectId },\n })\n }\n\n const handleHome = () => {\n navigate({\n to: \"/projects/$projectId\",\n params: { projectId },\n })\n }\n\n const handleRetry = () => {\n refetch()\n }\n\n if (status === \"pending\") {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Flavor Details...</Trans>\n </Stack>\n )\n }\n\n if (status === \"error\") {\n const errorCode = error?.message || \"UNKNOWN_ERROR\"\n const translatedError = translateError(errorCode)\n const canRetry = isRetryableError(errorCode)\n\n const getStatusCode = (code: string): number | undefined => {\n if (code.includes(\"UNAUTHORIZED\")) return 401\n if (code.includes(\"FORBIDDEN\")) return 403\n if (code.includes(\"NOT_FOUND\")) return 404\n if (code.includes(\"SERVER_ERROR\")) return 500\n return undefined\n }\n\n return (\n <StatusError\n message={translatedError}\n statusCode={getStatusCode(errorCode)}\n title={t`Error Loading Flavor`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n reset={canRetry ? handleRetry : undefined}\n />\n )\n }\n\n if (!flavor) {\n return (\n <StatusError\n message={t`The requested flavor could not be found. It may have been deleted or you may not have access to it.`}\n statusCode={404}\n title={t`Flavor Not Found`}\n onBackClick={handleBack}\n onHomeClick={handleHome}\n />\n )\n }\n\n const isPublicFlavor = flavor[\"os-flavor-access:is_public\"] !== false\n const hasMoreActions = canManageAccess || canDeleteFlavor || canManageSpecs || canListSpecs\n\n const headerActions = hasMoreActions ? (\n <ButtonRow>\n <PopupMenu>\n <PopupMenuToggle as=\"div\">\n <Button icon=\"moreVert\">\n <Trans>More Actions</Trans>\n </Button>\n </PopupMenuToggle>\n <PopupMenuOptions>\n {(canManageSpecs || canListSpecs) && (\n <PopupMenuItem label={canManageSpecs ? t`Edit Metadata` : t`Metadata`} onClick={toggleSpecModal} />\n )}\n {canManageAccess && (\n <PopupMenuItem label={t`Manage Access`} onClick={toggleAccessModal} disabled={isPublicFlavor} />\n )}\n {canDeleteFlavor && <PopupMenuItem label={t`Delete Flavor`} onClick={toggleDeleteModal} />}\n </PopupMenuOptions>\n </PopupMenu>\n </ButtonRow>\n ) : undefined\n\n return (\n <>\n <ContentHeader title={flavor.name} projectId={projectId} actions={headerActions} />\n <Stack direction=\"vertical\">\n <FlavorDetailsView flavor={flavor} />\n </Stack>\n\n {trpcClient && (\n <>\n {specModalOpen && (\n <EditSpecModal\n client={trpcClient}\n isOpen={specModalOpen}\n onClose={toggleSpecModal}\n project={projectId}\n flavor={flavor}\n canEdit={canManageSpecs}\n />\n )}\n\n {accessModalOpen && (\n <ManageAccessModal\n client={trpcClient}\n isOpen={accessModalOpen}\n onClose={toggleAccessModal}\n project={projectId}\n flavor={flavor}\n />\n )}\n\n {deleteModalOpen && (\n <DeleteFlavorModal\n client={trpcClient}\n isOpen={deleteModalOpen}\n onClose={toggleDeleteModal}\n project={projectId}\n flavor={flavor}\n onSuccess={handleBack}\n />\n )}\n </>\n )}\n </>\n )\n}\n"],"mappings":"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"}
@@ -16,7 +16,7 @@ var i = t("/_auth/projects/$projectId/network/floatingips/$floatingIpId/")({
16
16
  floatingip_id: t.floatingIpId
17
17
  }))?.floating_ip_address ?? null }),
18
18
  head: ({ loaderData: e }) => ({ meta: [{ title: e?.floatingIpAddress ?? "Floating IP" }] }),
19
- component: n(() => import("./_floatingIpId-COK_TBrz2.mjs"), "component"),
19
+ component: n(() => import("./_floatingIpId-BGrOAmPT.mjs"), "component"),
20
20
  beforeLoad: async ({ context: t, params: n }) => {
21
21
  let { trpcClient: i } = t, a = e(await i?.auth.getAvailableServices.query() || []);
22
22
  if (!a.network || !a.network.neutron) throw r({
@@ -28,4 +28,4 @@ var i = t("/_auth/projects/$projectId/network/floatingips/$floatingIpId/")({
28
28
  //#endregion
29
29
  export { i as t };
30
30
 
31
- //# sourceMappingURL=_floatingIpId-CT4y-60o.mjs.map
31
+ //# sourceMappingURL=_floatingIpId-BCk41_Lb.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"_floatingIpId-CT4y-60o.mjs","names":["createFileRoute","redirect","getServiceIndex","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","RouteInfo","loader","context","params","floatingIp","trpcClient","network","getById","query","project_id","projectId","floatingip_id","floatingIpId","floatingIpAddress","floating_ip_address","head","loaderData","meta","title","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","availableServices","auth","getAvailableServices","serviceIndex"],"sources":["../../src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index.tsx"],"sourcesContent":["import { createFileRoute, redirect, useNavigate } from \"@tanstack/react-router\"\nimport { Button, ContentHeading, Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FloatingIpDetailsView } from \"./-components/-details/FloatingIpDetailsView\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\")({\n staticData: {\n section: \"network\",\n service: \"floatingips\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Floating IPs\", to: \"/projects/$projectId/network/floatingips\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const floatingIp = await context.trpcClient?.network.floatingIp.getById.query({\n project_id: params.projectId,\n floatingip_id: params.floatingIpId,\n })\n return { floatingIpAddress: floatingIp?.floating_ip_address ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.floatingIpAddress ?? \"Floating IP\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n const serviceIndex = getServiceIndex(availableServices)\n\n // Redirect if network service not available\n if (!serviceIndex[\"network\"]) {\n throw redirect({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId: params.projectId },\n })\n }\n\n if (!serviceIndex[\"network\"][\"neutron\"]) {\n throw redirect({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId: params.projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { floatingIpId } = Route.useParams()\n const projectId = useProjectId()\n const navigate = useNavigate()\n\n // Fetch floating IP details\n const {\n data: floatingIp,\n isLoading,\n isError,\n error,\n } = trpcReact.network.floatingIp.getById.useQuery({\n project_id: projectId,\n floatingip_id: floatingIpId,\n })\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId },\n })\n }\n\n // Loading state\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Floating IP Details...</Trans>\n </Stack>\n )\n }\n\n // Error state\n if (isError) {\n const errorMessage = error?.message || \"Unknown error\"\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading floating IP</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Floating IPs</Trans>\n </Button>\n </Stack>\n )\n }\n\n // No data state\n if (!floatingIp) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-secondary\">\n <Trans>Floating IP not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Floating IPs</Trans>\n </Button>\n </Stack>\n )\n }\n\n // Success state\n return (\n <>\n <ContentHeading>{floatingIp.floating_ip_address}</ContentHeading>\n <FloatingIpDetailsView floatingIp={floatingIp} />\n </>\n )\n}\n"],"mappings":";;AASA,IAAaG,IAAQH,EAAgB,+DAAA,EAAiE;CACpGI,YAAY;EACVC,SAAS;EACTC,SAAS;EACTC,UAAU;EACVC,cAAc,EAAEC,UAAU,UAAU;EACpCC,OAAO;GAAED,UAAU;GAAgBE,IAAI;EAA2C;CACpF;CACAE,QAAQ,OAAO,EAAEC,YAASC,iBAKjB,EAAEU,oBAAmBT,MAJHF,EAAQG,YAAYC,QAAQF,WAAWG,QAAQC,MAAM;EAC5EC,YAAYN,EAAOO;EACnBC,eAAeR,EAAOS;CACxB,CAAA,IACwCE,uBAAuB,KAAK;CAEtEC,OAAO,EAAEC,qBAAkB,EACzBC,MAAM,CAAC,EAAEC,OAAOF,GAAYH,qBAAqB,cAAc,CAAA,EACjE;CACAM,WAASC,iDAAA,WAAA;CACTE,YAAY,OAAO,EAAEpB,YAASC,gBAAQ;EACpC,IAAM,EAAEE,kBAAeH,GAGjBwB,IAAepC,EADK,MAAOe,GAAYmB,KAAKC,qBAAqBjB,MAAAA,KAAY,CAAA,CAC9Ce;EAUrC,IAPI,CAACG,EAAa,WAOd,CAACA,EAAa,QAAW,SAC3B,MAAMrC,EAAS;GACbU,IAAI;GACJI,QAAQ,EAAEO,WAAWP,EAAOO,UAAU;EACxC,CAAA;CAEJ;AACF,CAAA"}
1
+ {"version":3,"file":"_floatingIpId-BCk41_Lb.mjs","names":["createFileRoute","redirect","getServiceIndex","Route","staticData","section","service","isDetail","sectionCrumb","labelKey","crumb","to","RouteInfo","loader","context","params","floatingIp","trpcClient","network","getById","query","project_id","projectId","floatingip_id","floatingIpId","floatingIpAddress","floating_ip_address","head","loaderData","meta","title","component","lazyRouteComponent","$$splitComponentImporter","beforeLoad","availableServices","auth","getAvailableServices","serviceIndex"],"sources":["../../src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index.tsx"],"sourcesContent":["import { createFileRoute, redirect, useNavigate } from \"@tanstack/react-router\"\nimport { Button, ContentHeading, Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FloatingIpDetailsView } from \"./-components/-details/FloatingIpDetailsView\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\")({\n staticData: {\n section: \"network\",\n service: \"floatingips\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Floating IPs\", to: \"/projects/$projectId/network/floatingips\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const floatingIp = await context.trpcClient?.network.floatingIp.getById.query({\n project_id: params.projectId,\n floatingip_id: params.floatingIpId,\n })\n return { floatingIpAddress: floatingIp?.floating_ip_address ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.floatingIpAddress ?? \"Floating IP\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n const serviceIndex = getServiceIndex(availableServices)\n\n // Redirect if network service not available\n if (!serviceIndex[\"network\"]) {\n throw redirect({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId: params.projectId },\n })\n }\n\n if (!serviceIndex[\"network\"][\"neutron\"]) {\n throw redirect({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId: params.projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { floatingIpId } = Route.useParams()\n const projectId = useProjectId()\n const navigate = useNavigate()\n\n // Fetch floating IP details\n const {\n data: floatingIp,\n isLoading,\n isError,\n error,\n } = trpcReact.network.floatingIp.getById.useQuery({\n project_id: projectId,\n floatingip_id: floatingIpId,\n })\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId },\n })\n }\n\n // Loading state\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Floating IP Details...</Trans>\n </Stack>\n )\n }\n\n // Error state\n if (isError) {\n const errorMessage = error?.message || \"Unknown error\"\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading floating IP</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Floating IPs</Trans>\n </Button>\n </Stack>\n )\n }\n\n // No data state\n if (!floatingIp) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-secondary\">\n <Trans>Floating IP not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Floating IPs</Trans>\n </Button>\n </Stack>\n )\n }\n\n // Success state\n return (\n <>\n <ContentHeading>{floatingIp.floating_ip_address}</ContentHeading>\n <FloatingIpDetailsView floatingIp={floatingIp} />\n </>\n )\n}\n"],"mappings":";;AASA,IAAaG,IAAQH,EAAgB,+DAAA,EAAiE;CACpGI,YAAY;EACVC,SAAS;EACTC,SAAS;EACTC,UAAU;EACVC,cAAc,EAAEC,UAAU,UAAU;EACpCC,OAAO;GAAED,UAAU;GAAgBE,IAAI;EAA2C;CACpF;CACAE,QAAQ,OAAO,EAAEC,YAASC,iBAKjB,EAAEU,oBAAmBT,MAJHF,EAAQG,YAAYC,QAAQF,WAAWG,QAAQC,MAAM;EAC5EC,YAAYN,EAAOO;EACnBC,eAAeR,EAAOS;CACxB,CAAA,IACwCE,uBAAuB,KAAK;CAEtEC,OAAO,EAAEC,qBAAkB,EACzBC,MAAM,CAAC,EAAEC,OAAOF,GAAYH,qBAAqB,cAAc,CAAA,EACjE;CACAM,WAASC,gDAAA,WAAA;CACTE,YAAY,OAAO,EAAEpB,YAASC,gBAAQ;EACpC,IAAM,EAAEE,kBAAeH,GAGjBwB,IAAepC,EADK,MAAOe,GAAYmB,KAAKC,qBAAqBjB,MAAAA,KAAY,CAAA,CAC9Ce;EAUrC,IAPI,CAACG,EAAa,WAOd,CAACA,EAAa,QAAW,SAC3B,MAAMrC,EAAS;GACbU,IAAI;GACJI,QAAQ,EAAEO,WAAWP,EAAOO,UAAU;EACxC,CAAA;CAEJ;AACF,CAAA"}
@@ -1,29 +1,29 @@
1
- import { L as e, N as t, Q as n, W as r, c as i, h as a, j as o, nt as s } from "./build-DracvfrJ.mjs";
1
+ import { A as e, K as t, Q as n, R as r, T as i, ct as a, i as o, q as s } from "./build-DeJcDjPi.mjs";
2
2
  import { r as c } from "./trpcClient-BzPUgiM2.mjs";
3
- import { t as l } from "./_floatingIpId-CT4y-60o.mjs";
3
+ import { t as l } from "./_floatingIpId-BCk41_Lb.mjs";
4
4
  import { t as u } from "./useProjectId-DBc5lpoU.mjs";
5
5
  import "./hooks-dSArr2Ca.mjs";
6
- import { t as d } from "./FloatingIpActionModals-caXn6bYo.mjs";
6
+ import { t as d } from "./FloatingIpActionModals-BP8RWHbu.mjs";
7
7
  import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
8
8
  import { Fragment as h } from "react";
9
9
  import { useNavigate as g } from "@tanstack/react-router";
10
10
  import { Trans as _, useLingui as v } from "@lingui/react";
11
11
  //#region src/client/utils/formatFloatingIpStatus.ts
12
- var y = (e) => e.charAt(0) + e.slice(1).toLowerCase(), b = ({ items: n }) => {
13
- let i = Math.ceil(n.length / 2), a = n.slice(0, i), o = n.slice(i);
14
- return /*#__PURE__*/ m(s, {
12
+ var y = (e) => e.charAt(0) + e.slice(1).toLowerCase(), b = ({ items: r }) => {
13
+ let a = Math.ceil(r.length / 2), o = r.slice(0, a), s = r.slice(a);
14
+ return /*#__PURE__*/ m(n, {
15
15
  gap: "6",
16
16
  className: "grid grid-cols-2",
17
- children: [/*#__PURE__*/ p(r, {
17
+ children: [/*#__PURE__*/ p(e, {
18
18
  alignTerms: "right",
19
- children: a.map(({ label: n, value: r }) => /*#__PURE__*/ m(h, { children: [/*#__PURE__*/ p(t, { children: n }), /*#__PURE__*/ p(e, { children: r })] }, n))
20
- }), /*#__PURE__*/ p(r, {
19
+ children: o.map(({ label: e, value: n }) => /*#__PURE__*/ m(h, { children: [/*#__PURE__*/ p(t, { children: e }), /*#__PURE__*/ p(i, { children: n })] }, e))
20
+ }), /*#__PURE__*/ p(e, {
21
21
  alignTerms: "right",
22
- children: o.map(({ label: n, value: r }) => /*#__PURE__*/ m(h, { children: [/*#__PURE__*/ p(t, { children: n }), /*#__PURE__*/ p(e, { children: r })] }, n))
22
+ children: s.map(({ label: e, value: n }) => /*#__PURE__*/ m(h, { children: [/*#__PURE__*/ p(t, { children: e }), /*#__PURE__*/ p(i, { children: n })] }, e))
23
23
  })]
24
24
  });
25
25
  }, x = ({ floatingIp: e }) => {
26
- let { i18n: t, _: n } = v(), r = [
26
+ let { i18n: t, _: r } = v(), i = [
27
27
  {
28
28
  label: t._({ id: "S0kLOH" }),
29
29
  value: e.id
@@ -115,44 +115,44 @@ var y = (e) => e.charAt(0) + e.slice(1).toLowerCase(), b = ({ items: n }) => {
115
115
  }),
116
116
  /*#__PURE__*/ p(d, {
117
117
  floatingIp: e,
118
- children: ({ toggleEditModal: e, toggleAttachModal: n, toggleDetachModal: r, toggleReleaseModal: o }) => /*#__PURE__*/ m(a, { children: [
119
- /*#__PURE__*/ p(i, {
118
+ children: ({ toggleEditModal: e, toggleAttachModal: n, toggleDetachModal: r, toggleReleaseModal: i }) => /*#__PURE__*/ m(o, { children: [
119
+ /*#__PURE__*/ p(a, {
120
120
  onClick: e,
121
121
  children: t._({ id: "n22YIM" })
122
122
  }),
123
- /*#__PURE__*/ p(i, {
123
+ /*#__PURE__*/ p(a, {
124
124
  onClick: n,
125
125
  children: t._({ id: "igVDFt" })
126
126
  }),
127
- /*#__PURE__*/ p(i, {
127
+ /*#__PURE__*/ p(a, {
128
128
  onClick: r,
129
129
  children: t._({ id: "FOcBn3" })
130
130
  }),
131
- /*#__PURE__*/ p(i, {
132
- onClick: o,
131
+ /*#__PURE__*/ p(a, {
132
+ onClick: i,
133
133
  children: t._({ id: "H+a5j6" })
134
134
  })
135
135
  ] })
136
136
  }),
137
- /*#__PURE__*/ m(s, {
137
+ /*#__PURE__*/ m(n, {
138
138
  direction: "vertical",
139
139
  gap: "6",
140
140
  className: "my-6",
141
141
  children: [
142
- /*#__PURE__*/ m(s, {
142
+ /*#__PURE__*/ m(n, {
143
143
  direction: "vertical",
144
144
  gap: "2",
145
- children: [/*#__PURE__*/ p(o, { children: /*#__PURE__*/ p(_, { id: "SuX2Ca" }) }), /*#__PURE__*/ p(b, { items: r })]
145
+ children: [/*#__PURE__*/ p(s, { children: /*#__PURE__*/ p(_, { id: "SuX2Ca" }) }), /*#__PURE__*/ p(b, { items: i })]
146
146
  }),
147
- /*#__PURE__*/ m(s, {
147
+ /*#__PURE__*/ m(n, {
148
148
  direction: "vertical",
149
149
  gap: "2",
150
- children: [/*#__PURE__*/ p(o, { children: /*#__PURE__*/ p(_, { id: "jKopCP" }) }), /*#__PURE__*/ p(b, { items: c })]
150
+ children: [/*#__PURE__*/ p(s, { children: /*#__PURE__*/ p(_, { id: "jKopCP" }) }), /*#__PURE__*/ p(b, { items: c })]
151
151
  }),
152
- /*#__PURE__*/ m(s, {
152
+ /*#__PURE__*/ m(n, {
153
153
  direction: "vertical",
154
154
  gap: "2",
155
- children: [/*#__PURE__*/ p(o, { children: /*#__PURE__*/ p(_, { id: "5M4Te3" }) }), /*#__PURE__*/ p(b, { items: l })]
155
+ children: [/*#__PURE__*/ p(s, { children: /*#__PURE__*/ p(_, { id: "5M4Te3" }) }), /*#__PURE__*/ p(b, { items: l })]
156
156
  })
157
157
  ]
158
158
  })
@@ -161,21 +161,21 @@ var y = (e) => e.charAt(0) + e.slice(1).toLowerCase(), b = ({ items: n }) => {
161
161
  //#endregion
162
162
  //#region src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index.tsx?tsr-split=component
163
163
  function S() {
164
- let { floatingIpId: e } = l.useParams(), t = u(), r = g(), { data: a, isLoading: d, isError: h, error: v } = c.network.floatingIp.getById.useQuery({
164
+ let { floatingIpId: e } = l.useParams(), t = u(), i = g(), { data: o, isLoading: d, isError: h, error: v } = c.network.floatingIp.getById.useQuery({
165
165
  project_id: t,
166
166
  floatingip_id: e
167
167
  }), y = () => {
168
- r({
168
+ i({
169
169
  to: "/projects/$projectId/network/floatingips",
170
170
  params: { projectId: t }
171
171
  });
172
172
  };
173
- if (d) return /*#__PURE__*/ m(s, {
173
+ if (d) return /*#__PURE__*/ m(n, {
174
174
  className: "fixed inset-0",
175
175
  distribution: "center",
176
176
  alignment: "center",
177
177
  direction: "vertical",
178
- children: [/*#__PURE__*/ p(n, {
178
+ children: [/*#__PURE__*/ p(r, {
179
179
  variant: "primary",
180
180
  size: "large",
181
181
  className: "mb-2"
@@ -183,7 +183,7 @@ function S() {
183
183
  });
184
184
  if (h) {
185
185
  let e = v?.message || "Unknown error";
186
- return /*#__PURE__*/ m(s, {
186
+ return /*#__PURE__*/ m(n, {
187
187
  className: "fixed inset-0",
188
188
  distribution: "center",
189
189
  alignment: "center",
@@ -198,7 +198,7 @@ function S() {
198
198
  className: "text-theme-highest",
199
199
  children: e
200
200
  }),
201
- /*#__PURE__*/ p(i, {
201
+ /*#__PURE__*/ p(a, {
202
202
  onClick: y,
203
203
  variant: "primary",
204
204
  children: /*#__PURE__*/ p(_, { id: "z1JceR" })
@@ -206,7 +206,7 @@ function S() {
206
206
  ]
207
207
  });
208
208
  }
209
- return a ? /*#__PURE__*/ m(f, { children: [/*#__PURE__*/ p(o, { children: a.floating_ip_address }), /*#__PURE__*/ p(x, { floatingIp: a })] }) : /*#__PURE__*/ m(s, {
209
+ return o ? /*#__PURE__*/ m(f, { children: [/*#__PURE__*/ p(s, { children: o.floating_ip_address }), /*#__PURE__*/ p(x, { floatingIp: o })] }) : /*#__PURE__*/ m(n, {
210
210
  className: "fixed inset-0",
211
211
  distribution: "center",
212
212
  alignment: "center",
@@ -215,7 +215,7 @@ function S() {
215
215
  children: [/*#__PURE__*/ p("p", {
216
216
  className: "text-theme-secondary",
217
217
  children: /*#__PURE__*/ p(_, { id: "ChOuUj" })
218
- }), /*#__PURE__*/ p(i, {
218
+ }), /*#__PURE__*/ p(a, {
219
219
  onClick: y,
220
220
  variant: "primary",
221
221
  children: /*#__PURE__*/ p(_, { id: "z1JceR" })
@@ -225,4 +225,4 @@ function S() {
225
225
  //#endregion
226
226
  export { S as component };
227
227
 
228
- //# sourceMappingURL=_floatingIpId-COK_TBrz2.mjs.map
228
+ //# sourceMappingURL=_floatingIpId-BGrOAmPT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_floatingIpId-BGrOAmPT.mjs","names":["formatFloatingIpStatus","status","charAt","slice","toLowerCase","Fragment","DescriptionDefinition","DescriptionList","DescriptionTerm","Stack","TwoColumnDescriptionList","items","mid","Math","ceil","length","firstColumn","slice","secondColumn","gap","className","alignTerms","map","label","value","Stack","ButtonRow","Button","ContentHeading","formatFloatingIpStatus","TwoColumnDescriptionList","FloatingIpActionModals","FloatingIpDetailsView","floatingIp","useLingui","basicInfoItems","label","t","value","id","description","project_id","status","created_at","Date","toLocaleString","updated_at","tags","join","networkRoutingItems","floating_ip_address","floating_network_id","fixed_ip_address","port_details","name","mac_address","network_id","device_owner","device_id","router_id","port_id","qos_policy_id","port_forwardings","map","port","dnsItems","dns_domain","dns_name","p","className","toggleEditModal","toggleAttachModal","toggleDetachModal","toggleReleaseModal","onClick","direction","gap","items","useNavigate","Button","ContentHeading","Stack","Spinner","Trans","useProjectId","trpcReact","FloatingIpDetailsView","Route","RouteComponent","floatingIpId","useParams","projectId","navigate","data","floatingIp","isLoading","isError","error","network","getById","useQuery","project_id","floatingip_id","handleBack","to","params","errorMessage","message","floating_ip_address","component"],"sources":["../../src/client/utils/formatFloatingIpStatus.ts","../../src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/-components/TwoColumnDescriptionList.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/-components/-details/FloatingIpDetailsView.tsx","../../src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index.tsx?tsr-split=component"],"sourcesContent":["import type { FloatingIpStatus } from \"@/server/Network/types/floatingIp\"\n\n/**\n * Formats a floating IP status value from uppercase enum to title case.\n * Example: \"ACTIVE\" → \"Active\", \"DOWN\" → \"Down\", \"ERROR\" → \"Error\"\n */\nexport const formatFloatingIpStatus = (status: FloatingIpStatus) => {\n return status.charAt(0) + status.slice(1).toLowerCase()\n}\n","import { Fragment } from \"react\"\nimport { DescriptionDefinition, DescriptionList, DescriptionTerm, Stack } from \"@cloudoperators/juno-ui-components\"\n\nexport type DetailListItem = {\n label: string\n value: string\n}\n\ninterface TwoColumnDescriptionListProps {\n items: DetailListItem[]\n}\n\nexport const TwoColumnDescriptionList = ({ items }: TwoColumnDescriptionListProps) => {\n const mid = Math.ceil(items.length / 2)\n const firstColumn = items.slice(0, mid)\n const secondColumn = items.slice(mid)\n\n return (\n <Stack gap=\"6\" className=\"grid grid-cols-2\">\n <DescriptionList alignTerms=\"right\">\n {firstColumn.map(({ label, value }) => (\n <Fragment key={label}>\n <DescriptionTerm>{label}</DescriptionTerm>\n <DescriptionDefinition>{value}</DescriptionDefinition>\n </Fragment>\n ))}\n </DescriptionList>\n\n <DescriptionList alignTerms=\"right\">\n {secondColumn.map(({ label, value }) => (\n <Fragment key={label}>\n <DescriptionTerm>{label}</DescriptionTerm>\n <DescriptionDefinition>{value}</DescriptionDefinition>\n </Fragment>\n ))}\n </DescriptionList>\n </Stack>\n )\n}\n","import { Trans, useLingui } from \"@lingui/react/macro\"\nimport { Stack, ButtonRow, Button, ContentHeading } from \"@cloudoperators/juno-ui-components\"\nimport type { FloatingIp } from \"@/server/Network/types/floatingIp\"\nimport { formatFloatingIpStatus } from \"@/client/utils/formatFloatingIpStatus\"\nimport { DetailListItem, TwoColumnDescriptionList } from \"../TwoColumnDescriptionList\"\nimport { FloatingIpActionModals } from \"../../../-components/-modals/FloatingIpActionModals\"\n\ninterface FloatingIpDetailsViewProps {\n floatingIp: FloatingIp\n}\n\nexport const FloatingIpDetailsView = ({ floatingIp }: FloatingIpDetailsViewProps) => {\n const { t } = useLingui()\n\n const basicInfoItems: DetailListItem[] = [\n { label: t`ID`, value: floatingIp.id },\n { label: t`Description`, value: floatingIp.description || `—` },\n { label: t`Project ID`, value: floatingIp.project_id || `—` },\n { label: t`Status`, value: formatFloatingIpStatus(floatingIp.status) },\n { label: t`Created At`, value: floatingIp.created_at ? new Date(floatingIp.created_at).toLocaleString() : `—` },\n { label: t`Updated At`, value: floatingIp.updated_at ? new Date(floatingIp.updated_at).toLocaleString() : `—` },\n { label: t`Tags`, value: floatingIp.tags?.join(\", \") || `—` },\n ]\n\n const networkRoutingItems: DetailListItem[] = [\n { label: t`Floating IP Address`, value: floatingIp.floating_ip_address || `—` },\n { label: t`Floating Network`, value: floatingIp.floating_network_id || `—` },\n { label: t`Fixed IP Address`, value: floatingIp.fixed_ip_address || `—` },\n { label: t`Port Name`, value: floatingIp.port_details?.name || `—` },\n { label: t`MAC Address`, value: floatingIp.port_details?.mac_address || `—` },\n { label: t`Network ID`, value: floatingIp.port_details?.network_id || `—` },\n { label: t`Device Owner`, value: floatingIp.port_details?.device_owner || `—` },\n { label: t`Device ID`, value: floatingIp.port_details?.device_id || `—` },\n { label: t`Router ID`, value: floatingIp.router_id || `—` },\n { label: t`Port ID`, value: floatingIp.port_id || `—` },\n { label: t`QoS Policy ID`, value: floatingIp.qos_policy_id || `—` },\n { label: t`Port Forwarding`, value: floatingIp.port_forwardings?.map((port) => port.id).join(\", \") || `—` },\n ]\n\n const dnsItems: DetailListItem[] = [\n { label: t`DNS Domain`, value: floatingIp.dns_domain || `—` },\n { label: t`DNS Name`, value: floatingIp.dns_name || `—` },\n ]\n\n return (\n <>\n <p className=\"text-theme-secondary mt-2 text-sm\">\n <Trans>\n Full lifecycle management of Floating IPs, including attachment, port association/disassociation, DNS\n settings, and deletion\n </Trans>\n </p>\n\n <FloatingIpActionModals floatingIp={floatingIp}>\n {({ toggleEditModal, toggleAttachModal, toggleDetachModal, toggleReleaseModal }) => (\n <ButtonRow>\n <Button onClick={toggleEditModal}>{t`Edit Description`}</Button>\n <Button onClick={toggleAttachModal}>{t`Attach`}</Button>\n <Button onClick={toggleDetachModal}>{t`Detach`}</Button>\n <Button onClick={toggleReleaseModal}>{t`Release`}</Button>\n </ButtonRow>\n )}\n </FloatingIpActionModals>\n\n <Stack direction=\"vertical\" gap=\"6\" className=\"my-6\">\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Basic Info</Trans>\n </ContentHeading>\n <TwoColumnDescriptionList items={basicInfoItems} />\n </Stack>\n\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>Network & Routing</Trans>\n </ContentHeading>\n <TwoColumnDescriptionList items={networkRoutingItems} />\n </Stack>\n\n <Stack direction=\"vertical\" gap=\"2\">\n <ContentHeading>\n <Trans>DNS</Trans>\n </ContentHeading>\n <TwoColumnDescriptionList items={dnsItems} />\n </Stack>\n </Stack>\n </>\n )\n}\n","import { createFileRoute, redirect, useNavigate } from \"@tanstack/react-router\"\nimport { Button, ContentHeading, Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { getServiceIndex } from \"@/server/Authentication/helpers\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { FloatingIpDetailsView } from \"./-components/-details/FloatingIpDetailsView\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/floatingips/$floatingIpId/\")({\n staticData: {\n section: \"network\",\n service: \"floatingips\",\n isDetail: true,\n sectionCrumb: { labelKey: \"Network\" },\n crumb: { labelKey: \"Floating IPs\", to: \"/projects/$projectId/network/floatingips\" },\n } satisfies RouteInfo,\n loader: async ({ context, params }) => {\n const floatingIp = await context.trpcClient?.network.floatingIp.getById.query({\n project_id: params.projectId,\n floatingip_id: params.floatingIpId,\n })\n return { floatingIpAddress: floatingIp?.floating_ip_address ?? null }\n },\n head: ({ loaderData }) => ({\n meta: [{ title: loaderData?.floatingIpAddress ?? \"Floating IP\" }],\n }),\n component: RouteComponent,\n beforeLoad: async ({ context, params }) => {\n const { trpcClient } = context\n\n const availableServices = (await trpcClient?.auth.getAvailableServices.query()) || []\n const serviceIndex = getServiceIndex(availableServices)\n\n // Redirect if network service not available\n if (!serviceIndex[\"network\"]) {\n throw redirect({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId: params.projectId },\n })\n }\n\n if (!serviceIndex[\"network\"][\"neutron\"]) {\n throw redirect({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId: params.projectId },\n })\n }\n },\n})\n\nfunction RouteComponent() {\n const { floatingIpId } = Route.useParams()\n const projectId = useProjectId()\n const navigate = useNavigate()\n\n // Fetch floating IP details\n const {\n data: floatingIp,\n isLoading,\n isError,\n error,\n } = trpcReact.network.floatingIp.getById.useQuery({\n project_id: projectId,\n floatingip_id: floatingIpId,\n })\n\n const handleBack = () => {\n navigate({\n to: \"/projects/$projectId/network/floatingips\",\n params: { projectId },\n })\n }\n\n // Loading state\n if (isLoading) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading Floating IP Details...</Trans>\n </Stack>\n )\n }\n\n // Error state\n if (isError) {\n const errorMessage = error?.message || \"Unknown error\"\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-error font-semibold\">\n <Trans>Error loading floating IP</Trans>\n </p>\n <p className=\"text-theme-highest\">{errorMessage}</p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Floating IPs</Trans>\n </Button>\n </Stack>\n )\n }\n\n // No data state\n if (!floatingIp) {\n return (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\" direction=\"vertical\" gap=\"5\">\n <p className=\"text-theme-secondary\">\n <Trans>Floating IP not found</Trans>\n </p>\n <Button onClick={handleBack} variant=\"primary\">\n <Trans>Back to Floating IPs</Trans>\n </Button>\n </Stack>\n )\n }\n\n // Success state\n return (\n <>\n <ContentHeading>{floatingIp.floating_ip_address}</ContentHeading>\n <FloatingIpDetailsView floatingIp={floatingIp} />\n </>\n )\n}\n"],"mappings":"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"}