@cobaltcore-dev/aurora 0.10.0 → 0.12.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 (122) hide show
  1. package/README.md +2 -1
  2. package/dist/client/AuroraApp.d.ts +2 -0
  3. package/dist/client/AuthProvider-DZqOvceF.mjs +64 -0
  4. package/dist/client/AuthProvider-DZqOvceF.mjs.map +1 -0
  5. package/dist/client/ContentHeader-D2nIdJKJ.mjs +110 -0
  6. package/dist/client/ContentHeader-D2nIdJKJ.mjs.map +1 -0
  7. package/dist/client/{DeleteFlavorModal-C3m7bQJu.mjs → DeleteFlavorModal-Dwm0Hh84.mjs} +158 -158
  8. package/dist/client/{DeleteFlavorModal-C3m7bQJu.mjs.map → DeleteFlavorModal-Dwm0Hh84.mjs.map} +1 -1
  9. package/dist/client/{DeleteVersionsModal-CyYZfB8d.mjs → DeleteVersionsModal-DQO8lGmS.mjs} +58 -58
  10. package/dist/client/{DeleteVersionsModal-CyYZfB8d.mjs.map → DeleteVersionsModal-DQO8lGmS.mjs.map} +1 -1
  11. package/dist/client/{EditSecurityGroupModal-DKusxfta.mjs → EditSecurityGroupModal-BGPXglju.mjs} +16 -16
  12. package/dist/client/{EditSecurityGroupModal-DKusxfta.mjs.map → EditSecurityGroupModal-BGPXglju.mjs.map} +1 -1
  13. package/dist/client/{FiltersInput-GzR4D0q6.mjs → FiltersInput-cOaaRpcQ.mjs} +20 -20
  14. package/dist/client/{FiltersInput-GzR4D0q6.mjs.map → FiltersInput-cOaaRpcQ.mjs.map} +1 -1
  15. package/dist/client/{FloatingIpActionModals-CRvROJ3H.mjs → FloatingIpActionModals-RCvaamOg.mjs} +51 -51
  16. package/dist/client/{FloatingIpActionModals-CRvROJ3H.mjs.map → FloatingIpActionModals-RCvaamOg.mjs.map} +1 -1
  17. package/dist/client/{ImageToastNotifications-BuDXpTkl.mjs → ImageToastNotifications-ClO-1yOH.mjs} +341 -341
  18. package/dist/client/{ImageToastNotifications-BuDXpTkl.mjs.map → ImageToastNotifications-ClO-1yOH.mjs.map} +1 -1
  19. package/dist/client/{RouteError-DVAiT0mT.mjs → RouteError-BmZRk_ss.mjs} +2 -2
  20. package/dist/client/{RouteError-DVAiT0mT.mjs.map → RouteError-BmZRk_ss.mjs.map} +1 -1
  21. package/dist/client/{SortInput-DLcusjGZ.mjs → SortInput-DjaEHvcO.mjs} +6 -6
  22. package/dist/client/{SortInput-DLcusjGZ.mjs.map → SortInput-DjaEHvcO.mjs.map} +1 -1
  23. package/dist/client/{_auth-DXJkv9QO.mjs → _auth-DnImOqR-.mjs} +2 -2
  24. package/dist/client/_auth-DnImOqR-.mjs.map +1 -0
  25. package/dist/client/{_flavorId-Dy7EYQum.mjs → _flavorId-CtQEd28h.mjs} +9 -9
  26. package/dist/client/{_flavorId-Dy7EYQum.mjs.map → _flavorId-CtQEd28h.mjs.map} +1 -1
  27. package/dist/client/{_flavorId-DsD2VTKA.mjs → _flavorId-DVsGdXUf.mjs} +42 -42
  28. package/dist/client/{_flavorId-DsD2VTKA.mjs.map → _flavorId-DVsGdXUf.mjs.map} +1 -1
  29. package/dist/client/{_floatingIpId-j17rCQqG2.mjs → _floatingIpId-CKMq7-4p2.mjs} +32 -32
  30. package/dist/client/{_floatingIpId-j17rCQqG2.mjs.map → _floatingIpId-CKMq7-4p2.mjs.map} +1 -1
  31. package/dist/client/{_floatingIpId-BjVbeNw_.mjs → _floatingIpId-DvTh6vdB.mjs} +2 -2
  32. package/dist/client/{_floatingIpId-BjVbeNw_.mjs.map → _floatingIpId-DvTh6vdB.mjs.map} +1 -1
  33. package/dist/client/{_imageId-BjfhqAje.mjs → _imageId-xG8hC49j.mjs} +129 -129
  34. package/dist/client/_imageId-xG8hC49j.mjs.map +1 -0
  35. package/dist/client/{_pcaId-Bo7yHkNW.mjs → _pcaId-Db_t0x6O.mjs} +149 -149
  36. package/dist/client/{_pcaId-Bo7yHkNW.mjs.map → _pcaId-Db_t0x6O.mjs.map} +1 -1
  37. package/dist/client/{_pcaId-CKkCVC7b.mjs → _pcaId-WCJoukIk.mjs} +2 -2
  38. package/dist/client/{_pcaId-CKkCVC7b.mjs.map → _pcaId-WCJoukIk.mjs.map} +1 -1
  39. package/dist/client/{_projectId-B_2sZKk-.mjs → _projectId-B2cvskLV.mjs} +2 -2
  40. package/dist/client/_projectId-B2cvskLV.mjs.map +1 -0
  41. package/dist/client/{_projectId-Dbck_MFa.mjs → _projectId-BCMkaH_h.mjs} +85 -85
  42. package/dist/client/_projectId-BCMkaH_h.mjs.map +1 -0
  43. package/dist/client/{_projectId-CARHuZTU.mjs → _projectId-BdqRntcN.mjs} +15 -14
  44. package/dist/client/_projectId-BdqRntcN.mjs.map +1 -0
  45. package/dist/client/{_projectId-CY8W0IF6.mjs → _projectId-C8RGOqZb.mjs} +3 -3
  46. package/dist/client/{_projectId-CY8W0IF6.mjs.map → _projectId-C8RGOqZb.mjs.map} +1 -1
  47. package/dist/client/{_securityGroupId-gSEZbBII.mjs → _securityGroupId-CyQ3XmpB.mjs} +2 -2
  48. package/dist/client/{_securityGroupId-gSEZbBII.mjs.map → _securityGroupId-CyQ3XmpB.mjs.map} +1 -1
  49. package/dist/client/{_securityGroupId-CkN0CGVg.mjs → _securityGroupId-DMi7YRux.mjs} +352 -352
  50. package/dist/client/{_securityGroupId-CkN0CGVg.mjs.map → _securityGroupId-DMi7YRux.mjs.map} +1 -1
  51. package/dist/client/_storageType-Bb6YZgXf.mjs +3002 -0
  52. package/dist/client/_storageType-Bb6YZgXf.mjs.map +1 -0
  53. package/dist/client/{_storageType-6k8lUnQo.mjs → _storageType-g1zkFFRh.mjs} +2 -2
  54. package/dist/client/{_storageType-6k8lUnQo.mjs.map → _storageType-g1zkFFRh.mjs.map} +1 -1
  55. package/dist/client/_storageType-zeSZe--V.mjs.map +1 -1
  56. package/dist/client/{about-Nsxkyh9U.mjs → about-B4sGnxeW.mjs} +8 -8
  57. package/dist/client/about-B4sGnxeW.mjs.map +1 -0
  58. package/dist/client/{aurora-DDzsst74.mjs → aurora-6RsAZtnz.mjs} +2 -2
  59. package/dist/client/aurora-6RsAZtnz.mjs.map +1 -0
  60. package/dist/client/{build-BdRRmNf5.mjs → build-DgeVmENN.mjs} +3632 -3159
  61. package/dist/client/{build-BdRRmNf5.mjs.map → build-DgeVmENN.mjs.map} +1 -1
  62. package/dist/client/{constants-PMXUGI4Q.mjs → constants-D6IO9bPs.mjs} +17 -17
  63. package/dist/client/{constants-PMXUGI4Q.mjs.map → constants-D6IO9bPs.mjs.map} +1 -1
  64. package/dist/client/{flavors-p2TKcqP-.mjs → flavors-CO5l_6d0.mjs} +164 -164
  65. package/dist/client/{flavors-p2TKcqP-.mjs.map → flavors-CO5l_6d0.mjs.map} +1 -1
  66. package/dist/client/{flavors-BclEwobO.mjs → flavors-D4nGSs0r.mjs} +2 -2
  67. package/dist/client/{flavors-BclEwobO.mjs.map → flavors-D4nGSs0r.mjs.map} +1 -1
  68. package/dist/client/flavors-DWMZ6TuJ.mjs.map +1 -1
  69. package/dist/client/{floatingips-ph0ZxJw8.mjs → floatingips-ClkRV7a7.mjs} +115 -115
  70. package/dist/client/floatingips-ClkRV7a7.mjs.map +1 -0
  71. package/dist/client/{hooks-dSArr2Ca.mjs → hooks-CMgoYcDG.mjs} +1 -1
  72. package/dist/client/{images-Dbjo4yKn.mjs → images-B5ktfqg6.mjs} +2 -2
  73. package/dist/client/images-B5ktfqg6.mjs.map +1 -0
  74. package/dist/client/{images-BblnyWJq.mjs → images-C_OYLPqv.mjs} +425 -425
  75. package/dist/client/{images-BblnyWJq.mjs.map → images-C_OYLPqv.mjs.map} +1 -1
  76. package/dist/client/{images-CXdghaMW.mjs → images-CvPxoPC0.mjs} +2 -2
  77. package/dist/client/{images-CXdghaMW.mjs.map → images-CvPxoPC0.mjs.map} +1 -1
  78. package/dist/client/images-NBf2bV43.mjs.map +1 -1
  79. package/dist/client/index.js +337 -337
  80. package/dist/client/index.js.map +1 -1
  81. package/dist/client/network-DuZm76BZ.mjs.map +1 -1
  82. package/dist/client/{objects-Bw25cE1m.mjs → objects-D0grS6pk.mjs} +1645 -1617
  83. package/dist/client/objects-D0grS6pk.mjs.map +1 -0
  84. package/dist/client/{objects-B9Jh3SMG.mjs → objects-UQyUQxBj.mjs} +2 -2
  85. package/dist/client/{objects-B9Jh3SMG.mjs.map → objects-UQyUQxBj.mjs.map} +1 -1
  86. package/dist/client/objects-o2Cj_ndZ.mjs.map +1 -1
  87. package/dist/client/{pca-CiLPHmK7.mjs → pca-BJPxOIgq.mjs} +68 -68
  88. package/dist/client/{pca-CiLPHmK7.mjs.map → pca-BJPxOIgq.mjs.map} +1 -1
  89. package/dist/client/{pca-DUrQ_tIg.mjs → pca-C9MKOi3Z.mjs} +2 -2
  90. package/dist/client/{pca-DUrQ_tIg.mjs.map → pca-C9MKOi3Z.mjs.map} +1 -1
  91. package/dist/client/{projects-DNd3UTas.mjs → projects-C3wR-lvM.mjs} +6 -9
  92. package/dist/client/projects-C3wR-lvM.mjs.map +1 -0
  93. package/dist/client/{projects-B5topuei.mjs → projects-CGjBlG2w.mjs} +2 -2
  94. package/dist/client/{projects-B5topuei.mjs.map → projects-CGjBlG2w.mjs.map} +1 -1
  95. package/dist/client/{projects-CHYn7L5e.mjs → projects-DvSiI5Vg.mjs} +2 -2
  96. package/dist/client/projects-DvSiI5Vg.mjs.map +1 -0
  97. package/dist/client/{securitygroups-CcA2TpAt.mjs → securitygroups-n8ujBpJP.mjs} +119 -119
  98. package/dist/client/securitygroups-n8ujBpJP.mjs.map +1 -0
  99. package/dist/client/{useListWithFiltering-CVzhMyEA.mjs → useListWithFiltering-BuhE81I6.mjs} +12 -12
  100. package/dist/client/{useListWithFiltering-CVzhMyEA.mjs.map → useListWithFiltering-BuhE81I6.mjs.map} +1 -1
  101. package/dist/server/index.d.ts +6 -2
  102. package/dist/server/index.js +701 -423
  103. package/package.json +4 -4
  104. package/dist/client/AuthProvider-Co4d0WzB.mjs +0 -100
  105. package/dist/client/AuthProvider-Co4d0WzB.mjs.map +0 -1
  106. package/dist/client/ContentHeader-D4jlOG-9.mjs +0 -96
  107. package/dist/client/ContentHeader-D4jlOG-9.mjs.map +0 -1
  108. package/dist/client/_auth-DXJkv9QO.mjs.map +0 -1
  109. package/dist/client/_imageId-BjfhqAje.mjs.map +0 -1
  110. package/dist/client/_projectId-B_2sZKk-.mjs.map +0 -1
  111. package/dist/client/_projectId-CARHuZTU.mjs.map +0 -1
  112. package/dist/client/_projectId-Dbck_MFa.mjs.map +0 -1
  113. package/dist/client/_storageType-CLTxXjQZ.mjs +0 -3048
  114. package/dist/client/_storageType-CLTxXjQZ.mjs.map +0 -1
  115. package/dist/client/about-Nsxkyh9U.mjs.map +0 -1
  116. package/dist/client/aurora-DDzsst74.mjs.map +0 -1
  117. package/dist/client/floatingips-ph0ZxJw8.mjs.map +0 -1
  118. package/dist/client/images-Dbjo4yKn.mjs.map +0 -1
  119. package/dist/client/objects-Bw25cE1m.mjs.map +0 -1
  120. package/dist/client/projects-CHYn7L5e.mjs.map +0 -1
  121. package/dist/client/projects-DNd3UTas.mjs.map +0 -1
  122. package/dist/client/securitygroups-CcA2TpAt.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
- import { D as e, G as t, H as n, J as r, L as i, N as a, Q as o, U as s, Y as c, _ as l, ct as u, et as d, k as f, l as p, m, ot as h, p as g, v as _, x as v } from "./build-BdRRmNf5.mjs";
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
2
  import { r as y } from "./trpcClient-BzPUgiM2.mjs";
3
3
  import { t as b } from "./useModal-DCs1OJh7.mjs";
4
4
  import { t as x } from "./useProjectId-DBc5lpoU.mjs";
5
- import "./hooks-dSArr2Ca.mjs";
6
- import { t as S } from "./FloatingIpActionModals-CRvROJ3H.mjs";
7
- import { n as C, t as w } from "./useListWithFiltering-CVzhMyEA.mjs";
5
+ import "./hooks-CMgoYcDG.mjs";
6
+ import { t as S } from "./FloatingIpActionModals-RCvaamOg.mjs";
7
+ import { n as C, t as w } from "./useListWithFiltering-BuhE81I6.mjs";
8
8
  import { t as T } from "./buildFilterParams-DoZzMKX9.mjs";
9
9
  import { m as E, r as D, s as O } from "./md-CyCflQee.mjs";
10
10
  import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
@@ -46,91 +46,91 @@ var z = {
46
46
  I._({ id: "7NC3vm" }),
47
47
  I._({ id: "Nu4oKW" }),
48
48
  ""
49
- ], V = ({ floatingIp: n }) => {
50
- let { i18n: r, _: i } = P(), o = M(), s = x(), c = () => {
49
+ ], V = ({ floatingIp: t }) => {
50
+ let { i18n: i, _: a } = P(), o = M(), s = x(), c = () => {
51
51
  o({
52
52
  to: "/projects/$projectId/network/floatingips/$floatingIpId",
53
53
  params: {
54
54
  projectId: s,
55
- floatingIpId: n.id
55
+ floatingIpId: t.id
56
56
  }
57
57
  });
58
58
  };
59
- return /*#__PURE__*/ j(a, {
60
- "data-testid": `floating-ip-row-${n.id}`,
59
+ return /*#__PURE__*/ j(n, {
60
+ "data-testid": `floating-ip-row-${t.id}`,
61
61
  onClick: c,
62
62
  children: [
63
- /*#__PURE__*/ A(t, { children: /*#__PURE__*/ j("div", {
63
+ /*#__PURE__*/ A(r, { children: /*#__PURE__*/ j("div", {
64
64
  className: "flex items-center gap-2",
65
- children: [z[n.status].icon, z[n.status].text]
65
+ children: [z[t.status].icon, z[t.status].text]
66
66
  }) }),
67
- /*#__PURE__*/ A(t, { children: n.floating_ip_address }),
68
- /*#__PURE__*/ A(t, { children: n.fixed_ip_address || "—" }),
69
- /*#__PURE__*/ A(t, { children: n.floating_network_id }),
70
- /*#__PURE__*/ A(t, { children: n.description || "—" }),
71
- /*#__PURE__*/ A(t, {
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
72
  onClick: (e) => e.stopPropagation(),
73
73
  className: "items-end pr-0",
74
74
  children: /*#__PURE__*/ A(S, {
75
- floatingIp: n,
76
- children: ({ toggleEditModal: t, toggleAttachModal: n, toggleDetachModal: i, toggleReleaseModal: a }) => /*#__PURE__*/ A(e, { children: /*#__PURE__*/ j(h, { children: [
77
- /*#__PURE__*/ A(f, {
78
- label: r._({ id: "rdUucN" }),
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
79
  onClick: c
80
80
  }),
81
- /*#__PURE__*/ A(f, {
82
- label: r._({ id: "n22YIM" }),
81
+ /*#__PURE__*/ A(u, {
82
+ label: i._({ id: "n22YIM" }),
83
83
  onClick: t
84
84
  }),
85
- /*#__PURE__*/ A(f, {
86
- label: r._({ id: "igVDFt" }),
85
+ /*#__PURE__*/ A(u, {
86
+ label: i._({ id: "igVDFt" }),
87
87
  onClick: n
88
88
  }),
89
- /*#__PURE__*/ A(f, {
90
- label: r._({ id: "FOcBn3" }),
91
- onClick: i
89
+ /*#__PURE__*/ A(u, {
90
+ label: i._({ id: "FOcBn3" }),
91
+ onClick: r
92
92
  }),
93
- /*#__PURE__*/ A(f, {
94
- label: r._({ id: "H+a5j6" }),
93
+ /*#__PURE__*/ A(u, {
94
+ label: i._({ id: "H+a5j6" }),
95
95
  onClick: a
96
96
  })
97
97
  ] }) })
98
98
  })
99
99
  })
100
100
  ]
101
- }, n.id);
102
- }, H = ({ floatingIps: e, isLoading: r, isError: s, error: l }) => {
103
- let { i18n: u, _: f } = P(), p = B();
104
- return r ? /*#__PURE__*/ j(c, {
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
105
  className: "py-8",
106
106
  distribution: "center",
107
107
  alignment: "center",
108
108
  direction: "vertical",
109
- children: [/*#__PURE__*/ A(n, {
109
+ children: [/*#__PURE__*/ A(a, {
110
110
  variant: "primary",
111
111
  size: "large",
112
112
  className: "mb-2"
113
113
  }), /*#__PURE__*/ A(N, { id: "Z3FXyt" })]
114
- }) : s ? /*#__PURE__*/ A(c, {
114
+ }) : i ? /*#__PURE__*/ A(_, {
115
115
  className: "py-8",
116
116
  distribution: "center",
117
117
  alignment: "center",
118
118
  direction: "vertical",
119
- children: l?.message ?? u._({ id: "+Nx1wc" })
120
- }) : e.length === 0 ? /*#__PURE__*/ A(d, {
121
- columns: p.length,
119
+ children: c?.message ?? u._({ id: "+Nx1wc" })
120
+ }) : e.length === 0 ? /*#__PURE__*/ A(o, {
121
+ columns: f.length,
122
122
  className: "floating-ips",
123
123
  "data-testid": "no-floating-ips",
124
- children: /*#__PURE__*/ A(a, { children: /*#__PURE__*/ j(t, {
125
- colSpan: p.length,
126
- children: [/*#__PURE__*/ A(o, { children: /*#__PURE__*/ A(N, { id: "WCLyHI" }) }), /*#__PURE__*/ A("p", { children: /*#__PURE__*/ A(N, { id: "0eY8Mz" }) })]
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
127
  }) })
128
- }) : /*#__PURE__*/ j(d, {
129
- columns: p.length,
130
- children: [/*#__PURE__*/ A(a, { children: p.map((e) => /*#__PURE__*/ A(i, { children: e }, e)) }), e.map((e) => /*#__PURE__*/ A(V, { floatingIp: e }, e.id))]
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
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: t }) => {
133
- let { i18n: i, _: a } = P(), o = x(), c = y.useUtils(), { isPending: l, ...d } = y.network.floatingIp.create.useMutation({ onSettled: () => c.network.floatingIp.list.invalidate() }), { data: f = [], isLoading: h, error: b } = y.network.floatingIp.listExternalNetworks.useQuery({ project_id: o }), { data: S = [], isLoading: C, error: w } = y.network.floatingIp.listDnsDomains.useQuery({ project_id: o }), { data: T = [], isLoading: E, error: D } = y.network.floatingIp.listAvailablePorts.useQuery({ project_id: o }), O = L({
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 = x(), l = y.useUtils(), { isPending: u, ...g } = y.network.floatingIp.create.useMutation({ onSettled: () => l.network.floatingIp.list.invalidate() }), { data: _ = [], isLoading: v, error: b } = 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
134
  defaultValues: {
135
135
  floating_network_id: "",
136
136
  dns_domain: "",
@@ -143,16 +143,16 @@ var z = {
143
143
  validators: { onSubmit: F.object({
144
144
  floating_network_id: F.string(),
145
145
  dns_domain: F.string(),
146
- dns_name: F.string().trim().max(63, i._({ id: "Zq6Y5u" })).refine((e) => e === "" || K.test(e), { message: i._({ id: "R6kcsL" }) }),
147
- description: F.string().trim().max(255, i._({ id: "lZvIXd" })),
148
- floating_ip_address: F.string().trim().refine((e) => e === "" || G(e), { message: i._({ id: "AZyHwC" }) }),
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
149
  port_id: F.string(),
150
150
  fixed_ip_address: F.string()
151
151
  }) },
152
152
  onSubmit: async ({ value: e }) => {
153
- l || (await d.mutateAsync({
154
- project_id: o,
155
- tenant_id: o,
153
+ u || (await g.mutateAsync({
154
+ project_id: s,
155
+ tenant_id: s,
156
156
  floating_network_id: e.floating_network_id,
157
157
  ...e.dns_domain && { dns_domain: e.dns_domain },
158
158
  ...e.dns_name && { dns_name: e.dns_name },
@@ -163,72 +163,72 @@ var z = {
163
163
  }), k());
164
164
  }
165
165
  }), k = () => {
166
- l || (O.reset(), d.reset(), t());
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 = (b?.message || w?.message || D?.message) ?? d.error?.message ?? null;
168
- return /*#__PURE__*/ j(u, {
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 = (b?.message || w?.message || D?.message) ?? g.error?.message ?? null;
168
+ return /*#__PURE__*/ j(h, {
169
169
  open: e,
170
170
  size: "large",
171
- title: i._({ id: "h99+4y" }),
171
+ title: r._({ id: "h99+4y" }),
172
172
  onCancel: k,
173
- cancelButtonLabel: i._({ id: "dEgA5A" }),
174
- confirmButtonLabel: i._({ id: "9X8lAk" }),
173
+ cancelButtonLabel: r._({ id: "dEgA5A" }),
174
+ confirmButtonLabel: r._({ id: "9X8lAk" }),
175
175
  onConfirm: O.handleSubmit,
176
- disableConfirmButton: l || !I,
176
+ disableConfirmButton: u || !I,
177
177
  children: [
178
- B && /*#__PURE__*/ A(r, {
178
+ B && /*#__PURE__*/ A(t, {
179
179
  dismissible: !1,
180
180
  variant: "error",
181
181
  className: "mb-4",
182
182
  children: B
183
183
  }),
184
- l && /*#__PURE__*/ j("div", {
184
+ u && /*#__PURE__*/ j("div", {
185
185
  className: "mb-4 flex items-center justify-center gap-2",
186
- children: [/*#__PURE__*/ A(n, { variant: "primary" }), /*#__PURE__*/ A("span", {
186
+ children: [/*#__PURE__*/ A(a, { variant: "primary" }), /*#__PURE__*/ A("span", {
187
187
  className: "text-theme-high text-sm",
188
188
  children: /*#__PURE__*/ A(N, { id: "HuA8iQ" })
189
189
  })]
190
190
  }),
191
- !l && /*#__PURE__*/ j(v, {
191
+ !u && /*#__PURE__*/ j(m, {
192
192
  className: "mb-0",
193
193
  id: "allocate-floating-ip-form",
194
194
  onSubmit: (e) => {
195
195
  e.preventDefault(), O.handleSubmit();
196
196
  },
197
197
  children: [
198
- /*#__PURE__*/ A(g, {
198
+ /*#__PURE__*/ A(i, {
199
199
  className: "mb-4",
200
200
  children: /*#__PURE__*/ A(O.Field, {
201
201
  name: "floating_network_id",
202
- children: (e) => /*#__PURE__*/ A(_, {
202
+ children: (e) => /*#__PURE__*/ A(d, {
203
203
  id: e.name,
204
204
  name: e.name,
205
205
  value: e.state.value,
206
206
  onChange: (t) => e.handleChange(typeof t == "string" ? t : ""),
207
- label: i._({ id: "kA2lMP" }),
208
- helptext: i._({ id: "BoIAP6" }),
209
- placeholder: i._({ id: "T6Gm5y" }),
210
- disabled: l || h,
207
+ label: r._({ id: "kA2lMP" }),
208
+ helptext: r._({ id: "BoIAP6" }),
209
+ placeholder: r._({ id: "T6Gm5y" }),
210
+ disabled: u || v,
211
211
  required: !0,
212
- loading: h,
213
- children: f.map(({ id: e, name: t }) => /*#__PURE__*/ A(p, {
212
+ loading: v,
213
+ children: _.map(({ id: e, name: t }) => /*#__PURE__*/ A(p, {
214
214
  value: e,
215
215
  label: t ? `${t} (${e})` : e
216
216
  }, e))
217
217
  })
218
218
  })
219
219
  }),
220
- /*#__PURE__*/ A(g, {
220
+ /*#__PURE__*/ A(i, {
221
221
  className: "mb-4",
222
222
  children: /*#__PURE__*/ A(O.Field, {
223
223
  name: "dns_domain",
224
- children: (e) => /*#__PURE__*/ A(_, {
224
+ children: (e) => /*#__PURE__*/ A(d, {
225
225
  id: e.name,
226
226
  name: e.name,
227
227
  value: e.state.value,
228
228
  onChange: (t) => e.handleChange(typeof t == "string" ? t : ""),
229
- label: i._({ id: "WlpcJv" }),
230
- helptext: i._({ id: "1ojTVo" }),
231
- disabled: l || C,
229
+ label: r._({ id: "WlpcJv" }),
230
+ helptext: r._({ id: "1ojTVo" }),
231
+ disabled: u || C,
232
232
  loading: C,
233
233
  children: S.map(({ id: e, name: t }) => /*#__PURE__*/ A(p, {
234
234
  value: t,
@@ -237,63 +237,63 @@ var z = {
237
237
  })
238
238
  })
239
239
  }),
240
- /*#__PURE__*/ A(g, {
240
+ /*#__PURE__*/ A(i, {
241
241
  className: "mb-4",
242
242
  children: /*#__PURE__*/ A(O.Field, {
243
243
  name: "dns_name",
244
- children: (e) => /*#__PURE__*/ A(m, {
244
+ children: (e) => /*#__PURE__*/ A(c, {
245
245
  id: e.name,
246
246
  name: e.name,
247
247
  value: e.state.value,
248
248
  onBlur: e.handleBlur,
249
249
  onChange: (t) => e.handleChange(t.target.value),
250
- label: i._({ id: "eGEHJE" }),
251
- placeholder: i._({ id: "SLEH7X" }),
252
- helptext: i._({ id: "Tx4Ym+" }),
250
+ label: r._({ id: "eGEHJE" }),
251
+ placeholder: r._({ id: "SLEH7X" }),
252
+ helptext: r._({ id: "Tx4Ym+" }),
253
253
  errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
254
- disabled: l
254
+ disabled: u
255
255
  })
256
256
  })
257
257
  }),
258
- /*#__PURE__*/ A(g, {
258
+ /*#__PURE__*/ A(i, {
259
259
  className: "mb-4",
260
260
  children: /*#__PURE__*/ A(O.Field, {
261
261
  name: "description",
262
- children: (e) => /*#__PURE__*/ A(s, {
262
+ children: (e) => /*#__PURE__*/ A(f, {
263
263
  id: e.name,
264
264
  name: e.name,
265
265
  value: e.state.value,
266
266
  onBlur: e.handleBlur,
267
267
  onChange: (t) => e.handleChange(t.target.value),
268
- placeholder: i._({ id: "Nu4oKW" }),
268
+ placeholder: r._({ id: "Nu4oKW" }),
269
269
  errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
270
- disabled: l
270
+ disabled: u
271
271
  })
272
272
  })
273
273
  }),
274
- /*#__PURE__*/ A(g, {
274
+ /*#__PURE__*/ A(i, {
275
275
  className: "mb-4",
276
276
  children: /*#__PURE__*/ A(O.Field, {
277
277
  name: "floating_ip_address",
278
- children: (e) => /*#__PURE__*/ A(m, {
278
+ children: (e) => /*#__PURE__*/ A(c, {
279
279
  id: e.name,
280
280
  name: e.name,
281
281
  value: e.state.value,
282
282
  onBlur: e.handleBlur,
283
283
  onChange: (t) => e.handleChange(t.target.value),
284
- label: i._({ id: "xNG/3n" }),
285
- placeholder: i._({ id: "5/wyf8" }),
286
- helptext: i._({ id: "PAKSdy" }),
284
+ label: r._({ id: "xNG/3n" }),
285
+ placeholder: r._({ id: "5/wyf8" }),
286
+ helptext: r._({ id: "PAKSdy" }),
287
287
  errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
288
- disabled: l
288
+ disabled: u
289
289
  })
290
290
  })
291
291
  }),
292
- /*#__PURE__*/ A(g, {
292
+ /*#__PURE__*/ A(i, {
293
293
  className: "mb-4",
294
294
  children: /*#__PURE__*/ A(O.Field, {
295
295
  name: "port_id",
296
- children: (e) => /*#__PURE__*/ A(_, {
296
+ children: (e) => /*#__PURE__*/ A(d, {
297
297
  id: e.name,
298
298
  name: e.name,
299
299
  value: e.state.value,
@@ -303,10 +303,10 @@ var z = {
303
303
  let r = T.find((e) => e.id === n)?.fixed_ips ?? [];
304
304
  O.setFieldValue("fixed_ip_address", r.length === 1 ? r[0].ip_address : "");
305
305
  },
306
- label: i._({ id: "eks7oA" }),
307
- placeholder: i._({ id: "UztfYZ" }),
306
+ label: r._({ id: "eks7oA" }),
307
+ placeholder: r._({ id: "UztfYZ" }),
308
308
  errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
309
- disabled: l || E,
309
+ disabled: u || E,
310
310
  loading: E,
311
311
  children: T.map((e) => /*#__PURE__*/ A(p, {
312
312
  value: e.id,
@@ -315,19 +315,19 @@ var z = {
315
315
  })
316
316
  })
317
317
  }),
318
- /*#__PURE__*/ A(g, { children: /*#__PURE__*/ A(O.Field, {
318
+ /*#__PURE__*/ A(i, { children: /*#__PURE__*/ A(O.Field, {
319
319
  name: "fixed_ip_address",
320
- children: (e) => /*#__PURE__*/ A(_, {
320
+ children: (e) => /*#__PURE__*/ A(d, {
321
321
  id: e.name,
322
322
  name: e.name,
323
323
  value: e.state.value,
324
324
  onBlur: e.handleBlur,
325
325
  onChange: (t) => e.handleChange(typeof t == "string" ? t : ""),
326
- label: i._({ id: "Nc7QKU" }),
327
- placeholder: i._({ id: "i41Xuw" }),
328
- helptext: i._({ id: "PtjzS+" }),
326
+ label: r._({ id: "Nc7QKU" }),
327
+ placeholder: r._({ id: "i41Xuw" }),
328
+ helptext: r._({ id: "PtjzS+" }),
329
329
  errortext: e.state.meta.errors.map((e) => e?.message).join(", "),
330
- disabled: l || z.length === 0,
330
+ disabled: u || z.length === 0,
331
331
  children: z.map(({ ip_address: e }) => /*#__PURE__*/ A(p, {
332
332
  value: e,
333
333
  label: e
@@ -339,7 +339,7 @@ var z = {
339
339
  ]
340
340
  });
341
341
  }, J = "fixed_ip_address", Y = "asc", X = () => {
342
- let { i18n: e, _: t } = P(), n = x(), [r, i] = b(!1), { searchTerm: a, handleSearchChange: o, sortSettings: s, handleSortChange: c, filterSettings: u, handleFilterChange: d } = w({
342
+ let { i18n: e, _: t } = P(), n = x(), [r, i] = b(!1), { searchTerm: a, handleSearchChange: o, sortSettings: s, handleSortChange: c, filterSettings: l, handleFilterChange: u } = w({
343
343
  defaultSortKey: J,
344
344
  defaultSortDir: Y,
345
345
  sortOptions: [
@@ -386,11 +386,11 @@ var z = {
386
386
  ],
387
387
  supportsMultiValue: !1
388
388
  }] }
389
- }), { data: f = [], isLoading: p, isError: m, error: h } = y.network.floatingIp.list.useQuery({
389
+ }), { data: d = [], isLoading: f, isError: p, error: m } = y.network.floatingIp.list.useQuery({
390
390
  project_id: n,
391
391
  sort_key: s.sortBy,
392
392
  sort_dir: s.sortDirection,
393
- ...T(u),
393
+ ...T(l),
394
394
  ...a ? { searchTerm: a } : {}
395
395
  });
396
396
  return /*#__PURE__*/ j("div", {
@@ -401,19 +401,19 @@ var z = {
401
401
  onSearch: o,
402
402
  sortSettings: s,
403
403
  onSort: c,
404
- filterSettings: u,
405
- onFilter: d,
406
- actions: /*#__PURE__*/ A(l, {
404
+ filterSettings: l,
405
+ onFilter: u,
406
+ actions: /*#__PURE__*/ A(v, {
407
407
  variant: "primary",
408
408
  label: e._({ id: "h99+4y" }),
409
409
  onClick: i
410
410
  })
411
411
  }),
412
412
  /*#__PURE__*/ A(H, {
413
- floatingIps: f,
414
- isLoading: p,
415
- isError: m,
416
- error: h
413
+ floatingIps: d,
414
+ isLoading: f,
415
+ isError: p,
416
+ error: m
417
417
  }),
418
418
  r && /*#__PURE__*/ A(q, {
419
419
  open: r,
@@ -426,9 +426,9 @@ var z = {
426
426
  //#region src/client/routes/_auth/projects/$projectId/network/floatingips/index.tsx?tsr-split=component
427
427
  function Z() {
428
428
  let { i18n: e, _: t } = P();
429
- return /*#__PURE__*/ j(k, { children: [/*#__PURE__*/ A(o, { children: e._({ id: "u77/s4" }) }), /*#__PURE__*/ A(X, {})] });
429
+ return /*#__PURE__*/ j(k, { children: [/*#__PURE__*/ A(l, { children: e._({ id: "u77/s4" }) }), /*#__PURE__*/ A(X, {})] });
430
430
  }
431
431
  //#endregion
432
432
  export { Z as component };
433
433
 
434
- //# sourceMappingURL=floatingips-ph0ZxJw8.mjs.map
434
+ //# sourceMappingURL=floatingips-ClkRV7a7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floatingips-ClkRV7a7.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 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,2 +1,2 @@
1
- import "./AuthProvider-Co4d0WzB.mjs";
1
+ import "./AuthProvider-DZqOvceF.mjs";
2
2
  import "./useProjectId-DBc5lpoU.mjs";
@@ -1,8 +1,8 @@
1
- import { t as e } from "./RouteError-DVAiT0mT.mjs";
1
+ import { t as e } from "./RouteError-BmZRk_ss.mjs";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  //#region src/client/routes/_auth/projects/$projectId/compute/images.tsx?tsr-split=errorComponent
4
4
  var n = ({ error: n }) => /*#__PURE__*/ t(e, { error: n });
5
5
  //#endregion
6
6
  export { n as errorComponent };
7
7
 
8
- //# sourceMappingURL=images-Dbjo4yKn.mjs.map
8
+ //# sourceMappingURL=images-B5ktfqg6.mjs.map
@@ -0,0 +1 @@
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"}