@cobaltcore-dev/aurora 0.2.0 → 0.2.1
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.
- package/dist/client/{ContentHeader-H8KGY3Wd.mjs → ContentHeader-DtBiIwRY.mjs} +15 -15
- package/dist/client/{ContentHeader-H8KGY3Wd.mjs.map → ContentHeader-DtBiIwRY.mjs.map} +1 -1
- package/dist/client/{DeleteFlavorModal-B98oiHWx.mjs → DeleteFlavorModal-rmuYIafD.mjs} +142 -142
- package/dist/client/{DeleteFlavorModal-B98oiHWx.mjs.map → DeleteFlavorModal-rmuYIafD.mjs.map} +1 -1
- package/dist/client/{EditSecurityGroupModal-wQVNIVg1.mjs → EditSecurityGroupModal-B7Sz9puM.mjs} +15 -15
- package/dist/client/{EditSecurityGroupModal-wQVNIVg1.mjs.map → EditSecurityGroupModal-B7Sz9puM.mjs.map} +1 -1
- package/dist/client/{FloatingIpActionModals-qu1NMI5a.mjs → FloatingIpActionModals-CfRJiZqD.mjs} +59 -59
- package/dist/client/{FloatingIpActionModals-qu1NMI5a.mjs.map → FloatingIpActionModals-CfRJiZqD.mjs.map} +1 -1
- package/dist/client/{ImageToastNotifications-wsQDNEh7.mjs → ImageToastNotifications-Cw30RXsw.mjs} +374 -374
- package/dist/client/{ImageToastNotifications-wsQDNEh7.mjs.map → ImageToastNotifications-Cw30RXsw.mjs.map} +1 -1
- package/dist/client/{ListToolbar-CHlkZrpl.mjs → ListToolbar-DuazvsAu.mjs} +61 -61
- package/dist/client/{ListToolbar-CHlkZrpl.mjs.map → ListToolbar-DuazvsAu.mjs.map} +1 -1
- package/dist/client/{RouteError-BwgDIwJE.mjs → RouteError-Cyto623-.mjs} +2 -2
- package/dist/client/{RouteError-BwgDIwJE.mjs.map → RouteError-Cyto623-.mjs.map} +1 -1
- package/dist/client/{_auth-CsliQdkJ.mjs → _auth-CJj1Cnbm.mjs} +1 -1
- package/dist/client/{_auth-CsliQdkJ.mjs.map → _auth-CJj1Cnbm.mjs.map} +1 -1
- package/dist/client/_flavorId-B-1fYadl.mjs +188 -0
- package/dist/client/_flavorId-B-1fYadl.mjs.map +1 -0
- package/dist/client/{_flavorId-D_A53VYa.mjs → _flavorId-BYfIHIV_.mjs} +20 -10
- package/dist/client/_flavorId-BYfIHIV_.mjs.map +1 -0
- package/dist/client/_floatingIpId-FQ5P2qMV.mjs +228 -0
- package/dist/client/_floatingIpId-FQ5P2qMV.mjs.map +1 -0
- package/dist/client/{_floatingIpId-BGgftRBQ.mjs → _floatingIpId-IrnN-ozB.mjs} +13 -3
- package/dist/client/_floatingIpId-IrnN-ozB.mjs.map +1 -0
- package/dist/client/_imageId-Tx_9bqEc.mjs +527 -0
- package/dist/client/_imageId-Tx_9bqEc.mjs.map +1 -0
- package/dist/client/{_pcaId-DBgz5V_9.mjs → _pcaId-DWHfvMhT.mjs} +16 -3
- package/dist/client/_pcaId-DWHfvMhT.mjs.map +1 -0
- package/dist/client/{_pcaId-C7Lrv1H_.mjs → _pcaId-r2BTjN9y.mjs} +81 -81
- package/dist/client/_pcaId-r2BTjN9y.mjs.map +1 -0
- package/dist/client/{_projectId-INhedXor.mjs → _projectId-B1VjDd0Z.mjs} +3 -3
- package/dist/client/{_projectId-INhedXor.mjs.map → _projectId-B1VjDd0Z.mjs.map} +1 -1
- package/dist/client/_projectId-Bs4W9hos.mjs +283 -0
- package/dist/client/_projectId-Bs4W9hos.mjs.map +1 -0
- package/dist/client/{_projectId-C-E4NNgo.mjs → _projectId-PSpuCKO7.mjs} +9 -9
- package/dist/client/{_projectId-C-E4NNgo.mjs.map → _projectId-PSpuCKO7.mjs.map} +1 -1
- package/dist/client/{_projectId-B9fln31N.mjs → _projectId-Pxp-RXK4.mjs} +2 -2
- package/dist/client/{_projectId-B9fln31N.mjs.map → _projectId-Pxp-RXK4.mjs.map} +1 -1
- package/dist/client/{_securityGroupId-DQoRQ-yA.mjs → _securityGroupId-Dqi6ddw4.mjs} +499 -499
- package/dist/client/_securityGroupId-Dqi6ddw4.mjs.map +1 -0
- package/dist/client/{_securityGroupId-ihjy8Lcd.mjs → _securityGroupId-VV2lUcGQ.mjs} +16 -3
- package/dist/client/_securityGroupId-VV2lUcGQ.mjs.map +1 -0
- package/dist/client/{about-oT6ccz8T.mjs → about-B2AzqxFI.mjs} +8 -8
- package/dist/client/{about-oT6ccz8T.mjs.map → about-B2AzqxFI.mjs.map} +1 -1
- package/dist/client/{aurora-D_NPTbo-.mjs → aurora-CRcxVUCo.mjs} +1 -1
- package/dist/client/{aurora-D_NPTbo-.mjs.map → aurora-CRcxVUCo.mjs.map} +1 -1
- package/dist/client/{build-eu9eg0zF.mjs → build-Cf7iWbpH.mjs} +2727 -2646
- package/dist/client/build-Cf7iWbpH.mjs.map +1 -0
- package/dist/client/{buildFilterParams-BDOIRDeD.mjs → buildFilterParams-ngVK3ybs.mjs} +1 -1
- package/dist/client/{buildFilterParams-BDOIRDeD.mjs.map → buildFilterParams-ngVK3ybs.mjs.map} +1 -1
- package/dist/client/{constants-ByHCdNsI.mjs → constants-CCgR6fKI.mjs} +15 -15
- package/dist/client/{constants-ByHCdNsI.mjs.map → constants-CCgR6fKI.mjs.map} +1 -1
- package/dist/client/{containers-rn_ntCJu.mjs → containers-BWERuY0O.mjs} +978 -976
- package/dist/client/containers-BWERuY0O.mjs.map +1 -0
- package/dist/client/{containers-Dx7TYruP.mjs → containers-Cs5vOeR2.mjs} +1 -1
- package/dist/client/{containers-Dx7TYruP.mjs.map → containers-Cs5vOeR2.mjs.map} +1 -1
- package/dist/client/{containers-B_ozmVlx.mjs → containers-DovytjVP.mjs} +6 -3
- package/dist/client/containers-DovytjVP.mjs.map +1 -0
- package/dist/client/{flavors-DRZb9LJP.mjs → flavors-BXPYAFyQ.mjs} +1 -1
- package/dist/client/flavors-BXPYAFyQ.mjs.map +1 -0
- package/dist/client/{flavors-CT4auvLO.mjs → flavors-Bovz-I2U.mjs} +137 -137
- package/dist/client/flavors-Bovz-I2U.mjs.map +1 -0
- package/dist/client/flavors-CUiALHcB.mjs +16 -0
- package/dist/client/flavors-CUiALHcB.mjs.map +1 -0
- package/dist/client/floatingips-BrjDiY2t.mjs +435 -0
- package/dist/client/floatingips-BrjDiY2t.mjs.map +1 -0
- package/dist/client/{formatBytes-GYujK0dP.mjs → formatBytes-D6oa0wU9.mjs} +1 -1
- package/dist/client/{formatBytes-GYujK0dP.mjs.map → formatBytes-D6oa0wU9.mjs.map} +1 -1
- package/dist/client/{hooks-s-I8vWww.mjs → hooks-D0krAKvo.mjs} +1 -1
- package/dist/client/images-BZP3pBqj.mjs +16 -0
- package/dist/client/images-BZP3pBqj.mjs.map +1 -0
- package/dist/client/{images-DRTfx8k2.mjs → images-DM9I8G0p.mjs} +1 -1
- package/dist/client/images-DM9I8G0p.mjs.map +1 -0
- package/dist/client/{images-BTqRflJv2.mjs → images-DaaCUXMI.mjs} +413 -410
- package/dist/client/images-DaaCUXMI.mjs.map +1 -0
- package/dist/client/index.js +494 -414
- package/dist/client/index.js.map +1 -1
- package/dist/client/{md-CI9FmfYv.mjs → md-BivyCkGC.mjs} +1 -1
- package/dist/client/{md-CI9FmfYv.mjs.map → md-BivyCkGC.mjs.map} +1 -1
- package/dist/client/{network-DFVVVNS5.mjs → network-SCVadZsv.mjs} +1 -1
- package/dist/client/{network-DFVVVNS5.mjs.map → network-SCVadZsv.mjs.map} +1 -1
- package/dist/client/{objects-DkDKVSmQ.mjs → objects-B4yrYf_a.mjs} +1 -1
- package/dist/client/objects-B4yrYf_a.mjs.map +1 -0
- package/dist/client/objects-Cw4Vu01M.mjs +4760 -0
- package/dist/client/objects-Cw4Vu01M.mjs.map +1 -0
- package/dist/client/{objects-r_Vl31oj.mjs → objects-D4zBka5e.mjs} +9 -3
- package/dist/client/objects-D4zBka5e.mjs.map +1 -0
- package/dist/client/overview-2J54-loz.mjs +15 -0
- package/dist/client/overview-2J54-loz.mjs.map +1 -0
- package/dist/client/{overview-B7pXx6bt.mjs → overview-BnmukbFh.mjs} +5 -5
- package/dist/client/overview-BnmukbFh.mjs.map +1 -0
- package/dist/client/overview-BtIXpYBo.mjs +15 -0
- package/dist/client/overview-BtIXpYBo.mjs.map +1 -0
- package/dist/client/overview-D0AAvsmL.mjs +15 -0
- package/dist/client/overview-D0AAvsmL.mjs.map +1 -0
- package/dist/client/pca-BqZycwCu.mjs +16 -0
- package/dist/client/pca-BqZycwCu.mjs.map +1 -0
- package/dist/client/pca-V2aaOxZA.mjs +167 -0
- package/dist/client/pca-V2aaOxZA.mjs.map +1 -0
- package/dist/client/{projects-_Dfn6eQT.mjs → projects-0feOw_b6.mjs} +2 -2
- package/dist/client/{projects-_Dfn6eQT.mjs.map → projects-0feOw_b6.mjs.map} +1 -1
- package/dist/client/{projects-MbS1USl2.mjs → projects-BsN4bvU2.mjs} +1 -1
- package/dist/client/{projects-MbS1USl2.mjs.map → projects-BsN4bvU2.mjs.map} +1 -1
- package/dist/client/{projects-BuN69cxO.mjs → projects-C1IYOvFQ.mjs} +29 -29
- package/dist/client/{projects-BuN69cxO.mjs.map → projects-C1IYOvFQ.mjs.map} +1 -1
- package/dist/client/{projects-D1pP0XdA.mjs → projects-jyIHL6DE.mjs} +2 -2
- package/dist/client/{projects-D1pP0XdA.mjs.map → projects-jyIHL6DE.mjs.map} +1 -1
- package/dist/client/securitygroups-B4MkSBtI.mjs +441 -0
- package/dist/client/securitygroups-B4MkSBtI.mjs.map +1 -0
- package/dist/client/{useListWithFiltering-mMX_EfyI.mjs → useListWithFiltering-CEDh1LO-.mjs} +1 -1
- package/dist/client/{useListWithFiltering-mMX_EfyI.mjs.map → useListWithFiltering-CEDh1LO-.mjs.map} +1 -1
- package/dist/client/{useModal-Dg4CBeqL.mjs → useModal-DxxlilRm.mjs} +1 -1
- package/dist/client/{useModal-Dg4CBeqL.mjs.map → useModal-DxxlilRm.mjs.map} +1 -1
- package/dist/client/{useProjectId-BWaeJZOy.mjs → useProjectId-CgOTejka.mjs} +1 -1
- package/dist/client/{useProjectId-BWaeJZOy.mjs.map → useProjectId-CgOTejka.mjs.map} +1 -1
- package/package.json +8 -7
- package/permission_policies/compute.yaml +975 -0
- package/permission_policies/image.yaml +71 -0
- package/dist/client/_flavorId-D_A53VYa.mjs.map +0 -1
- package/dist/client/_flavorId-DbhYLFxY.mjs +0 -190
- package/dist/client/_flavorId-DbhYLFxY.mjs.map +0 -1
- package/dist/client/_floatingIpId-BGgftRBQ.mjs.map +0 -1
- package/dist/client/_floatingIpId-D5myuLFz.mjs +0 -228
- package/dist/client/_floatingIpId-D5myuLFz.mjs.map +0 -1
- package/dist/client/_imageId-BoHX155h.mjs +0 -27
- package/dist/client/_imageId-BoHX155h.mjs.map +0 -1
- package/dist/client/_imageId-CTa0c3Av.mjs +0 -530
- package/dist/client/_imageId-CTa0c3Av.mjs.map +0 -1
- package/dist/client/_pcaId-C7Lrv1H_.mjs.map +0 -1
- package/dist/client/_pcaId-DBgz5V_9.mjs.map +0 -1
- package/dist/client/_projectId-Be1Erj68.mjs +0 -300
- package/dist/client/_projectId-Be1Erj68.mjs.map +0 -1
- package/dist/client/_securityGroupId-DQoRQ-yA.mjs.map +0 -1
- package/dist/client/_securityGroupId-ihjy8Lcd.mjs.map +0 -1
- package/dist/client/build-eu9eg0zF.mjs.map +0 -1
- package/dist/client/containers-B_ozmVlx.mjs.map +0 -1
- package/dist/client/containers-rn_ntCJu.mjs.map +0 -1
- package/dist/client/flavors-CT4auvLO.mjs.map +0 -1
- package/dist/client/flavors-DRZb9LJP.mjs.map +0 -1
- package/dist/client/flavors-DtgMd0Ii.mjs +0 -12
- package/dist/client/flavors-DtgMd0Ii.mjs.map +0 -1
- package/dist/client/floatingips-DG5cFJSZ.mjs +0 -12
- package/dist/client/floatingips-DG5cFJSZ.mjs.map +0 -1
- package/dist/client/floatingips-iCMR0ZiL.mjs +0 -436
- package/dist/client/floatingips-iCMR0ZiL.mjs.map +0 -1
- package/dist/client/images-BTqRflJv2.mjs.map +0 -1
- package/dist/client/images-DRTfx8k2.mjs.map +0 -1
- package/dist/client/images-xBfsjxkX.mjs +0 -12
- package/dist/client/images-xBfsjxkX.mjs.map +0 -1
- package/dist/client/objects-CKk6cST_.mjs +0 -4762
- package/dist/client/objects-CKk6cST_.mjs.map +0 -1
- package/dist/client/objects-DkDKVSmQ.mjs.map +0 -1
- package/dist/client/objects-r_Vl31oj.mjs.map +0 -1
- package/dist/client/overview-B7pXx6bt.mjs.map +0 -1
- package/dist/client/overview-CKGLIu6W.mjs +0 -12
- package/dist/client/overview-CKGLIu6W.mjs.map +0 -1
- package/dist/client/overview-Ca8r3SAz.mjs +0 -16
- package/dist/client/overview-Ca8r3SAz.mjs.map +0 -1
- package/dist/client/overview-DkPM0Od5.mjs +0 -12
- package/dist/client/overview-DkPM0Od5.mjs.map +0 -1
- package/dist/client/overview-Dxm7Ef3X.mjs +0 -12
- package/dist/client/overview-Dxm7Ef3X.mjs.map +0 -1
- package/dist/client/overview-ag4Envez.mjs +0 -16
- package/dist/client/overview-ag4Envez.mjs.map +0 -1
- package/dist/client/pca-BGv7Mprl.mjs +0 -12
- package/dist/client/pca-BGv7Mprl.mjs.map +0 -1
- package/dist/client/pca-DpULpMu5.mjs +0 -167
- package/dist/client/pca-DpULpMu5.mjs.map +0 -1
- package/dist/client/securitygroups-DURjFfYK.mjs +0 -12
- package/dist/client/securitygroups-DURjFfYK.mjs.map +0 -1
- package/dist/client/securitygroups-KC2qvmH8.mjs +0 -442
- package/dist/client/securitygroups-KC2qvmH8.mjs.map +0 -1
|
@@ -1,442 +0,0 @@
|
|
|
1
|
-
import { $ as e, D as t, I as n, K as r, N as i, Q as a, W as o, a as s, b as c, g as l, i as u, it as d, j as f, k as p, n as m, q as h, rt as g, s as _, v, w as y, x as b } from "./build-eu9eg0zF.mjs";
|
|
2
|
-
import { r as x } from "./trpcClient-BxguzNYF.mjs";
|
|
3
|
-
import { t as S } from "./securitygroups-DURjFfYK.mjs";
|
|
4
|
-
import { t as C } from "./ListToolbar-CHlkZrpl.mjs";
|
|
5
|
-
import { t as w } from "./useProjectId-BWaeJZOy.mjs";
|
|
6
|
-
import "./hooks-s-I8vWww.mjs";
|
|
7
|
-
import { t as T } from "./buildFilterParams-BDOIRDeD.mjs";
|
|
8
|
-
import { t as E } from "./useListWithFiltering-mMX_EfyI.mjs";
|
|
9
|
-
import { t as D } from "./EditSecurityGroupModal-wQVNIVg1.mjs";
|
|
10
|
-
import { Fragment as O, jsx as k, jsxs as A } from "react/jsx-runtime";
|
|
11
|
-
import { useEffect as j, useRef as M, useState as N } from "react";
|
|
12
|
-
import { useNavigate as P } from "@tanstack/react-router";
|
|
13
|
-
import { Trans as F, useLingui as I } from "@lingui/react";
|
|
14
|
-
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/DeleteSecurityGroupDialog.tsx
|
|
15
|
-
var L = ({ isOpen: t, onClose: n, securityGroup: r, onDelete: i, isDeleting: a = !1, error: o = null }) => {
|
|
16
|
-
let { i18n: u, _: d } = I(), [f, p] = N(""), m = u._({ id: "HNlEFZ" }), h = f.toLowerCase() === m.toLowerCase(), g = r.name || r.id, y = (e) => {
|
|
17
|
-
e.preventDefault(), h && !a && i(r.id);
|
|
18
|
-
}, b = () => {
|
|
19
|
-
p(""), n();
|
|
20
|
-
};
|
|
21
|
-
return /* @__PURE__ */ k(_, {
|
|
22
|
-
open: t,
|
|
23
|
-
onCancel: b,
|
|
24
|
-
size: "small",
|
|
25
|
-
title: u._({
|
|
26
|
-
id: "Y+2SDm",
|
|
27
|
-
values: { securityGroupName: g }
|
|
28
|
-
}),
|
|
29
|
-
modalFooter: /* @__PURE__ */ k(s, {
|
|
30
|
-
className: "flex justify-end",
|
|
31
|
-
children: /* @__PURE__ */ A(v, { children: [/* @__PURE__ */ k(l, {
|
|
32
|
-
variant: "default",
|
|
33
|
-
onClick: b,
|
|
34
|
-
disabled: a,
|
|
35
|
-
children: /* @__PURE__ */ k(F, { id: "dEgA5A" })
|
|
36
|
-
}), /* @__PURE__ */ k(l, {
|
|
37
|
-
variant: "primary-danger",
|
|
38
|
-
onClick: y,
|
|
39
|
-
disabled: !h || a,
|
|
40
|
-
"data-testid": "confirm-delete-button",
|
|
41
|
-
children: a ? /* @__PURE__ */ k(F, { id: "EF2EU9" }) : /* @__PURE__ */ k(F, { id: "cnGeoo" })
|
|
42
|
-
})] })
|
|
43
|
-
}),
|
|
44
|
-
children: /* @__PURE__ */ A("div", { children: [
|
|
45
|
-
o && /* @__PURE__ */ k(c, {
|
|
46
|
-
dismissible: !1,
|
|
47
|
-
variant: "error",
|
|
48
|
-
className: "mt-4",
|
|
49
|
-
children: o
|
|
50
|
-
}),
|
|
51
|
-
/* @__PURE__ */ k(F, { id: "Qb+14I" }),
|
|
52
|
-
/* @__PURE__ */ A("div", {
|
|
53
|
-
className: "mt-4",
|
|
54
|
-
children: [/* @__PURE__ */ k("p", {
|
|
55
|
-
className: "mb-2 text-sm",
|
|
56
|
-
children: /* @__PURE__ */ k(F, {
|
|
57
|
-
id: "hLp49h",
|
|
58
|
-
values: { deleteWord: m },
|
|
59
|
-
components: { 0: /* @__PURE__ */ k("strong", {}) }
|
|
60
|
-
})
|
|
61
|
-
}), /* @__PURE__ */ k(e, {
|
|
62
|
-
id: "confirmation",
|
|
63
|
-
name: "confirmation",
|
|
64
|
-
value: f,
|
|
65
|
-
onChange: (e) => p(e.target.value),
|
|
66
|
-
placeholder: m,
|
|
67
|
-
disabled: a,
|
|
68
|
-
autoComplete: "off",
|
|
69
|
-
"data-testid": "delete-confirmation-input"
|
|
70
|
-
})]
|
|
71
|
-
})
|
|
72
|
-
] })
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
//#endregion
|
|
76
|
-
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.tsx
|
|
77
|
-
function R({ securityGroup: e, permissions: t, onEdit: a, onDelete: o, onViewDetails: s, isReadOnly: c = !1 }) {
|
|
78
|
-
let { i18n: l, _: u } = I(), d = ({ value: e }) => /* @__PURE__ */ k("span", { children: e ? l._({ id: "l75CjT" }) : l._({ id: "1UzENP" }) }), f = () => {
|
|
79
|
-
s && s(e);
|
|
80
|
-
};
|
|
81
|
-
return /* @__PURE__ */ A(n, {
|
|
82
|
-
"data-testid": `security-group-row-${e.id}`,
|
|
83
|
-
onClick: f,
|
|
84
|
-
className: "hover:bg-theme-background-lvl-2 cursor-pointer",
|
|
85
|
-
children: [
|
|
86
|
-
/* @__PURE__ */ k(i, { children: /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("p", {
|
|
87
|
-
className: "text-md",
|
|
88
|
-
children: e.name
|
|
89
|
-
}), /* @__PURE__ */ k("p", {
|
|
90
|
-
className: "text-theme-light text-xs",
|
|
91
|
-
children: e.id
|
|
92
|
-
})] }) }),
|
|
93
|
-
/* @__PURE__ */ k(i, { children: e.description || l._({ id: "h47p9L" }) }),
|
|
94
|
-
/* @__PURE__ */ A(i, { children: [/* @__PURE__ */ k(d, { value: e.shared }), e.shared && /* @__PURE__ */ A("p", { children: [
|
|
95
|
-
/* @__PURE__ */ k(F, { id: "LtI9AS" }),
|
|
96
|
-
": ",
|
|
97
|
-
/* @__PURE__ */ k("span", {
|
|
98
|
-
className: "text-theme-light text-xs",
|
|
99
|
-
children: e.project_id
|
|
100
|
-
})
|
|
101
|
-
] })] }),
|
|
102
|
-
/* @__PURE__ */ k(i, { children: /* @__PURE__ */ k(d, { value: e.stateful }) }),
|
|
103
|
-
/* @__PURE__ */ k(i, {
|
|
104
|
-
onClick: (e) => e.stopPropagation(),
|
|
105
|
-
className: "items-end justify-end pr-0",
|
|
106
|
-
children: /* @__PURE__ */ k(m, { children: /* @__PURE__ */ A(g, { children: [
|
|
107
|
-
/* @__PURE__ */ k(r, {
|
|
108
|
-
label: l._({ id: "v0hPHE" }),
|
|
109
|
-
onClick: () => f()
|
|
110
|
-
}),
|
|
111
|
-
t.canUpdate && !c && /* @__PURE__ */ k(r, {
|
|
112
|
-
label: l._({ id: "ePK91l" }),
|
|
113
|
-
onClick: () => a(e)
|
|
114
|
-
}),
|
|
115
|
-
t.canDelete && !c && /* @__PURE__ */ k(r, {
|
|
116
|
-
label: l._({ id: "cnGeoo" }),
|
|
117
|
-
onClick: () => o(e)
|
|
118
|
-
})
|
|
119
|
-
] }) })
|
|
120
|
-
})
|
|
121
|
-
]
|
|
122
|
-
}, e.id);
|
|
123
|
-
}
|
|
124
|
-
//#endregion
|
|
125
|
-
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx
|
|
126
|
-
var z = ({ securityGroups: e, isLoading: t, isError: r, error: i, permissions: a, onDeleteSecurityGroup: s, isDeletingSecurityGroup: c = !1, deleteError: l = null, onUpdateSecurityGroup: u, isUpdatingSecurityGroup: f = !1, updateError: m = null, currentProjectId: g }) => {
|
|
127
|
-
let { i18n: _, _: v } = I(), y = P(), b = w(), [x, S] = N(null), [C, T] = N(!1), [E, z] = N(!1), B = M(!1), V = M(!1), H = (e) => {
|
|
128
|
-
S(e), T(!0);
|
|
129
|
-
}, U = (e) => {
|
|
130
|
-
S(e), z(!0);
|
|
131
|
-
}, W = (e) => {
|
|
132
|
-
y({
|
|
133
|
-
to: "/projects/$projectId/network/securitygroups/$securityGroupId",
|
|
134
|
-
params: {
|
|
135
|
-
projectId: b,
|
|
136
|
-
securityGroupId: e.id
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}, G = () => {
|
|
140
|
-
S(null), T(!1);
|
|
141
|
-
}, K = () => {
|
|
142
|
-
S(null), z(!1);
|
|
143
|
-
};
|
|
144
|
-
return j(() => {
|
|
145
|
-
B.current && !c && E && !l && K(), B.current = c;
|
|
146
|
-
}, [
|
|
147
|
-
c,
|
|
148
|
-
l,
|
|
149
|
-
E
|
|
150
|
-
]), j(() => {
|
|
151
|
-
V.current && !f && C && !m && G(), V.current = f;
|
|
152
|
-
}, [
|
|
153
|
-
f,
|
|
154
|
-
m,
|
|
155
|
-
C
|
|
156
|
-
]), t ? /* @__PURE__ */ A(h, {
|
|
157
|
-
className: "py-8",
|
|
158
|
-
distribution: "center",
|
|
159
|
-
alignment: "center",
|
|
160
|
-
direction: "vertical",
|
|
161
|
-
children: [/* @__PURE__ */ k(o, {
|
|
162
|
-
variant: "primary",
|
|
163
|
-
size: "large",
|
|
164
|
-
className: "mb-2"
|
|
165
|
-
}), /* @__PURE__ */ k(F, { id: "Z3FXyt" })]
|
|
166
|
-
}) : r ? /* @__PURE__ */ k(h, {
|
|
167
|
-
className: "py-8",
|
|
168
|
-
distribution: "center",
|
|
169
|
-
alignment: "center",
|
|
170
|
-
direction: "vertical",
|
|
171
|
-
children: i?.message ?? _._({ id: "Wca9WC" })
|
|
172
|
-
}) : e.length === 0 ? /* @__PURE__ */ k(F, { id: "SfW/3r" }) : /* @__PURE__ */ A(O, { children: [/* @__PURE__ */ A(p, {
|
|
173
|
-
columns: 5,
|
|
174
|
-
children: [/* @__PURE__ */ k(n, { children: [
|
|
175
|
-
_._({ id: "6YtxFj" }),
|
|
176
|
-
_._({ id: "Nu4oKW" }),
|
|
177
|
-
_._({ id: "0Gd0NU" }),
|
|
178
|
-
_._({ id: "Jim5X9" }),
|
|
179
|
-
""
|
|
180
|
-
].map((e) => /* @__PURE__ */ k(d, { children: e }, e)) }), e.map((e) => /* @__PURE__ */ k(R, {
|
|
181
|
-
securityGroup: e,
|
|
182
|
-
permissions: a,
|
|
183
|
-
onEdit: H,
|
|
184
|
-
onDelete: U,
|
|
185
|
-
onViewDetails: W,
|
|
186
|
-
isReadOnly: !!(g && e.project_id && e.project_id !== g)
|
|
187
|
-
}, e.id))]
|
|
188
|
-
}), x && /* @__PURE__ */ A(O, { children: [/* @__PURE__ */ k(D, {
|
|
189
|
-
securityGroup: x,
|
|
190
|
-
open: C,
|
|
191
|
-
onClose: G,
|
|
192
|
-
onUpdate: async (e, t) => {
|
|
193
|
-
u && await u(e, t);
|
|
194
|
-
},
|
|
195
|
-
isLoading: f,
|
|
196
|
-
error: m
|
|
197
|
-
}), /* @__PURE__ */ k(L, {
|
|
198
|
-
securityGroup: x,
|
|
199
|
-
isOpen: E,
|
|
200
|
-
onClose: K,
|
|
201
|
-
onDelete: (e) => {
|
|
202
|
-
s && s(e);
|
|
203
|
-
},
|
|
204
|
-
isDeleting: c,
|
|
205
|
-
error: l
|
|
206
|
-
})] })] });
|
|
207
|
-
}, B = {
|
|
208
|
-
name: "",
|
|
209
|
-
description: "",
|
|
210
|
-
stateful: !0
|
|
211
|
-
}, V = ({ isOpen: n, onClose: r, onCreate: i, isLoading: d = !1, error: p = null }) => {
|
|
212
|
-
let { i18n: m, _: h } = I(), [g, y] = N({ ...B }), [x, S] = N({}), C = (e) => {
|
|
213
|
-
let { name: t, value: n, type: r } = e.target, i = e.target.checked;
|
|
214
|
-
y((e) => ({
|
|
215
|
-
...e,
|
|
216
|
-
[t]: r === "checkbox" ? i : n
|
|
217
|
-
})), x[t] && S((e) => {
|
|
218
|
-
let n = { ...e };
|
|
219
|
-
return delete n[t], n;
|
|
220
|
-
});
|
|
221
|
-
}, w = () => {
|
|
222
|
-
let e = {};
|
|
223
|
-
return (!g.name || g.name.trim() === "") && (e.name = m._({ id: "lN/Z9n" })), S(e), Object.keys(e).length === 0;
|
|
224
|
-
}, T = async (e) => {
|
|
225
|
-
e.preventDefault(), w() && (await i({
|
|
226
|
-
name: g.name.trim(),
|
|
227
|
-
description: g.description.trim() || void 0,
|
|
228
|
-
stateful: g.stateful
|
|
229
|
-
}), E());
|
|
230
|
-
}, E = () => {
|
|
231
|
-
y({ ...B }), S({}), r();
|
|
232
|
-
};
|
|
233
|
-
return /* @__PURE__ */ A(_, {
|
|
234
|
-
open: n,
|
|
235
|
-
onCancel: E,
|
|
236
|
-
size: "large",
|
|
237
|
-
title: m._({ id: "YjAOtb" }),
|
|
238
|
-
modalFooter: /* @__PURE__ */ k(s, {
|
|
239
|
-
className: "flex justify-end",
|
|
240
|
-
children: /* @__PURE__ */ A(v, { children: [/* @__PURE__ */ k(l, {
|
|
241
|
-
variant: "default",
|
|
242
|
-
onClick: E,
|
|
243
|
-
disabled: d,
|
|
244
|
-
children: /* @__PURE__ */ k(F, { id: "dEgA5A" })
|
|
245
|
-
}), /* @__PURE__ */ k(l, {
|
|
246
|
-
variant: "primary",
|
|
247
|
-
onClick: (e) => {
|
|
248
|
-
T(e);
|
|
249
|
-
},
|
|
250
|
-
disabled: d,
|
|
251
|
-
"data-testid": "create-security-group-button",
|
|
252
|
-
children: d ? /* @__PURE__ */ k(o, { size: "small" }) : /* @__PURE__ */ k(F, { id: "YjAOtb" })
|
|
253
|
-
})] })
|
|
254
|
-
}),
|
|
255
|
-
children: [
|
|
256
|
-
p && /* @__PURE__ */ k(c, {
|
|
257
|
-
dismissible: !1,
|
|
258
|
-
variant: "error",
|
|
259
|
-
className: "mb-4",
|
|
260
|
-
children: p
|
|
261
|
-
}),
|
|
262
|
-
d && /* @__PURE__ */ A("div", {
|
|
263
|
-
className: "mb-4 flex items-center justify-center gap-2",
|
|
264
|
-
children: [/* @__PURE__ */ k(o, { variant: "primary" }), /* @__PURE__ */ k("span", {
|
|
265
|
-
className: "text-theme-high text-sm",
|
|
266
|
-
children: /* @__PURE__ */ k(F, { id: "Km4AGG" })
|
|
267
|
-
})]
|
|
268
|
-
}),
|
|
269
|
-
!d && /* @__PURE__ */ k(t, {
|
|
270
|
-
className: "mb-6",
|
|
271
|
-
children: /* @__PURE__ */ A(u, {
|
|
272
|
-
className: "mb-6",
|
|
273
|
-
children: [
|
|
274
|
-
/* @__PURE__ */ k(f, {
|
|
275
|
-
className: "mb-6",
|
|
276
|
-
children: /* @__PURE__ */ k(e, {
|
|
277
|
-
id: "name",
|
|
278
|
-
name: "name",
|
|
279
|
-
label: m._({ id: "6YtxFj" }),
|
|
280
|
-
value: g.name,
|
|
281
|
-
onChange: C,
|
|
282
|
-
required: !0,
|
|
283
|
-
errortext: x.name,
|
|
284
|
-
placeholder: m._({ id: "Ac6dy9" }),
|
|
285
|
-
disabled: d
|
|
286
|
-
})
|
|
287
|
-
}),
|
|
288
|
-
/* @__PURE__ */ k(f, {
|
|
289
|
-
className: "mb-6",
|
|
290
|
-
children: /* @__PURE__ */ k(b, {
|
|
291
|
-
id: "description",
|
|
292
|
-
name: "description",
|
|
293
|
-
label: m._({ id: "Nu4oKW" }),
|
|
294
|
-
value: g.description,
|
|
295
|
-
onChange: C,
|
|
296
|
-
placeholder: m._({ id: "Nu4oKW" }),
|
|
297
|
-
disabled: d,
|
|
298
|
-
rows: 3
|
|
299
|
-
})
|
|
300
|
-
}),
|
|
301
|
-
/* @__PURE__ */ k(f, {
|
|
302
|
-
className: "mb-0",
|
|
303
|
-
children: /* @__PURE__ */ k(a, {
|
|
304
|
-
id: "stateful",
|
|
305
|
-
name: "stateful",
|
|
306
|
-
label: m._({ id: "Jim5X9" }),
|
|
307
|
-
checked: g.stateful,
|
|
308
|
-
onChange: C,
|
|
309
|
-
disabled: d
|
|
310
|
-
})
|
|
311
|
-
})
|
|
312
|
-
]
|
|
313
|
-
})
|
|
314
|
-
})
|
|
315
|
-
]
|
|
316
|
-
});
|
|
317
|
-
}, H = {
|
|
318
|
-
TRUE: "true",
|
|
319
|
-
FALSE: "false"
|
|
320
|
-
}, U = () => {
|
|
321
|
-
let { i18n: e, _: t } = I(), n = P(), r = w(), [i, a] = N(!1), [o, s] = N(null), [c, u] = N(null), [d, f] = N(null), { searchTerm: p, sortSettings: m, filterSettings: h, handleSearchChange: g, handleSortChange: _, handleFilterChange: v } = E({
|
|
322
|
-
defaultSortKey: "name",
|
|
323
|
-
defaultSortDir: "asc",
|
|
324
|
-
sortOptions: [{
|
|
325
|
-
label: e._({ id: "6YtxFj" }),
|
|
326
|
-
value: "name"
|
|
327
|
-
}, {
|
|
328
|
-
label: e._({ id: "podzPY" }),
|
|
329
|
-
value: "project_id"
|
|
330
|
-
}],
|
|
331
|
-
filterSettings: { filters: [{
|
|
332
|
-
displayName: e._({ id: "0Gd0NU" }),
|
|
333
|
-
filterName: "shared",
|
|
334
|
-
values: Object.values(H),
|
|
335
|
-
supportsMultiValue: !1
|
|
336
|
-
}] }
|
|
337
|
-
}), y = x.useUtils(), b = {
|
|
338
|
-
canCreate: !0,
|
|
339
|
-
canUpdate: !0,
|
|
340
|
-
canDelete: !0,
|
|
341
|
-
canManageAccess: !0
|
|
342
|
-
}, { data: S = [], isLoading: D, isError: O, error: j } = x.network.securityGroup.list.useQuery({
|
|
343
|
-
project_id: r || "",
|
|
344
|
-
sort_key: m.sortBy,
|
|
345
|
-
sort_dir: m.sortDirection,
|
|
346
|
-
...T(h),
|
|
347
|
-
...p ? { searchTerm: p } : {}
|
|
348
|
-
}, { enabled: !!r }), M = x.network.securityGroup.create.useMutation({
|
|
349
|
-
onSuccess: (e) => {
|
|
350
|
-
y.network.securityGroup.list.invalidate(), u(null), n({
|
|
351
|
-
to: "/projects/$projectId/network/securitygroups/$securityGroupId",
|
|
352
|
-
params: {
|
|
353
|
-
projectId: r,
|
|
354
|
-
securityGroupId: e.id
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
},
|
|
358
|
-
onError: (t) => {
|
|
359
|
-
u(t.message || e._({ id: "o6M6l0" }));
|
|
360
|
-
}
|
|
361
|
-
}), L = x.network.securityGroup.deleteById.useMutation({
|
|
362
|
-
onSuccess: () => {
|
|
363
|
-
y.network.securityGroup.list.invalidate(), s(null);
|
|
364
|
-
},
|
|
365
|
-
onError: (t) => {
|
|
366
|
-
s(t.message || e._({ id: "d0pLfy" }));
|
|
367
|
-
}
|
|
368
|
-
}), R = x.network.securityGroup.update.useMutation({
|
|
369
|
-
onSuccess: () => {
|
|
370
|
-
y.network.securityGroup.list.invalidate(), f(null);
|
|
371
|
-
},
|
|
372
|
-
onError: (t) => {
|
|
373
|
-
f(t.message || e._({ id: "jPxavx" }));
|
|
374
|
-
}
|
|
375
|
-
});
|
|
376
|
-
return /* @__PURE__ */ A("div", {
|
|
377
|
-
className: "relative",
|
|
378
|
-
children: [
|
|
379
|
-
/* @__PURE__ */ k(C, {
|
|
380
|
-
sortSettings: m,
|
|
381
|
-
filterSettings: h,
|
|
382
|
-
searchTerm: p,
|
|
383
|
-
onSort: _,
|
|
384
|
-
onFilter: v,
|
|
385
|
-
onSearch: g,
|
|
386
|
-
actions: b.canCreate && /* @__PURE__ */ k(l, {
|
|
387
|
-
onClick: () => a(!0),
|
|
388
|
-
variant: "primary",
|
|
389
|
-
children: /* @__PURE__ */ k(F, { id: "YjAOtb" })
|
|
390
|
-
})
|
|
391
|
-
}),
|
|
392
|
-
/* @__PURE__ */ k(z, {
|
|
393
|
-
securityGroups: S,
|
|
394
|
-
isLoading: D,
|
|
395
|
-
isError: O,
|
|
396
|
-
error: j,
|
|
397
|
-
permissions: b,
|
|
398
|
-
onCreateClick: () => a(!0),
|
|
399
|
-
onDeleteSecurityGroup: (e) => {
|
|
400
|
-
s(null), L.mutate({
|
|
401
|
-
project_id: r,
|
|
402
|
-
securityGroupId: e
|
|
403
|
-
});
|
|
404
|
-
},
|
|
405
|
-
isDeletingSecurityGroup: L.isPending,
|
|
406
|
-
deleteError: o,
|
|
407
|
-
onUpdateSecurityGroup: async (e, t) => {
|
|
408
|
-
f(null), await R.mutateAsync({
|
|
409
|
-
project_id: r,
|
|
410
|
-
securityGroupId: e,
|
|
411
|
-
...t
|
|
412
|
-
});
|
|
413
|
-
},
|
|
414
|
-
isUpdatingSecurityGroup: R.isPending,
|
|
415
|
-
updateError: d,
|
|
416
|
-
currentProjectId: r
|
|
417
|
-
}),
|
|
418
|
-
/* @__PURE__ */ k(V, {
|
|
419
|
-
isOpen: i,
|
|
420
|
-
onClose: () => a(!1),
|
|
421
|
-
onCreate: async (e) => {
|
|
422
|
-
u(null), await M.mutateAsync({
|
|
423
|
-
project_id: r,
|
|
424
|
-
...e
|
|
425
|
-
});
|
|
426
|
-
},
|
|
427
|
-
isLoading: M.isPending,
|
|
428
|
-
error: c
|
|
429
|
-
})
|
|
430
|
-
]
|
|
431
|
-
});
|
|
432
|
-
};
|
|
433
|
-
//#endregion
|
|
434
|
-
//#region src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx?tsr-split=component
|
|
435
|
-
function W() {
|
|
436
|
-
let { i18n: e, _: t } = I(), { setPageTitle: n } = S.useRouteContext();
|
|
437
|
-
return n(e._({ id: "4opp4r" })), /* @__PURE__ */ A(O, { children: [/* @__PURE__ */ k(y, { children: e._({ id: "4opp4r" }) }), /* @__PURE__ */ k(U, {})] });
|
|
438
|
-
}
|
|
439
|
-
//#endregion
|
|
440
|
-
export { W as component };
|
|
441
|
-
|
|
442
|
-
//# sourceMappingURL=securitygroups-KC2qvmH8.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"securitygroups-KC2qvmH8.mjs","names":["React","useState","Modal","Button","ModalFooter","ButtonRow","Message","TextInput","DeleteSecurityGroupDialog","isOpen","onClose","securityGroup","onDelete","isDeleting","error","useLingui","confirmationText","setConfirmationText","deleteWord","t","isDeleteEnabled","toLowerCase","securityGroupName","name","id","handleDelete","e","preventDefault","handleClose","open","onCancel","size","title","modalFooter","className","variant","onClick","disabled","data-testid","div","dismissible","p","strong","value","onChange","target","placeholder","autoComplete","DataGridCell","DataGridRow","PopupMenu","PopupMenuItem","PopupMenuOptions","SecurityGroupTableRow","securityGroup","sg","permissions","onEdit","onDelete","onViewDetails","isReadOnly","useLingui","BooleanValue","value","span","t","handleShowDetails","data-testid","id","onClick","className","div","p","name","description","shared","project_id","stateful","e","stopPropagation","label","canUpdate","canDelete","useState","useEffect","useRef","DataGrid","DataGridHeadCell","DataGridRow","Stack","Spinner","useNavigate","useProjectId","EditSecurityGroupModal","DeleteSecurityGroupDialog","SecurityGroupTableRow","SecurityGroupListContainer","securityGroups","isLoading","isError","error","permissions","onDeleteSecurityGroup","isDeletingSecurityGroup","deleteError","onUpdateSecurityGroup","isUpdatingSecurityGroup","updateError","currentProjectId","useLingui","navigate","projectId","selectedSecurityGroup","setSelectedSecurityGroup","editModalOpen","setEditModalOpen","deleteDialogOpen","setDeleteDialogOpen","prevIsDeletingRef","prevIsUpdatingRef","handleEdit","sg","handleDelete","handleViewDetails","to","params","securityGroupId","id","closeEditModal","closeDeleteDialog","deletionJustFinished","current","updateJustFinished","className","distribution","alignment","direction","variant","size","message","t","length","columns","map","label","isReadOnly","Boolean","project_id","securityGroup","onEdit","onDelete","onViewDetails","open","onClose","onUpdate","data","isOpen","isDeleting","React","useState","Modal","Form","FormRow","FormSection","TextInput","Checkbox","Button","ButtonRow","Spinner","ModalFooter","Textarea","Message","defaultSecurityGroupValues","name","description","stateful","CreateSecurityGroupModal","isOpen","onClose","onCreate","isLoading","error","useLingui","properties","setProperties","errors","setErrors","handleInputChange","e","value","type","target","checked","prev","newErrors","validateForm","trim","t","Object","keys","length","handleSubmit","preventDefault","securityGroupData","undefined","handleClose","open","onCancel","size","title","modalFooter","className","variant","onClick","disabled","data-testid","dismissible","div","span","id","label","onChange","required","errortext","placeholder","rows","useState","useNavigate","Button","trpcReact","ListToolbar","buildFilterParams","useListWithFiltering","useProjectId","SecurityGroupListContainer","CreateSecurityGroupModal","SECURITY_GROUP_SHARED","TRUE","FALSE","SecurityGroups","useLingui","navigate","projectId","createModalOpen","setCreateModalOpen","deleteError","setDeleteError","createError","setCreateError","updateError","setUpdateError","searchTerm","sortSettings","filterSettings","handleSearchChange","handleSortChange","handleFilterChange","defaultSortKey","defaultSortDir","sortOptions","label","t","value","filters","displayName","filterName","values","Object","supportsMultiValue","utils","useUtils","permissions","canCreate","canUpdate","canDelete","canManageAccess","data","securityGroups","isLoading","isError","error","network","securityGroup","list","useQuery","project_id","sort_key","sortBy","sort_dir","sortDirection","enabled","createSecurityGroupMutation","create","useMutation","onSuccess","createdSecurityGroup","invalidate","to","params","securityGroupId","id","onError","message","deleteSecurityGroupMutation","deleteById","updateSecurityGroupMutation","update","handleCreateSecurityGroup","securityGroupData","mutateAsync","handleDeleteSecurityGroup","mutate","handleUpdateSecurityGroup","div","className","onSort","onFilter","onSearch","actions","onClick","variant","onCreateClick","onDeleteSecurityGroup","isDeletingSecurityGroup","isPending","onUpdateSecurityGroup","isUpdatingSecurityGroup","currentProjectId","isOpen","onClose","onCreate","useLingui","SecurityGroups","ContentHeading","Route","RouteComponent","t","setPageTitle","useRouteContext","component"],"sources":["../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/DeleteSecurityGroupDialog.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/CreateSecurityGroupModal.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.tsx","../../src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx?tsr-split=component"],"sourcesContent":["import React, { useState } from \"react\"\nimport { Modal, Button, ModalFooter, ButtonRow, Message, TextInput } from \"@cloudoperators/juno-ui-components\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport type { SecurityGroup } from \"@/server/Network/types/securityGroup\"\n\ninterface DeleteSecurityGroupDialogProps {\n isOpen: boolean\n securityGroup: SecurityGroup\n onClose: () => void\n onDelete: (securityGroupId: string) => void\n isDeleting?: boolean\n error?: string | null\n}\n\nexport const DeleteSecurityGroupDialog: React.FC<DeleteSecurityGroupDialogProps> = ({\n isOpen,\n onClose,\n securityGroup,\n onDelete,\n isDeleting = false,\n error = null,\n}) => {\n const { t } = useLingui()\n const [confirmationText, setConfirmationText] = useState(\"\")\n\n const deleteWord = t`delete`\n const isDeleteEnabled = confirmationText.toLowerCase() === deleteWord.toLowerCase()\n const securityGroupName = securityGroup.name || securityGroup.id\n\n const handleDelete = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault()\n if (isDeleteEnabled && !isDeleting) {\n onDelete(securityGroup.id)\n }\n }\n\n const handleClose = () => {\n setConfirmationText(\"\")\n onClose()\n }\n\n return (\n <Modal\n open={isOpen}\n onCancel={handleClose}\n size=\"small\"\n title={t`Delete Security Group \"${securityGroupName}\"`}\n modalFooter={\n <ModalFooter className=\"flex justify-end\">\n <ButtonRow>\n <Button variant=\"default\" onClick={handleClose} disabled={isDeleting}>\n <Trans>Cancel</Trans>\n </Button>\n <Button\n variant=\"primary-danger\"\n onClick={handleDelete}\n disabled={!isDeleteEnabled || isDeleting}\n data-testid=\"confirm-delete-button\"\n >\n {isDeleting ? <Trans>Deleting...</Trans> : <Trans>Delete</Trans>}\n </Button>\n </ButtonRow>\n </ModalFooter>\n }\n >\n <div>\n {/* Error Message */}\n {error && (\n <Message dismissible={false} variant=\"error\" className=\"mt-4\">\n {error}\n </Message>\n )}\n\n {/* Warning */}\n <Trans>This action cannot be undone. The security group will be permanently deleted.</Trans>\n\n {/* Confirmation Input */}\n <div className=\"mt-4\">\n <p className=\"mb-2 text-sm\">\n <Trans>\n Type <strong>{deleteWord}</strong> to confirm:\n </Trans>\n </p>\n <TextInput\n id=\"confirmation\"\n name=\"confirmation\"\n value={confirmationText}\n onChange={(e) => setConfirmationText(e.target.value)}\n placeholder={deleteWord}\n disabled={isDeleting}\n autoComplete=\"off\"\n data-testid=\"delete-confirmation-input\"\n />\n </div>\n </div>\n </Modal>\n )\n}\n","import {\n DataGridCell,\n DataGridRow,\n PopupMenu,\n PopupMenuItem,\n PopupMenuOptions,\n} from \"@cloudoperators/juno-ui-components\"\nimport { useLingui, Trans } from \"@lingui/react/macro\"\nimport type { SecurityGroup } from \"@/server/Network/types/securityGroup\"\n\nexport interface SecurityGroupPermissions {\n canCreate: boolean\n canUpdate: boolean\n canDelete: boolean\n canManageAccess: boolean\n}\n\ninterface SecurityGroupTableRowProps {\n securityGroup: SecurityGroup\n permissions: SecurityGroupPermissions\n onEdit: (sg: SecurityGroup) => void\n onDelete: (sg: SecurityGroup) => void\n onViewDetails?: (sg: SecurityGroup) => void\n isReadOnly?: boolean\n}\n\nexport function SecurityGroupTableRow({\n securityGroup: sg,\n permissions,\n onEdit,\n onDelete,\n onViewDetails,\n isReadOnly = false,\n}: SecurityGroupTableRowProps) {\n const { t } = useLingui()\n\n const BooleanValue = ({ value }: { value: boolean | undefined }) => <span>{value ? t`Yes` : t`No`}</span>\n\n const handleShowDetails = () => {\n if (onViewDetails) {\n onViewDetails(sg)\n }\n }\n\n return (\n <DataGridRow\n key={sg.id}\n data-testid={`security-group-row-${sg.id}`}\n onClick={handleShowDetails}\n className=\"hover:bg-theme-background-lvl-2 cursor-pointer\"\n >\n <DataGridCell>\n <div>\n <p className=\"text-md\">{sg.name}</p>\n <p className=\"text-theme-light text-xs\">{sg.id}</p>\n </div>\n </DataGridCell>\n <DataGridCell>{sg.description || t`—`}</DataGridCell>\n <DataGridCell>\n <BooleanValue value={sg.shared} />\n {sg.shared && (\n <p>\n <Trans>Owner</Trans>: <span className=\"text-theme-light text-xs\">{sg.project_id}</span>\n </p>\n )}\n </DataGridCell>\n <DataGridCell>\n <BooleanValue value={sg.stateful} />\n </DataGridCell>\n <DataGridCell onClick={(e) => e.stopPropagation()} className=\"items-end justify-end pr-0\">\n <PopupMenu>\n <PopupMenuOptions>\n <PopupMenuItem label={t`Show Details`} onClick={() => handleShowDetails()} />\n {permissions.canUpdate && !isReadOnly && <PopupMenuItem label={t`Edit`} onClick={() => onEdit(sg)} />}\n {permissions.canDelete && !isReadOnly && <PopupMenuItem label={t`Delete`} onClick={() => onDelete(sg)} />}\n </PopupMenuOptions>\n </PopupMenu>\n </DataGridCell>\n </DataGridRow>\n )\n}\n","import { useState, useEffect, useRef } from \"react\"\nimport { DataGrid, DataGridHeadCell, DataGridRow, Stack, Spinner } from \"@cloudoperators/juno-ui-components\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { useNavigate } from \"@tanstack/react-router\"\nimport { useProjectId } from \"@/client/hooks\"\nimport type { SecurityGroup } from \"@/server/Network/types/securityGroup\"\nimport type { UpdateSecurityGroupInput } from \"@/server/Network/types/securityGroup\"\nimport { EditSecurityGroupModal } from \"./-modals/EditSecurityGroupModal\"\nimport { DeleteSecurityGroupDialog } from \"./-modals/DeleteSecurityGroupDialog\"\nimport { SecurityGroupTableRow, type SecurityGroupPermissions } from \"./SecurityGroupTableRow\"\n\ninterface SecurityGroupListContainerProps {\n securityGroups: SecurityGroup[]\n isLoading: boolean\n isError: boolean\n error: { message?: string } | null\n permissions: SecurityGroupPermissions\n onCreateClick?: () => void\n onDeleteSecurityGroup?: (securityGroupId: string) => void\n isDeletingSecurityGroup?: boolean\n deleteError?: string | null\n onUpdateSecurityGroup?: (\n securityGroupId: string,\n data: Omit<UpdateSecurityGroupInput, \"securityGroupId\" | \"project_id\">\n ) => void\n isUpdatingSecurityGroup?: boolean\n updateError?: string | null\n currentProjectId?: string\n}\n\nexport const SecurityGroupListContainer = ({\n securityGroups,\n isLoading,\n isError,\n error,\n permissions,\n onDeleteSecurityGroup,\n isDeletingSecurityGroup = false,\n deleteError = null,\n onUpdateSecurityGroup,\n isUpdatingSecurityGroup = false,\n updateError = null,\n currentProjectId,\n}: SecurityGroupListContainerProps) => {\n const { t } = useLingui()\n const navigate = useNavigate()\n const projectId = useProjectId()\n const [selectedSecurityGroup, setSelectedSecurityGroup] = useState<SecurityGroup | null>(null)\n const [editModalOpen, setEditModalOpen] = useState(false)\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false)\n const prevIsDeletingRef = useRef<boolean>(false)\n const prevIsUpdatingRef = useRef<boolean>(false)\n\n const handleEdit = (sg: SecurityGroup) => {\n setSelectedSecurityGroup(sg)\n setEditModalOpen(true)\n }\n\n const handleDelete = (sg: SecurityGroup) => {\n setSelectedSecurityGroup(sg)\n setDeleteDialogOpen(true)\n }\n\n const handleViewDetails = (sg: SecurityGroup) => {\n navigate({\n to: \"/projects/$projectId/network/securitygroups/$securityGroupId\",\n params: { projectId, securityGroupId: sg.id },\n })\n }\n\n const closeEditModal = () => {\n setSelectedSecurityGroup(null)\n setEditModalOpen(false)\n }\n\n const closeDeleteDialog = () => {\n setSelectedSecurityGroup(null)\n setDeleteDialogOpen(false)\n }\n\n // Close delete dialog when deletion completes successfully\n useEffect(() => {\n // Check if deletion just finished (was deleting before, now not deleting)\n const deletionJustFinished = prevIsDeletingRef.current && !isDeletingSecurityGroup\n\n // Close dialog if deletion just finished and there's no error\n if (deletionJustFinished && deleteDialogOpen && !deleteError) {\n closeDeleteDialog()\n }\n\n // Update the ref for next render\n prevIsDeletingRef.current = isDeletingSecurityGroup\n }, [isDeletingSecurityGroup, deleteError, deleteDialogOpen])\n\n // Close edit modal when update completes successfully\n useEffect(() => {\n // Check if update just finished (was updating before, now not updating)\n const updateJustFinished = prevIsUpdatingRef.current && !isUpdatingSecurityGroup\n\n // Close modal if update just finished and there's no error\n if (updateJustFinished && editModalOpen && !updateError) {\n closeEditModal()\n }\n\n // Update the ref for next render\n prevIsUpdatingRef.current = isUpdatingSecurityGroup\n }, [isUpdatingSecurityGroup, updateError, editModalOpen])\n\n // Loading state\n if (isLoading) {\n return (\n <Stack className=\"py-8\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n <Spinner variant=\"primary\" size=\"large\" className=\"mb-2\" />\n <Trans>Loading...</Trans>\n </Stack>\n )\n }\n\n // Error state\n if (isError) {\n return (\n <Stack className=\"py-8\" distribution=\"center\" alignment=\"center\" direction=\"vertical\">\n {error?.message ?? t`Failed to load security groups`}\n </Stack>\n )\n }\n\n // Empty state\n if (securityGroups.length === 0) {\n return <Trans>There are no groups</Trans>\n }\n\n return (\n <>\n <DataGrid columns={5}>\n <DataGridRow>\n {[t`Name`, t`Description`, t`Shared`, t`Stateful`, \"\"].map((label) => (\n <DataGridHeadCell key={label}>{label}</DataGridHeadCell>\n ))}\n </DataGridRow>\n {securityGroups.map((sg) => {\n // Compute isReadOnly only when the security group has an explicit project owner\n const isReadOnly = Boolean(currentProjectId && sg.project_id && sg.project_id !== currentProjectId)\n\n return (\n <SecurityGroupTableRow\n key={sg.id}\n securityGroup={sg}\n permissions={permissions}\n onEdit={handleEdit}\n onDelete={handleDelete}\n onViewDetails={handleViewDetails}\n isReadOnly={isReadOnly}\n />\n )\n })}\n </DataGrid>\n\n {selectedSecurityGroup && (\n <>\n <EditSecurityGroupModal\n securityGroup={selectedSecurityGroup}\n open={editModalOpen}\n onClose={closeEditModal}\n onUpdate={async (id, data) => {\n if (onUpdateSecurityGroup) {\n await onUpdateSecurityGroup(id, data)\n }\n }}\n isLoading={isUpdatingSecurityGroup}\n error={updateError}\n />\n <DeleteSecurityGroupDialog\n securityGroup={selectedSecurityGroup}\n isOpen={deleteDialogOpen}\n onClose={closeDeleteDialog}\n onDelete={(id) => {\n if (onDeleteSecurityGroup) {\n onDeleteSecurityGroup(id)\n }\n }}\n isDeleting={isDeletingSecurityGroup}\n error={deleteError}\n />\n </>\n )}\n </>\n )\n}\n","import React, { useState } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n Modal,\n Form,\n FormRow,\n FormSection,\n TextInput,\n Checkbox,\n Button,\n ButtonRow,\n Spinner,\n ModalFooter,\n Textarea,\n Message,\n} from \"@cloudoperators/juno-ui-components\"\nimport { CreateSecurityGroupInput } from \"@/server/Network/types/securityGroup\"\n\ninterface CreateSecurityGroupModalProps {\n isOpen: boolean\n onClose: () => void\n onCreate: (securityGroupData: Omit<CreateSecurityGroupInput, \"project_id\">) => Promise<void>\n isLoading?: boolean\n error?: string | null\n}\n\ninterface SecurityGroupProperties {\n name: string\n description: string\n stateful: boolean\n}\n\nconst defaultSecurityGroupValues: SecurityGroupProperties = {\n name: \"\",\n description: \"\",\n stateful: true,\n}\n\nexport const CreateSecurityGroupModal: React.FC<CreateSecurityGroupModalProps> = ({\n isOpen,\n onClose,\n onCreate,\n isLoading = false,\n error = null,\n}) => {\n const { t } = useLingui()\n\n const [properties, setProperties] = useState<SecurityGroupProperties>({ ...defaultSecurityGroupValues })\n const [errors, setErrors] = useState<{ [key: string]: string }>({})\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name, value, type } = e.target\n const checked = (e.target as HTMLInputElement).checked\n\n setProperties((prev) => ({\n ...prev,\n [name]: type === \"checkbox\" ? checked : value,\n }))\n\n if (errors[name]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[name]\n return newErrors\n })\n }\n }\n\n const validateForm = (): boolean => {\n const newErrors: { [key: string]: string } = {}\n\n if (!properties.name || properties.name.trim() === \"\") {\n newErrors.name = t`Security group name is required`\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n\n if (!validateForm()) {\n return\n }\n\n const securityGroupData: Omit<CreateSecurityGroupInput, \"project_id\"> = {\n name: properties.name.trim(),\n description: properties.description.trim() || undefined,\n stateful: properties.stateful,\n }\n\n await onCreate(securityGroupData)\n handleClose()\n }\n\n const handleClose = () => {\n setProperties({ ...defaultSecurityGroupValues })\n setErrors({})\n onClose()\n }\n\n return (\n <Modal\n open={isOpen}\n onCancel={handleClose}\n size=\"large\"\n title={t`Create Security Group`}\n modalFooter={\n <ModalFooter className=\"flex justify-end\">\n <ButtonRow>\n <Button variant=\"default\" onClick={handleClose} disabled={isLoading}>\n <Trans>Cancel</Trans>\n </Button>\n <Button\n variant=\"primary\"\n onClick={(e) => {\n handleSubmit(e)\n }}\n disabled={isLoading}\n data-testid=\"create-security-group-button\"\n >\n {isLoading ? <Spinner size=\"small\" /> : <Trans>Create Security Group</Trans>}\n </Button>\n </ButtonRow>\n </ModalFooter>\n }\n >\n {/* Error Message */}\n {error && (\n <Message dismissible={false} variant=\"error\" className=\"mb-4\">\n {error}\n </Message>\n )}\n\n {isLoading && (\n <div className=\"mb-4 flex items-center justify-center gap-2\">\n <Spinner variant=\"primary\" />\n <span className=\"text-theme-high text-sm\">\n <Trans>Creating security group...</Trans>\n </span>\n </div>\n )}\n\n {!isLoading && (\n <Form className=\"mb-6\">\n <FormSection className=\"mb-6\">\n <FormRow className=\"mb-6\">\n <TextInput\n id=\"name\"\n name=\"name\"\n label={t`Name`}\n value={properties.name}\n onChange={handleInputChange}\n required\n errortext={errors.name}\n placeholder={t`Type name`}\n disabled={isLoading}\n />\n </FormRow>\n\n <FormRow className=\"mb-6\">\n <Textarea\n id=\"description\"\n name=\"description\"\n label={t`Description`}\n value={properties.description}\n onChange={handleInputChange}\n placeholder={t`Description`}\n disabled={isLoading}\n rows={3}\n />\n </FormRow>\n\n <FormRow className=\"mb-0\">\n <Checkbox\n id=\"stateful\"\n name=\"stateful\"\n label={t`Stateful`}\n checked={properties.stateful}\n onChange={handleInputChange}\n disabled={isLoading}\n />\n </FormRow>\n </FormSection>\n </Form>\n )}\n </Modal>\n )\n}\n","import { useState } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport { useNavigate } from \"@tanstack/react-router\"\nimport { Button } from \"@cloudoperators/juno-ui-components\"\nimport { trpcReact } from \"@/client/trpcClient\"\nimport { ListToolbar } from \"@/client/components/ListToolbar\"\nimport { buildFilterParams } from \"@/client/utils/buildFilterParams\"\nimport { useListWithFiltering } from \"@/client/utils/useListWithFiltering\"\nimport { useProjectId } from \"@/client/hooks\"\nimport { SecurityGroupListContainer } from \"./SecurityGroupListContainer\"\nimport { CreateSecurityGroupModal } from \"./-modals/CreateSecurityGroupModal\"\nimport { CreateSecurityGroupInput, UpdateSecurityGroupInput } from \"@/server/Network/types/securityGroup\"\n\n// Security group shared filter constants\nconst SECURITY_GROUP_SHARED = {\n TRUE: \"true\",\n FALSE: \"false\",\n} as const\n\ntype SecurityGroupSortKey = \"name\" | \"project_id\"\n\nexport const SecurityGroups = () => {\n const { t } = useLingui()\n const navigate = useNavigate()\n const projectId = useProjectId()\n\n const [createModalOpen, setCreateModalOpen] = useState(false)\n const [deleteError, setDeleteError] = useState<string | null>(null)\n const [createError, setCreateError] = useState<string | null>(null)\n const [updateError, setUpdateError] = useState<string | null>(null)\n\n const { searchTerm, sortSettings, filterSettings, handleSearchChange, handleSortChange, handleFilterChange } =\n useListWithFiltering<SecurityGroupSortKey>({\n defaultSortKey: \"name\",\n defaultSortDir: \"asc\",\n sortOptions: [\n { label: t`Name`, value: \"name\" },\n { label: t`Project id`, value: \"project_id\" },\n ],\n filterSettings: {\n filters: [\n {\n displayName: t`Shared`,\n filterName: \"shared\",\n values: Object.values(SECURITY_GROUP_SHARED),\n supportsMultiValue: false,\n },\n ],\n },\n })\n\n const utils = trpcReact.useUtils()\n\n // TODO: replace with trpc.network.canUser when security group permissions are available\n const permissions = {\n canCreate: true,\n canUpdate: true,\n canDelete: true,\n canManageAccess: true,\n }\n\n const {\n data: securityGroups = [],\n isLoading,\n isError,\n error,\n } = trpcReact.network.securityGroup.list.useQuery(\n {\n project_id: projectId || \"\",\n sort_key: sortSettings.sortBy,\n sort_dir: sortSettings.sortDirection,\n ...buildFilterParams(filterSettings),\n ...(searchTerm ? { searchTerm } : {}),\n },\n {\n enabled: !!projectId,\n }\n )\n\n const createSecurityGroupMutation = trpcReact.network.securityGroup.create.useMutation({\n onSuccess: (createdSecurityGroup) => {\n // Invalidate and refetch the security groups list\n utils.network.securityGroup.list.invalidate()\n setCreateError(null)\n\n // Navigate to the details page of the newly created security group\n navigate({\n to: \"/projects/$projectId/network/securitygroups/$securityGroupId\",\n params: {\n projectId,\n securityGroupId: createdSecurityGroup.id,\n },\n })\n },\n onError: (error) => {\n // Backend handles error parsing, just display the message\n setCreateError(error.message || t`Failed to create security group`)\n },\n })\n\n const deleteSecurityGroupMutation = trpcReact.network.securityGroup.deleteById.useMutation({\n onSuccess: () => {\n // Invalidate and refetch the security groups list\n utils.network.securityGroup.list.invalidate()\n setDeleteError(null)\n },\n onError: (error) => {\n // Backend handles error parsing, just display the message\n setDeleteError(error.message || t`Failed to delete security group`)\n },\n })\n\n const updateSecurityGroupMutation = trpcReact.network.securityGroup.update.useMutation({\n onSuccess: () => {\n // Invalidate and refetch the security groups list\n utils.network.securityGroup.list.invalidate()\n setUpdateError(null)\n },\n onError: (error) => {\n // Backend handles error parsing, just display the message\n setUpdateError(error.message || t`Failed to update security group`)\n },\n })\n\n const handleCreateSecurityGroup = async (securityGroupData: Omit<CreateSecurityGroupInput, \"project_id\">) => {\n setCreateError(null)\n await createSecurityGroupMutation.mutateAsync({ project_id: projectId, ...securityGroupData })\n }\n\n const handleDeleteSecurityGroup = (securityGroupId: string) => {\n setDeleteError(null)\n deleteSecurityGroupMutation.mutate({ project_id: projectId, securityGroupId })\n }\n\n const handleUpdateSecurityGroup = async (\n securityGroupId: string,\n data: Omit<UpdateSecurityGroupInput, \"securityGroupId\" | \"project_id\">\n ) => {\n setUpdateError(null)\n await updateSecurityGroupMutation.mutateAsync({ project_id: projectId, securityGroupId, ...data })\n }\n\n return (\n <div className=\"relative\">\n <ListToolbar\n sortSettings={sortSettings}\n filterSettings={filterSettings}\n searchTerm={searchTerm}\n onSort={handleSortChange}\n onFilter={handleFilterChange}\n onSearch={handleSearchChange}\n actions={\n permissions.canCreate && (\n <Button onClick={() => setCreateModalOpen(true)} variant=\"primary\">\n <Trans>Create Security Group</Trans>\n </Button>\n )\n }\n />\n\n <SecurityGroupListContainer\n securityGroups={securityGroups}\n isLoading={isLoading}\n isError={isError}\n error={error}\n permissions={permissions}\n onCreateClick={() => setCreateModalOpen(true)}\n onDeleteSecurityGroup={handleDeleteSecurityGroup}\n isDeletingSecurityGroup={deleteSecurityGroupMutation.isPending}\n deleteError={deleteError}\n onUpdateSecurityGroup={handleUpdateSecurityGroup}\n isUpdatingSecurityGroup={updateSecurityGroupMutation.isPending}\n updateError={updateError}\n currentProjectId={projectId}\n />\n\n <CreateSecurityGroupModal\n isOpen={createModalOpen}\n onClose={() => setCreateModalOpen(false)}\n onCreate={handleCreateSecurityGroup}\n isLoading={createSecurityGroupMutation.isPending}\n error={createError}\n />\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport { SecurityGroups } from \"./-components/SecurityGroupsList\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\nimport { ContentHeading } from \"@cloudoperators/juno-ui-components\"\n\nexport const Route = createFileRoute(\"/_auth/projects/$projectId/network/securitygroups/\")({\n staticData: { section: \"network\", service: \"securitygroups\" } satisfies RouteInfo,\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n const { t } = useLingui()\n const { setPageTitle } = Route.useRouteContext()\n setPageTitle(t`Security Groups`)\n return (\n <>\n <ContentHeading>{t`Security Groups`}</ContentHeading>\n <SecurityGroups />\n </>\n )\n}\n"],"mappings":"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"}
|