@cobaltcore-dev/aurora 1.2.0 → 2.0.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 (132) hide show
  1. package/dist/client/DeleteFlavorModal-C2MqUgGR.mjs +801 -0
  2. package/dist/client/DeleteFlavorModal-C2MqUgGR.mjs.map +1 -0
  3. package/dist/client/{FiltersInput-CKI6zWnm.mjs → FiltersInput-Becwxo_J.mjs} +36 -33
  4. package/dist/client/FiltersInput-Becwxo_J.mjs.map +1 -0
  5. package/dist/client/FloatingIpActionModals-Cq10WljB.mjs +466 -0
  6. package/dist/client/FloatingIpActionModals-Cq10WljB.mjs.map +1 -0
  7. package/dist/client/ImageToastNotifications-BWfzOUMc.mjs +1135 -0
  8. package/dist/client/ImageToastNotifications-BWfzOUMc.mjs.map +1 -0
  9. package/dist/client/RouteIdLevelDefaultError-CSseJ1yG.mjs +26 -0
  10. package/dist/client/RouteIdLevelDefaultError-CSseJ1yG.mjs.map +1 -0
  11. package/dist/client/{TwoColumnDescriptionList-NvgvErua.mjs → TwoColumnDescriptionList-DKS42RKa.mjs} +9 -3
  12. package/dist/client/TwoColumnDescriptionList-DKS42RKa.mjs.map +1 -0
  13. package/dist/client/{_flavorId-a9Gu66R1.mjs → _flavorId-CaA4-Pnf.mjs} +4 -3
  14. package/dist/client/_flavorId-CaA4-Pnf.mjs.map +1 -0
  15. package/dist/client/_flavorId-DYv_StX22.mjs +276 -0
  16. package/dist/client/_flavorId-DYv_StX22.mjs.map +1 -0
  17. package/dist/client/_flavorId-YV3jCS5g.mjs +22 -0
  18. package/dist/client/_flavorId-YV3jCS5g.mjs.map +1 -0
  19. package/dist/client/{_floatingIpId-AZ11Ksmu.mjs → _floatingIpId-BeYElanB.mjs} +2 -2
  20. package/dist/client/_floatingIpId-BeYElanB.mjs.map +1 -0
  21. package/dist/client/_floatingIpId-Dpsc7GU4.mjs +196 -0
  22. package/dist/client/_floatingIpId-Dpsc7GU4.mjs.map +1 -0
  23. package/dist/client/_imageId-mfKp3JHn.mjs +558 -0
  24. package/dist/client/_imageId-mfKp3JHn.mjs.map +1 -0
  25. package/dist/client/_imageId-mpXUMCh_.mjs +22 -0
  26. package/dist/client/_imageId-mpXUMCh_.mjs.map +1 -0
  27. package/dist/client/{_imageId-D76BxvFY.mjs → _imageId-pBSS0YcC.mjs} +4 -3
  28. package/dist/client/_imageId-pBSS0YcC.mjs.map +1 -0
  29. package/dist/client/{_projectId-B3wmSala.mjs → _projectId-AjgJX6Gl.mjs} +2 -2
  30. package/dist/client/_projectId-AjgJX6Gl.mjs.map +1 -0
  31. package/dist/client/{_projectId-DPzv0CCp.mjs → _projectId-BnTBxKfp.mjs} +4 -4
  32. package/dist/client/_projectId-BnTBxKfp.mjs.map +1 -0
  33. package/dist/client/{_projectId-DfeVJy0G.mjs → _projectId-CVrdJ52s.mjs} +2 -2
  34. package/dist/client/_projectId-CVrdJ52s.mjs.map +1 -0
  35. package/dist/client/_projectId-DgciZslU.mjs +92 -0
  36. package/dist/client/_projectId-DgciZslU.mjs.map +1 -0
  37. package/dist/client/{_securityGroupId-D85mSigA.mjs → _securityGroupId-AO3wnH8g.mjs} +2 -2
  38. package/dist/client/_securityGroupId-AO3wnH8g.mjs.map +1 -0
  39. package/dist/client/{_securityGroupId-C5huJNfO.mjs → _securityGroupId-Bq0ZyG6z.mjs} +750 -741
  40. package/dist/client/_securityGroupId-Bq0ZyG6z.mjs.map +1 -0
  41. package/dist/client/_storageType-c-DAu8qr.mjs +858 -0
  42. package/dist/client/_storageType-c-DAu8qr.mjs.map +1 -0
  43. package/dist/client/components/{Error → Errors}/RouteError.d.ts +5 -0
  44. package/dist/client/components/Errors/RouteIdLevelDefaultError.d.ts +17 -0
  45. package/dist/client/components/Errors/ServiceLevelDefaultError.d.ts +9 -0
  46. package/dist/client/components/ListToolbar/SelectedFilters.d.ts +7 -2
  47. package/dist/client/components/ListToolbar/types.d.ts +6 -0
  48. package/dist/client/components/ListToolbar/valueLabels.d.ts +11 -0
  49. package/dist/client/flavors-Bgq3KZmx.mjs +659 -0
  50. package/dist/client/flavors-Bgq3KZmx.mjs.map +1 -0
  51. package/dist/client/{flavors-B0rbqffG.mjs → flavors-ZudiAiTU.mjs} +2 -2
  52. package/dist/client/{flavors-B0rbqffG.mjs.map → flavors-ZudiAiTU.mjs.map} +1 -1
  53. package/dist/client/floatingips-B1oLH8z6.mjs +551 -0
  54. package/dist/client/floatingips-B1oLH8z6.mjs.map +1 -0
  55. package/dist/client/floatingips-BeQEkVH8.mjs +14 -0
  56. package/dist/client/floatingips-BeQEkVH8.mjs.map +1 -0
  57. package/dist/client/floatingips-BtLg3yEQ.mjs +22 -0
  58. package/dist/client/floatingips-BtLg3yEQ.mjs.map +1 -0
  59. package/dist/client/floatingips-Cz9k80cc.mjs.map +1 -1
  60. package/dist/client/{images-BGQv9kKT.mjs → images-CnTW3bpy.mjs} +810 -770
  61. package/dist/client/images-CnTW3bpy.mjs.map +1 -0
  62. package/dist/client/{images-CPmMa4SQ.mjs → images-DZHDYDQu.mjs} +2 -2
  63. package/dist/client/{images-CPmMa4SQ.mjs.map → images-DZHDYDQu.mjs.map} +1 -1
  64. package/dist/client/index.js +412 -409
  65. package/dist/client/index.js.map +1 -1
  66. package/dist/client/{objects-BN-59Th0.mjs → objects-25xsh4Ia.mjs} +2 -2
  67. package/dist/client/objects-25xsh4Ia.mjs.map +1 -0
  68. package/dist/client/objects-KXY6dgwq.mjs +82 -0
  69. package/dist/client/objects-KXY6dgwq.mjs.map +1 -0
  70. package/dist/client/objects-QryuClU3.mjs +82 -0
  71. package/dist/client/objects-QryuClU3.mjs.map +1 -0
  72. package/dist/client/{objects-BE_u5yRt.mjs → objects-jYQBFzwg.mjs} +4671 -4702
  73. package/dist/client/objects-jYQBFzwg.mjs.map +1 -0
  74. package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
  75. package/dist/client/securitygroups--0PS2wbM.mjs +580 -0
  76. package/dist/client/securitygroups--0PS2wbM.mjs.map +1 -0
  77. package/dist/client/{securitygroups-DEJQBcxm.mjs → securitygroups-BRndk7wh.mjs} +2 -2
  78. package/dist/client/{securitygroups-DEJQBcxm.mjs.map → securitygroups-BRndk7wh.mjs.map} +1 -1
  79. package/dist/client/securitygroups-CdN4yAAw.mjs +14 -0
  80. package/dist/client/securitygroups-CdN4yAAw.mjs.map +1 -0
  81. package/dist/client/securitygroups-Cs2Op-tu.mjs +22 -0
  82. package/dist/client/securitygroups-Cs2Op-tu.mjs.map +1 -0
  83. package/dist/client/securitygroups-CtKne8UQ.mjs.map +1 -1
  84. package/dist/client/trpcClient.d.ts +6 -1
  85. package/dist/client/useModalTracking-BYd37pXm.mjs +37 -0
  86. package/dist/client/useModalTracking-BYd37pXm.mjs.map +1 -0
  87. package/dist/client/useSecurityGroupPermissions--hK4aR8Y.mjs +294 -0
  88. package/dist/client/useSecurityGroupPermissions--hK4aR8Y.mjs.map +1 -0
  89. package/dist/server/index.d.ts +6 -1
  90. package/dist/server/index.js +96 -30
  91. package/package.json +4 -4
  92. package/dist/client/DeleteFlavorModal-V44QCJBd.mjs +0 -773
  93. package/dist/client/DeleteFlavorModal-V44QCJBd.mjs.map +0 -1
  94. package/dist/client/FiltersInput-CKI6zWnm.mjs.map +0 -1
  95. package/dist/client/FloatingIpActionModals-CwEC5GR-.mjs +0 -460
  96. package/dist/client/FloatingIpActionModals-CwEC5GR-.mjs.map +0 -1
  97. package/dist/client/ImageToastNotifications-m6c3tVPb.mjs +0 -1152
  98. package/dist/client/ImageToastNotifications-m6c3tVPb.mjs.map +0 -1
  99. package/dist/client/TwoColumnDescriptionList-NvgvErua.mjs.map +0 -1
  100. package/dist/client/_flavorId-9PcBBW52.mjs +0 -231
  101. package/dist/client/_flavorId-9PcBBW52.mjs.map +0 -1
  102. package/dist/client/_flavorId-a9Gu66R1.mjs.map +0 -1
  103. package/dist/client/_floatingIpId-AE9Fu8l6.mjs +0 -210
  104. package/dist/client/_floatingIpId-AE9Fu8l6.mjs.map +0 -1
  105. package/dist/client/_floatingIpId-AZ11Ksmu.mjs.map +0 -1
  106. package/dist/client/_imageId-BtAql2Kr.mjs +0 -570
  107. package/dist/client/_imageId-BtAql2Kr.mjs.map +0 -1
  108. package/dist/client/_imageId-D76BxvFY.mjs.map +0 -1
  109. package/dist/client/_projectId-7Nl1MQTJ.mjs +0 -99
  110. package/dist/client/_projectId-7Nl1MQTJ.mjs.map +0 -1
  111. package/dist/client/_projectId-B3wmSala.mjs.map +0 -1
  112. package/dist/client/_projectId-DPzv0CCp.mjs.map +0 -1
  113. package/dist/client/_projectId-DfeVJy0G.mjs.map +0 -1
  114. package/dist/client/_securityGroupId-C5huJNfO.mjs.map +0 -1
  115. package/dist/client/_securityGroupId-D85mSigA.mjs.map +0 -1
  116. package/dist/client/_storageType-Dy9uCVXr.mjs +0 -845
  117. package/dist/client/_storageType-Dy9uCVXr.mjs.map +0 -1
  118. package/dist/client/flavors-Rl20bxVU.mjs +0 -628
  119. package/dist/client/flavors-Rl20bxVU.mjs.map +0 -1
  120. package/dist/client/floatingips-xbO_mu4f.mjs +0 -576
  121. package/dist/client/floatingips-xbO_mu4f.mjs.map +0 -1
  122. package/dist/client/images-BGQv9kKT.mjs.map +0 -1
  123. package/dist/client/objects-BE_u5yRt.mjs.map +0 -1
  124. package/dist/client/objects-BN-59Th0.mjs.map +0 -1
  125. package/dist/client/objects-D9Luf9KB.mjs +0 -66
  126. package/dist/client/objects-D9Luf9KB.mjs.map +0 -1
  127. package/dist/client/securitygroups-BjhgLBHm.mjs +0 -620
  128. package/dist/client/securitygroups-BjhgLBHm.mjs.map +0 -1
  129. package/dist/client/useModalTracking-BcOKTYRN.mjs +0 -33
  130. package/dist/client/useModalTracking-BcOKTYRN.mjs.map +0 -1
  131. package/dist/client/useSecurityGroupPermissions-BOyLQLdC.mjs +0 -227
  132. package/dist/client/useSecurityGroupPermissions-BOyLQLdC.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"projects-yiK0HGSA.mjs","names":["ProjectsContentProps","search","SplitNotFoundComponent","notFoundComponent"],"sources":["../../src/client/routes/_auth/projects/index.tsx?tsr-split=notFoundComponent"],"sourcesContent":["import { Suspense } from \"react\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { createFileRoute, useRouteContext } from \"@tanstack/react-router\"\nimport { ProjectsOverviewNavBar } from \"@/client/routes/_auth/projects/-components/ProjectOverviewNavBar\"\nimport { ProjectCardView } from \"@/client/routes/_auth/projects/-components/ProjectCardView\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { Container, ContentHeading, Status } from \"@cloudoperators/juno-ui-components\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\nimport { Slot } from \"@/client/components/Slot\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n staticData: {\n analytics: {\n name: \"projects.list\",\n },\n } satisfies RouteInfo,\n component: ProjectsOverview,\n notFoundComponent: () => {\n return <p>Projects not found</p>\n },\n validateSearch: searchSchema,\n})\n\ninterface ProjectsContentProps {\n search: string\n}\n\nfunction ProjectsContent({ search }: ProjectsContentProps) {\n const [allProjects] = trpcReact.project.getAuthProjects.useSuspenseQuery()\n\n const normalizedSearch = search.trim().toLowerCase()\n const projects =\n allProjects && normalizedSearch\n ? allProjects.filter(\n (project) =>\n project.name?.toLowerCase().includes(normalizedSearch) ||\n project.description?.toLowerCase().includes(normalizedSearch)\n )\n : allProjects\n\n return <ProjectCardView projects={projects} />\n}\n\nexport function ProjectsOverview() {\n const { search = \"\" } = Route.useSearch()\n const navigate = Route.useNavigate()\n const { slots } = useRouteContext({ strict: false })\n const { t } = useLingui()\n\n const handleSearch = (value: string) => {\n navigate({ search: (prev) => ({ ...prev, search: value || undefined }), replace: true })\n }\n\n return (\n <Container py>\n <ContentHeading className=\"pb-4\">\n <Trans>Projects</Trans>\n </ContentHeading>\n {slots?.projectsBanner && (\n <ErrorBoundary fallbackRender={() => null}>\n <Suspense fallback={null}>\n <Slot component={slots.projectsBanner} useShadowDOM={false} />\n </Suspense>\n </ErrorBoundary>\n )}\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <RouteError error={error} safeErrorMessage={error instanceof TRPCClientError ? error.message : undefined} />\n )}\n >\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <Suspense fallback={<Status status=\"progress\" title={t`Loading...`} />}>\n <ProjectsContent search={search} />\n </Suspense>\n </div>\n </ErrorBoundary>\n </Container>\n )\n}\n"],"mappings":";;AAiCC,IAAAE,UAPU,gBAAC,KAAA,EAAE,UAAA,qBAAA,CAAA"}
1
+ {"version":3,"file":"projects-yiK0HGSA.mjs","names":["ProjectsContentProps","search","SplitNotFoundComponent","notFoundComponent"],"sources":["../../src/client/routes/_auth/projects/index.tsx?tsr-split=notFoundComponent"],"sourcesContent":["import { Suspense } from \"react\"\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport { createFileRoute, useRouteContext } from \"@tanstack/react-router\"\nimport { ProjectsOverviewNavBar } from \"@/client/routes/_auth/projects/-components/ProjectOverviewNavBar\"\nimport { ProjectCardView } from \"@/client/routes/_auth/projects/-components/ProjectCardView\"\nimport { RouteError } from \"@/client/components/Errors/RouteError\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { Container, ContentHeading, Status } from \"@cloudoperators/juno-ui-components\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\nimport { Slot } from \"@/client/components/Slot\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n staticData: {\n analytics: {\n name: \"projects.list\",\n },\n } satisfies RouteInfo,\n component: ProjectsOverview,\n notFoundComponent: () => {\n return <p>Projects not found</p>\n },\n validateSearch: searchSchema,\n})\n\ninterface ProjectsContentProps {\n search: string\n}\n\nfunction ProjectsContent({ search }: ProjectsContentProps) {\n const [allProjects] = trpcReact.project.getAuthProjects.useSuspenseQuery()\n\n const normalizedSearch = search.trim().toLowerCase()\n const projects =\n allProjects && normalizedSearch\n ? allProjects.filter(\n (project) =>\n project.name?.toLowerCase().includes(normalizedSearch) ||\n project.description?.toLowerCase().includes(normalizedSearch)\n )\n : allProjects\n\n return <ProjectCardView projects={projects} />\n}\n\nexport function ProjectsOverview() {\n const { search = \"\" } = Route.useSearch()\n const navigate = Route.useNavigate()\n const { slots } = useRouteContext({ strict: false })\n const { t } = useLingui()\n\n const handleSearch = (value: string) => {\n navigate({ search: (prev) => ({ ...prev, search: value || undefined }), replace: true })\n }\n\n return (\n <Container py>\n <ContentHeading className=\"pb-4\">\n <Trans>Projects</Trans>\n </ContentHeading>\n {slots?.projectsBanner && (\n <ErrorBoundary fallbackRender={() => null}>\n <Suspense fallback={null}>\n <Slot component={slots.projectsBanner} useShadowDOM={false} />\n </Suspense>\n </ErrorBoundary>\n )}\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <RouteError error={error} safeErrorMessage={error instanceof TRPCClientError ? error.message : undefined} />\n )}\n >\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <Suspense fallback={<Status status=\"progress\" title={t`Loading...`} />}>\n <ProjectsContent search={search} />\n </Suspense>\n </div>\n </ErrorBoundary>\n </Container>\n )\n}\n"],"mappings":";;AAiCC,IAAAE,UAPU,gBAAC,KAAA,EAAE,UAAA,qBAAA,CAAA"}
@@ -0,0 +1,580 @@
1
+ import { C as e, D as t, K as n, L as r, M as i, P as a, Q as o, S as s, T as c, X as l, ft as u, g as d, h as f, i as p, l as m, lt as h, m as g, o as _, ot as v, p as y, rt as b, st as x, t as S, x as C } from "./build-WuxXRAqf.mjs";
2
+ import { a as w } from "./trpcClient-D7gpR7YG.mjs";
3
+ import { t as T } from "./securitygroups-BRndk7wh.mjs";
4
+ import { t as E } from "./useProjectId-DBc5lpoU.mjs";
5
+ import { t as D } from "./SortInput-4g7nSTHW.mjs";
6
+ import { t as O } from "./ContentHeader-CPJbgYWn.mjs";
7
+ import "./hooks-D0yKIumu.mjs";
8
+ import { n as k, t as A } from "./FiltersInput-Becwxo_J.mjs";
9
+ import { c as j, h as ee, l as te, m as ne, n as M, r as re, t as N } from "./useSecurityGroupPermissions--hK4aR8Y.mjs";
10
+ import { Fragment as P, jsx as F, jsxs as I } from "react/jsx-runtime";
11
+ import { useEffect as L, useRef as R, useState as z } from "react";
12
+ import { useNavigate as ie, useSearch as B } from "@tanstack/react-router";
13
+ import { Trans as V, useLingui as H } from "@lingui/react";
14
+ //#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.tsx
15
+ function ae({ securityGroup: e, permissions: n, onEdit: r, onDelete: i, onViewDetails: a, isReadOnly: o = !1, showSelectColumn: s = !1, isSelected: l = !1, onSelect: u }) {
16
+ let { i18n: f, _: p } = H(), m = ({ value: e }) => /*#__PURE__*/ F("span", { children: e ? f._({ id: "l75CjT" }) : f._({ id: "1UzENP" }) }), h = () => {
17
+ a && a(e);
18
+ };
19
+ return /*#__PURE__*/ I(c, {
20
+ "data-testid": `security-group-row-${e.id}`,
21
+ onClick: h,
22
+ className: "hover:bg-theme-background-lvl-2 cursor-pointer",
23
+ children: [
24
+ s && /*#__PURE__*/ F(S, {
25
+ onClick: (e) => e.stopPropagation(),
26
+ children: /*#__PURE__*/ F(x, {
27
+ checked: l,
28
+ onChange: () => u?.(e)
29
+ })
30
+ }),
31
+ /*#__PURE__*/ F(S, { children: /*#__PURE__*/ F("div", { children: /*#__PURE__*/ F("p", {
32
+ className: "text-md",
33
+ children: e.name
34
+ }) }) }),
35
+ /*#__PURE__*/ F(S, { children: e.description || f._({ id: "h47p9L" }) }),
36
+ /*#__PURE__*/ I(S, { children: [/*#__PURE__*/ F(m, { value: e.shared }), e.shared && /*#__PURE__*/ I("p", { children: [
37
+ /*#__PURE__*/ F(V, { id: "LtI9AS" }),
38
+ ": ",
39
+ /*#__PURE__*/ F("span", {
40
+ className: "text-theme-light text-xs",
41
+ children: e.project_id
42
+ })
43
+ ] })] }),
44
+ /*#__PURE__*/ F(S, { children: /*#__PURE__*/ F(m, { value: e.stateful ?? !0 }) }),
45
+ /*#__PURE__*/ F(S, {
46
+ onClick: (e) => e.stopPropagation(),
47
+ className: "items-end pr-0",
48
+ children: /*#__PURE__*/ F(t, { children: /*#__PURE__*/ I(d, { children: [
49
+ /*#__PURE__*/ F(C, {
50
+ label: f._({ id: "v0hPHE" }),
51
+ onClick: () => h()
52
+ }),
53
+ n.canUpdate && !o && /*#__PURE__*/ F(C, {
54
+ label: f._({ id: "b433OF" }),
55
+ onClick: () => r(e)
56
+ }),
57
+ n.canDelete && !o && /*#__PURE__*/ F(C, {
58
+ label: f._({ id: "bcOdok" }),
59
+ onClick: () => i(e)
60
+ })
61
+ ] }) })
62
+ })
63
+ ]
64
+ }, e.id);
65
+ }
66
+ //#endregion
67
+ //#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx
68
+ var oe = ({ securityGroups: e, isLoading: t, isError: n, error: r, permissions: i, onDeleteSecurityGroup: a, isDeletingSecurityGroup: o = !1, deleteError: l = null, onUpdateSecurityGroup: u, isUpdatingSecurityGroup: d = !1, updateError: f = null, currentProjectId: p, hasAnyBulkAction: m = !1, onClearUpdateError: h }) => {
69
+ let { i18n: g, _: v } = H(), y = ie(), x = E(), [C, w] = z(null), [T, D] = z(!1), [O, k] = z(!1), A = R(!1), j = R(!1), ee = (e) => {
70
+ C && C.id !== e.id && h && h(), w(e), D(!0);
71
+ }, te = (e) => {
72
+ w(e), k(!0);
73
+ }, ne = (e) => {
74
+ y({
75
+ to: "/projects/$projectId/network/securitygroups/$securityGroupId",
76
+ params: {
77
+ projectId: x,
78
+ securityGroupId: e.id
79
+ }
80
+ });
81
+ }, N = () => {
82
+ w(null), D(!1);
83
+ }, B = () => {
84
+ w(null), k(!1);
85
+ };
86
+ L(() => {
87
+ A.current && !o && O && !l && B(), A.current = o;
88
+ }, [
89
+ o,
90
+ l,
91
+ O
92
+ ]), L(() => {
93
+ j.current && !d && T && !f && N(), j.current = d;
94
+ }, [
95
+ d,
96
+ f,
97
+ T
98
+ ]);
99
+ let V = m ? 6 : 5;
100
+ return /*#__PURE__*/ I(P, { children: [/*#__PURE__*/ I(_, {
101
+ columns: V,
102
+ minContentColumns: m ? [5] : [4],
103
+ children: [/*#__PURE__*/ I(c, { children: [m && /*#__PURE__*/ F(s, {}), [
104
+ g._({ id: "6YtxFj" }),
105
+ g._({ id: "Nu4oKW" }),
106
+ g._({ id: "0Gd0NU" }),
107
+ g._({ id: "Jim5X9" }),
108
+ ""
109
+ ].map((e) => /*#__PURE__*/ F(s, { children: e }, e))] }), t ? /*#__PURE__*/ F(c, { children: /*#__PURE__*/ F(S, {
110
+ colSpan: V,
111
+ children: /*#__PURE__*/ F(b, {
112
+ status: "progress",
113
+ title: g._({ id: "Z3FXyt" })
114
+ })
115
+ }) }) : n ? /*#__PURE__*/ F(c, { children: /*#__PURE__*/ F(S, {
116
+ colSpan: V,
117
+ children: /*#__PURE__*/ F(b, {
118
+ status: "error",
119
+ title: r?.message ?? g._({ id: "lcs67U" })
120
+ })
121
+ }) }) : e.length > 0 ? e.map((e) => {
122
+ let t = !!(p && e.project_id && e.project_id !== p);
123
+ return /*#__PURE__*/ F(ae, {
124
+ securityGroup: e,
125
+ permissions: i,
126
+ onEdit: ee,
127
+ onDelete: te,
128
+ onViewDetails: ne,
129
+ isReadOnly: t,
130
+ showSelectColumn: m,
131
+ isSelected: !1,
132
+ onSelect: () => {}
133
+ }, e.id);
134
+ }) : /*#__PURE__*/ F(c, { children: /*#__PURE__*/ F(S, {
135
+ colSpan: V,
136
+ children: /*#__PURE__*/ F(b, {
137
+ status: "empty",
138
+ title: g._({ id: "f+UUtj" }),
139
+ body: g._({ id: "jqJG6j" })
140
+ })
141
+ }) })]
142
+ }), C && /*#__PURE__*/ I(P, { children: [/*#__PURE__*/ F(re, {
143
+ securityGroup: C,
144
+ open: T,
145
+ onClose: N,
146
+ onUpdate: (e, t) => u ? u(e, t) : Promise.resolve(),
147
+ isLoading: d,
148
+ error: f
149
+ }), /*#__PURE__*/ F(M, {
150
+ securityGroup: C,
151
+ isOpen: O,
152
+ onClose: B,
153
+ onDelete: (e) => {
154
+ a && a(e);
155
+ },
156
+ isDeleting: o,
157
+ error: l
158
+ })] })] });
159
+ }, U = {
160
+ name: "",
161
+ description: "",
162
+ stateful: !0
163
+ }, se = ({ isOpen: e, onClose: t, onCreate: o, isLoading: s = !1, error: c = null }) => {
164
+ let { i18n: d, _: m } = H(), [_, v] = z({ ...U }), [S, C] = z({}), w = (e) => {
165
+ let { name: t, value: n, type: r } = e.target, i = e.target.checked;
166
+ v((e) => ({
167
+ ...e,
168
+ [t]: r === "checkbox" ? i : n
169
+ })), S[t] && C((e) => {
170
+ let n = { ...e };
171
+ return delete n[t], n;
172
+ });
173
+ }, T = () => {
174
+ let e = {};
175
+ return (!_.name || _.name.trim() === "") && (e.name = d._({ id: "lN/Z9n" })), C(e), Object.keys(e).length === 0;
176
+ }, E = async (e) => {
177
+ e.preventDefault(), T() && (await o({
178
+ name: _.name.trim(),
179
+ description: _.description.trim() || void 0,
180
+ stateful: _.stateful
181
+ }), D());
182
+ }, D = () => {
183
+ v({ ...U }), C({}), t();
184
+ };
185
+ return /*#__PURE__*/ I(l, {
186
+ open: e,
187
+ onCancel: D,
188
+ size: "large",
189
+ title: d._({ id: "YjAOtb" }),
190
+ modalFooter: /*#__PURE__*/ F(a, {
191
+ className: "flex justify-end",
192
+ children: /*#__PURE__*/ I(i, { children: [/*#__PURE__*/ F(p, {
193
+ variant: "default",
194
+ onClick: D,
195
+ disabled: s,
196
+ children: /*#__PURE__*/ F(V, { id: "dEgA5A" })
197
+ }), /*#__PURE__*/ F(p, {
198
+ variant: "primary",
199
+ onClick: (e) => {
200
+ E(e);
201
+ },
202
+ disabled: s,
203
+ "data-testid": "create-security-group-button",
204
+ children: s ? /*#__PURE__*/ F(n, { size: "small" }) : /*#__PURE__*/ F(V, { id: "YjAOtb" })
205
+ })] })
206
+ }),
207
+ children: [
208
+ c && /*#__PURE__*/ F(r, {
209
+ dismissible: !1,
210
+ variant: "error",
211
+ className: "mb-4",
212
+ children: c
213
+ }),
214
+ s && /*#__PURE__*/ F(b, {
215
+ status: "progress",
216
+ title: d._({ id: "0Kv9K4" }),
217
+ className: "mt-0"
218
+ }),
219
+ !s && /*#__PURE__*/ F(u, {
220
+ className: "mb-6",
221
+ children: /*#__PURE__*/ I(y, {
222
+ className: "mb-6",
223
+ children: [
224
+ /*#__PURE__*/ F(f, {
225
+ className: "mb-6",
226
+ children: /*#__PURE__*/ F(g, {
227
+ id: "name",
228
+ name: "name",
229
+ label: d._({ id: "6YtxFj" }),
230
+ value: _.name,
231
+ onChange: w,
232
+ required: !0,
233
+ errortext: S.name,
234
+ placeholder: d._({ id: "Ac6dy9" }),
235
+ disabled: s
236
+ })
237
+ }),
238
+ /*#__PURE__*/ F(f, {
239
+ className: "mb-6",
240
+ children: /*#__PURE__*/ F(h, {
241
+ id: "description",
242
+ name: "description",
243
+ label: d._({ id: "Nu4oKW" }),
244
+ value: _.description,
245
+ onChange: w,
246
+ placeholder: d._({ id: "Nu4oKW" }),
247
+ disabled: s,
248
+ rows: 3
249
+ })
250
+ }),
251
+ /*#__PURE__*/ F(f, {
252
+ className: "mb-0",
253
+ children: /*#__PURE__*/ F(x, {
254
+ id: "stateful",
255
+ name: "stateful",
256
+ label: d._({ id: "Jim5X9" }),
257
+ checked: _.stateful,
258
+ onChange: w,
259
+ disabled: s,
260
+ helptext: d._({ id: "4cQTyf" })
261
+ })
262
+ })
263
+ ]
264
+ })
265
+ })
266
+ ]
267
+ });
268
+ }, W = ["true", "false"], ce = {
269
+ true: !0,
270
+ false: !1
271
+ }, G = (e) => W.includes(e), K = ["shared", "stateful"], q = (e) => K.includes(e), le = (e) => [{
272
+ displayName: e.shared,
273
+ filterName: "shared",
274
+ values: [...W],
275
+ valueLabels: {
276
+ true: e.yes,
277
+ false: e.no
278
+ },
279
+ supportsMultiValue: !1
280
+ }, {
281
+ displayName: e.stateful,
282
+ filterName: "stateful",
283
+ values: [...W],
284
+ valueLabels: {
285
+ true: e.yes,
286
+ false: e.no
287
+ },
288
+ supportsMultiValue: !1
289
+ }], ue = (e) => {
290
+ let t = {};
291
+ for (let n of K) {
292
+ let r = e.filter((e) => !e.inactive && e.name === n).at(-1);
293
+ r && G(r.value) && (t[n] = ce[r.value]);
294
+ }
295
+ return t;
296
+ }, J = (e, t) => q(e) && G(t), Y = (e) => {
297
+ let t = [];
298
+ return e.shared && J("shared", e.shared) && t.push({
299
+ name: "shared",
300
+ value: e.shared
301
+ }), e.stateful && J("stateful", e.stateful) && t.push({
302
+ name: "stateful",
303
+ value: e.stateful
304
+ }), t;
305
+ }, de = (e, t, n) => e.some((e) => e.name === t.name && e.value === t.value) ? e : n.find((e) => e.filterName === t.name)?.supportsMultiValue ? [...e, t] : [...e.filter((e) => e.name !== t.name), t], fe = (e, t, n) => {
306
+ let r = {
307
+ search: n.search,
308
+ sortBy: n.sortBy,
309
+ sortDirection: n.sortDirection
310
+ };
311
+ if (!e?.length) return r;
312
+ let i = e.filter((e) => !e.inactive).reduce((e, t) => (e[t.name] || (e[t.name] = []), e[t.name].push(t.value), e), {});
313
+ return Object.entries(i).forEach(([e, n]) => {
314
+ t.find((t) => t.filterName === e)?.supportsMultiValue && n.length > 1 ? r[e] = `in:${n.join(",")}` : r[e] = n[0];
315
+ }), r;
316
+ }, pe = 500, X = ({ project: t }) => {
317
+ let { i18n: n, _: i } = H(), a = ie(), s = B({ strict: !1 }), [c, l] = z({
318
+ options: [{
319
+ label: n._({ id: "6YtxFj" }),
320
+ value: "name"
321
+ }],
322
+ sortBy: s.sortBy || "name",
323
+ sortDirection: s.sortDirection || "asc"
324
+ }), [u, d] = z({
325
+ filters: le({
326
+ shared: n._({ id: "0Gd0NU" }),
327
+ stateful: n._({ id: "Jim5X9" }),
328
+ yes: n._({ id: "l75CjT" }),
329
+ no: n._({ id: "1UzENP" })
330
+ }),
331
+ selectedFilters: Y(s)
332
+ }), [f, h] = z(s.search || ""), g = R(void 0), [_, y] = z(!1), [b, x] = z(null), [S, C] = z(null), [T, E] = z(null), M = w.useUtils();
333
+ L(() => () => clearTimeout(g.current), []), L(() => {
334
+ l((e) => ({
335
+ ...e,
336
+ sortBy: s.sortBy || "name",
337
+ sortDirection: s.sortDirection || "asc"
338
+ })), d((e) => ({
339
+ ...e,
340
+ selectedFilters: Y(s)
341
+ })), g.current === void 0 && h(s.search || "");
342
+ }, [
343
+ s.sortBy,
344
+ s.sortDirection,
345
+ s.search,
346
+ s.shared,
347
+ s.stateful
348
+ ]);
349
+ let re = Y(s), ae = s.sortBy || "name", U = s.sortDirection || "asc", W = s.search || "", { data: ce, isLoading: G, isError: K, error: q } = w.network.securityGroup.list.useQuery({
350
+ project_id: t || "",
351
+ sort_key: ae,
352
+ sort_dir: U,
353
+ ...ue(re),
354
+ ...W ? { searchTerm: W } : {}
355
+ }, {
356
+ refetchOnWindowFocus: !1,
357
+ placeholderData: (e) => e
358
+ }), J = ce || [], X = K ? q?.data?.code === "FORBIDDEN" ? n._({ id: "MdfAJn" }) : q.message || n._({ id: "lcs67U" }) : null, { permissions: Z } = N(t), me = w.network.securityGroup.create.useMutation({
359
+ onSuccess: (e) => {
360
+ M.network.securityGroup.list.invalidate(), M.network.securityGroup.getById.invalidate(), C(null), a({
361
+ to: "/projects/$projectId/network/securitygroups/$securityGroupId",
362
+ params: {
363
+ projectId: t,
364
+ securityGroupId: e.id
365
+ }
366
+ });
367
+ },
368
+ onError: (e) => {
369
+ C(e.message || n._({ id: "o6M6l0" }));
370
+ }
371
+ }), he = w.network.securityGroup.deleteById.useMutation({
372
+ onSuccess: () => {
373
+ M.network.securityGroup.list.invalidate(), M.network.securityGroup.getById.invalidate(), x(null);
374
+ },
375
+ onError: (e) => {
376
+ x(e.message || n._({ id: "d0pLfy" }));
377
+ let { message: t, ...r } = j(e.message);
378
+ v.error(t, r);
379
+ }
380
+ }), ge = w.network.securityGroup.update.useMutation({
381
+ onSuccess: () => {
382
+ M.network.securityGroup.list.invalidate(), M.network.securityGroup.getById.invalidate(), E(null);
383
+ },
384
+ onError: (e) => {
385
+ E(e.message || n._({ id: "jPxavx" }));
386
+ let { message: t, ...r } = ne(e.message);
387
+ v.error(t, r);
388
+ }
389
+ }), _e = async (e) => {
390
+ C(null);
391
+ try {
392
+ await me.mutateAsync({
393
+ project_id: t,
394
+ ...e
395
+ });
396
+ } catch {}
397
+ }, ve = (e) => {
398
+ x(null);
399
+ let n = J.find((t) => t.id === e)?.name || e;
400
+ he.mutate({
401
+ project_id: t,
402
+ securityGroupId: e
403
+ }, { onSuccess: () => {
404
+ let { message: e, ...t } = te(n);
405
+ v.success(e, t);
406
+ } });
407
+ }, ye = async (e, n) => {
408
+ E(null);
409
+ let r = n.name || J.find((t) => t.id === e)?.name || e;
410
+ try {
411
+ await ge.mutateAsync({
412
+ project_id: t,
413
+ securityGroupId: e,
414
+ ...n
415
+ });
416
+ let { message: i, ...a } = ee(r);
417
+ v.success(i, a);
418
+ } catch {}
419
+ }, be = () => {
420
+ E(null);
421
+ }, xe = (e) => {
422
+ let t = {
423
+ options: e.options,
424
+ sortBy: e.sortBy?.toString() || "name",
425
+ sortDirection: e.sortDirection || "asc"
426
+ };
427
+ l(t), a({
428
+ search: (e) => ({
429
+ ...e,
430
+ sortBy: t.sortBy,
431
+ sortDirection: t.sortDirection
432
+ }),
433
+ replace: !0
434
+ });
435
+ }, Q = (e) => {
436
+ d(e), a({
437
+ search: (t) => fe(e.selectedFilters || [], e.filters, {
438
+ search: t.search,
439
+ sortBy: t.sortBy,
440
+ sortDirection: t.sortDirection
441
+ }),
442
+ replace: !0
443
+ });
444
+ }, $ = (e) => {
445
+ a({
446
+ search: (t) => ({
447
+ ...t,
448
+ search: e || void 0
449
+ }),
450
+ replace: !0
451
+ });
452
+ };
453
+ return /*#__PURE__*/ I(P, { children: [/*#__PURE__*/ F(O, {
454
+ title: n._({ id: "4opp4r" }),
455
+ projectId: t
456
+ }), /*#__PURE__*/ I("div", {
457
+ className: "relative",
458
+ children: [
459
+ K && J.length > 0 && /*#__PURE__*/ F(r, {
460
+ variant: "error",
461
+ className: "mb-4",
462
+ children: X
463
+ }),
464
+ /*#__PURE__*/ F(o, {
465
+ distribution: "end",
466
+ alignment: "center",
467
+ gap: "2",
468
+ className: "pb-2",
469
+ children: /*#__PURE__*/ I(o, {
470
+ gap: "2",
471
+ children: [/*#__PURE__*/ F(D, {
472
+ options: c.options,
473
+ sortBy: c.sortBy,
474
+ sortDirection: c.sortDirection ?? "asc",
475
+ selectClassName: "min-w-40",
476
+ onSortByChange: (e) => xe({
477
+ ...c,
478
+ sortBy: e,
479
+ sortDirection: c.sortDirection
480
+ }),
481
+ onSortDirectionChange: (e) => xe({
482
+ ...c,
483
+ sortDirection: e
484
+ })
485
+ }), Z.canCreate && /*#__PURE__*/ F(p, {
486
+ onClick: () => y(!0),
487
+ variant: "primary",
488
+ className: "whitespace-nowrap",
489
+ children: /*#__PURE__*/ F(V, { id: "YjAOtb" })
490
+ })]
491
+ })
492
+ }),
493
+ /*#__PURE__*/ F(m, { children: /*#__PURE__*/ I(o, {
494
+ direction: "vertical",
495
+ gap: "2",
496
+ children: [/*#__PURE__*/ I(o, {
497
+ distribution: "between",
498
+ alignment: "center",
499
+ children: [/*#__PURE__*/ F(A, {
500
+ filters: u.filters,
501
+ selectClassName: "sm:min-w-40",
502
+ comboboxClassName: "sm:min-w-40",
503
+ onChange: (e) => {
504
+ let t = de(u.selectedFilters || [], e, u.filters);
505
+ t !== (u.selectedFilters || []) && Q({
506
+ ...u,
507
+ selectedFilters: t
508
+ });
509
+ }
510
+ }), /*#__PURE__*/ F(e, {
511
+ className: "w-60 sm:w-68",
512
+ placeholder: n._({ id: "rp7Ili" }),
513
+ "data-testid": "searchbar",
514
+ value: f,
515
+ onInput: (e) => {
516
+ let t = e.currentTarget.value;
517
+ h(t), clearTimeout(g.current), g.current = window.setTimeout(() => {
518
+ g.current = void 0, $(t);
519
+ }, pe);
520
+ },
521
+ onSearch: (e) => {
522
+ clearTimeout(g.current), g.current = void 0, $(typeof e == "string" ? e : "");
523
+ },
524
+ onClear: () => {
525
+ clearTimeout(g.current), g.current = void 0, h(""), $("");
526
+ }
527
+ })]
528
+ }), u.selectedFilters && u.selectedFilters.length > 0 && /*#__PURE__*/ F(k, {
529
+ selectedFilters: u.selectedFilters,
530
+ filters: u.filters,
531
+ onDelete: (e) => Q({
532
+ ...u,
533
+ selectedFilters: (u.selectedFilters || []).filter((t) => t.name !== e.name || t.value !== e.value)
534
+ }),
535
+ onClear: () => Q({
536
+ ...u,
537
+ selectedFilters: []
538
+ })
539
+ })]
540
+ }) }),
541
+ /*#__PURE__*/ F(oe, {
542
+ securityGroups: J,
543
+ isLoading: G,
544
+ isError: K && J.length === 0,
545
+ error: X ? { message: X } : null,
546
+ permissions: Z,
547
+ onCreateClick: () => y(!0),
548
+ onDeleteSecurityGroup: ve,
549
+ isDeletingSecurityGroup: he.isPending,
550
+ deleteError: b,
551
+ onUpdateSecurityGroup: ye,
552
+ isUpdatingSecurityGroup: ge.isPending,
553
+ updateError: T,
554
+ currentProjectId: t,
555
+ hasAnyBulkAction: !1,
556
+ onClearUpdateError: be
557
+ }),
558
+ /*#__PURE__*/ F(se, {
559
+ isOpen: _,
560
+ onClose: () => {
561
+ C(null), y(!1);
562
+ },
563
+ onCreate: _e,
564
+ isLoading: me.isPending,
565
+ error: S
566
+ })
567
+ ]
568
+ })] });
569
+ };
570
+ //#endregion
571
+ //#region src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx?tsr-split=component
572
+ function Z() {
573
+ let { projectId: e } = T.useParams(), { trpcClient: t } = T.useRouteContext();
574
+ if (!t) throw Error("trpcClient is not available in route context");
575
+ return /*#__PURE__*/ F(X, { project: e });
576
+ }
577
+ //#endregion
578
+ export { Z as component };
579
+
580
+ //# sourceMappingURL=securitygroups--0PS2wbM.mjs.map