@kartverket/backstage-plugin-risk-scorecard 2.0.3 → 2.1.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.
- package/README.md +2 -1
- package/dist/components/common/EditButton.esm.js.map +1 -1
- package/dist/components/common/GitBranchIcon.esm.js +33 -0
- package/dist/components/common/GitBranchIcon.esm.js.map +1 -0
- package/dist/components/common/GitPullRequestIcon.esm.js +39 -0
- package/dist/components/common/GitPullRequestIcon.esm.js.map +1 -0
- package/dist/components/common/SopsConfigButton.esm.js +41 -0
- package/dist/components/common/SopsConfigButton.esm.js.map +1 -0
- package/dist/components/riScDialog/RiScDialog.esm.js +45 -3
- package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
- package/dist/components/riScPlugin/RiScPlugin.esm.js +66 -7
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +4 -4
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js +3 -3
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTable.esm.js +3 -3
- package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js +3 -3
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js.map +1 -1
- package/dist/components/sopsConfigDialog/GitBranchMenu.esm.js +118 -0
- package/dist/components/sopsConfigDialog/GitBranchMenu.esm.js.map +1 -0
- package/dist/components/sopsConfigDialog/GitBranchMenuItem.esm.js +31 -0
- package/dist/components/sopsConfigDialog/GitBranchMenuItem.esm.js.map +1 -0
- package/dist/components/sopsConfigDialog/OpenPullRequestButton.esm.js +35 -0
- package/dist/components/sopsConfigDialog/OpenPullRequestButton.esm.js.map +1 -0
- package/dist/components/sopsConfigDialog/PublicKeyList.esm.js +58 -0
- package/dist/components/sopsConfigDialog/PublicKeyList.esm.js.map +1 -0
- package/dist/components/sopsConfigDialog/PullRequestComponent.esm.js +40 -0
- package/dist/components/sopsConfigDialog/PullRequestComponent.esm.js.map +1 -0
- package/dist/components/sopsConfigDialog/SopsConfigDialog.esm.js +287 -0
- package/dist/components/sopsConfigDialog/SopsConfigDialog.esm.js.map +1 -0
- package/dist/contexts/RiScContext.esm.js +197 -18
- package/dist/contexts/RiScContext.esm.js.map +1 -1
- package/dist/utils/DTOs.esm.js +7 -1
- package/dist/utils/DTOs.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js +61 -6
- package/dist/utils/hooks.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +110 -4
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js +9 -0
- package/dist/utils/types.esm.js.map +1 -1
- package/dist/utils/utilityfunctions.esm.js +76 -1
- package/dist/utils/utilityfunctions.esm.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -11,7 +11,8 @@ proxy:
|
|
|
11
11
|
endpoints:
|
|
12
12
|
'/risc-proxy':
|
|
13
13
|
target: http://localhost:8080
|
|
14
|
-
allowedHeaders:
|
|
14
|
+
allowedHeaders:
|
|
15
|
+
['Authorization', 'GCP-Access-Token', 'GitHub-Access-Token']
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
The backend uses Backstage-issued tokens to validate the user, and GCP access tokens to federate access to the GCP KMS.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditButton.esm.js","sources":["../../../src/components/common/EditButton.tsx"],"sourcesContent":["import React from 'react';\nimport {\n IconButton,\n IconButtonProps,\n
|
|
1
|
+
{"version":3,"file":"EditButton.esm.js","sources":["../../../src/components/common/EditButton.tsx"],"sourcesContent":["import React from 'react';\nimport {\n IconButton,\n IconButtonProps,\n makeStyles,\n Theme,\n} from '@material-ui/core';\nimport EditIcon from '@mui/icons-material/Edit';\n\nconst useEditButtonStyle = makeStyles((theme: Theme) => ({\n icon: {\n color: theme.palette.type === 'dark' ? '#fff' : 'rgba(0, 0, 0, 0.54)',\n },\n}));\n\nconst EditButton = (props: IconButtonProps) => {\n const { icon } = useEditButtonStyle();\n\n return (\n <IconButton size=\"small\" {...props}>\n <EditIcon className={icon} aria-label=\"Edit\" />\n </IconButton>\n );\n};\n\nexport default EditButton;\n"],"names":[],"mappings":";;;;AASA,MAAM,kBAAA,GAAqB,UAAW,CAAA,CAAC,KAAkB,MAAA;AAAA,EACvD,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,MAAS,GAAA,qBAAA;AAAA,GAClD;AACF,CAAE,CAAA,CAAA,CAAA;AAEI,MAAA,UAAA,GAAa,CAAC,KAA2B,KAAA;AAC7C,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,kBAAmB,EAAA,CAAA;AAEpC,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,IAAK,EAAA,OAAA,EAAS,GAAG,KAAA,EAAA,kBAC1B,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,SAAW,EAAA,IAAA,EAAM,YAAW,EAAA,MAAA,EAAO,CAC/C,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import SvgIcon from '@mui/material/SvgIcon';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
const GitBranchIcon = () => {
|
|
5
|
+
return /* @__PURE__ */ React.createElement(
|
|
6
|
+
SvgIcon,
|
|
7
|
+
{
|
|
8
|
+
version: "1.0",
|
|
9
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
10
|
+
width: "512.000000pt",
|
|
11
|
+
height: "512.000000pt",
|
|
12
|
+
viewBox: "0 0 512.000000 512.000000",
|
|
13
|
+
preserveAspectRatio: "xMidYMid meet"
|
|
14
|
+
},
|
|
15
|
+
/* @__PURE__ */ React.createElement(
|
|
16
|
+
"g",
|
|
17
|
+
{
|
|
18
|
+
transform: "translate(0.000000,512.000000) scale(0.100000,-0.100000)",
|
|
19
|
+
fill: "#000000",
|
|
20
|
+
stroke: "none"
|
|
21
|
+
},
|
|
22
|
+
/* @__PURE__ */ React.createElement(
|
|
23
|
+
"path",
|
|
24
|
+
{
|
|
25
|
+
d: "M1240 4470 c-155 -30 -274 -93 -386 -204 -90 -90 -143 -175 -182\n-294 -22 -67 -26 -94 -26 -212 0 -118 4 -145 26 -212 39 -119 92 -204 182\n-294 89 -89 179 -145 282 -177 l64 -19 0 -498 0 -498 -64 -19 c-103 -32 -193\n-88 -282 -177 -90 -90 -143 -175 -182 -294 -22 -67 -26 -94 -26 -212 0 -118 4\n-145 26 -212 39 -119 92 -204 182 -294 90 -90 176 -143 294 -182 67 -21 95\n-25 212 -25 118 0 144 3 212 25 119 39 204 92 294 182 90 90 143 175 182 294\n22 67 26 94 26 212 0 118 -4 145 -26 212 -39 119 -92 204 -182 294 -88 88\n-184 148 -288 179 l-60 19 5 53 c11 105 82 204 182 254 l50 24 825 5 c763 5\n829 7 880 24 172 57 315 177 389 326 42 87 71 192 71 266 l0 41 60 18 c102 31\n198 91 286 179 90 90 143 175 182 294 22 67 26 94 26 212 0 118 -4 145 -26\n212 -39 119 -92 204 -182 294 -90 90 -175 143 -294 182 -68 22 -94 25 -212 25\n-117 0 -145 -4 -212 -25 -118 -39 -204 -92 -294 -182 -90 -90 -143 -175 -182\n-294 -22 -67 -26 -94 -26 -212 0 -118 4 -145 26 -212 39 -119 92 -204 182\n-294 89 -89 179 -145 283 -177 l66 -20 -6 -54 c-11 -105 -82 -204 -182 -254\nl-50 -24 -825 -5 c-895 -6 -859 -4 -972 -61 -21 -10 -40 -19 -43 -19 -3 0 -5\n94 -5 208 l0 209 60 18 c102 31 198 91 286 179 90 90 143 175 182 294 22 67\n26 94 26 212 0 118 -4 145 -26 212 -39 119 -92 204 -182 294 -138 137 -286\n202 -476 209 -58 2 -125 0 -150 -5z m284 -348 c91 -42 149 -100 194 -190 35\n-72 37 -81 37 -172 0 -91 -2 -100 -37 -172 -45 -91 -103 -147 -196 -191 -61\n-29 -76 -32 -162 -32 -86 0 -101 3 -162 32 -93 44 -151 100 -196 191 -35 72\n-37 81 -37 171 0 87 3 102 32 163 40 85 97 147 172 186 78 42 122 52 213 48\n61 -3 92 -11 142 -34z m2400 0 c91 -42 149 -100 194 -190 35 -72 37 -81 37\n-172 0 -91 -2 -100 -37 -172 -45 -91 -103 -147 -196 -191 -61 -29 -76 -32\n-162 -32 -86 0 -101 3 -162 32 -93 44 -151 100 -196 191 -35 72 -37 81 -37\n171 0 87 3 102 32 163 40 85 97 147 172 186 78 42 122 52 213 48 61 -3 92 -11\n142 -34z m-2400 -2400 c91 -42 149 -100 194 -190 35 -72 37 -81 37 -172 0 -91\n-2 -100 -37 -172 -45 -91 -103 -147 -196 -191 -61 -29 -76 -32 -162 -32 -86 0\n-101 3 -162 32 -93 44 -151 100 -196 191 -35 72 -37 81 -37 171 0 87 3 102 32\n163 40 85 97 147 172 186 78 42 122 52 213 48 61 -3 92 -11 142 -34z"
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { GitBranchIcon };
|
|
33
|
+
//# sourceMappingURL=GitBranchIcon.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitBranchIcon.esm.js","sources":["../../../src/components/common/GitBranchIcon.tsx"],"sourcesContent":["import SvgIcon from '@mui/material/SvgIcon';\nimport React from 'react';\n\nexport const GitBranchIcon = () => {\n return (\n <SvgIcon\n version=\"1.0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"512.000000pt\"\n height=\"512.000000pt\"\n viewBox=\"0 0 512.000000 512.000000\"\n preserveAspectRatio=\"xMidYMid meet\"\n >\n <g\n transform=\"translate(0.000000,512.000000) scale(0.100000,-0.100000)\"\n fill=\"#000000\"\n stroke=\"none\"\n >\n <path\n d=\"M1240 4470 c-155 -30 -274 -93 -386 -204 -90 -90 -143 -175 -182\n-294 -22 -67 -26 -94 -26 -212 0 -118 4 -145 26 -212 39 -119 92 -204 182\n-294 89 -89 179 -145 282 -177 l64 -19 0 -498 0 -498 -64 -19 c-103 -32 -193\n-88 -282 -177 -90 -90 -143 -175 -182 -294 -22 -67 -26 -94 -26 -212 0 -118 4\n-145 26 -212 39 -119 92 -204 182 -294 90 -90 176 -143 294 -182 67 -21 95\n-25 212 -25 118 0 144 3 212 25 119 39 204 92 294 182 90 90 143 175 182 294\n22 67 26 94 26 212 0 118 -4 145 -26 212 -39 119 -92 204 -182 294 -88 88\n-184 148 -288 179 l-60 19 5 53 c11 105 82 204 182 254 l50 24 825 5 c763 5\n829 7 880 24 172 57 315 177 389 326 42 87 71 192 71 266 l0 41 60 18 c102 31\n198 91 286 179 90 90 143 175 182 294 22 67 26 94 26 212 0 118 -4 145 -26\n212 -39 119 -92 204 -182 294 -90 90 -175 143 -294 182 -68 22 -94 25 -212 25\n-117 0 -145 -4 -212 -25 -118 -39 -204 -92 -294 -182 -90 -90 -143 -175 -182\n-294 -22 -67 -26 -94 -26 -212 0 -118 4 -145 26 -212 39 -119 92 -204 182\n-294 89 -89 179 -145 283 -177 l66 -20 -6 -54 c-11 -105 -82 -204 -182 -254\nl-50 -24 -825 -5 c-895 -6 -859 -4 -972 -61 -21 -10 -40 -19 -43 -19 -3 0 -5\n94 -5 208 l0 209 60 18 c102 31 198 91 286 179 90 90 143 175 182 294 22 67\n26 94 26 212 0 118 -4 145 -26 212 -39 119 -92 204 -182 294 -138 137 -286\n202 -476 209 -58 2 -125 0 -150 -5z m284 -348 c91 -42 149 -100 194 -190 35\n-72 37 -81 37 -172 0 -91 -2 -100 -37 -172 -45 -91 -103 -147 -196 -191 -61\n-29 -76 -32 -162 -32 -86 0 -101 3 -162 32 -93 44 -151 100 -196 191 -35 72\n-37 81 -37 171 0 87 3 102 32 163 40 85 97 147 172 186 78 42 122 52 213 48\n61 -3 92 -11 142 -34z m2400 0 c91 -42 149 -100 194 -190 35 -72 37 -81 37\n-172 0 -91 -2 -100 -37 -172 -45 -91 -103 -147 -196 -191 -61 -29 -76 -32\n-162 -32 -86 0 -101 3 -162 32 -93 44 -151 100 -196 191 -35 72 -37 81 -37\n171 0 87 3 102 32 163 40 85 97 147 172 186 78 42 122 52 213 48 61 -3 92 -11\n142 -34z m-2400 -2400 c91 -42 149 -100 194 -190 35 -72 37 -81 37 -172 0 -91\n-2 -100 -37 -172 -45 -91 -103 -147 -196 -191 -61 -29 -76 -32 -162 -32 -86 0\n-101 3 -162 32 -93 44 -151 100 -196 191 -35 72 -37 81 -37 171 0 87 3 102 32\n163 40 85 97 147 172 186 78 42 122 52 213 48 61 -3 92 -11 142 -34z\"\n />\n </g>\n </SvgIcon>\n );\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,gBAAgB,MAAM;AACjC,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,KAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,KAAM,EAAA,cAAA;AAAA,MACN,MAAO,EAAA,cAAA;AAAA,MACP,OAAQ,EAAA,2BAAA;AAAA,MACR,mBAAoB,EAAA,eAAA;AAAA,KAAA;AAAA,oBAEpB,KAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,0DAAA;AAAA,QACV,IAAK,EAAA,SAAA;AAAA,QACL,MAAO,EAAA,MAAA;AAAA,OAAA;AAAA,sBAEP,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAE,EAAA,knEAAA;AAAA,SAAA;AAAA,OA6BJ;AAAA,KACF;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import SvgIcon from '@mui/material/SvgIcon';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
const GitPullRequestIcon = () => {
|
|
5
|
+
return /* @__PURE__ */ React.createElement(
|
|
6
|
+
SvgIcon,
|
|
7
|
+
{
|
|
8
|
+
version: "1.0",
|
|
9
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
10
|
+
width: "512.000000pt",
|
|
11
|
+
height: "512.000000pt",
|
|
12
|
+
viewBox: "0 0 512.000000 512.000000",
|
|
13
|
+
preserveAspectRatio: "xMidYMid meet"
|
|
14
|
+
},
|
|
15
|
+
/* @__PURE__ */ React.createElement(
|
|
16
|
+
"g",
|
|
17
|
+
{
|
|
18
|
+
transform: "translate(0.000000,512.000000) scale(0.100000,-0.100000)",
|
|
19
|
+
fill: "#000000",
|
|
20
|
+
stroke: "none"
|
|
21
|
+
},
|
|
22
|
+
/* @__PURE__ */ React.createElement(
|
|
23
|
+
"path",
|
|
24
|
+
{
|
|
25
|
+
d: "M2735 5104 c-45 -24 -693 -673 -716 -716 -23 -44 -24 -86 -5 -131 8\n-18 168 -185 362 -379 374 -371 373 -371 455 -354 95 19 154 130 115 219 -8\n18 -100 117 -205 222 -105 104 -191 193 -191 198 0 4 262 6 583 5 655 -4 631\n-1 749 -81 73 -49 145 -139 179 -224 22 -54 24 -75 27 -293 2 -129 1 -667 -3\n-1196 l-7 -961 -51 -13 c-113 -29 -244 -116 -334 -222 -242 -285 -225 -705 39\n-969 76 -76 183 -142 284 -175 80 -26 102 -29 224 -29 122 0 144 3 224 29 392\n129 597 565 443 946 -80 197 -257 364 -444 416 l-66 19 7 655 c3 360 7 896 8\n1190 1 520 0 537 -21 615 -70 258 -250 461 -487 551 -138 52 -171 54 -782 54\nl-566 0 191 193 c106 105 196 205 202 220 28 73 4 152 -61 200 -36 27 -114 32\n-153 11z m1565 -3995 c152 -24 275 -131 320 -276 24 -78 25 -138 5 -217 -30\n-113 -114 -213 -223 -264 -50 -24 -69 -27 -162 -27 -93 0 -112 3 -162 27 -67\n31 -147 103 -183 163 -31 53 -55 144 -55 206 0 100 57 222 138 296 42 37 137\n82 194 92 29 5 55 9 58 10 3 0 34 -4 70 -10z"
|
|
26
|
+
}
|
|
27
|
+
),
|
|
28
|
+
/* @__PURE__ */ React.createElement(
|
|
29
|
+
"path",
|
|
30
|
+
{
|
|
31
|
+
d: "M810 5033 c-142 -18 -286 -79 -390 -165 -217 -180 -311 -488 -229\n-753 37 -123 85 -202 184 -301 78 -79 103 -98 185 -137 52 -25 110 -48 128\n-52 l32 -7 0 -1098 0 -1099 -32 -9 c-391 -112 -615 -524 -493 -908 35 -112 88\n-197 180 -289 93 -93 160 -135 282 -178 82 -29 98 -31 223 -31 125 0 141 2\n223 31 122 43 189 85 282 178 92 93 136 161 176 278 127 368 -83 787 -453 908\nl-68 22 0 1097 0 1097 68 22 c111 37 190 87 282 180 93 94 142 175 179 296\n116 376 -121 797 -502 895 -77 19 -200 31 -257 23z m130 -324 c152 -24 275\n-131 320 -276 24 -78 25 -138 5 -217 -30 -113 -114 -213 -223 -264 -50 -24\n-69 -27 -162 -27 -93 0 -112 3 -162 27 -67 31 -147 103 -183 163 -31 53 -55\n144 -55 206 0 100 57 222 138 296 42 37 137 82 194 92 29 5 55 9 58 10 3 0 34\n-4 70 -10z m-1 -3599 c152 -25 276 -132 321 -277 24 -78 25 -138 5 -217 -30\n-113 -114 -213 -223 -264 -50 -24 -69 -27 -162 -27 -93 0 -112 3 -162 27 -67\n31 -147 103 -183 163 -31 53 -55 144 -55 206 0 100 57 222 138 296 42 37 137\n82 194 92 29 5 55 9 58 10 3 0 34 -4 69 -9z"
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { GitPullRequestIcon };
|
|
39
|
+
//# sourceMappingURL=GitPullRequestIcon.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitPullRequestIcon.esm.js","sources":["../../../src/components/common/GitPullRequestIcon.tsx"],"sourcesContent":["import SvgIcon from '@mui/material/SvgIcon';\nimport React from 'react';\n\nexport const GitPullRequestIcon = () => {\n return (\n <SvgIcon\n version=\"1.0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"512.000000pt\"\n height=\"512.000000pt\"\n viewBox=\"0 0 512.000000 512.000000\"\n preserveAspectRatio=\"xMidYMid meet\"\n >\n <g\n transform=\"translate(0.000000,512.000000) scale(0.100000,-0.100000)\"\n fill=\"#000000\"\n stroke=\"none\"\n >\n <path\n d=\"M2735 5104 c-45 -24 -693 -673 -716 -716 -23 -44 -24 -86 -5 -131 8\n-18 168 -185 362 -379 374 -371 373 -371 455 -354 95 19 154 130 115 219 -8\n18 -100 117 -205 222 -105 104 -191 193 -191 198 0 4 262 6 583 5 655 -4 631\n-1 749 -81 73 -49 145 -139 179 -224 22 -54 24 -75 27 -293 2 -129 1 -667 -3\n-1196 l-7 -961 -51 -13 c-113 -29 -244 -116 -334 -222 -242 -285 -225 -705 39\n-969 76 -76 183 -142 284 -175 80 -26 102 -29 224 -29 122 0 144 3 224 29 392\n129 597 565 443 946 -80 197 -257 364 -444 416 l-66 19 7 655 c3 360 7 896 8\n1190 1 520 0 537 -21 615 -70 258 -250 461 -487 551 -138 52 -171 54 -782 54\nl-566 0 191 193 c106 105 196 205 202 220 28 73 4 152 -61 200 -36 27 -114 32\n-153 11z m1565 -3995 c152 -24 275 -131 320 -276 24 -78 25 -138 5 -217 -30\n-113 -114 -213 -223 -264 -50 -24 -69 -27 -162 -27 -93 0 -112 3 -162 27 -67\n31 -147 103 -183 163 -31 53 -55 144 -55 206 0 100 57 222 138 296 42 37 137\n82 194 92 29 5 55 9 58 10 3 0 34 -4 70 -10z\"\n />\n <path\n d=\"M810 5033 c-142 -18 -286 -79 -390 -165 -217 -180 -311 -488 -229\n-753 37 -123 85 -202 184 -301 78 -79 103 -98 185 -137 52 -25 110 -48 128\n-52 l32 -7 0 -1098 0 -1099 -32 -9 c-391 -112 -615 -524 -493 -908 35 -112 88\n-197 180 -289 93 -93 160 -135 282 -178 82 -29 98 -31 223 -31 125 0 141 2\n223 31 122 43 189 85 282 178 92 93 136 161 176 278 127 368 -83 787 -453 908\nl-68 22 0 1097 0 1097 68 22 c111 37 190 87 282 180 93 94 142 175 179 296\n116 376 -121 797 -502 895 -77 19 -200 31 -257 23z m130 -324 c152 -24 275\n-131 320 -276 24 -78 25 -138 5 -217 -30 -113 -114 -213 -223 -264 -50 -24\n-69 -27 -162 -27 -93 0 -112 3 -162 27 -67 31 -147 103 -183 163 -31 53 -55\n144 -55 206 0 100 57 222 138 296 42 37 137 82 194 92 29 5 55 9 58 10 3 0 34\n-4 70 -10z m-1 -3599 c152 -25 276 -132 321 -277 24 -78 25 -138 5 -217 -30\n-113 -114 -213 -223 -264 -50 -24 -69 -27 -162 -27 -93 0 -112 3 -162 27 -67\n31 -147 103 -183 163 -31 53 -55 144 -55 206 0 100 57 222 138 296 42 37 137\n82 194 92 29 5 55 9 58 10 3 0 34 -4 69 -9z\"\n />\n </g>\n </SvgIcon>\n );\n};\n"],"names":[],"mappings":";;;AAGO,MAAM,qBAAqB,MAAM;AACtC,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,KAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,KAAM,EAAA,cAAA;AAAA,MACN,MAAO,EAAA,cAAA;AAAA,MACP,OAAQ,EAAA,2BAAA;AAAA,MACR,mBAAoB,EAAA,eAAA;AAAA,KAAA;AAAA,oBAEpB,KAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAU,EAAA,0DAAA;AAAA,QACV,IAAK,EAAA,SAAA;AAAA,QACL,MAAO,EAAA,MAAA;AAAA,OAAA;AAAA,sBAEP,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAE,EAAA,q7BAAA;AAAA,SAAA;AAAA,OAaJ;AAAA,sBACA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAE,EAAA,o/BAAA;AAAA,SAAA;AAAA,OAcJ;AAAA,KACF;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
4
|
+
import Button from '@mui/material/Button';
|
|
5
|
+
import Badge from '@mui/material/Badge';
|
|
6
|
+
import Settings from '@material-ui/icons/Settings';
|
|
7
|
+
|
|
8
|
+
const SopsConfigButton = ({
|
|
9
|
+
handleClick,
|
|
10
|
+
disable,
|
|
11
|
+
pullRequestCount,
|
|
12
|
+
hasOpenedOnce
|
|
13
|
+
}) => {
|
|
14
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
15
|
+
return /* @__PURE__ */ React.createElement(
|
|
16
|
+
Badge,
|
|
17
|
+
{
|
|
18
|
+
color: "error",
|
|
19
|
+
badgeContent: pullRequestCount,
|
|
20
|
+
invisible: hasOpenedOnce
|
|
21
|
+
},
|
|
22
|
+
/* @__PURE__ */ React.createElement(
|
|
23
|
+
Button,
|
|
24
|
+
{
|
|
25
|
+
disabled: disable,
|
|
26
|
+
sx: {
|
|
27
|
+
display: "flex",
|
|
28
|
+
flexDirection: "row",
|
|
29
|
+
alignItems: "center",
|
|
30
|
+
gap: 1
|
|
31
|
+
},
|
|
32
|
+
onClick: handleClick
|
|
33
|
+
},
|
|
34
|
+
/* @__PURE__ */ React.createElement(Settings, null),
|
|
35
|
+
`${t("sopsConfigDialog.title")}`
|
|
36
|
+
)
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { SopsConfigButton };
|
|
41
|
+
//# sourceMappingURL=SopsConfigButton.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SopsConfigButton.esm.js","sources":["../../../src/components/common/SopsConfigButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport Button from '@mui/material/Button';\nimport Badge from '@mui/material/Badge';\nimport Settings from '@material-ui/icons/Settings';\n\ninterface SopsConfigButtonProps {\n handleClick: () => void;\n disable: boolean;\n pullRequestCount: number;\n hasOpenedOnce: boolean;\n}\n\nexport const SopsConfigButton = ({\n handleClick,\n disable,\n pullRequestCount,\n hasOpenedOnce,\n}: SopsConfigButtonProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Badge\n color=\"error\"\n badgeContent={pullRequestCount}\n invisible={hasOpenedOnce}\n >\n <Button\n disabled={disable}\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n onClick={handleClick}\n >\n <Settings />\n {`${t('sopsConfigDialog.title')}`}\n </Button>\n </Badge>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAcO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,WAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AACF,CAA6B,KAAA;AAC3B,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA,CAAA;AAExD,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,OAAA;AAAA,MACN,YAAc,EAAA,gBAAA;AAAA,MACd,SAAW,EAAA,aAAA;AAAA,KAAA;AAAA,oBAEX,KAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAU,EAAA,OAAA;AAAA,QACV,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,MAAA;AAAA,UACT,aAAe,EAAA,KAAA;AAAA,UACf,UAAY,EAAA,QAAA;AAAA,UACZ,GAAK,EAAA,CAAA;AAAA,SACP;AAAA,QACA,OAAS,EAAA,WAAA;AAAA,OAAA;AAAA,0CAER,QAAS,EAAA,IAAA,CAAA;AAAA,MACT,CAAA,EAAG,CAAE,CAAA,wBAAwB,CAAC,CAAA,CAAA;AAAA,KACjC;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
2
|
import { emptyRiSc } from '../../utils/utilityfunctions.esm.js';
|
|
3
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
4
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
@@ -11,6 +11,11 @@ import DialogContent from '@mui/material/DialogContent';
|
|
|
11
11
|
import DialogTitle from '@mui/material/DialogTitle';
|
|
12
12
|
import DialogActions from '@mui/material/DialogActions';
|
|
13
13
|
import { dialogActions } from '../common/mixins.esm.js';
|
|
14
|
+
import { DialogContentText } from '@material-ui/core';
|
|
15
|
+
import FormControlLabel from '@mui/material/FormControlLabel';
|
|
16
|
+
import Switch from '@mui/material/Switch';
|
|
17
|
+
import Box from '@mui/material/Box';
|
|
18
|
+
import Typography from '@mui/material/Typography';
|
|
14
19
|
|
|
15
20
|
var RiScDialogStates = /* @__PURE__ */ ((RiScDialogStates2) => {
|
|
16
21
|
RiScDialogStates2[RiScDialogStates2["Closed"] = 0] = "Closed";
|
|
@@ -30,9 +35,19 @@ const RiScDialog = ({ onClose, dialogState }) => {
|
|
|
30
35
|
mode: "onBlur"
|
|
31
36
|
});
|
|
32
37
|
const titleTranslation = dialogState === 2 /* Create */ ? t("rosDialog.titleNew") : t("rosDialog.titleEdit");
|
|
38
|
+
const [createRiScFrom, setCreateRiScFrom] = useState(
|
|
39
|
+
0 /* Scratch */
|
|
40
|
+
);
|
|
41
|
+
const handleChangeCreateRiScFrom = () => {
|
|
42
|
+
if (createRiScFrom === 0 /* Scratch */) {
|
|
43
|
+
setCreateRiScFrom(1 /* Default */);
|
|
44
|
+
} else {
|
|
45
|
+
setCreateRiScFrom(0 /* Scratch */);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
33
48
|
const onSubmit = handleSubmit((data) => {
|
|
34
49
|
if (dialogState === 2 /* Create */) {
|
|
35
|
-
createNewRiSc(data);
|
|
50
|
+
createNewRiSc(data, createRiScFrom === 1 /* Default */);
|
|
36
51
|
} else {
|
|
37
52
|
updateRiSc(data);
|
|
38
53
|
}
|
|
@@ -62,7 +77,34 @@ const RiScDialog = ({ onClose, dialogState }) => {
|
|
|
62
77
|
error: errors.scope !== void 0,
|
|
63
78
|
minRows: 4
|
|
64
79
|
}
|
|
65
|
-
)
|
|
80
|
+
),
|
|
81
|
+
dialogState === 2 /* Create */ && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(DialogContentText, null, t("rosDialog.generateInitialDescription")), /* @__PURE__ */ React.createElement(
|
|
82
|
+
Box,
|
|
83
|
+
{
|
|
84
|
+
sx: {
|
|
85
|
+
display: "flex",
|
|
86
|
+
flexDirection: "row",
|
|
87
|
+
alignItems: "center",
|
|
88
|
+
gap: 4
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
/* @__PURE__ */ React.createElement(
|
|
92
|
+
Typography,
|
|
93
|
+
{
|
|
94
|
+
sx: {
|
|
95
|
+
fontWeight: "bold"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
t("rosDialog.generateInitialToggleDescription")
|
|
99
|
+
),
|
|
100
|
+
/* @__PURE__ */ React.createElement(
|
|
101
|
+
FormControlLabel,
|
|
102
|
+
{
|
|
103
|
+
control: /* @__PURE__ */ React.createElement(Switch, { onChange: () => handleChangeCreateRiScFrom() }),
|
|
104
|
+
label: createRiScFrom === 0 /* Scratch */ ? t("dictionary.no") : t("dictionary.yes")
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
))
|
|
66
108
|
), /* @__PURE__ */ React.createElement(DialogActions, { sx: dialogActions }, /* @__PURE__ */ React.createElement(Button, { variant: "contained", onClick: onSubmit, disabled: !isDirty }, t("dictionary.save")), /* @__PURE__ */ React.createElement(Button, { variant: "outlined", onClick: onClose }, t("dictionary.cancel"))));
|
|
67
109
|
};
|
|
68
110
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import React from 'react';\nimport { RiSc } from '../../utils/types';\nimport { emptyRiSc } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport { Input } from '../common/Input';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\n\nexport enum RiScDialogStates {\n Closed,\n Edit,\n Create,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n}\n\nexport const RiScDialog = ({ onClose, dialogState }: RiScDialogProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc, createNewRiSc, updateRiSc } = useRiScs();\n\n const {\n register,\n handleSubmit,\n formState: { isDirty, errors },\n } = useForm<RiSc>({\n defaultValues:\n dialogState === RiScDialogStates.Edit\n ? selectedRiSc!.content\n : emptyRiSc(),\n mode: 'onBlur',\n });\n\n const titleTranslation =\n dialogState === RiScDialogStates.Create\n ? t('rosDialog.titleNew')\n : t('rosDialog.titleEdit');\n\n const onSubmit = handleSubmit((data: RiSc) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data);\n } else {\n updateRiSc(data);\n }\n onClose();\n });\n\n return (\n <Dialog open={dialogState !== RiScDialogStates.Closed} onClose={onClose}>\n <DialogTitle>{titleTranslation}</DialogTitle>\n\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <Input\n required\n {...register('title', { required: true })}\n error={errors.title !== undefined}\n label={t('dictionary.title')}\n />\n <Input\n required\n {...register('scope', { required: true })}\n label={t('dictionary.scope')}\n sublabel={t('rosDialog.scopeDescription')}\n error={errors.scope !== undefined}\n minRows={4}\n />\n </DialogContent>\n\n <DialogActions sx={dialogActions}>\n <Button variant=\"contained\" onClick={onSubmit} disabled={!isDirty}>\n {t('dictionary.save')}\n </Button>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["RiScDialogStates"],"mappings":"
|
|
1
|
+
{"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { RiSc } from '../../utils/types';\nimport { emptyRiSc } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport { Input } from '../common/Input';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport { DialogContentText } from '@material-ui/core';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Switch from '@mui/material/Switch';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nexport enum RiScDialogStates {\n Closed,\n Edit,\n Create,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n}\n\nenum CreateRiScFrom {\n Scratch,\n Default,\n}\n\nexport const RiScDialog = ({ onClose, dialogState }: RiScDialogProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc, createNewRiSc, updateRiSc } = useRiScs();\n\n const {\n register,\n handleSubmit,\n formState: { isDirty, errors },\n } = useForm<RiSc>({\n defaultValues:\n dialogState === RiScDialogStates.Edit\n ? selectedRiSc!.content\n : emptyRiSc(),\n mode: 'onBlur',\n });\n\n const titleTranslation =\n dialogState === RiScDialogStates.Create\n ? t('rosDialog.titleNew')\n : t('rosDialog.titleEdit');\n\n const [createRiScFrom, setCreateRiScFrom] = useState<CreateRiScFrom>(\n CreateRiScFrom.Scratch,\n );\n const handleChangeCreateRiScFrom = () => {\n if (createRiScFrom === CreateRiScFrom.Scratch) {\n setCreateRiScFrom(CreateRiScFrom.Default);\n } else {\n setCreateRiScFrom(CreateRiScFrom.Scratch);\n }\n };\n\n const onSubmit = handleSubmit((data: RiSc) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, createRiScFrom === CreateRiScFrom.Default);\n } else {\n updateRiSc(data);\n }\n onClose();\n });\n\n return (\n <Dialog open={dialogState !== RiScDialogStates.Closed} onClose={onClose}>\n <DialogTitle>{titleTranslation}</DialogTitle>\n\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <Input\n required\n {...register('title', { required: true })}\n error={errors.title !== undefined}\n label={t('dictionary.title')}\n />\n <Input\n required\n {...register('scope', { required: true })}\n label={t('dictionary.scope')}\n sublabel={t('rosDialog.scopeDescription')}\n error={errors.scope !== undefined}\n minRows={4}\n />\n\n {dialogState === RiScDialogStates.Create && (\n <div>\n <DialogContentText>\n {t('rosDialog.generateInitialDescription')}\n </DialogContentText>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <Typography\n sx={{\n fontWeight: 'bold',\n }}\n >\n {t('rosDialog.generateInitialToggleDescription')}\n </Typography>\n <FormControlLabel\n control={\n <Switch onChange={() => handleChangeCreateRiScFrom()} />\n }\n label={\n createRiScFrom === CreateRiScFrom.Scratch\n ? t('dictionary.no')\n : t('dictionary.yes')\n }\n />\n </Box>\n </div>\n )}\n </DialogContent>\n\n <DialogActions sx={dialogActions}>\n <Button variant=\"contained\" onClick={onSubmit} disabled={!isDirty}>\n {t('dictionary.save')}\n </Button>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["RiScDialogStates"],"mappings":"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"}
|
|
@@ -21,24 +21,45 @@ import MUISelect from '@mui/material/Select';
|
|
|
21
21
|
import MenuItem from '@mui/material/MenuItem';
|
|
22
22
|
import ListItemText from '@mui/material/ListItemText';
|
|
23
23
|
import { ScenarioTableWrapper } from '../scenarioTable/ScenarioTable.esm.js';
|
|
24
|
+
import { SopsConfigButton } from '../common/SopsConfigButton.esm.js';
|
|
25
|
+
import { SopsConfigDialog } from '../sopsConfigDialog/SopsConfigDialog.esm.js';
|
|
24
26
|
|
|
25
27
|
const RiScPlugin = () => {
|
|
26
28
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
27
29
|
const [riScDialogState, setRiScDialogState] = useState(
|
|
28
30
|
RiScDialogStates.Closed
|
|
29
31
|
);
|
|
32
|
+
const [showSopsConfigDialog, setShowSopsConfigDialog] = useState(false);
|
|
30
33
|
const openCreateRiScDialog = () => setRiScDialogState(RiScDialogStates.Create);
|
|
34
|
+
const [hasOpenedSopsConfigDialogOnce, setHasOpenedSopsConfigDialogOnce] = useState(false);
|
|
35
|
+
const [
|
|
36
|
+
hasOpenedSopsConfigDialogGitBranchMenuOnce,
|
|
37
|
+
setHasOpenedSopsConfigDialogGitBranchMenuOnce
|
|
38
|
+
] = useState(false);
|
|
39
|
+
const handleOpenSopsConfigDialogGitBranchMenu = () => {
|
|
40
|
+
setInterval(() => setHasOpenedSopsConfigDialogGitBranchMenuOnce(true), 700);
|
|
41
|
+
};
|
|
31
42
|
const openEditRiScDialog = () => setRiScDialogState(RiScDialogStates.Edit);
|
|
32
43
|
const closeRiScDialog = () => setRiScDialogState(RiScDialogStates.Closed);
|
|
44
|
+
const closeSopsConfigDialog = () => setShowSopsConfigDialog(false);
|
|
45
|
+
const [showSopsConfigButton, setShowSopsConfigButton] = useState(false);
|
|
46
|
+
const [disableSopsConfigButton, setDisableSopsConfigButton] = useState(false);
|
|
47
|
+
const handleClickSopsConfigDialogButton = () => {
|
|
48
|
+
setHasOpenedSopsConfigDialogOnce(true);
|
|
49
|
+
setShowSopsConfigDialog(true);
|
|
50
|
+
};
|
|
33
51
|
const {
|
|
34
52
|
selectedRiSc,
|
|
35
53
|
riScs,
|
|
36
54
|
selectRiSc,
|
|
37
55
|
isFetching,
|
|
56
|
+
sopsConfigs,
|
|
57
|
+
gcpProjectIds,
|
|
38
58
|
resetResponse,
|
|
39
59
|
resetRiScStatus,
|
|
40
60
|
response,
|
|
41
|
-
|
|
61
|
+
updateStatus,
|
|
62
|
+
failedToFetchSopsConfig
|
|
42
63
|
} = useRiScs();
|
|
43
64
|
const [searchParams] = useSearchParams();
|
|
44
65
|
const scenarioWizardStep = searchParams.get(
|
|
@@ -50,14 +71,24 @@ const RiScPlugin = () => {
|
|
|
50
71
|
resetResponse();
|
|
51
72
|
}
|
|
52
73
|
}, [resetRiScStatus, resetResponse, scenarioWizardStep]);
|
|
53
|
-
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (!isFetching && sopsConfigs.filter((config) => config.onDefaultBranch).length < 1 && !failedToFetchSopsConfig && !updateStatus.isLoading && riScs?.length === 0) {
|
|
76
|
+
setShowSopsConfigButton(true);
|
|
77
|
+
setHasOpenedSopsConfigDialogOnce(true);
|
|
78
|
+
setShowSopsConfigDialog(true);
|
|
79
|
+
} else {
|
|
80
|
+
setShowSopsConfigButton(false);
|
|
81
|
+
setDisableSopsConfigButton(true);
|
|
82
|
+
}
|
|
83
|
+
}, [isFetching, updateStatus, failedToFetchSopsConfig, riScs, sopsConfigs]);
|
|
84
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, response && !updateStatus.isLoading && /* @__PURE__ */ React.createElement(
|
|
54
85
|
Alert,
|
|
55
86
|
{
|
|
56
|
-
severity: getAlertSeverity(
|
|
87
|
+
severity: getAlertSeverity(updateStatus),
|
|
57
88
|
sx: { marginBottom: 2 }
|
|
58
89
|
},
|
|
59
90
|
/* @__PURE__ */ React.createElement(Typography, null, response.statusMessage)
|
|
60
|
-
),
|
|
91
|
+
), updateStatus.isLoading && /* @__PURE__ */ React.createElement(
|
|
61
92
|
LinearProgress,
|
|
62
93
|
{
|
|
63
94
|
sx: {
|
|
@@ -66,7 +97,25 @@ const RiScPlugin = () => {
|
|
|
66
97
|
margin: 2
|
|
67
98
|
}
|
|
68
99
|
}
|
|
69
|
-
), scenarioWizardStep !== null ? /* @__PURE__ */ React.createElement(ScenarioWizard, { step: scenarioWizardStep }) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ContentHeader, { title: t("contentHeader.title") }, /* @__PURE__ */ React.createElement(
|
|
100
|
+
), scenarioWizardStep !== null ? /* @__PURE__ */ React.createElement(ScenarioWizard, { step: scenarioWizardStep }) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ContentHeader, { title: t("contentHeader.title") }, /* @__PURE__ */ React.createElement(
|
|
101
|
+
Grid,
|
|
102
|
+
{
|
|
103
|
+
sx: {
|
|
104
|
+
display: "flex",
|
|
105
|
+
flexDirection: "row"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
showSopsConfigButton && /* @__PURE__ */ React.createElement(
|
|
109
|
+
SopsConfigButton,
|
|
110
|
+
{
|
|
111
|
+
disable: disableSopsConfigButton,
|
|
112
|
+
hasOpenedOnce: hasOpenedSopsConfigDialogOnce,
|
|
113
|
+
handleClick: handleClickSopsConfigDialogButton,
|
|
114
|
+
pullRequestCount: sopsConfigs.filter((value) => value.pullRequest !== null).length
|
|
115
|
+
}
|
|
116
|
+
),
|
|
117
|
+
/* @__PURE__ */ React.createElement(SupportButton, null)
|
|
118
|
+
)), isFetching && /* @__PURE__ */ React.createElement(Spinner, { size: 80 }), /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 4 }, riScs !== null && riScs.length !== 0 && /* @__PURE__ */ React.createElement(
|
|
70
119
|
Grid,
|
|
71
120
|
{
|
|
72
121
|
item: true,
|
|
@@ -87,7 +136,7 @@ const RiScPlugin = () => {
|
|
|
87
136
|
},
|
|
88
137
|
riScs.map((riSc) => /* @__PURE__ */ React.createElement(MenuItem, { key: riSc.id, value: riSc.content.title }, /* @__PURE__ */ React.createElement(ListItemText, { primary: riSc.content.title }))) ?? []
|
|
89
138
|
)
|
|
90
|
-
), !isFetching && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: true }, /* @__PURE__ */ React.createElement(
|
|
139
|
+
), !isFetching && sopsConfigs.find((value) => value.onDefaultBranch) !== void 0 && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: true }, /* @__PURE__ */ React.createElement(
|
|
91
140
|
Button,
|
|
92
141
|
{
|
|
93
142
|
startIcon: /* @__PURE__ */ React.createElement(AddCircle, null),
|
|
@@ -99,7 +148,17 @@ const RiScPlugin = () => {
|
|
|
99
148
|
}
|
|
100
149
|
},
|
|
101
150
|
t("contentHeader.createNewButton")
|
|
102
|
-
)), selectedRiSc && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(RiScInfo, { riSc: selectedRiSc, edit: openEditRiScDialog })), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: true, md: 7, lg: 8 }, /* @__PURE__ */ React.createElement(ScenarioTableWrapper, { riSc: selectedRiSc })), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: true, md: 5, lg: 4 }, /* @__PURE__ */ React.createElement(RiskMatrix, { riSc: selectedRiSc.content }))))), riScDialogState !== RiScDialogStates.Closed && /* @__PURE__ */ React.createElement(RiScDialog, { onClose: closeRiScDialog, dialogState: riScDialogState }),
|
|
151
|
+
)), selectedRiSc && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(RiScInfo, { riSc: selectedRiSc, edit: openEditRiScDialog })), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: true, md: 7, lg: 8 }, /* @__PURE__ */ React.createElement(ScenarioTableWrapper, { riSc: selectedRiSc })), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: true, md: 5, lg: 4 }, /* @__PURE__ */ React.createElement(RiskMatrix, { riSc: selectedRiSc.content }))))), riScDialogState !== RiScDialogStates.Closed && /* @__PURE__ */ React.createElement(RiScDialog, { onClose: closeRiScDialog, dialogState: riScDialogState }), showSopsConfigDialog && /* @__PURE__ */ React.createElement(
|
|
152
|
+
SopsConfigDialog,
|
|
153
|
+
{
|
|
154
|
+
onClose: closeSopsConfigDialog,
|
|
155
|
+
showDialog: showSopsConfigDialog,
|
|
156
|
+
sopsConfigs,
|
|
157
|
+
gcpProjectIds,
|
|
158
|
+
hasOpenedGitBranchMenuOnce: hasOpenedSopsConfigDialogGitBranchMenuOnce,
|
|
159
|
+
handleOpenGitBranchMenuFirst: handleOpenSopsConfigDialogGitBranchMenu
|
|
160
|
+
}
|
|
161
|
+
), !scenarioWizardStep && /* @__PURE__ */ React.createElement(ScenarioDrawer, null));
|
|
103
162
|
};
|
|
104
163
|
|
|
105
164
|
export { RiScPlugin };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { ContentHeader, SupportButton } from '@backstage/core-components';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Typography from '@mui/material/Typography';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { RiScInfo } from '../riScInfo/RiScInfo';\nimport AddCircle from '@mui/icons-material/AddCircle';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport Select from '@mui/material/Select';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTable';\n\nexport const RiScPlugin = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n const openCreateRiScDialog = () =>\n setRiScDialogState(RiScDialogStates.Create);\n const openEditRiScDialog = () => setRiScDialogState(RiScDialogStates.Edit);\n const closeRiScDialog = () => setRiScDialogState(RiScDialogStates.Closed);\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n riScUpdateStatus,\n } = useRiScs();\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n {response && !riScUpdateStatus.isLoading && (\n <Alert\n severity={getAlertSeverity(riScUpdateStatus)}\n sx={{ marginBottom: 2 }}\n >\n <Typography>{response.statusMessage}</Typography>\n </Alert>\n )}\n {riScUpdateStatus.isLoading && (\n <LinearProgress\n sx={{\n position: 'sticky',\n top: 0,\n margin: 2,\n }}\n />\n )}\n\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <ContentHeader title={t('contentHeader.title')}>\n <SupportButton />\n </ContentHeader>\n\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {riScs !== null && riScs.length !== 0 && (\n <Grid\n item\n xs={12}\n sm={6}\n sx={{\n maxWidth: '600px',\n minWidth: '300px',\n }}\n >\n <Select\n variant=\"standard\"\n value={selectedRiSc?.content.title ?? ''}\n onChange={e => selectRiSc(e.target.value)}\n sx={{ width: '100%' }}\n >\n {riScs.map(riSc => (\n <MenuItem key={riSc.id} value={riSc.content.title}>\n <ListItemText primary={riSc.content.title} />\n </MenuItem>\n )) ?? []}\n </Select>\n </Grid>\n )}\n\n {!isFetching && (\n <Grid item xs>\n <Button\n startIcon={<AddCircle />}\n variant=\"text\"\n color=\"primary\"\n onClick={openCreateRiScDialog}\n sx={{\n minWidth: '205px',\n }}\n >\n {t('contentHeader.createNewButton')}\n </Button>\n </Grid>\n )}\n\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <RiScInfo riSc={selectedRiSc} edit={openEditRiScDialog} />\n </Grid>\n <Grid item xs md={7} lg={8}>\n <ScenarioTableWrapper riSc={selectedRiSc} />\n </Grid>\n <Grid item xs md={5} lg={4}>\n <RiskMatrix riSc={selectedRiSc.content} />\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog onClose={closeRiScDialog} dialogState={riScDialogState} />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n};\n"],"names":["Select"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { ContentHeader, SupportButton } from '@backstage/core-components';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Typography from '@mui/material/Typography';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { RiScInfo } from '../riScInfo/RiScInfo';\nimport AddCircle from '@mui/icons-material/AddCircle';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport Select from '@mui/material/Select';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTable';\nimport { SopsConfigButton } from '../common/SopsConfigButton';\nimport { SopsConfigDialog } from '../sopsConfigDialog/SopsConfigDialog';\n\nexport const RiScPlugin = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n const [showSopsConfigDialog, setShowSopsConfigDialog] =\n useState<boolean>(false);\n\n const openCreateRiScDialog = () =>\n setRiScDialogState(RiScDialogStates.Create);\n const [hasOpenedSopsConfigDialogOnce, setHasOpenedSopsConfigDialogOnce] =\n useState(false);\n const [\n hasOpenedSopsConfigDialogGitBranchMenuOnce,\n setHasOpenedSopsConfigDialogGitBranchMenuOnce,\n ] = useState(false);\n const handleOpenSopsConfigDialogGitBranchMenu = () => {\n setInterval(() => setHasOpenedSopsConfigDialogGitBranchMenuOnce(true), 700);\n };\n\n const openEditRiScDialog = () => setRiScDialogState(RiScDialogStates.Edit);\n const closeRiScDialog = () => setRiScDialogState(RiScDialogStates.Closed);\n const closeSopsConfigDialog = () => setShowSopsConfigDialog(false);\n\n const [showSopsConfigButton, setShowSopsConfigButton] = useState(false);\n const [disableSopsConfigButton, setDisableSopsConfigButton] = useState(false);\n const handleClickSopsConfigDialogButton = () => {\n setHasOpenedSopsConfigDialogOnce(true);\n setShowSopsConfigDialog(true);\n };\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n isFetching,\n sopsConfigs,\n gcpProjectIds,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n failedToFetchSopsConfig,\n } = useRiScs();\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n useEffect(() => {\n if (\n !isFetching &&\n sopsConfigs.filter(config => config.onDefaultBranch).length < 1 &&\n !failedToFetchSopsConfig &&\n !updateStatus.isLoading &&\n riScs?.length === 0\n ) {\n setShowSopsConfigButton(true);\n setHasOpenedSopsConfigDialogOnce(true);\n setShowSopsConfigDialog(true);\n } else {\n setShowSopsConfigButton(false);\n setDisableSopsConfigButton(true);\n }\n }, [isFetching, updateStatus, failedToFetchSopsConfig, riScs, sopsConfigs]);\n\n return (\n <>\n {response && !updateStatus.isLoading && (\n <Alert\n severity={getAlertSeverity(updateStatus)}\n sx={{ marginBottom: 2 }}\n >\n <Typography>{response.statusMessage}</Typography>\n </Alert>\n )}\n {updateStatus.isLoading && (\n <LinearProgress\n sx={{\n position: 'sticky',\n top: 0,\n margin: 2,\n }}\n />\n )}\n\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <ContentHeader title={t('contentHeader.title')}>\n <Grid\n sx={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n {showSopsConfigButton && (\n <SopsConfigButton\n disable={disableSopsConfigButton}\n hasOpenedOnce={hasOpenedSopsConfigDialogOnce}\n handleClick={handleClickSopsConfigDialogButton}\n pullRequestCount={\n sopsConfigs.filter(value => value.pullRequest !== null)\n .length\n }\n />\n )}\n <SupportButton />\n </Grid>\n </ContentHeader>\n\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {riScs !== null && riScs.length !== 0 && (\n <Grid\n item\n xs={12}\n sm={6}\n sx={{\n maxWidth: '600px',\n minWidth: '300px',\n }}\n >\n <Select\n variant=\"standard\"\n value={selectedRiSc?.content.title ?? ''}\n onChange={e => selectRiSc(e.target.value)}\n sx={{ width: '100%' }}\n >\n {riScs.map(riSc => (\n <MenuItem key={riSc.id} value={riSc.content.title}>\n <ListItemText primary={riSc.content.title} />\n </MenuItem>\n )) ?? []}\n </Select>\n </Grid>\n )}\n\n {!isFetching &&\n sopsConfigs.find(value => value.onDefaultBranch) !==\n undefined && (\n <Grid item xs>\n <Button\n startIcon={<AddCircle />}\n variant=\"text\"\n color=\"primary\"\n onClick={openCreateRiScDialog}\n sx={{\n minWidth: '205px',\n }}\n >\n {t('contentHeader.createNewButton')}\n </Button>\n </Grid>\n )}\n\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <RiScInfo riSc={selectedRiSc} edit={openEditRiScDialog} />\n </Grid>\n <Grid item xs md={7} lg={8}>\n <ScenarioTableWrapper riSc={selectedRiSc} />\n </Grid>\n <Grid item xs md={5} lg={4}>\n <RiskMatrix riSc={selectedRiSc.content} />\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog onClose={closeRiScDialog} dialogState={riScDialogState} />\n )}\n\n {showSopsConfigDialog && (\n <SopsConfigDialog\n onClose={closeSopsConfigDialog}\n showDialog={showSopsConfigDialog}\n sopsConfigs={sopsConfigs}\n gcpProjectIds={gcpProjectIds}\n hasOpenedGitBranchMenuOnce={\n hasOpenedSopsConfigDialogGitBranchMenuOnce\n }\n handleOpenGitBranchMenuFirst={handleOpenSopsConfigDialogGitBranchMenu}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n};\n"],"names":["Select"],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ const ScenarioDrawer = () => {
|
|
|
37
37
|
const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] = useState(false);
|
|
38
38
|
const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);
|
|
39
39
|
const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState(false);
|
|
40
|
-
const {
|
|
40
|
+
const { updateStatus, response } = useRiScs();
|
|
41
41
|
const deleteScenarioRef = useRef(null);
|
|
42
42
|
const formMethods = useForm({
|
|
43
43
|
defaultValues: mapScenarioToFormScenario(scenario),
|
|
@@ -155,10 +155,10 @@ const ScenarioDrawer = () => {
|
|
|
155
155
|
color: "primary",
|
|
156
156
|
variant: "contained",
|
|
157
157
|
onClick: onSubmit,
|
|
158
|
-
disabled: !formMethods.formState.isDirty ||
|
|
158
|
+
disabled: !formMethods.formState.isDirty || updateStatus.isLoading
|
|
159
159
|
},
|
|
160
160
|
t("dictionary.save"),
|
|
161
|
-
|
|
161
|
+
updateStatus.isLoading && /* @__PURE__ */ React.createElement(
|
|
162
162
|
CircularProgress,
|
|
163
163
|
{
|
|
164
164
|
size: 16,
|
|
@@ -178,7 +178,7 @@ const ScenarioDrawer = () => {
|
|
|
178
178
|
t("scenarioDrawer.deleteScenarioButton")
|
|
179
179
|
))
|
|
180
180
|
),
|
|
181
|
-
response && response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && /* @__PURE__ */ React.createElement(Alert, { severity: getAlertSeverity(
|
|
181
|
+
response && response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && /* @__PURE__ */ React.createElement(Alert, { severity: getAlertSeverity(updateStatus) }, /* @__PURE__ */ React.createElement(Typography, null, response.statusMessage)),
|
|
182
182
|
/* @__PURE__ */ React.createElement(
|
|
183
183
|
DeleteConfirmation,
|
|
184
184
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { RiskSection } from './components/RiskSection';\nimport { ActionsSection } from './components/ActionsSection';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { DeleteConfirmation } from './components/DeleteConfirmation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { ScopeSection } from './components/ScopeSection';\nimport { useForm } from 'react-hook-form';\nimport { FormScenario, ProcessingStatus } from '../../utils/types';\nimport RiskFormSection from './components/RiskFormSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport Drawer from '@mui/material/Drawer';\nimport Button from '@mui/material/Button';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Alert from '@mui/material/Alert';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport Typography from '@mui/material/Typography';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\n\nexport const ScenarioDrawer = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { riScUpdateStatus, response } = useRiScs();\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onBlur',\n });\n\n const onCancel = () => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n };\n\n const handleClose = () => {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n };\n\n const onClose = () => {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n };\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), () =>\n setIsEditing(false),\n );\n });\n\n const onSubmitAndCloseDialog = () => {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n }, [scenario, formMethods, mapScenarioToFormScenario]);\n\n return (\n <Drawer\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection\n formMethods={formMethods}\n isEditing={isEditing}\n onSubmit={onSubmit}\n />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onSubmit}\n disabled={\n !formMethods.formState.isDirty || riScUpdateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {riScUpdateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n <div ref={deleteScenarioRef}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"primary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n sx={{ marginLeft: 'auto' }}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n </Box>\n\n {response &&\n response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && (\n <Alert severity={getAlertSeverity(riScUpdateStatus)}>\n <Typography>{response.statusMessage}</Typography>\n </Alert>\n )}\n\n <DeleteConfirmation\n deleteConfirmationIsOpen={deleteConfirmationIsOpen}\n setDeleteConfirmationIsOpen={setDeleteConfirmationIsOpen}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n};\n"],"names":["RiskFormSection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { RiskSection } from './components/RiskSection';\nimport { ActionsSection } from './components/ActionsSection';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { DeleteConfirmation } from './components/DeleteConfirmation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { ScopeSection } from './components/ScopeSection';\nimport { useForm } from 'react-hook-form';\nimport { FormScenario, ProcessingStatus } from '../../utils/types';\nimport RiskFormSection from './components/RiskFormSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport Drawer from '@mui/material/Drawer';\nimport Button from '@mui/material/Button';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Alert from '@mui/material/Alert';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport Typography from '@mui/material/Typography';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\n\nexport const ScenarioDrawer = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { updateStatus, response } = useRiScs();\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onBlur',\n });\n\n const onCancel = () => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n };\n\n const handleClose = () => {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n };\n\n const onClose = () => {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n };\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), () =>\n setIsEditing(false),\n );\n });\n\n const onSubmitAndCloseDialog = () => {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n }, [scenario, formMethods, mapScenarioToFormScenario]);\n\n return (\n <Drawer\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection\n formMethods={formMethods}\n isEditing={isEditing}\n onSubmit={onSubmit}\n />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onSubmit}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n <div ref={deleteScenarioRef}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"primary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n sx={{ marginLeft: 'auto' }}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n </Box>\n\n {response &&\n response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && (\n <Alert severity={getAlertSeverity(updateStatus)}>\n <Typography>{response.statusMessage}</Typography>\n </Alert>\n )}\n\n <DeleteConfirmation\n deleteConfirmationIsOpen={deleteConfirmationIsOpen}\n setDeleteConfirmationIsOpen={setDeleteConfirmationIsOpen}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n};\n"],"names":["RiskFormSection"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAChD,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,0BAAA;AAAA,IACA,yBAAA;AAAA,IACA,yBAAA;AAAA,IACA,kBAAA;AAAA,MACE,WAAY,EAAA,CAAA;AAEhB,EAAA,MAAM,CAAC,wBAAA,EAA0B,2BAA2B,CAAA,GAC1D,SAAS,KAAK,CAAA,CAAA;AAEhB,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAExE,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAE3E,EAAA,MAAM,EAAE,YAAA,EAAc,QAAS,EAAA,GAAI,QAAS,EAAA,CAAA;AAI5C,EAAM,MAAA,iBAAA,GAAoB,OAAuB,IAAI,CAAA,CAAA;AAErD,EAAA,MAAM,cAAc,OAAsB,CAAA;AAAA,IACxC,aAAA,EAAe,0BAA0B,QAAQ,CAAA;AAAA,IACjD,IAAM,EAAA,QAAA;AAAA,GACP,CAAA,CAAA;AAED,EAAA,MAAM,WAAW,MAAM;AACrB,IAAY,WAAA,CAAA,KAAA,CAAM,yBAA0B,CAAA,QAAQ,CAAC,CAAA,CAAA;AACrD,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAkB,iBAAA,EAAA,CAAA;AAClB,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,IAAA,wBAAA,CAAyB,KAAK,CAAA,CAAA;AAC9B,IAAmB,kBAAA,EAAA,CAAA;AAAA,GACrB,CAAA;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAI,IAAA,WAAA,CAAY,UAAU,OAAS,EAAA;AACjC,MAAA,wBAAA,CAAyB,IAAI,CAAA,CAAA;AAAA,KACxB,MAAA;AACL,MAAkB,iBAAA,EAAA,CAAA;AAClB,MAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,MAAmB,kBAAA,EAAA,CAAA;AAAA,KACrB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,QAAW,GAAA,WAAA,CAAY,YAAa,CAAA,CAAC,IAAuB,KAAA;AAChE,IAAA,0BAAA;AAAA,MAA2B,0BAA0B,IAAI,CAAA;AAAA,MAAG,MAC1D,aAAa,KAAK,CAAA;AAAA,KACpB,CAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAS,QAAA,EAAA,CAAA;AACT,IAAA,wBAAA,CAAyB,KAAK,CAAA,CAAA;AAE9B,IAAA,IAAI,kBAAkB,OAAS,EAAA;AAC7B,MAAA,iBAAA,CAAkB,OAAQ,CAAA,cAAA,CAAe,EAAE,QAAA,EAAU,UAAU,CAAA,CAAA;AAAA,KACjE;AAAA,GACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAY,WAAA,CAAA,KAAA,CAAM,yBAA0B,CAAA,QAAQ,CAAC,CAAA,CAAA;AAAA,GACpD,EAAA,CAAC,QAAU,EAAA,WAAA,EAAa,yBAAyB,CAAC,CAAA,CAAA;AAErD,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA;AAAA,QACV,IAAI,CAAU,KAAA,MAAA;AAAA,UACZ,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,UACxB,KAAO,EAAA,KAAA;AAAA,UACP,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,UACpB,CAAC,KAAM,CAAA,WAAA,CAAY,IAAK,CAAA,IAAI,CAAC,GAAG;AAAA,YAC9B,KAAO,EAAA,KAAA;AAAA,YACP,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,WAC1B;AAAA,UACA,eACE,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,SAAY,GAAA,SAAA;AAAA,SAChD,CAAA;AAAA,OACF;AAAA,MACA,OAAQ,EAAA,WAAA;AAAA,MACR,MAAO,EAAA,OAAA;AAAA,MACP,IAAM,EAAA,YAAA;AAAA,MACN,OAAA;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,MAAA;AAAA,UACT,GAAK,EAAA,MAAA;AAAA,UACL,UAAY,EAAA,MAAA;AAAA,SACd;AAAA,OAAA;AAAA,MAEC,CAAC,SACA,oBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAM,EAAA,SAAA;AAAA,UACN,OAAQ,EAAA,WAAA;AAAA,UACR,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,SAAA;AAAA,QAE/B,EAAE,iBAAiB,CAAA;AAAA,OACtB;AAAA,sBAEF,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,UAAA;AAAA,UACR,KAAM,EAAA,SAAA;AAAA,UACN,OAAA,EAAS,YAAY,QAAW,GAAA,OAAA;AAAA,SAAA;AAAA,QAE/B,CAAA,CAAE,SAAY,GAAA,mBAAA,GAAsB,kBAAkB,CAAA;AAAA,OACzD;AAAA,KACF;AAAA,IAEC,SACC,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,gBAAA,EAAA,EAAiB,aAA0B,CAC5C,kBAAA,KAAA,CAAA,aAAA;AAAA,MAACA,YAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,qBAAA;AAAA,OAAA;AAAA,KAEJ,oBAGE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,kBAAa,CACd,kBAAA,KAAA,CAAA,aAAA,CAAC,iBAAY,CACf,CAAA;AAAA,oBAEF,KAAA,CAAA,aAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,OAAA;AAAA,KACF;AAAA,oBACA,KAAA,CAAA,aAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,MAAA;AAAA,UACT,GAAK,EAAA,MAAA;AAAA,SACP;AAAA,OAAA;AAAA,MAEC,SACC,oBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAM,EAAA,SAAA;AAAA,UACN,OAAQ,EAAA,WAAA;AAAA,UACR,OAAS,EAAA,QAAA;AAAA,UACT,QAAU,EAAA,CAAC,WAAY,CAAA,SAAA,CAAU,WAAW,YAAa,CAAA,SAAA;AAAA,SAAA;AAAA,QAExD,EAAE,iBAAiB,CAAA;AAAA,QACnB,aAAa,SACZ,oBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,IAAM,EAAA,EAAA;AAAA,YACN,EAAI,EAAA,EAAE,UAAY,EAAA,CAAA,EAAG,OAAO,SAAU,EAAA;AAAA,WAAA;AAAA,SACxC;AAAA,OAEJ;AAAA,sBAEF,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,GAAA,EAAK,iBACR,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,sCAAY,UAAW,EAAA,IAAA,CAAA;AAAA,UACvB,OAAQ,EAAA,MAAA;AAAA,UACR,KAAM,EAAA,SAAA;AAAA,UACN,OAAA,EAAS,MAAM,2BAAA,CAA4B,IAAI,CAAA;AAAA,UAC/C,EAAA,EAAI,EAAE,UAAA,EAAY,MAAO,EAAA;AAAA,SAAA;AAAA,QAExB,EAAE,qCAAqC,CAAA;AAAA,OAE5C,CAAA;AAAA,KACF;AAAA,IAEC,QACC,IAAA,QAAA,CAAS,MAAW,KAAA,gBAAA,CAAiB,0CAClC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,QAAU,EAAA,gBAAA,CAAiB,YAAY,CAC5C,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAY,EAAA,IAAA,EAAA,QAAA,CAAS,aAAc,CACtC,CAAA;AAAA,oBAGJ,KAAA,CAAA,aAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,wBAAA;AAAA,QACA,2BAAA;AAAA,OAAA;AAAA,KACF;AAAA,oBACA,KAAA,CAAA,aAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAM,EAAA,kBAAA;AAAA,QACN,KAAA,EAAO,MAAM,qBAAA,CAAsB,KAAK,CAAA;AAAA,OAAA;AAAA,KAC1C;AAAA,oBACA,KAAA,CAAA,aAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,qBAAA;AAAA,QACR,KAAO,EAAA,WAAA;AAAA,QACP,IAAM,EAAA,sBAAA;AAAA,OAAA;AAAA,KACR;AAAA,GACF,CAAA;AAEJ;;;;"}
|
|
@@ -28,7 +28,7 @@ const ActionBox = ({
|
|
|
28
28
|
const { isActionExpanded, toggleActionExpanded } = useScenario();
|
|
29
29
|
const isExpanded = isActionExpanded(action.ID);
|
|
30
30
|
const [isEditing, setIsEditing] = useState(false);
|
|
31
|
-
const {
|
|
31
|
+
const { updateStatus } = useRiScs();
|
|
32
32
|
const { submitEditedScenarioToRiSc, mapFormScenarioToScenario } = useScenario();
|
|
33
33
|
const isActionTitlePresent = action.title !== null && action.title !== "";
|
|
34
34
|
const translatedActionStatus = t(`actionStatus.${action.status}`);
|
|
@@ -51,10 +51,10 @@ const ActionBox = ({
|
|
|
51
51
|
onClick: formMethods.handleSubmit((data) => {
|
|
52
52
|
submitEditedScenarioToRiSc(mapFormScenarioToScenario(data));
|
|
53
53
|
}),
|
|
54
|
-
disabled: !formMethods.formState.isDirty ||
|
|
54
|
+
disabled: !formMethods.formState.isDirty || updateStatus.isLoading
|
|
55
55
|
},
|
|
56
56
|
t("dictionary.save"),
|
|
57
|
-
|
|
57
|
+
updateStatus.isLoading && /* @__PURE__ */ React.createElement(
|
|
58
58
|
CircularProgress,
|
|
59
59
|
{
|
|
60
60
|
size: 16,
|