@cobaltcore-dev/aurora 0.20.3 → 0.22.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 (91) hide show
  1. package/dist/client/AuthProvider-p1e1DuKU.mjs +69 -0
  2. package/dist/client/AuthProvider-p1e1DuKU.mjs.map +1 -0
  3. package/dist/client/{ContentHeader-CIAzorGI.mjs → ContentHeader-BIScbvb4.mjs} +3 -2
  4. package/dist/client/{ContentHeader-CIAzorGI.mjs.map → ContentHeader-BIScbvb4.mjs.map} +1 -1
  5. package/dist/client/DeleteFlavorModal-lFMExcq_.mjs +713 -0
  6. package/dist/client/DeleteFlavorModal-lFMExcq_.mjs.map +1 -0
  7. package/dist/client/{DeletePcaModal-YUlNw8cw.mjs → DeletePcaModal-Dg9dej-H.mjs} +2 -2
  8. package/dist/client/{DeletePcaModal-YUlNw8cw.mjs.map → DeletePcaModal-Dg9dej-H.mjs.map} +1 -1
  9. package/dist/client/{DetailsInfo-Cv3oke-R.mjs → DetailsInfo-DwCo9P1o.mjs} +2 -2
  10. package/dist/client/{DetailsInfo-Cv3oke-R.mjs.map → DetailsInfo-DwCo9P1o.mjs.map} +1 -1
  11. package/dist/client/{FloatingIpActionModals-PLN6CWZ9.mjs → FloatingIpActionModals-CDF8LVtX.mjs} +2 -2
  12. package/dist/client/{FloatingIpActionModals-PLN6CWZ9.mjs.map → FloatingIpActionModals-CDF8LVtX.mjs.map} +1 -1
  13. package/dist/client/{ImageToastNotifications-BQM7HOyE.mjs → ImageToastNotifications-Dzq6jNTm.mjs} +2 -2
  14. package/dist/client/{ImageToastNotifications-BQM7HOyE.mjs.map → ImageToastNotifications-Dzq6jNTm.mjs.map} +1 -1
  15. package/dist/client/Slot-CWb612-_.mjs +28 -0
  16. package/dist/client/Slot-CWb612-_.mjs.map +1 -0
  17. package/dist/client/{_auth-BtRCgHQe.mjs → _auth-Dut7CaMR.mjs} +2 -2
  18. package/dist/client/{_auth-BtRCgHQe.mjs.map → _auth-Dut7CaMR.mjs.map} +1 -1
  19. package/dist/client/{_flavorId-BaNJ1CDY.mjs → _flavorId-BMJcnI7H.mjs} +2 -2
  20. package/dist/client/{_flavorId-BaNJ1CDY.mjs.map → _flavorId-BMJcnI7H.mjs.map} +1 -1
  21. package/dist/client/{_flavorId-BMX239RH.mjs → _flavorId-DUWdFEMH.mjs} +13 -14
  22. package/dist/client/{_flavorId-BMX239RH.mjs.map → _flavorId-DUWdFEMH.mjs.map} +1 -1
  23. package/dist/client/{_floatingIpId-DQFtZNeg.mjs → _floatingIpId-CjQLzpC5.mjs} +2 -2
  24. package/dist/client/{_floatingIpId-DQFtZNeg.mjs.map → _floatingIpId-CjQLzpC5.mjs.map} +1 -1
  25. package/dist/client/{_floatingIpId-E6x99cmW.mjs → _floatingIpId-KcWWq9ZW2.mjs} +4 -4
  26. package/dist/client/_floatingIpId-KcWWq9ZW2.mjs.map +1 -0
  27. package/dist/client/{_imageId-C2662dZr.mjs → _imageId-BkEpwbCr.mjs} +3 -3
  28. package/dist/client/{_imageId-C2662dZr.mjs.map → _imageId-BkEpwbCr.mjs.map} +1 -1
  29. package/dist/client/{_pcaId-CNbmhUF8.mjs → _pcaId-BcwGho7g.mjs} +4 -4
  30. package/dist/client/{_pcaId-CNbmhUF8.mjs.map → _pcaId-BcwGho7g.mjs.map} +1 -1
  31. package/dist/client/{_projectId-B4ScifQf.mjs → _projectId-CoMD6nq6.mjs} +3 -3
  32. package/dist/client/{_projectId-B4ScifQf.mjs.map → _projectId-CoMD6nq6.mjs.map} +1 -1
  33. package/dist/client/{_projectId-CYq4KZXB.mjs → _projectId-D8FHe0gr.mjs} +3 -3
  34. package/dist/client/{_projectId-CYq4KZXB.mjs.map → _projectId-D8FHe0gr.mjs.map} +1 -1
  35. package/dist/client/{_projectId-DxgPaiA7.mjs → _projectId-MjFv839t.mjs} +2 -2
  36. package/dist/client/{_projectId-DxgPaiA7.mjs.map → _projectId-MjFv839t.mjs.map} +1 -1
  37. package/dist/client/{_projectId-DJLjspKf.mjs → _projectId-hMtrqW6m.mjs} +24 -23
  38. package/dist/client/{_projectId-DJLjspKf.mjs.map → _projectId-hMtrqW6m.mjs.map} +1 -1
  39. package/dist/client/{_securityGroupId-ju2ZSIYe.mjs → _securityGroupId-B5-gJe1u.mjs} +3 -3
  40. package/dist/client/{_securityGroupId-ju2ZSIYe.mjs.map → _securityGroupId-B5-gJe1u.mjs.map} +1 -1
  41. package/dist/client/{_securityGroupId-a46ExjsA.mjs → _securityGroupId-fPJWtDPU.mjs} +2 -2
  42. package/dist/client/{_securityGroupId-a46ExjsA.mjs.map → _securityGroupId-fPJWtDPU.mjs.map} +1 -1
  43. package/dist/client/{_storageType-BkhbKG_G.mjs → _storageType-CI5f4CsI.mjs} +2 -2
  44. package/dist/client/{_storageType-BkhbKG_G.mjs.map → _storageType-CI5f4CsI.mjs.map} +1 -1
  45. package/dist/client/{_storageType-ByLL106s.mjs → _storageType-DePX1Aah.mjs} +3 -3
  46. package/dist/client/{_storageType-ByLL106s.mjs.map → _storageType-DePX1Aah.mjs.map} +1 -1
  47. package/dist/client/{aurora-Owys0YMN.mjs → aurora-Dp_NPGe8.mjs} +2 -2
  48. package/dist/client/{aurora-Owys0YMN.mjs.map → aurora-Dp_NPGe8.mjs.map} +1 -1
  49. package/dist/client/components/Auth/LoginForm.d.ts +1 -0
  50. package/dist/client/{flavors-C7PVJUqZ.mjs → flavors-DLxUiBhE.mjs} +2 -2
  51. package/dist/client/{flavors-C7PVJUqZ.mjs.map → flavors-DLxUiBhE.mjs.map} +1 -1
  52. package/dist/client/{flavors-Bwjig3k2.mjs → flavors-DkGuWvge.mjs} +11 -12
  53. package/dist/client/{flavors-Bwjig3k2.mjs.map → flavors-DkGuWvge.mjs.map} +1 -1
  54. package/dist/client/{floatingips-D98DrjA0.mjs → floatingips-DC5OrR8h.mjs} +3 -3
  55. package/dist/client/{floatingips-D98DrjA0.mjs.map → floatingips-DC5OrR8h.mjs.map} +1 -1
  56. package/dist/client/{hooks-BsbKkpZc.mjs → hooks-D0wGUhRF.mjs} +2 -2
  57. package/dist/client/{hooks-BsbKkpZc.mjs.map → hooks-D0wGUhRF.mjs.map} +1 -1
  58. package/dist/client/{images-CfBrglGJ.mjs → images-D9nfOtSC.mjs} +5 -5
  59. package/dist/client/{images-CfBrglGJ.mjs.map → images-D9nfOtSC.mjs.map} +1 -1
  60. package/dist/client/{images-CD7DNwru.mjs → images-h9i7S4LN.mjs} +2 -2
  61. package/dist/client/{images-CD7DNwru.mjs.map → images-h9i7S4LN.mjs.map} +1 -1
  62. package/dist/client/index.js +302 -502
  63. package/dist/client/index.js.map +1 -1
  64. package/dist/client/{objects-CEBrL7k-.mjs → objects-B3Z8h4RU.mjs} +2 -2
  65. package/dist/client/{objects-CEBrL7k-.mjs.map → objects-B3Z8h4RU.mjs.map} +1 -1
  66. package/dist/client/{objects-DvIxpzGI.mjs → objects-CGOfO00N.mjs} +3 -3
  67. package/dist/client/{objects-DvIxpzGI.mjs.map → objects-CGOfO00N.mjs.map} +1 -1
  68. package/dist/client/{pca-ZgGU0UPF.mjs → pca-C7cMT8fW.mjs} +2 -2
  69. package/dist/client/{pca-ZgGU0UPF.mjs.map → pca-C7cMT8fW.mjs.map} +1 -1
  70. package/dist/client/{pca-CpMqoF00.mjs → pca-Nppb8aVa.mjs} +5 -5
  71. package/dist/client/{pca-CpMqoF00.mjs.map → pca-Nppb8aVa.mjs.map} +1 -1
  72. package/dist/client/routeInfo-CdTRlSxv.mjs +32 -0
  73. package/dist/client/routeInfo-CdTRlSxv.mjs.map +1 -0
  74. package/dist/client/routes-Bz4zb2H4.mjs +10 -0
  75. package/dist/client/routes-Bz4zb2H4.mjs.map +1 -0
  76. package/dist/client/routes-CaqfgBYu.mjs +112 -0
  77. package/dist/client/routes-CaqfgBYu.mjs.map +1 -0
  78. package/dist/client/{securitygroups-BwhVyNmZ.mjs → securitygroups-JMvcJLpb.mjs} +2 -2
  79. package/dist/client/{securitygroups-BwhVyNmZ.mjs.map → securitygroups-JMvcJLpb.mjs.map} +1 -1
  80. package/dist/client/store/AuthProvider.d.ts +10 -11
  81. package/dist/server/index.js +1 -10
  82. package/package.json +1 -2
  83. package/dist/client/AuthProvider-Cj_Btfnc.mjs +0 -56
  84. package/dist/client/AuthProvider-Cj_Btfnc.mjs.map +0 -1
  85. package/dist/client/DeleteFlavorModal-Dwm0Hh84.mjs +0 -638
  86. package/dist/client/DeleteFlavorModal-Dwm0Hh84.mjs.map +0 -1
  87. package/dist/client/_floatingIpId-E6x99cmW.mjs.map +0 -1
  88. package/dist/client/routeInfo-Ct5r4Gen.mjs +0 -56
  89. package/dist/client/routeInfo-Ct5r4Gen.mjs.map +0 -1
  90. package/dist/client/useErrorTranslation-Dc0eE8Zt.mjs +0 -83
  91. package/dist/client/useErrorTranslation-Dc0eE8Zt.mjs.map +0 -1
@@ -0,0 +1,713 @@
1
+ import { B as e, E as t, G as n, K as r, P as i, R as a, U as o, g as s, r as c, tt as l, ut as u, y as d } from "./build-DgeVmENN.mjs";
2
+ import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
3
+ import h, { Suspense as g, startTransition as _, use as v, useEffect as y, useMemo as b, useState as x } from "react";
4
+ import { Trans as S, useLingui as C } from "@lingui/react";
5
+ import { ErrorBoundary as w } from "react-error-boundary";
6
+ //#region src/client/utils/useErrorTranslation.ts
7
+ var T = () => {
8
+ let { i18n: e, _: t } = C();
9
+ return {
10
+ translateError: (t) => {
11
+ switch (t) {
12
+ case "FLAVORS_UNAUTHORIZED": return e._({ id: "1iUuTT" });
13
+ case "FLAVORS_FORBIDDEN": return e._({ id: "mSLePW" });
14
+ case "FLAVORS_NOT_FOUND": return e._({ id: "EQnVgi" });
15
+ case "FLAVORS_SERVER_ERROR": return e._({ id: "Hivb/4" });
16
+ case "FLAVORS_FETCH_FAILED": return e._({ id: "EztMB8" });
17
+ case "FLAVORS_PARSE_ERROR": return e._({ id: "t1fq6V" });
18
+ case "GET_FLAVOR_DETAILS_UNAUTHORIZED": return e._({ id: "zCD96i" });
19
+ case "GET_FLAVOR_DETAILS_FORBIDDEN": return e._({ id: "/9Squ9" });
20
+ case "GET_FLAVOR_DETAILS_NOT_FOUND": return e._({ id: "HxTYrE" });
21
+ case "GET_FLAVOR_DETAILS_SERVER_ERROR": return e._({ id: "KJC+M7" });
22
+ case "GET_FLAVOR_DETAILS_INVALID_ID": return e._({ id: "YUU0QW" });
23
+ case "GET_FLAVOR_DETAILS_PARSE_ERROR": return e._({ id: "ZUmOzn" });
24
+ case "GET_FLAVOR_DETAILS_FAILED": return e._({ id: "RCr0yv" });
25
+ case "CREATE_FLAVOR_INVALID_DATA": return e._({ id: "0kCt7e" });
26
+ case "CREATE_FLAVOR_UNAUTHORIZED": return e._({ id: "oDkgME" });
27
+ case "CREATE_FLAVOR_FORBIDDEN": return e._({ id: "cPKL6O" });
28
+ case "CREATE_FLAVOR_CONFLICT": return e._({ id: "OlmKCg" });
29
+ case "CREATE_FLAVOR_SERVER_ERROR": return e._({ id: "qaAo9Y" });
30
+ case "CREATE_FLAVOR_FAILED": return e._({ id: "QuJSSl" });
31
+ case "DELETE_FLAVOR_UNAUTHORIZED": return e._({ id: "2gH+i8" });
32
+ case "DELETE_FLAVOR_FORBIDDEN": return e._({ id: "EPMHs9" });
33
+ case "DELETE_FLAVOR_NOT_FOUND": return e._({ id: "rIi6x4" });
34
+ case "DELETE_FLAVOR_SERVER_ERROR": return e._({ id: "tASa/P" });
35
+ case "DELETE_FLAVOR_FAILED": return e._({ id: "h3P8z+" });
36
+ case "DELETE_FLAVOR_INVALID_ID": return e._({ id: "YUU0QW" });
37
+ case "CREATE_EXTRA_SPECS_UNAUTHORIZED": return e._({ id: "RTQFAw" });
38
+ case "CREATE_EXTRA_SPECS_FORBIDDEN": return e._({ id: "kGmM/p" });
39
+ case "CREATE_EXTRA_SPECS_NOT_FOUND": return e._({ id: "HxTYrE" });
40
+ case "CREATE_EXTRA_SPECS_CONFLICT": return e._({ id: "6oolxV" });
41
+ case "CREATE_EXTRA_SPECS_INVALID_DATA": return e._({ id: "JoECY1" });
42
+ case "CREATE_EXTRA_SPECS_SERVER_ERROR": return e._({ id: "jMc/mo" });
43
+ case "CREATE_EXTRA_SPECS_PARSE_ERROR": return e._({ id: "07WXfc" });
44
+ case "CREATE_EXTRA_SPECS_FAILED": return e._({ id: "7BpykL" });
45
+ case "GET_EXTRA_SPECS_UNAUTHORIZED": return e._({ id: "3nWqQW" });
46
+ case "GET_EXTRA_SPECS_FORBIDDEN": return e._({ id: "wcUecy" });
47
+ case "GET_EXTRA_SPECS_NOT_FOUND": return e._({ id: "M470oJ" });
48
+ case "GET_EXTRA_SPECS_SERVER_ERROR": return e._({ id: "tIrNgH" });
49
+ case "GET_EXTRA_SPECS_PARSE_ERROR": return e._({ id: "07WXfc" });
50
+ case "GET_EXTRA_SPECS_FAILED": return e._({ id: "lhIa6x" });
51
+ case "DELETE_EXTRA_SPEC_UNAUTHORIZED": return e._({ id: "dVdc7N" });
52
+ case "DELETE_EXTRA_SPEC_FORBIDDEN": return e._({ id: "YrAy/S" });
53
+ case "DELETE_EXTRA_SPEC_NOT_FOUND": return e._({ id: "vBUQNE" });
54
+ case "DELETE_EXTRA_SPEC_SERVER_ERROR": return e._({ id: "0kc0zi" });
55
+ case "DELETE_EXTRA_SPEC_INVALID_KEY": return e._({ id: "ylfbpz" });
56
+ case "DELETE_EXTRA_SPEC_FAILED": return e._({ id: "TfdeUd" });
57
+ case "GET_FLAVOR_ACCESS_UNAUTHORIZED": return e._({ id: "Mt6sRo" });
58
+ case "GET_FLAVOR_ACCESS_FORBIDDEN": return e._({ id: "MbKJNP" });
59
+ case "GET_FLAVOR_ACCESS_NOT_FOUND": return e._({ id: "HxTYrE" });
60
+ case "GET_FLAVOR_ACCESS_SERVER_ERROR": return e._({ id: "YsOJlj" });
61
+ case "GET_FLAVOR_ACCESS_FAILED": return e._({ id: "bISG26" });
62
+ case "ADD_TENANT_ACCESS_FAILED": return e._({ id: "rIe0oV" });
63
+ case "ADD_TENANT_ACCESS_INVALID_DATA": return e._({ id: "gztCjq" });
64
+ case "ADD_TENANT_ACCESS_UNAUTHORIZED": return e._({ id: "+Lt5cp" });
65
+ case "ADD_TENANT_ACCESS_FORBIDDEN": return e._({ id: "8s0tOH" });
66
+ case "ADD_TENANT_ACCESS_NOT_FOUND": return e._({ id: "1rPB1p" });
67
+ case "ADD_TENANT_ACCESS_CONFLICT": return e._({ id: "NRMm0E" });
68
+ case "ADD_TENANT_ACCESS_SERVER_ERROR": return e._({ id: "KoQP4F" });
69
+ case "REMOVE_TENANT_ACCESS_FAILED": return e._({ id: "ZhVSpK" });
70
+ case "REMOVE_TENANT_ACCESS_INVALID_DATA": return e._({ id: "gztCjq" });
71
+ case "REMOVE_TENANT_ACCESS_UNAUTHORIZED": return e._({ id: "78+riR" });
72
+ case "REMOVE_TENANT_ACCESS_FORBIDDEN": return e._({ id: "qs+BrU" });
73
+ case "REMOVE_TENANT_ACCESS_NOT_FOUND": return e._({ id: "Do5/uH" });
74
+ case "REMOVE_TENANT_ACCESS_CONFLICT": return e._({ id: "+nQTmZ" });
75
+ case "REMOVE_TENANT_ACCESS_SERVER_ERROR": return e._({ id: "0BSSYj" });
76
+ case "COMPUTE_SERVICE_UNAVAILABLE": return e._({ id: "gGdfWx" });
77
+ case "COMPUTE_SERVICE_CONNECTION_FAILED": return e._({ id: "Qg4EG6" });
78
+ default: return e._({ id: "byKna+" });
79
+ }
80
+ },
81
+ isRetryableError: (e) => ["FLAVORS_SERVER_ERROR", "FLAVORS_FETCH_FAILED"].includes(e)
82
+ };
83
+ }, E = ({ specKey: e, value: r, errors: i, isLoading: a, onKeyChange: s, onValueChange: c, onSave: l, onCancel: f }) => {
84
+ let { i18n: h, _: g } = C();
85
+ return /*#__PURE__*/ m(t, { children: [
86
+ /*#__PURE__*/ p(n, {
87
+ className: "pl-0",
88
+ children: /*#__PURE__*/ p(o, {
89
+ value: e,
90
+ onChange: (e) => s(e.target.value),
91
+ placeholder: h._({ id: "wPrtGF" }),
92
+ errortext: i.key,
93
+ required: !0
94
+ })
95
+ }),
96
+ /*#__PURE__*/ p(n, {
97
+ className: "pl-0",
98
+ children: /*#__PURE__*/ p(o, {
99
+ value: r,
100
+ onChange: (e) => c(e.target.value),
101
+ placeholder: h._({ id: "pubQie" }),
102
+ errortext: i.value,
103
+ required: !0
104
+ })
105
+ }),
106
+ /*#__PURE__*/ p(n, { children: /*#__PURE__*/ m(u, { children: [/*#__PURE__*/ p(d, {
107
+ icon: "check",
108
+ onClick: l,
109
+ variant: "primary",
110
+ title: h._({ id: "TyODHt" }),
111
+ disabled: a
112
+ }), /*#__PURE__*/ p(d, {
113
+ icon: "cancel",
114
+ onClick: f,
115
+ title: h._({ id: "dEgA5A" }),
116
+ disabled: a
117
+ })] }) })
118
+ ] });
119
+ }, D = ({ specKey: e, value: i, isDeleting: a, onDelete: o, canDelete: s }) => {
120
+ let { i18n: c, _: u } = C(), [h, g] = x(!1);
121
+ return y(() => {
122
+ if (h) {
123
+ let e = setTimeout(() => {
124
+ g(!1);
125
+ }, 3e3);
126
+ return () => clearTimeout(e);
127
+ }
128
+ }, [h]), /*#__PURE__*/ m(t, { children: [
129
+ /*#__PURE__*/ p(n, { children: e }),
130
+ /*#__PURE__*/ p(n, {
131
+ className: "break-all",
132
+ children: i
133
+ }),
134
+ /*#__PURE__*/ p(n, { children: a ? /*#__PURE__*/ p(l, {
135
+ distribution: "center",
136
+ alignment: "center",
137
+ children: /*#__PURE__*/ p(r, { variant: "primary" })
138
+ }) : /*#__PURE__*/ p(l, {
139
+ distribution: "end",
140
+ alignment: "end",
141
+ children: s ? h ? /*#__PURE__*/ p(d, {
142
+ variant: "primary-danger",
143
+ onClick: () => {
144
+ g(!1), o();
145
+ },
146
+ title: c._({ id: "cnGeoo" }),
147
+ "aria-label": c._({ id: "cnGeoo" }),
148
+ "data-testid": "confirm-deletion",
149
+ disabled: a,
150
+ children: c._({ id: "cnGeoo" })
151
+ }) : /*#__PURE__*/ p(d, {
152
+ icon: "deleteForever",
153
+ onClick: () => g(!0),
154
+ title: c._({
155
+ id: "2G6hLq",
156
+ values: { specKey: e }
157
+ }),
158
+ "aria-label": c._({
159
+ id: "2G6hLq",
160
+ values: { specKey: e }
161
+ }),
162
+ "data-testid": `delete-${e}`,
163
+ disabled: a
164
+ }) : /*#__PURE__*/ p(f, {})
165
+ }) })
166
+ ] });
167
+ }, O = (e, t) => e.compute.canUser.query({
168
+ project_id: t,
169
+ permission: ["flavor_specs:create", "flavor_specs:delete"]
170
+ }).then(([e, t]) => ({
171
+ canCreate: e,
172
+ canDelete: t
173
+ })), k = (e, t, n) => e.compute.getExtraSpecs.query({
174
+ project_id: t,
175
+ flavorId: n
176
+ });
177
+ function A() {
178
+ return /*#__PURE__*/ p(t, { children: /*#__PURE__*/ p(n, {
179
+ colSpan: 3,
180
+ children: /*#__PURE__*/ p(l, {
181
+ distribution: "center",
182
+ alignment: "center",
183
+ children: /*#__PURE__*/ p(r, { variant: "primary" })
184
+ })
185
+ }) });
186
+ }
187
+ function j({ error: t }) {
188
+ let { i18n: n, _: r } = C(), { translateError: i } = T();
189
+ return /*#__PURE__*/ p(e, {
190
+ variant: "error",
191
+ text: t instanceof Error ? i(t.message) : n._({ id: "W5A0Ly" })
192
+ });
193
+ }
194
+ function M({ permissionsPromise: e, extraSpecsPromise: r, client: o, project: s, flavor: c, onSpecsUpdate: u, isAddingSpec: h, setIsAddingSpec: g, setMessage: _ }) {
195
+ let { i18n: y, _: b } = C(), { translateError: S } = T(), w = v(e), [O, k] = x(v(r)), [A, j] = x(""), [M, N] = x(""), [P, F] = x({}), [I, L] = x(null), R = () => {
196
+ let e = A.trim(), t = M.trim(), n = {};
197
+ return e ? Object.keys(O).includes(e) && (n.key = "Key already exists.") : n.key = "Key is required.", t || (n.value = "Value is required."), F(n), Object.keys(n).length === 0;
198
+ }, z = () => {
199
+ j(""), N(""), F({});
200
+ }, B = async () => {
201
+ if (!R()) {
202
+ _({
203
+ text: y._({ id: "CBFSfX" }),
204
+ type: "error"
205
+ });
206
+ return;
207
+ }
208
+ try {
209
+ let e = A.trim(), t = M.trim();
210
+ await o.compute.createExtraSpecs.mutate({
211
+ project_id: s,
212
+ flavorId: c.id,
213
+ extra_specs: { [e]: t }
214
+ });
215
+ let n = {
216
+ [e]: t,
217
+ ...O
218
+ };
219
+ k(n), u(n), _({
220
+ text: y._({
221
+ id: "2mbisJ",
222
+ values: { trimmedKey: e }
223
+ }),
224
+ type: "info"
225
+ }), z(), g(!1);
226
+ } catch (e) {
227
+ _({
228
+ text: S(e instanceof Error ? e.message : "Failed to create extra spec"),
229
+ type: "error"
230
+ });
231
+ }
232
+ }, V = async (e) => {
233
+ try {
234
+ L(e), await o.compute.deleteExtraSpec.mutate({
235
+ project_id: s,
236
+ flavorId: c.id,
237
+ key: e
238
+ });
239
+ let t = { ...O };
240
+ delete t[e], k(t), u(t), _({
241
+ text: y._({
242
+ id: "7UlHhT",
243
+ values: { keyToDelete: e }
244
+ }),
245
+ type: "info"
246
+ });
247
+ } catch (t) {
248
+ _({
249
+ text: S(t instanceof Error ? t.message : `Failed to delete extra spec "${e}"`),
250
+ type: "error"
251
+ });
252
+ } finally {
253
+ L(null);
254
+ }
255
+ }, H = (e) => {
256
+ j(e), P.key && F((e) => ({
257
+ ...e,
258
+ key: void 0
259
+ }));
260
+ }, U = (e) => {
261
+ N(e), P.value && F((e) => ({
262
+ ...e,
263
+ value: void 0
264
+ }));
265
+ }, W = Object.keys(O).length === 0 && !h;
266
+ return /*#__PURE__*/ m(f, { children: [w.canCreate && /*#__PURE__*/ p(l, {
267
+ direction: "horizontal",
268
+ className: "bg-theme-background-lvl-1 justify-end p-2",
269
+ children: /*#__PURE__*/ p(d, {
270
+ label: y._({ id: "u7En0V" }),
271
+ "data-testid": "addExtraButton",
272
+ onClick: () => g(!0),
273
+ variant: "primary",
274
+ disabled: h
275
+ })
276
+ }), /*#__PURE__*/ m(i, {
277
+ columns: 3,
278
+ children: [
279
+ /*#__PURE__*/ m(t, { children: [
280
+ /*#__PURE__*/ p(a, { children: y._({ id: "7sMeHQ" }) }),
281
+ /*#__PURE__*/ p(a, { children: y._({ id: "wMHvYH" }) }),
282
+ /*#__PURE__*/ p(a, {})
283
+ ] }),
284
+ h && /*#__PURE__*/ p(E, {
285
+ specKey: A,
286
+ value: M,
287
+ errors: P,
288
+ isLoading: !1,
289
+ onKeyChange: H,
290
+ onValueChange: U,
291
+ onSave: B,
292
+ onCancel: () => {
293
+ z(), g(!1), _(null);
294
+ }
295
+ }),
296
+ Object.entries(O).map(([e, t]) => /*#__PURE__*/ p(D, {
297
+ specKey: e,
298
+ value: t,
299
+ isDeleting: I === e,
300
+ onDelete: () => V(e),
301
+ canDelete: w.canDelete
302
+ }, e)),
303
+ W && /*#__PURE__*/ p(t, { children: /*#__PURE__*/ p(n, {
304
+ colSpan: 3,
305
+ className: "text-theme-default py-4 text-center",
306
+ children: y._({ id: "S3olSf" })
307
+ }) })
308
+ ]
309
+ })] });
310
+ }
311
+ var N = ({ client: t, isOpen: n, onClose: r, project: i, flavor: a, canEdit: o }) => {
312
+ let { i18n: s, _: l } = C(), [u, d] = x(null), [f, v] = x(!1), [y, b] = x(null), [S, T] = x(o), E = h.useMemo(() => n ? o === void 0 ? O(t, i) : Promise.resolve({
313
+ canCreate: o,
314
+ canDelete: o
315
+ }) : null, [
316
+ t,
317
+ i,
318
+ n,
319
+ o
320
+ ]);
321
+ h.useEffect(() => {
322
+ if (o !== void 0) {
323
+ T(o);
324
+ return;
325
+ }
326
+ E?.then(({ canCreate: e, canDelete: t }) => T(e || t));
327
+ }, [E, o]);
328
+ let D = S ? s._({ id: "SIfYq6" }) : s._({ id: "6GBt0m" });
329
+ return h.useEffect(() => {
330
+ n && a?.id && _(() => {
331
+ b(k(t, i, a.id));
332
+ });
333
+ }, [
334
+ n,
335
+ a?.id,
336
+ t,
337
+ i
338
+ ]), !n || !a || !E || !y ? null : /*#__PURE__*/ p(c, {
339
+ onCancel: () => {
340
+ d(null), v(!1), b(null), r();
341
+ },
342
+ title: D,
343
+ open: n,
344
+ size: "xl",
345
+ children: /*#__PURE__*/ m("div", { children: [u && /*#__PURE__*/ p(e, {
346
+ onDismiss: () => d(null),
347
+ text: u.text,
348
+ variant: u.type,
349
+ className: "mb-4"
350
+ }), /*#__PURE__*/ p(w, {
351
+ fallbackRender: ({ error: e }) => /*#__PURE__*/ p(j, { error: e }),
352
+ children: /*#__PURE__*/ p(g, {
353
+ fallback: /*#__PURE__*/ p(A, {}),
354
+ children: /*#__PURE__*/ p(M, {
355
+ permissionsPromise: E,
356
+ extraSpecsPromise: y,
357
+ client: t,
358
+ project: i,
359
+ flavor: a,
360
+ onSpecsUpdate: (e) => {
361
+ _(() => {
362
+ b(Promise.resolve(e));
363
+ });
364
+ },
365
+ isAddingSpec: f,
366
+ setIsAddingSpec: v,
367
+ message: u,
368
+ setMessage: d
369
+ })
370
+ })
371
+ })] })
372
+ });
373
+ }, P = ({ tenantId: e, errors: r, isLoading: i, onTenantIdChange: a, onSave: s, onCancel: c }) => {
374
+ let { i18n: l, _: f } = C();
375
+ return /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(n, {
376
+ className: "pl-0",
377
+ children: /*#__PURE__*/ p(o, {
378
+ value: e,
379
+ onChange: (e) => a(e.target.value),
380
+ placeholder: l._({ id: "wa1Bcq" }),
381
+ errortext: r.tenantId,
382
+ required: !0
383
+ })
384
+ }), /*#__PURE__*/ p(n, { children: /*#__PURE__*/ m(u, { children: [/*#__PURE__*/ p(d, {
385
+ icon: "check",
386
+ onClick: s,
387
+ variant: "primary",
388
+ title: l._({ id: "q0Rla3" }),
389
+ disabled: i
390
+ }), /*#__PURE__*/ p(d, {
391
+ icon: "cancel",
392
+ onClick: c,
393
+ title: l._({ id: "dEgA5A" }),
394
+ disabled: i
395
+ })] }) })] });
396
+ }, F = ({ access: e, isDeleting: i, onDelete: a, canDelete: o }) => {
397
+ let { i18n: s, _: c } = C(), [u, h] = x(!1);
398
+ y(() => {
399
+ if (u) {
400
+ let e = setTimeout(() => {
401
+ h(!1);
402
+ }, 3e3);
403
+ return () => clearTimeout(e);
404
+ }
405
+ }, [u]);
406
+ let g = () => {
407
+ h(!1), a();
408
+ };
409
+ return /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(n, {
410
+ className: "break-all",
411
+ children: e.tenant_id
412
+ }), /*#__PURE__*/ p(n, { children: i ? /*#__PURE__*/ p(l, {
413
+ distribution: "center",
414
+ alignment: "center",
415
+ children: /*#__PURE__*/ p(r, { variant: "primary" })
416
+ }) : /*#__PURE__*/ p(l, {
417
+ distribution: "end",
418
+ alignment: "end",
419
+ children: (() => {
420
+ if (!o) return /*#__PURE__*/ p(f, {});
421
+ if (u) return /*#__PURE__*/ p(d, {
422
+ variant: "primary-danger",
423
+ onClick: g,
424
+ title: s._({ id: "w9+8d7" }),
425
+ "aria-label": s._({ id: "w9+8d7" }),
426
+ "data-testid": "confirm-removal",
427
+ disabled: i,
428
+ children: s._({ id: "t/YqKh" })
429
+ });
430
+ {
431
+ let t = e.tenant_id;
432
+ return /*#__PURE__*/ p(d, {
433
+ icon: "deleteForever",
434
+ onClick: () => h(!0),
435
+ title: s._({
436
+ id: "tfxu04",
437
+ values: { tenantId: t }
438
+ }),
439
+ "aria-label": s._({
440
+ id: "tfxu04",
441
+ values: { tenantId: t }
442
+ }),
443
+ "data-testid": `remove-${t}`,
444
+ disabled: i
445
+ });
446
+ }
447
+ })()
448
+ }) })] });
449
+ }, I = (e, t) => e.compute.canUser.query({
450
+ project_id: t,
451
+ permission: ["flavors:add_project", "flavors:remove_project"]
452
+ }).then(([e, t]) => ({
453
+ canAdd: e,
454
+ canRemove: t
455
+ })), L = (e, t, n) => e.compute.getFlavorAccess.query({
456
+ project_id: t,
457
+ flavorId: n
458
+ });
459
+ function R() {
460
+ return /*#__PURE__*/ p(t, { children: /*#__PURE__*/ p(n, {
461
+ colSpan: 2,
462
+ children: /*#__PURE__*/ p(l, {
463
+ distribution: "center",
464
+ alignment: "center",
465
+ children: /*#__PURE__*/ p(r, { variant: "primary" })
466
+ })
467
+ }) });
468
+ }
469
+ function z({ permissionsPromise: e, flavorAccessPromise: r, client: o, project: s, flavor: c, onAccessUpdate: u, isAddingAccess: h, setIsAddingAccess: g, setMessage: _ }) {
470
+ let { i18n: y, _: b } = C(), { translateError: S } = T(), w = v(e), E = v(r), [D, O] = x(""), [k, A] = x({}), [j, M] = x(/* @__PURE__ */ new Set()), [N, I] = x(!1), L = c["os-flavor-access:is_public"] !== !1, R = E.length === 0 && !h, z = () => {
471
+ let e = D.trim(), t = {};
472
+ return e ? E.some((t) => t.tenant_id === e) && (t.tenantId = "This tenant already has access to this flavor.") : t.tenantId = "Tenant ID is required.", A(t), Object.keys(t).length === 0;
473
+ }, B = () => {
474
+ O(""), A({});
475
+ }, V = async () => {
476
+ if (!z()) {
477
+ _({
478
+ text: y._({ id: "CBFSfX" }),
479
+ type: "error"
480
+ });
481
+ return;
482
+ }
483
+ I(!0);
484
+ try {
485
+ let e = D.trim();
486
+ u(await o.compute.addTenantAccess.mutate({
487
+ project_id: s,
488
+ flavorId: c.id,
489
+ targetProjectId: e
490
+ })), _({
491
+ text: y._({
492
+ id: "7flw0l",
493
+ values: { trimmedTenantId: e }
494
+ }),
495
+ type: "info"
496
+ }), B(), g(!1);
497
+ } catch (e) {
498
+ _({
499
+ text: S(e?.message || "Failed to add tenant access"),
500
+ type: "error"
501
+ });
502
+ } finally {
503
+ I(!1);
504
+ }
505
+ }, H = async (e) => {
506
+ M((t) => new Set(t).add(e));
507
+ try {
508
+ u(await o.compute.removeTenantAccess.mutate({
509
+ project_id: s,
510
+ flavorId: c.id,
511
+ targetProjectId: e
512
+ })), _({
513
+ text: y._({
514
+ id: "rvXsSb",
515
+ values: { tenantIdToRemove: e }
516
+ }),
517
+ type: "info"
518
+ });
519
+ } catch (e) {
520
+ _({
521
+ text: S(e?.message || "Failed to remove tenant access"),
522
+ type: "error"
523
+ });
524
+ } finally {
525
+ M((t) => {
526
+ let n = new Set(t);
527
+ return n.delete(e), n;
528
+ });
529
+ }
530
+ };
531
+ return L ? /*#__PURE__*/ m(i, {
532
+ columns: 2,
533
+ children: [/*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "T9Mtpi" }) }), /*#__PURE__*/ p(a, { children: " " })] }), /*#__PURE__*/ p(t, { children: /*#__PURE__*/ p(n, {
534
+ colSpan: 2,
535
+ className: "text-theme-default py-4 text-center",
536
+ children: y._({ id: "9x6EkK" })
537
+ }) })]
538
+ }) : /*#__PURE__*/ m(f, { children: [w.canAdd && /*#__PURE__*/ p(l, {
539
+ direction: "horizontal",
540
+ className: "bg-theme-background-lvl-1 justify-end p-2",
541
+ children: /*#__PURE__*/ p(d, {
542
+ label: y._({ id: "q0Rla3" }),
543
+ "data-testid": "addTenantButton",
544
+ onClick: () => g(!0),
545
+ variant: "primary",
546
+ disabled: h
547
+ })
548
+ }), /*#__PURE__*/ m(i, {
549
+ columns: 2,
550
+ children: [
551
+ /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "T9Mtpi" }) }), /*#__PURE__*/ p(a, {})] }),
552
+ h && /*#__PURE__*/ p(P, {
553
+ tenantId: D,
554
+ errors: k,
555
+ isLoading: N,
556
+ onTenantIdChange: (e) => {
557
+ O(e), k.tenantId && A((e) => ({
558
+ ...e,
559
+ tenantId: void 0
560
+ }));
561
+ },
562
+ onSave: V,
563
+ onCancel: () => {
564
+ B(), g(!1), _(null);
565
+ }
566
+ }),
567
+ E.map((e) => /*#__PURE__*/ p(F, {
568
+ access: e,
569
+ isDeleting: j.has(e.tenant_id),
570
+ onDelete: () => H(e.tenant_id),
571
+ canDelete: w.canRemove
572
+ }, e.tenant_id)),
573
+ R && /*#__PURE__*/ p(t, { children: /*#__PURE__*/ p(n, {
574
+ colSpan: 2,
575
+ className: "text-theme-default py-4 text-center",
576
+ children: y._({ id: "Gyd3No" })
577
+ }) })
578
+ ]
579
+ })] });
580
+ }
581
+ var B = ({ client: t, isOpen: n, onClose: r, project: i, flavor: a }) => {
582
+ let { i18n: o, _: s } = C(), { translateError: l } = T(), [u, d] = x(null), [f, h] = x(!1), v = b(() => n ? I(t, i) : null, [
583
+ t,
584
+ i,
585
+ n
586
+ ]), S = b(() => !n || !a?.id ? null : L(t, i, a.id).then((e) => e.filter((e, t, n) => n.findIndex((t) => t.tenant_id === e.tenant_id) === t)).catch((e) => (d({
587
+ text: l(e?.message || "GET_FLAVOR_ACCESS_FAILED"),
588
+ type: "error"
589
+ }), [])), [
590
+ n,
591
+ a?.id,
592
+ t,
593
+ i
594
+ ]);
595
+ y(() => {
596
+ n && d(null);
597
+ }, [n, a?.id]);
598
+ let [w, E] = x(null), D = `${n}-${a?.id}`, O = w?.key === D ? w.promise : S, k = () => {
599
+ d(null), h(!1), E(null), r();
600
+ }, A = (e) => {
601
+ let t = e.filter((e, t, n) => n.findIndex((t) => t.tenant_id === e.tenant_id) === t);
602
+ _(() => {
603
+ E({
604
+ key: D,
605
+ promise: Promise.resolve(t)
606
+ });
607
+ });
608
+ };
609
+ if (!n || !a || !v || !O) return null;
610
+ let j = a.name;
611
+ return /*#__PURE__*/ p(c, {
612
+ onCancel: k,
613
+ title: o._({
614
+ id: "6Rnrsz",
615
+ values: { flavorName: j }
616
+ }),
617
+ open: n,
618
+ size: "xl",
619
+ children: /*#__PURE__*/ m("div", { children: [u && /*#__PURE__*/ p(e, {
620
+ onDismiss: () => d(null),
621
+ text: u.text,
622
+ variant: u.type,
623
+ className: "mb-4",
624
+ dismissible: !0
625
+ }), /*#__PURE__*/ p(g, {
626
+ fallback: /*#__PURE__*/ p(R, {}),
627
+ children: /*#__PURE__*/ p(z, {
628
+ permissionsPromise: v,
629
+ flavorAccessPromise: O,
630
+ client: t,
631
+ project: i,
632
+ flavor: a,
633
+ onAccessUpdate: A,
634
+ isAddingAccess: f,
635
+ setIsAddingAccess: h,
636
+ setMessage: d
637
+ })
638
+ })] })
639
+ });
640
+ }, V = ({ client: o, isOpen: f, onClose: h, project: g, flavor: _, onSuccess: v }) => {
641
+ let { i18n: y, _: b } = C(), { translateError: w } = T(), [E, D] = x(!1), [O, k] = x(null), A = async () => {
642
+ if (!_?.id) {
643
+ k(y._({ id: "NlcF/v" }));
644
+ return;
645
+ }
646
+ k(null);
647
+ try {
648
+ D(!0), await o.compute.deleteFlavor.mutate({
649
+ project_id: g,
650
+ flavorId: _.id
651
+ }), v(), j();
652
+ } catch (e) {
653
+ k(e?.message ? w(e.message) : y._({ id: "8zAn1f" }));
654
+ } finally {
655
+ D(!1);
656
+ }
657
+ }, j = () => {
658
+ k(null), h();
659
+ };
660
+ return /*#__PURE__*/ m(c, {
661
+ onCancel: j,
662
+ title: y._({ id: "JT3I1g" }),
663
+ open: f,
664
+ onConfirm: A,
665
+ modalFooter: /*#__PURE__*/ p(s, {
666
+ className: "flex justify-end",
667
+ children: /*#__PURE__*/ m(u, { children: [/*#__PURE__*/ p(d, {
668
+ variant: "primary-danger",
669
+ onClick: A,
670
+ disabled: E,
671
+ children: E ? /*#__PURE__*/ p(r, { size: "small" }) : /*#__PURE__*/ p(S, { id: "cnGeoo" })
672
+ }), /*#__PURE__*/ p(d, {
673
+ variant: "default",
674
+ onClick: j,
675
+ children: /*#__PURE__*/ p(S, { id: "dEgA5A" })
676
+ })] })
677
+ }),
678
+ children: [E && /*#__PURE__*/ p(l, {
679
+ distribution: "center",
680
+ alignment: "center",
681
+ children: /*#__PURE__*/ p(r, { variant: "primary" })
682
+ }), !E && /*#__PURE__*/ m("div", { children: [
683
+ O && /*#__PURE__*/ p(e, {
684
+ onDismiss: () => {
685
+ k(null);
686
+ },
687
+ text: O,
688
+ variant: "error",
689
+ className: "mb-4"
690
+ }),
691
+ /*#__PURE__*/ p(e, {
692
+ text: y._({ id: "QQ8wUG" }),
693
+ variant: "danger",
694
+ className: "mb-4"
695
+ }),
696
+ _ && /*#__PURE__*/ m(i, {
697
+ columns: 2,
698
+ children: [
699
+ /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "6YtxFj" }) }), /*#__PURE__*/ p(n, { children: _.name })] }),
700
+ /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "S0kLOH" }) }), /*#__PURE__*/ p(n, { children: _.id })] }),
701
+ /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "MZGbkp" }) }), /*#__PURE__*/ p(n, { children: _.vcpus })] }),
702
+ /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "RGhYAo" }) }), /*#__PURE__*/ m(n, { children: [_.ram, " MiB"] })] }),
703
+ /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "sPFHpI" }) }), /*#__PURE__*/ m(n, { children: [_.disk, " GiB"] })] }),
704
+ _.swap && /*#__PURE__*/ m(t, { children: [/*#__PURE__*/ p(a, { children: y._({ id: "vH2C/2" }) }), /*#__PURE__*/ m(n, { children: [_.swap, " MiB"] })] })
705
+ ]
706
+ })
707
+ ] })]
708
+ });
709
+ };
710
+ //#endregion
711
+ export { T as i, B as n, N as r, V as t };
712
+
713
+ //# sourceMappingURL=DeleteFlavorModal-lFMExcq_.mjs.map