@cobaltcore-dev/aurora 2.1.1 → 2.2.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 (173) hide show
  1. package/README.md +31 -25
  2. package/dist/client/AuroraApp.d.ts +9 -2
  3. package/dist/client/context/AppConfigContext.d.ts +44 -0
  4. package/dist/client/index.d.ts +2 -0
  5. package/dist/client/index.js +41221 -845
  6. package/dist/client/index.js.map +1 -1
  7. package/dist/client/trpcClient.d.ts +314 -0
  8. package/dist/client/utils/appConfigGating.d.ts +21 -0
  9. package/dist/server/index.d.ts +694 -3
  10. package/dist/server/index.js +1748 -722
  11. package/package.json +3 -3
  12. package/dist/client/AuthProvider-CVSAwW9f.mjs +0 -83
  13. package/dist/client/AuthProvider-CVSAwW9f.mjs.map +0 -1
  14. package/dist/client/ContentHeader-fKKZVu-o.mjs +0 -116
  15. package/dist/client/ContentHeader-fKKZVu-o.mjs.map +0 -1
  16. package/dist/client/DeleteFlavorModal-C4nAi7gY.mjs +0 -724
  17. package/dist/client/DeleteFlavorModal-C4nAi7gY.mjs.map +0 -1
  18. package/dist/client/DynamicBreadcrumbContext-CVcUQFou.mjs +0 -26
  19. package/dist/client/DynamicBreadcrumbContext-CVcUQFou.mjs.map +0 -1
  20. package/dist/client/FiltersInput-Becwxo_J.mjs +0 -85
  21. package/dist/client/FiltersInput-Becwxo_J.mjs.map +0 -1
  22. package/dist/client/FloatingIpActionModals-Cq10WljB.mjs +0 -466
  23. package/dist/client/FloatingIpActionModals-Cq10WljB.mjs.map +0 -1
  24. package/dist/client/RouteIdLevelDefaultError-DPF_x2tG.mjs +0 -26
  25. package/dist/client/RouteIdLevelDefaultError-DPF_x2tG.mjs.map +0 -1
  26. package/dist/client/Slot-CWb612-_.mjs +0 -28
  27. package/dist/client/Slot-CWb612-_.mjs.map +0 -1
  28. package/dist/client/SortInput-4g7nSTHW.mjs +0 -34
  29. package/dist/client/SortInput-4g7nSTHW.mjs.map +0 -1
  30. package/dist/client/StorageNotFound-B-zVinVD.mjs +0 -30
  31. package/dist/client/StorageNotFound-B-zVinVD.mjs.map +0 -1
  32. package/dist/client/TwoColumnDescriptionList-DKS42RKa.mjs +0 -28
  33. package/dist/client/TwoColumnDescriptionList-DKS42RKa.mjs.map +0 -1
  34. package/dist/client/_-CAsCx-Ay.mjs +0 -6
  35. package/dist/client/_-CAsCx-Ay.mjs.map +0 -1
  36. package/dist/client/_auth-SrDjHL6j.mjs +0 -12
  37. package/dist/client/_auth-SrDjHL6j.mjs.map +0 -1
  38. package/dist/client/_flavorId-BPvssEzn.mjs +0 -277
  39. package/dist/client/_flavorId-BPvssEzn.mjs.map +0 -1
  40. package/dist/client/_flavorId-CFUBcU-l.mjs +0 -27
  41. package/dist/client/_flavorId-CFUBcU-l.mjs.map +0 -1
  42. package/dist/client/_flavorId-CZcIp0Ih.mjs +0 -22
  43. package/dist/client/_flavorId-CZcIp0Ih.mjs.map +0 -1
  44. package/dist/client/_floatingIpId-B8r64AL9.mjs +0 -196
  45. package/dist/client/_floatingIpId-B8r64AL9.mjs.map +0 -1
  46. package/dist/client/_floatingIpId-lEobpOER.mjs +0 -26
  47. package/dist/client/_floatingIpId-lEobpOER.mjs.map +0 -1
  48. package/dist/client/_imageId-BAezmV0Y.mjs +0 -526
  49. package/dist/client/_imageId-BAezmV0Y.mjs.map +0 -1
  50. package/dist/client/_imageId-D-jqz3e3.mjs +0 -40
  51. package/dist/client/_imageId-D-jqz3e3.mjs.map +0 -1
  52. package/dist/client/_imageId-gMdrdnVt.mjs +0 -22
  53. package/dist/client/_imageId-gMdrdnVt.mjs.map +0 -1
  54. package/dist/client/_projectId-BYccdAtX.mjs +0 -77
  55. package/dist/client/_projectId-BYccdAtX.mjs.map +0 -1
  56. package/dist/client/_projectId-CBjZC1tv.mjs +0 -283
  57. package/dist/client/_projectId-CBjZC1tv.mjs.map +0 -1
  58. package/dist/client/_projectId-CLEa1zgw.mjs +0 -30
  59. package/dist/client/_projectId-CLEa1zgw.mjs.map +0 -1
  60. package/dist/client/_projectId-D3VOH5lN.mjs +0 -94
  61. package/dist/client/_projectId-D3VOH5lN.mjs.map +0 -1
  62. package/dist/client/_securityGroupId-BwgZnoiR.mjs +0 -29
  63. package/dist/client/_securityGroupId-BwgZnoiR.mjs.map +0 -1
  64. package/dist/client/_securityGroupId-Cz2NUHdB.mjs +0 -1819
  65. package/dist/client/_securityGroupId-Cz2NUHdB.mjs.map +0 -1
  66. package/dist/client/_serviceType-DS8DxsrP.mjs +0 -20
  67. package/dist/client/_serviceType-DS8DxsrP.mjs.map +0 -1
  68. package/dist/client/_serviceType-M8d9rOT6.mjs +0 -6
  69. package/dist/client/_serviceType-M8d9rOT6.mjs.map +0 -1
  70. package/dist/client/_storageType-BNpP1A2N.mjs +0 -13
  71. package/dist/client/_storageType-BNpP1A2N.mjs.map +0 -1
  72. package/dist/client/_storageType-BxSGKhAI.mjs +0 -15
  73. package/dist/client/_storageType-BxSGKhAI.mjs.map +0 -1
  74. package/dist/client/_storageType-DZYCmiLt.mjs +0 -30
  75. package/dist/client/_storageType-DZYCmiLt.mjs.map +0 -1
  76. package/dist/client/_storageType-UqAMP-8d.mjs +0 -859
  77. package/dist/client/_storageType-UqAMP-8d.mjs.map +0 -1
  78. package/dist/client/_storageType-u51_7OwJ.mjs +0 -7
  79. package/dist/client/_storageType-u51_7OwJ.mjs.map +0 -1
  80. package/dist/client/about-BmQTyLWc.mjs +0 -92
  81. package/dist/client/about-BmQTyLWc.mjs.map +0 -1
  82. package/dist/client/assets/__mocks__/svgMock.d.ts +0 -3
  83. package/dist/client/aurora-CIml-f2f.mjs +0 -19
  84. package/dist/client/aurora-CIml-f2f.mjs.map +0 -1
  85. package/dist/client/build-WuxXRAqf.mjs +0 -14530
  86. package/dist/client/build-WuxXRAqf.mjs.map +0 -1
  87. package/dist/client/cn-DM4Cy3jv.mjs +0 -10
  88. package/dist/client/cn-DM4Cy3jv.mjs.map +0 -1
  89. package/dist/client/flavors-CJVSNz6R.mjs +0 -15
  90. package/dist/client/flavors-CJVSNz6R.mjs.map +0 -1
  91. package/dist/client/flavors-CflJDIEH.mjs +0 -667
  92. package/dist/client/flavors-CflJDIEH.mjs.map +0 -1
  93. package/dist/client/flavors-DWMZ6TuJ.mjs +0 -8
  94. package/dist/client/flavors-DWMZ6TuJ.mjs.map +0 -1
  95. package/dist/client/floatingips-Cz9k80cc.mjs +0 -8
  96. package/dist/client/floatingips-Cz9k80cc.mjs.map +0 -1
  97. package/dist/client/floatingips-DXnRlLvV.mjs +0 -551
  98. package/dist/client/floatingips-DXnRlLvV.mjs.map +0 -1
  99. package/dist/client/floatingips-HRbuLxiN.mjs +0 -22
  100. package/dist/client/floatingips-HRbuLxiN.mjs.map +0 -1
  101. package/dist/client/floatingips-nN1kQmsu.mjs +0 -14
  102. package/dist/client/floatingips-nN1kQmsu.mjs.map +0 -1
  103. package/dist/client/formatBytes-CZv_XyCY.mjs +0 -38
  104. package/dist/client/formatBytes-CZv_XyCY.mjs.map +0 -1
  105. package/dist/client/helpers-1PpYf-fC.mjs +0 -6
  106. package/dist/client/helpers-1PpYf-fC.mjs.map +0 -1
  107. package/dist/client/hooks-D0yKIumu.mjs +0 -22
  108. package/dist/client/hooks-D0yKIumu.mjs.map +0 -1
  109. package/dist/client/imageHelpers-DBhL2ebL.mjs +0 -1272
  110. package/dist/client/imageHelpers-DBhL2ebL.mjs.map +0 -1
  111. package/dist/client/images-BsylWUiH.mjs +0 -2011
  112. package/dist/client/images-BsylWUiH.mjs.map +0 -1
  113. package/dist/client/images-NBf2bV43.mjs +0 -8
  114. package/dist/client/images-NBf2bV43.mjs.map +0 -1
  115. package/dist/client/images-zQq1nSVv.mjs +0 -15
  116. package/dist/client/images-zQq1nSVv.mjs.map +0 -1
  117. package/dist/client/md-kvaGCNAK.mjs +0 -336
  118. package/dist/client/md-kvaGCNAK.mjs.map +0 -1
  119. package/dist/client/network-DuZm76BZ.mjs +0 -8
  120. package/dist/client/network-DuZm76BZ.mjs.map +0 -1
  121. package/dist/client/objects-BudUAfWY.mjs +0 -12909
  122. package/dist/client/objects-BudUAfWY.mjs.map +0 -1
  123. package/dist/client/objects-Dc7sKUr8.mjs +0 -67
  124. package/dist/client/objects-Dc7sKUr8.mjs.map +0 -1
  125. package/dist/client/objects-Dw7oeTq2.mjs +0 -80
  126. package/dist/client/objects-Dw7oeTq2.mjs.map +0 -1
  127. package/dist/client/objects-_g7nGIn5.mjs +0 -25
  128. package/dist/client/objects-_g7nGIn5.mjs.map +0 -1
  129. package/dist/client/objects-eBxvY6_n.mjs +0 -78
  130. package/dist/client/objects-eBxvY6_n.mjs.map +0 -1
  131. package/dist/client/projects-yiK0HGSA.mjs +0 -7
  132. package/dist/client/projects-yiK0HGSA.mjs.map +0 -1
  133. package/dist/client/routeInfo-DP3v74Wg.mjs +0 -19
  134. package/dist/client/routeInfo-DP3v74Wg.mjs.map +0 -1
  135. package/dist/client/routes-CJj7SR_K.mjs +0 -10
  136. package/dist/client/routes-CJj7SR_K.mjs.map +0 -1
  137. package/dist/client/routes-xofA3ksU.mjs +0 -110
  138. package/dist/client/routes-xofA3ksU.mjs.map +0 -1
  139. package/dist/client/securitygroups-CSmsBzUb.mjs +0 -581
  140. package/dist/client/securitygroups-CSmsBzUb.mjs.map +0 -1
  141. package/dist/client/securitygroups-CtKne8UQ.mjs +0 -8
  142. package/dist/client/securitygroups-CtKne8UQ.mjs.map +0 -1
  143. package/dist/client/securitygroups-T7kaNFEp.mjs +0 -15
  144. package/dist/client/securitygroups-T7kaNFEp.mjs.map +0 -1
  145. package/dist/client/securitygroups-WLB1_IM6.mjs +0 -22
  146. package/dist/client/securitygroups-WLB1_IM6.mjs.map +0 -1
  147. package/dist/client/securitygroups-o0IXZM6S.mjs +0 -14
  148. package/dist/client/securitygroups-o0IXZM6S.mjs.map +0 -1
  149. package/dist/client/serviceCatalog-B3lKWC9V.mjs +0 -6
  150. package/dist/client/serviceCatalog-B3lKWC9V.mjs.map +0 -1
  151. package/dist/client/services-D1PbooD1.mjs +0 -6
  152. package/dist/client/services-D1PbooD1.mjs.map +0 -1
  153. package/dist/client/services-DEMVtFyn.mjs +0 -9
  154. package/dist/client/services-DEMVtFyn.mjs.map +0 -1
  155. package/dist/client/storageProviders-CJ5rOh13.mjs +0 -15
  156. package/dist/client/storageProviders-CJ5rOh13.mjs.map +0 -1
  157. package/dist/client/trpcClient-D7gpR7YG.mjs +0 -71
  158. package/dist/client/trpcClient-D7gpR7YG.mjs.map +0 -1
  159. package/dist/client/useBreadcrumbs-ha3IlaxX.mjs +0 -54
  160. package/dist/client/useBreadcrumbs-ha3IlaxX.mjs.map +0 -1
  161. package/dist/client/useErrorTranslation-Dc0eE8Zt.mjs +0 -83
  162. package/dist/client/useErrorTranslation-Dc0eE8Zt.mjs.map +0 -1
  163. package/dist/client/useModal-DCs1OJh7.mjs +0 -12
  164. package/dist/client/useModal-DCs1OJh7.mjs.map +0 -1
  165. package/dist/client/useModalTracking-BYd37pXm.mjs +0 -37
  166. package/dist/client/useModalTracking-BYd37pXm.mjs.map +0 -1
  167. package/dist/client/useProjectId-DBc5lpoU.mjs +0 -11
  168. package/dist/client/useProjectId-DBc5lpoU.mjs.map +0 -1
  169. package/dist/client/useSecurityGroupPermissions--hK4aR8Y.mjs +0 -294
  170. package/dist/client/useSecurityGroupPermissions--hK4aR8Y.mjs.map +0 -1
  171. package/dist/client/useSetBreadcrumb-tn7lBaQV.mjs +0 -19
  172. package/dist/client/useSetBreadcrumb-tn7lBaQV.mjs.map +0 -1
  173. package/dist/client/utils/trpcErrors.d.ts +0 -13
@@ -1,10 +0,0 @@
1
- import { clsx as e } from "clsx";
2
- import { twMerge as t } from "tailwind-merge";
3
- //#region src/client/utils/cn.ts
4
- function n(...n) {
5
- return t(e(n));
6
- }
7
- //#endregion
8
- export { n as t };
9
-
10
- //# sourceMappingURL=cn-DM4Cy3jv.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cn-DM4Cy3jv.mjs","names":["clsx","twMerge","cn","inputs"],"sources":["../../src/client/utils/cn.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\n/**\n * A utility function that combines clsx and tailwind-merge\n *\n * This function takes multiple class values (strings, objects, arrays, etc.)\n * and combines them into a single string of CSS classes.\n * It then uses tailwind-merge to resolve any Tailwind CSS conflicts.\n *\n * @param inputs - Class values to be combined\n * @returns A string of CSS classes with Tailwind conflicts resolved\n *\n * @example\n * // Basic usage\n * cn('text-red-500', 'bg-blue-500')\n * // => 'text-red-500 bg-blue-500'\n *\n * @example\n * // With conditionals\n * cn('text-white', isError && 'bg-red-500', !isError && 'bg-blue-500')\n * // => 'text-white bg-red-500' or 'text-white bg-blue-500'\n *\n * @example\n * // Resolving conflicts\n * cn('text-red-500', 'text-blue-500')\n * // => 'text-blue-500' (the latter class wins)\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;AA4BA,SAAgBE,EAAG,GAAGC,GAAoB;CACxC,OAAOF,EAAQD,EAAKG,CAAAA,CAAAA;AACtB"}
@@ -1,15 +0,0 @@
1
- import { createFileRoute as e, lazyRouteComponent as t } from "@tanstack/react-router";
2
- import { i18n as n } from "@lingui/core";
3
- var r = e("/_auth/projects/$projectId/compute/flavors/")({
4
- staticData: {
5
- section: "compute",
6
- service: "flavors",
7
- analytics: { name: "compute.flavors.list" }
8
- },
9
- head: () => ({ meta: [{ title: n._({ id: "neiJm0" }) }] }),
10
- component: t(() => import("./flavors-CflJDIEH.mjs"), "component")
11
- });
12
- //#endregion
13
- export { r as t };
14
-
15
- //# sourceMappingURL=flavors-CJVSNz6R.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flavors-CJVSNz6R.mjs","names":["createFileRoute","t","Route","staticData","section","service","analytics","name","RouteInfo","head","meta","title","component","lazyRouteComponent","$$splitComponentImporter"],"sources":["../../src/client/routes/_auth/projects/$projectId/compute/flavors/index.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\"\nimport { t } from \"@lingui/core/macro\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { Flavors } from \"./-components/List\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeader } from \"@/client/components/ContentHeader/ContentHeader\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/compute/flavors/\")({\n staticData: {\n section: \"compute\",\n service: \"flavors\",\n analytics: {\n name: \"compute.flavors.list\",\n },\n } satisfies RouteInfo,\n head: () => ({ meta: [{ title: t`Flavors` }] }),\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n const { projectId } = Route.useParams()\n const { trpcClient } = Route.useRouteContext()\n return (\n <>\n <ContentHeader title={t`Flavors`} projectId={projectId} />\n <Flavors project={projectId} client={trpcClient!} />\n </>\n )\n}\n"],"mappings":";;AAOA,IAAaE,IAAQF,EAAgB,6CAAA,CAAA,CAA+C;CAClFG,YAAY;EACVC,SAAS;EACTC,SAAS;EACTC,WAAW,EACTC,MAAM,uBACR;CACF;CACAE,aAAa,EAAEC,MAAM,CAAC,EAAEC,OAAOV,EAAAA,EAAC,EAAA,IAAA,SAAA,CAAA,EAAU,CAAC,EAAE;CAC7CW,WAASC,0CAAA,WAAA;AACX,CAAA"}
@@ -1,667 +0,0 @@
1
- import { C as e, D as t, L as n, Q as r, S as i, T as a, V as o, X as s, ft as c, g as l, h as u, i as d, l as f, m as p, o as m, ot as h, p as g, r as _, rt as v, st as y, t as b, x } from "./build-WuxXRAqf.mjs";
2
- import { t as S } from "./flavors-CJVSNz6R.mjs";
3
- import { t as C } from "./SortInput-4g7nSTHW.mjs";
4
- import { t as w } from "./ContentHeader-fKKZVu-o.mjs";
5
- import { t as T } from "./useErrorTranslation-Dc0eE8Zt.mjs";
6
- import { a as E, i as D, n as O, r as k, t as A } from "./DeleteFlavorModal-C4nAi7gY.mjs";
7
- import { Fragment as j, jsx as M, jsxs as N } from "react/jsx-runtime";
8
- import P, { Suspense as F, startTransition as I, use as L, useCallback as R, useEffect as z, useRef as B, useState as V } from "react";
9
- import { useNavigate as H, useParams as ee, useSearch as U } from "@tanstack/react-router";
10
- import { TRPCClientError as W } from "@trpc/client";
11
- import { Trans as G, useLingui as K } from "@lingui/react";
12
- import { ErrorBoundary as q } from "react-error-boundary";
13
- //#region src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorListContainer.tsx
14
- var J = ({ flavors: e, isLoading: n, client: r, project: s, onFlavorDeleted: c, canDeleteFlavor: u, canMangageAccess: d, canManageSpecs: f, currentPage: p = 1, totalPages: h = 1, onPageChange: g }) => {
15
- let { i18n: y, _: S } = K(), C = H(), [w, T] = V(!1), [D, k] = V(!1), [P, F] = V(!1), [I, L] = V(null), [R, B] = V(p.toString());
16
- z(() => {
17
- B(p.toString());
18
- }, [p]);
19
- let { projectId: U } = ee({ from: "/_auth/projects/$projectId/compute/flavors/" }), W = (e) => {
20
- L(e), T(!0);
21
- }, q = (e) => {
22
- L(e), k(!0);
23
- }, J = (e) => {
24
- L(e), F(!0);
25
- }, Y = () => {
26
- T(!1), L(null);
27
- }, X = () => {
28
- I && c && c(I.name || ""), Y();
29
- }, Z = (e) => {
30
- e >= 1 && e <= h && (g?.(e), B(e.toString()));
31
- };
32
- return n ? /*#__PURE__*/ M(v, {
33
- status: "progress",
34
- title: y._({ id: "Z3FXyt" })
35
- }) : /*#__PURE__*/ N(j, { children: [
36
- /*#__PURE__*/ N(m, {
37
- columns: 7,
38
- minContentColumns: [6],
39
- className: "flavors",
40
- "data-testid": "flavors-table",
41
- children: [/*#__PURE__*/ N(a, { children: [
42
- /*#__PURE__*/ M(i, { children: /*#__PURE__*/ M(G, { id: "6YtxFj" }) }),
43
- /*#__PURE__*/ M(i, { children: /*#__PURE__*/ M(G, { id: "k5nYwm" }) }),
44
- /*#__PURE__*/ M(i, { children: /*#__PURE__*/ M(G, { id: "K+e/0e" }) }),
45
- /*#__PURE__*/ M(i, { children: /*#__PURE__*/ M(G, { id: "n0ZttO" }) }),
46
- /*#__PURE__*/ M(i, { children: /*#__PURE__*/ M(G, { id: "p4nMut" }) }),
47
- /*#__PURE__*/ M(i, { children: /*#__PURE__*/ M(G, { id: "HyyJ83" }) }),
48
- /*#__PURE__*/ M(i, {})
49
- ] }), e && e.length > 0 ? e.map((e) => /*#__PURE__*/ N(a, {
50
- "data-testid": `flavor-row-${e.id}`,
51
- onClick: () => C({
52
- to: "/projects/$projectId/compute/flavors/$flavorId",
53
- params: {
54
- projectId: U,
55
- flavorId: e.id
56
- }
57
- }),
58
- children: [
59
- /*#__PURE__*/ M(b, { children: e.name || e.id }),
60
- /*#__PURE__*/ M(b, { children: e.vcpus || "–" }),
61
- /*#__PURE__*/ M(b, { children: e.ram || "–" }),
62
- /*#__PURE__*/ M(b, { children: e.disk || "–" }),
63
- /*#__PURE__*/ M(b, { children: e.swap || "–" }),
64
- /*#__PURE__*/ M(b, { children: e["os-flavor-access:is_public"] === !1 ? y._({ id: "zwBp5t" }) : y._({ id: "7d1a0d" }) }),
65
- /*#__PURE__*/ M(b, {
66
- onClick: (e) => e.stopPropagation(),
67
- children: /*#__PURE__*/ M(t, { children: /*#__PURE__*/ N(l, { children: [
68
- f && /*#__PURE__*/ M(x, {
69
- label: y._({ id: "SIfYq6" }),
70
- onClick: () => q(e)
71
- }),
72
- d && e["os-flavor-access:is_public"] === !1 && /*#__PURE__*/ M(x, {
73
- label: y._({ id: "cWbW6w" }),
74
- onClick: () => J(e)
75
- }),
76
- /*#__PURE__*/ M(x, {
77
- label: y._({ id: "v0hPHE" }),
78
- onClick: () => C({
79
- to: "/projects/$projectId/compute/flavors/$flavorId",
80
- params: {
81
- projectId: U,
82
- flavorId: e.id
83
- }
84
- })
85
- }),
86
- u && /*#__PURE__*/ N(j, { children: [/*#__PURE__*/ M(_, {}), /*#__PURE__*/ M(x, {
87
- label: y._({ id: "JT3I1g" }),
88
- onClick: () => W(e)
89
- })] })
90
- ] }) })
91
- })
92
- ]
93
- }, e.id)) : /*#__PURE__*/ M(a, { children: /*#__PURE__*/ M(b, {
94
- colSpan: 7,
95
- children: /*#__PURE__*/ M(v, {
96
- status: "empty",
97
- title: y._({ id: "PiyQJ/" }),
98
- body: y._({ id: "KSW/GC" })
99
- })
100
- }) })]
101
- }),
102
- h > 1 && /*#__PURE__*/ M("div", {
103
- className: "flex justify-center py-4",
104
- children: /*#__PURE__*/ M(o, {
105
- variant: "input",
106
- currentPage: p,
107
- pages: h,
108
- onPressPrevious: () => Z(Math.max(p - 1, 1)),
109
- onPressNext: () => Z(Math.min(p + 1, h)),
110
- onSelectChange: (e) => {
111
- Z(e);
112
- },
113
- onInputChange: (e) => {
114
- B(e === void 0 ? "" : String(e));
115
- },
116
- onKeyDown: (e) => {
117
- if (e.key === "Enter" && R !== "") {
118
- let e = parseInt(R, 10);
119
- !isNaN(e) && e >= 1 && e <= h && Z(e);
120
- }
121
- }
122
- })
123
- }),
124
- /*#__PURE__*/ M(A, {
125
- client: r,
126
- isOpen: w,
127
- onClose: Y,
128
- project: s,
129
- flavor: I,
130
- onSuccess: X
131
- }),
132
- /*#__PURE__*/ M(E, {
133
- client: r,
134
- isOpen: D,
135
- onClose: () => k(!1),
136
- project: s,
137
- flavor: I
138
- }),
139
- /*#__PURE__*/ M(O, {
140
- client: r,
141
- isOpen: P,
142
- onClose: () => F(!1),
143
- project: s,
144
- flavor: I
145
- })
146
- ] });
147
- }, Y = (e, t, n) => {
148
- switch (e) {
149
- case "id":
150
- if (!t) return;
151
- {
152
- let e = String(t).trim();
153
- return /^[a-zA-Z0-9.\-_]*$/.test(e) ? void 0 : n({ id: "AX9Juz" });
154
- }
155
- case "name": {
156
- let e = String(t || "").trim();
157
- return e.length >= 2 && e.length <= 50 ? void 0 : n({ id: "zDS0JC" });
158
- }
159
- case "vcpus": {
160
- let e = Number(t);
161
- return !isNaN(e) && e >= 1 ? void 0 : n({ id: "uSdnuQ" });
162
- }
163
- case "ram": {
164
- let e = Number(t);
165
- return !isNaN(e) && e >= 128 ? void 0 : n({ id: "g1IxCo" });
166
- }
167
- case "disk": {
168
- let e = Number(t);
169
- return !isNaN(e) && e >= 0 ? void 0 : n({ id: "AJRhSM" });
170
- }
171
- case "swap":
172
- if (t === "" || t == null) return;
173
- {
174
- let e = Number(t);
175
- return !isNaN(e) && e >= 0 ? void 0 : n({ id: "g3BSCe" });
176
- }
177
- case "rxtx_factor": {
178
- let e = Number(t);
179
- return !isNaN(e) && e >= 1 ? void 0 : n({ id: "PIbPRX" });
180
- }
181
- case "description": return t ? String(t).length < 65535 ? void 0 : n({ id: "uuKb0T" }) : void 0;
182
- case "OS-FLV-EXT-DATA:ephemeral": {
183
- let e = Number(t);
184
- return !isNaN(e) && e >= 0 ? void 0 : n({ id: "tLerHy" });
185
- }
186
- case "os-flavor-access:is_public": return t == null || typeof t == "boolean" || typeof t == "string" && (t === "true" || t === "false") ? void 0 : n({ id: "MmtQVF" });
187
- default: return;
188
- }
189
- }, X = (e) => {
190
- let t = {
191
- name: String(e.name),
192
- vcpus: Number(e.vcpus),
193
- ram: Number(e.ram),
194
- disk: Number(e.disk)
195
- }, n = (e) => e != null && e !== "" && String(e).trim() !== "", r = (e) => e != null && e !== "" && String(e).trim() !== "" && !isNaN(Number(e));
196
- return n(e.id) && (t.id = String(e.id).trim()), n(e.description) && (t.description = String(e.description).trim()), r(e.swap) && (t.swap = Number(e.swap)), r(e.rxtx_factor) && (t.rxtx_factor = Number(e.rxtx_factor)), r(e["OS-FLV-EXT-DATA:ephemeral"]) && (t["OS-FLV-EXT-DATA:ephemeral"] = Number(e["OS-FLV-EXT-DATA:ephemeral"])), e["os-flavor-access:is_public"] !== void 0 && (t["os-flavor-access:is_public"] = !!e["os-flavor-access:is_public"]), t;
197
- }, Z = ({ client: e, isOpen: t, onClose: r, project: i, onSuccess: a }) => {
198
- let { i18n: o, _: l } = K(), { translateError: d } = T(), [f, m] = V({ "os-flavor-access:is_public": !0 }), [h, _] = V({}), [b, x] = V(!1), [S, C] = V(null), [w, E] = V(!1);
199
- P.useEffect(() => {
200
- t && e.compute.getComputeApiVersion.query({ project_id: i }).then((e) => E(e.supportsDescription)).catch(() => E(!1));
201
- }, [
202
- t,
203
- e,
204
- i
205
- ]);
206
- let D = (e) => {
207
- let { name: t, value: n, type: r, checked: i } = e.target;
208
- m((e) => ({
209
- ...e,
210
- [t]: r === "checkbox" ? i : n
211
- })), _((e) => ({
212
- ...e,
213
- [t]: void 0
214
- })), S && C(null);
215
- }, O = (e, t) => {
216
- m((n) => ({
217
- ...n,
218
- [e]: t
219
- })), _((t) => ({
220
- ...t,
221
- [e]: void 0
222
- })), S && C(null);
223
- }, k = (e) => {
224
- let { name: t, value: n } = e.target, r = Y(t, n, l);
225
- _((e) => ({
226
- ...e,
227
- [t]: r
228
- }));
229
- }, A = async (t) => {
230
- t.preventDefault(), C(null);
231
- let n = {};
232
- if ([
233
- "name",
234
- "vcpus",
235
- "ram",
236
- "disk"
237
- ].forEach((e) => {
238
- let t = Y(e, f[e], l);
239
- t && (n[e] = t);
240
- }), [
241
- "id",
242
- "swap",
243
- "OS-FLV-EXT-DATA:ephemeral",
244
- "rxtx_factor",
245
- "description",
246
- "os-flavor-access:is_public"
247
- ].forEach((e) => {
248
- let t = f[e];
249
- if (t !== void 0 && t !== "" && t !== null) {
250
- let r = Y(e, t, l);
251
- r && (n[e] = r);
252
- }
253
- }), Object.keys(n).length > 0) {
254
- _(n), C(o._({ id: "CBFSfX" }));
255
- return;
256
- }
257
- try {
258
- x(!0);
259
- let t = X(f);
260
- await e.compute.createFlavor.mutate({
261
- project_id: i,
262
- flavor: t
263
- }), a(t.name), j();
264
- } catch (e) {
265
- let t = e?.message ? d(e.message) : o._({ id: "OxDN2m" });
266
- C(t);
267
- } finally {
268
- x(!1);
269
- }
270
- }, j = () => {
271
- m({ "os-flavor-access:is_public": !0 }), _({}), C(null), r();
272
- };
273
- return /*#__PURE__*/ N(s, {
274
- onCancel: j,
275
- size: "large",
276
- title: o._({ id: "Rlp5zj" }),
277
- open: t,
278
- onConfirm: A,
279
- cancelButtonLabel: o._({ id: "dEgA5A" }),
280
- confirmButtonLabel: o._({ id: "wEfZld" }),
281
- disableConfirmButton: !(() => {
282
- for (let e of [
283
- "name",
284
- "vcpus",
285
- "ram",
286
- "disk"
287
- ]) {
288
- let t = f[e];
289
- if (t === void 0 || t === "" || t === null || Y(e, t, l)) return !1;
290
- }
291
- for (let e of [
292
- "id",
293
- "swap",
294
- "OS-FLV-EXT-DATA:ephemeral",
295
- "rxtx_factor",
296
- "description"
297
- ]) {
298
- let t = f[e];
299
- if (t !== void 0 && t !== "" && t !== null && Y(e, t, l)) return !1;
300
- }
301
- return !0;
302
- })() || b,
303
- disableCancelButton: b,
304
- disableCloseButton: b,
305
- children: [b && /*#__PURE__*/ M(v, {
306
- status: "progress",
307
- title: o._({ id: "XgBuun" }),
308
- className: "mt-0"
309
- }), !b && /*#__PURE__*/ N(c, { children: [
310
- S && /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(n, {
311
- onDismiss: () => {
312
- C(null);
313
- },
314
- text: S,
315
- variant: "error"
316
- }) }),
317
- /*#__PURE__*/ N(g, {
318
- title: o._({ id: "JlSgnX" }),
319
- children: [
320
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
321
- id: "id",
322
- name: "id",
323
- label: o._({ id: "s2ubkU" }),
324
- value: f.id || "",
325
- onChange: D,
326
- onBlur: k,
327
- errortext: h.id,
328
- helptext: o._({ id: "hv2CnP" })
329
- }) }),
330
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
331
- id: "name",
332
- name: "name",
333
- label: o._({ id: "lWxDDh" }),
334
- value: f.name || "",
335
- onChange: D,
336
- onBlur: k,
337
- errortext: h.name,
338
- helptext: o._({ id: "nq24is" }),
339
- required: !0
340
- }) }),
341
- w && /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
342
- id: "description",
343
- name: "description",
344
- label: o._({ id: "Nu4oKW" }),
345
- value: f.description || "",
346
- onChange: D,
347
- onBlur: k,
348
- errortext: h.description
349
- }) }),
350
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(y, {
351
- name: "os-flavor-access:is_public",
352
- label: o._({ id: "vbajgL" }),
353
- helptext: o._({ id: "Y8TptA" }),
354
- checked: !!f["os-flavor-access:is_public"],
355
- onChange: D
356
- }) })
357
- ]
358
- }),
359
- /*#__PURE__*/ N(g, {
360
- title: o._({ id: "qQ1QBh" }),
361
- children: [
362
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
363
- id: "vcpus",
364
- name: "vcpus",
365
- label: o._({ id: "k5nYwm" }),
366
- value: String(f.vcpus || ""),
367
- onChange: (e) => O("vcpus", Number(e.target.value)),
368
- onBlur: k,
369
- errortext: h.vcpus,
370
- type: "number",
371
- required: !0
372
- }) }),
373
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
374
- id: "ram",
375
- name: "ram",
376
- label: o._({ id: "K+e/0e" }),
377
- value: String(f.ram || ""),
378
- onChange: (e) => O("ram", Number(e.target.value)),
379
- onBlur: k,
380
- errortext: h.ram,
381
- helptext: o._({ id: "9DrU1K" }),
382
- type: "number",
383
- required: !0
384
- }) }),
385
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
386
- id: "disk",
387
- name: "disk",
388
- label: o._({ id: "n0ZttO" }),
389
- value: String(f.disk || ""),
390
- onChange: (e) => O("disk", Number(e.target.value)),
391
- onBlur: k,
392
- errortext: h.disk,
393
- type: "number",
394
- required: !0
395
- }) }),
396
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
397
- id: "OS-FLV-EXT-DATA:ephemeral",
398
- name: "OS-FLV-EXT-DATA:ephemeral",
399
- label: o._({ id: "X2OnDx" }),
400
- value: String(f["OS-FLV-EXT-DATA:ephemeral"] || ""),
401
- onChange: (e) => O("OS-FLV-EXT-DATA:ephemeral", Number(e.target.value)),
402
- onBlur: k,
403
- errortext: h["OS-FLV-EXT-DATA:ephemeral"],
404
- type: "number"
405
- }) }),
406
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
407
- id: "swap",
408
- name: "swap",
409
- label: o._({ id: "p4nMut" }),
410
- value: String(f.swap || ""),
411
- onChange: (e) => O("swap", e.target.value ? Number(e.target.value) : void 0),
412
- onBlur: k,
413
- errortext: h.swap,
414
- type: "number"
415
- }) }),
416
- /*#__PURE__*/ M(u, { children: /*#__PURE__*/ M(p, {
417
- id: "rxtx_factor",
418
- name: "rxtx_factor",
419
- label: o._({ id: "u5HztT" }),
420
- value: String(f.rxtx_factor || ""),
421
- onChange: (e) => O("rxtx_factor", Number(e.target.value)),
422
- onBlur: k,
423
- errortext: h.rxtx_factor,
424
- helptext: o._({ id: "IVw5fS" }),
425
- type: "number"
426
- }) })
427
- ]
428
- })
429
- ] })]
430
- });
431
- }, Q = 50, $ = (e, t, n, r, i) => e.compute.getFlavorsByProjectId.query({
432
- project_id: t,
433
- sortBy: n,
434
- sortDirection: r,
435
- searchTerm: i
436
- }).then((e) => ({
437
- ...e,
438
- listError: void 0
439
- })).catch((e) => {
440
- if (e instanceof W && e.data?.code === "FORBIDDEN") return {
441
- flavors: [],
442
- privateFlavorError: void 0,
443
- listError: e.message
444
- };
445
- throw e;
446
- }), te = (e, t) => e.compute.canUser.query({
447
- project_id: t,
448
- permission: [
449
- "flavors:create",
450
- "flavors:delete",
451
- "flavors:add_project",
452
- "flavors:remove_project",
453
- "flavor_specs:create",
454
- "flavor_specs:delete"
455
- ]
456
- }).then(([e, t, n, r, i, a]) => ({
457
- canCreate: e,
458
- canDelete: t,
459
- canManageAccess: n || r,
460
- canManageSpecs: i || a
461
- }));
462
- function ne({ flavorsPromise: t, permissionsPromise: i, client: a, project: o, onFlavorDeleted: s, onFlavorCreated: c, searchTerm: l, setSearchTerm: u, sortSettings: p, handleSortChange: m, createModalOpen: h, setCreateModalOpen: g, currentPage: _, onPageChange: v }) {
463
- let { i18n: y, _: b } = K(), { flavors: x, privateFlavorError: S, listError: w } = L(t), T = L(i), [E, D] = V(l), O = B(void 0);
464
- if (z(() => () => clearTimeout(O.current), []), w) return /*#__PURE__*/ M("p", { children: w });
465
- let k = Math.max(1, Math.ceil(x.length / Q)), A = Math.min(_, k), P = x.slice((A - 1) * Q, A * Q);
466
- return z(() => {
467
- _ > k && v(1);
468
- }, [
469
- k,
470
- _,
471
- v
472
- ]), /*#__PURE__*/ N(j, { children: [
473
- /*#__PURE__*/ M(Z, {
474
- client: a,
475
- isOpen: h,
476
- project: o,
477
- onClose: () => g(!1),
478
- onSuccess: c
479
- }),
480
- S && /*#__PURE__*/ M(n, {
481
- className: "mb-4",
482
- text: y._({ id: "3oc18/" }),
483
- variant: "warning"
484
- }),
485
- /*#__PURE__*/ M(r, {
486
- distribution: "end",
487
- alignment: "center",
488
- gap: "2",
489
- className: "pb-2",
490
- children: /*#__PURE__*/ N(r, {
491
- gap: "2",
492
- children: [/*#__PURE__*/ M(C, {
493
- options: p.options,
494
- sortBy: p.sortBy,
495
- sortDirection: p.sortDirection ?? "asc",
496
- selectClassName: "min-w-45",
497
- selectWidth: "auto",
498
- onSortByChange: (e) => m({
499
- ...p,
500
- sortBy: e,
501
- sortDirection: p.sortDirection
502
- }),
503
- onSortDirectionChange: (e) => m({
504
- ...p,
505
- sortDirection: e
506
- })
507
- }), T.canCreate && /*#__PURE__*/ M(d, {
508
- variant: "primary",
509
- label: y._({ id: "Rlp5zj" }),
510
- onClick: () => g(!0)
511
- })]
512
- })
513
- }),
514
- /*#__PURE__*/ M(f, { children: /*#__PURE__*/ M(r, {
515
- distribution: "end",
516
- alignment: "center",
517
- children: /*#__PURE__*/ M(e, {
518
- placeholder: y._({ id: "U0sPCo" }),
519
- "data-testid": "searchbar",
520
- value: E,
521
- onInput: (e) => {
522
- let t = e.currentTarget.value;
523
- D(t), clearTimeout(O.current), O.current = window.setTimeout(() => u(t), 500);
524
- },
525
- onSearch: (e) => {
526
- clearTimeout(O.current), u(typeof e == "string" ? e : "");
527
- },
528
- onClear: () => {
529
- clearTimeout(O.current), D(""), u("");
530
- }
531
- })
532
- }) }),
533
- /*#__PURE__*/ M(J, {
534
- flavors: P,
535
- isLoading: !1,
536
- client: a,
537
- project: o,
538
- onFlavorDeleted: s,
539
- canDeleteFlavor: T.canDelete,
540
- canMangageAccess: T.canManageAccess,
541
- canManageSpecs: T.canManageSpecs,
542
- currentPage: A,
543
- totalPages: k,
544
- onPageChange: v
545
- })
546
- ] });
547
- }
548
- var re = ({ client: e, project: t }) => {
549
- let { i18n: n, _: r } = K(), i = H(), a = U({ strict: !1 }), [o, s] = V({
550
- options: [
551
- {
552
- label: n._({ id: "6YtxFj" }),
553
- value: "name"
554
- },
555
- {
556
- label: n._({ id: "k5nYwm" }),
557
- value: "vcpus"
558
- },
559
- {
560
- label: n._({ id: "K+e/0e" }),
561
- value: "ram"
562
- },
563
- {
564
- label: n._({ id: "n0ZttO" }),
565
- value: "disk"
566
- },
567
- {
568
- label: n._({ id: "p4nMut" }),
569
- value: "swap"
570
- }
571
- ],
572
- sortBy: a.sortBy || "name",
573
- sortDirection: a.sortDirection || "asc"
574
- }), [c, l] = V(a.search || ""), u = a.page ?? 1, [d, f] = V(!1), [p, m] = V(() => $(e, t, o.sortBy, o.sortDirection, c)), [g] = V(() => te(e, t)), _ = () => {
575
- I(() => {
576
- m($(e, t, o.sortBy, o.sortDirection, c));
577
- });
578
- }, y = (e) => {
579
- let { message: t, ...n } = D(e);
580
- h.success(t, n), _();
581
- }, b = (e) => {
582
- let { message: t, ...n } = k(e);
583
- h.success(t, n), _();
584
- }, x = (n) => {
585
- let r = {
586
- options: n.options,
587
- sortBy: n.sortBy?.toString() || "name",
588
- sortDirection: n.sortDirection || "asc"
589
- };
590
- s(r), i({
591
- search: (e) => ({
592
- ...e,
593
- sortBy: r.sortBy,
594
- sortDirection: r.sortDirection,
595
- page: void 0
596
- }),
597
- replace: !0
598
- }), I(() => {
599
- m($(e, t, r.sortBy, r.sortDirection, c));
600
- });
601
- }, S = (n) => {
602
- let r = typeof n == "string" ? n : "";
603
- l(r), i({
604
- search: (e) => ({
605
- ...e,
606
- search: r || void 0,
607
- page: void 0
608
- }),
609
- replace: !0
610
- }), I(() => {
611
- m($(e, t, o.sortBy, o.sortDirection, r));
612
- });
613
- }, C = R((e) => {
614
- i({ search: (t) => ({
615
- ...t,
616
- page: e === 1 ? void 0 : e
617
- }) });
618
- }, [i]);
619
- return /*#__PURE__*/ M("div", {
620
- className: "relative",
621
- children: /*#__PURE__*/ M(q, {
622
- fallbackRender: ({ error: e }) => /*#__PURE__*/ M(v, {
623
- status: "error",
624
- title: n._({ id: "ZllCCx" }),
625
- body: e instanceof Error ? e.message : n._({ id: "W5A0Ly" })
626
- }),
627
- children: /*#__PURE__*/ M(F, {
628
- fallback: /*#__PURE__*/ M(v, {
629
- status: "progress",
630
- title: n._({ id: "EqSPkP" })
631
- }),
632
- children: /*#__PURE__*/ M(ne, {
633
- flavorsPromise: p,
634
- permissionsPromise: g,
635
- client: e,
636
- project: t,
637
- onFlavorDeleted: y,
638
- onFlavorCreated: b,
639
- searchTerm: c,
640
- setSearchTerm: S,
641
- sortSettings: o,
642
- handleSortChange: x,
643
- createModalOpen: d,
644
- setCreateModalOpen: f,
645
- currentPage: u,
646
- onPageChange: C
647
- })
648
- })
649
- })
650
- });
651
- };
652
- //#endregion
653
- //#region src/client/routes/_auth/projects/$projectId/compute/flavors/index.tsx?tsr-split=component
654
- function ie() {
655
- let { i18n: e, _: t } = K(), { projectId: n } = S.useParams(), { trpcClient: r } = S.useRouteContext();
656
- return /*#__PURE__*/ N(j, { children: [/*#__PURE__*/ M(w, {
657
- title: e._({ id: "neiJm0" }),
658
- projectId: n
659
- }), /*#__PURE__*/ M(re, {
660
- project: n,
661
- client: r
662
- })] });
663
- }
664
- //#endregion
665
- export { ie as component };
666
-
667
- //# sourceMappingURL=flavors-CflJDIEH.mjs.map