@kartverket/backstage-plugin-risk-scorecard 6.7.3 → 6.9.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/dist/components/riScInfo/LockedRiScView.esm.js +58 -0
- package/dist/components/riScInfo/LockedRiScView.esm.js.map +1 -0
- package/dist/components/riScInfo/LockedRiScView.module.css.esm.js +8 -0
- package/dist/components/riScInfo/LockedRiScView.module.css.esm.js.map +1 -0
- package/dist/components/riScInfo/RiScSelectionCard.esm.js +29 -17
- package/dist/components/riScInfo/RiScSelectionCard.esm.js.map +1 -1
- package/dist/components/riScInfo/RiScSelectionCard.module.css.esm.js +2 -2
- package/dist/components/riScInfo/riScStatus/FeedbackLink.esm.js +29 -0
- package/dist/components/riScInfo/riScStatus/FeedbackLink.esm.js.map +1 -0
- package/dist/components/riScInfo/riScStatus/RiScStatusComponent.esm.js +4 -1
- package/dist/components/riScInfo/riScStatus/RiScStatusComponent.esm.js.map +1 -1
- package/dist/components/riScPlugin/RiScPlugin.esm.js +27 -2
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/contexts/RiScContext.esm.js +33 -12
- package/dist/contexts/RiScContext.esm.js.map +1 -1
- package/dist/urls/external.esm.js +2 -1
- package/dist/urls/external.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +16 -2
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Card, CardHeader, Flex, Text, CardBody, Button } from '@backstage/ui';
|
|
4
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
5
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
|
+
import styles from './LockedRiScView.module.css.esm.js';
|
|
7
|
+
|
|
8
|
+
function LockedRiScView({ lockedRiSc }) {
|
|
9
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
10
|
+
const [copied, setCopied] = useState(false);
|
|
11
|
+
const keyId = lockedRiSc.encryptionKeyId?.split("/").pop() ?? lockedRiSc.encryptionKeyId ?? "";
|
|
12
|
+
const handleCopy = () => {
|
|
13
|
+
navigator.clipboard.writeText(keyId).then(() => {
|
|
14
|
+
setCopied(true);
|
|
15
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
return /* @__PURE__ */ jsxs(Card, { className: styles.card, children: [
|
|
19
|
+
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(Flex, { justify: "center", children: /* @__PURE__ */ jsx(Text, { variant: "title-small", weight: "bold", children: t("lockedRiScCard.title") }) }) }),
|
|
20
|
+
/* @__PURE__ */ jsx(CardBody, { children: /* @__PURE__ */ jsxs(
|
|
21
|
+
Flex,
|
|
22
|
+
{
|
|
23
|
+
direction: "column",
|
|
24
|
+
align: "center",
|
|
25
|
+
gap: "8px",
|
|
26
|
+
className: styles.content,
|
|
27
|
+
style: { padding: "8px 0" },
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsx(Text, { children: t("lockedRiScCard.description") }),
|
|
30
|
+
keyId && /* @__PURE__ */ jsxs(Flex, { direction: "column", align: "center", gap: "4px", children: [
|
|
31
|
+
/* @__PURE__ */ jsx(Text, { children: t("lockedRiScCard.encryptedWithKey") }),
|
|
32
|
+
/* @__PURE__ */ jsxs(Flex, { align: "center", gap: "8px", children: [
|
|
33
|
+
/* @__PURE__ */ jsx(Text, { weight: "bold", children: keyId }),
|
|
34
|
+
/* @__PURE__ */ jsx(
|
|
35
|
+
Button,
|
|
36
|
+
{
|
|
37
|
+
variant: "tertiary",
|
|
38
|
+
size: "small",
|
|
39
|
+
iconStart: /* @__PURE__ */ jsx(
|
|
40
|
+
"i",
|
|
41
|
+
{
|
|
42
|
+
className: copied ? "ri-check-line" : "ri-file-copy-line"
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
onClick: handleCopy,
|
|
46
|
+
children: copied ? t("dictionary.copied") : t("dictionary.copy")
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
] })
|
|
50
|
+
] })
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
) })
|
|
54
|
+
] });
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { LockedRiScView };
|
|
58
|
+
//# sourceMappingURL=LockedRiScView.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockedRiScView.esm.js","sources":["../../../src/components/riScInfo/LockedRiScView.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Button, Card, CardBody, CardHeader, Flex, Text } from '@backstage/ui';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { LockedRiSc } from '../../utils/types';\nimport styles from './LockedRiScView.module.css';\n\ntype LockedRiScViewProps = {\n lockedRiSc: LockedRiSc;\n};\n\nexport function LockedRiScView({ lockedRiSc }: LockedRiScViewProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [copied, setCopied] = useState(false);\n\n const keyId =\n lockedRiSc.encryptionKeyId?.split('/').pop() ??\n lockedRiSc.encryptionKeyId ??\n '';\n\n const handleCopy = () => {\n navigator.clipboard.writeText(keyId).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n\n return (\n <Card className={styles.card}>\n <CardHeader>\n <Flex justify=\"center\">\n <Text variant=\"title-small\" weight=\"bold\">\n {t('lockedRiScCard.title')}\n </Text>\n </Flex>\n </CardHeader>\n <CardBody>\n <Flex\n direction=\"column\"\n align=\"center\"\n gap=\"8px\"\n className={styles.content}\n style={{ padding: '8px 0' }}\n >\n <Text>{t('lockedRiScCard.description')}</Text>\n {keyId && (\n <Flex direction=\"column\" align=\"center\" gap=\"4px\">\n <Text>{t('lockedRiScCard.encryptedWithKey')}</Text>\n <Flex align=\"center\" gap=\"8px\">\n <Text weight=\"bold\">{keyId}</Text>\n <Button\n variant=\"tertiary\"\n size=\"small\"\n iconStart={\n <i\n className={copied ? 'ri-check-line' : 'ri-file-copy-line'}\n />\n }\n onClick={handleCopy}\n >\n {copied ? t('dictionary.copied') : t('dictionary.copy')}\n </Button>\n </Flex>\n </Flex>\n )}\n </Flex>\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,cAAA,CAAe,EAAE,UAAA,EAAW,EAAwB;AAClE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,KAAA,GACJ,WAAW,eAAA,EAAiB,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,IAC3C,UAAA,CAAW,eAAA,IACX,EAAA;AAEF,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAK,CAAA,CAAE,KAAK,MAAM;AAC9C,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,IAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,UACZ,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,aAAA,EAAc,QAAO,MAAA,EAChC,QAAA,EAAA,CAAA,CAAE,sBAAsB,CAAA,EAC3B,GACF,CAAA,EACF,CAAA;AAAA,wBACC,QAAA,EAAA,EACC,QAAA,kBAAA,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAM,QAAA;AAAA,QACN,GAAA,EAAI,KAAA;AAAA,QACJ,WAAW,MAAA,CAAO,OAAA;AAAA,QAClB,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAQ;AAAA,QAE1B,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,UACtC,KAAA,yBACE,IAAA,EAAA,EAAK,SAAA,EAAU,UAAS,KAAA,EAAM,QAAA,EAAS,KAAI,KAAA,EAC1C,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,iCAAiC,CAAA,EAAE,CAAA;AAAA,4BAC5C,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,KAAA,EACvB,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,8BAC3B,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,UAAA;AAAA,kBACR,IAAA,EAAK,OAAA;AAAA,kBACL,SAAA,kBACE,GAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAW,SAAS,eAAA,GAAkB;AAAA;AAAA,mBACxC;AAAA,kBAEF,OAAA,EAAS,UAAA;AAAA,kBAER,QAAA,EAAA,MAAA,GAAS,CAAA,CAAE,mBAAmB,CAAA,GAAI,EAAE,iBAAiB;AAAA;AAAA;AACxD,aAAA,EACF;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KAEJ,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".LockedRiScView_card__3c6faf2db4 {\n width: 520px;\n}\n\n.LockedRiScView_content__3c6faf2db4 {\n text-align: center;\n}\n";
|
|
4
|
+
var styles = {"card":"LockedRiScView_card__3c6faf2db4","content":"LockedRiScView_content__3c6faf2db4"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=LockedRiScView.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockedRiScView.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,29 +1,41 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useRiScs } from '../../contexts/RiScContext.esm.js';
|
|
3
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
4
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
5
|
-
import { Flex
|
|
5
|
+
import { Flex } from '@backstage/ui';
|
|
6
|
+
import FormControl from '@mui/material/FormControl';
|
|
7
|
+
import ListSubheader from '@mui/material/ListSubheader';
|
|
8
|
+
import MenuItem from '@mui/material/MenuItem';
|
|
9
|
+
import MUISelect from '@mui/material/Select';
|
|
6
10
|
import riscStyles from './RiScSelectionCard.module.css.esm.js';
|
|
7
11
|
|
|
8
12
|
function RiScSelectionCard() {
|
|
9
|
-
const { riScs, selectedRiSc, selectRiSc } = useRiScs();
|
|
13
|
+
const { riScs, lockedRiScs, selectedRiSc, selectedLockedRiSc, selectRiSc } = useRiScs();
|
|
10
14
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
const hasOptions = riScs !== null && riScs.length !== 0 || lockedRiScs.length !== 0;
|
|
16
|
+
return /* @__PURE__ */ jsx(Flex, { direction: "column", gap: "24px", children: hasOptions && /* @__PURE__ */ jsx(FormControl, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxs(
|
|
17
|
+
MUISelect,
|
|
13
18
|
{
|
|
14
|
-
value: selectedRiSc?.id,
|
|
15
|
-
|
|
16
|
-
"aria-label": t("contentHeader.multipleRiScs"),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
value: selectedRiSc?.id ?? selectedLockedRiSc?.id ?? "",
|
|
20
|
+
onChange: (e) => selectRiSc(e.target.value),
|
|
21
|
+
inputProps: { "aria-label": t("contentHeader.multipleRiScs") },
|
|
22
|
+
MenuProps: { disablePortal: true },
|
|
23
|
+
children: [
|
|
24
|
+
(riScs ?? []).map((riSc) => /* @__PURE__ */ jsx(MenuItem, { value: riSc.id, children: riSc.content.title }, riSc.id)),
|
|
25
|
+
lockedRiScs.length > 0 && /* @__PURE__ */ jsx(
|
|
26
|
+
ListSubheader,
|
|
27
|
+
{
|
|
28
|
+
className: `${riscStyles.lockedSectionHeader} ${riScs && riScs.length > 0 ? riscStyles.lockedSectionHeaderWithDivider : ""}`,
|
|
29
|
+
children: t("contentHeader.lockedRiScsSection")
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
lockedRiScs.map((riSc) => /* @__PURE__ */ jsxs(MenuItem, { value: riSc.id, children: [
|
|
33
|
+
"\u{1F512} ",
|
|
34
|
+
riSc.id
|
|
35
|
+
] }, riSc.id))
|
|
36
|
+
]
|
|
25
37
|
}
|
|
26
|
-
) });
|
|
38
|
+
) }) });
|
|
27
39
|
}
|
|
28
40
|
|
|
29
41
|
export { RiScSelectionCard };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScSelectionCard.esm.js","sources":["../../../src/components/riScInfo/RiScSelectionCard.tsx"],"sourcesContent":["import { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport {
|
|
1
|
+
{"version":3,"file":"RiScSelectionCard.esm.js","sources":["../../../src/components/riScInfo/RiScSelectionCard.tsx"],"sourcesContent":["import { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Flex } from '@backstage/ui';\nimport FormControl from '@mui/material/FormControl';\nimport ListSubheader from '@mui/material/ListSubheader';\nimport MenuItem from '@mui/material/MenuItem';\nimport MUISelect from '@mui/material/Select';\nimport styles from './RiScSelectionCard.module.css';\n\nexport function RiScSelectionCard() {\n const { riScs, lockedRiScs, selectedRiSc, selectedLockedRiSc, selectRiSc } =\n useRiScs();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const hasOptions =\n (riScs !== null && riScs.length !== 0) || lockedRiScs.length !== 0;\n\n return (\n <Flex direction=\"column\" gap=\"24px\">\n {hasOptions && (\n <FormControl fullWidth size=\"small\">\n <MUISelect\n value={selectedRiSc?.id ?? selectedLockedRiSc?.id ?? ''}\n onChange={e => selectRiSc(e.target.value)}\n inputProps={{ 'aria-label': t('contentHeader.multipleRiScs') }}\n MenuProps={{ disablePortal: true }}\n >\n {(riScs ?? []).map(riSc => (\n <MenuItem key={riSc.id} value={riSc.id}>\n {riSc.content.title}\n </MenuItem>\n ))}\n {lockedRiScs.length > 0 && (\n <ListSubheader\n className={`${styles.lockedSectionHeader} ${riScs && riScs.length > 0 ? styles.lockedSectionHeaderWithDivider : ''}`}\n >\n {t('contentHeader.lockedRiScsSection')}\n </ListSubheader>\n )}\n {lockedRiScs.map(riSc => (\n <MenuItem key={riSc.id} value={riSc.id}>\n 🔒 {riSc.id}\n </MenuItem>\n ))}\n </MUISelect>\n </FormControl>\n )}\n </Flex>\n );\n}\n"],"names":["styles"],"mappings":";;;;;;;;;;;AAUO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,cAAc,kBAAA,EAAoB,UAAA,KAC5D,QAAA,EAAS;AACX,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,aACH,KAAA,KAAU,IAAA,IAAQ,MAAM,MAAA,KAAW,CAAA,IAAM,YAAY,MAAA,KAAW,CAAA;AAEnE,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,MAAA,EAC1B,QAAA,EAAA,UAAA,oBACC,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAS,IAAA,EAAC,IAAA,EAAK,OAAA,EAC1B,QAAA,kBAAA,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,YAAA,EAAc,EAAA,IAAM,kBAAA,EAAoB,EAAA,IAAM,EAAA;AAAA,MACrD,QAAA,EAAU,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACxC,UAAA,EAAY,EAAE,YAAA,EAAc,CAAA,CAAE,6BAA6B,CAAA,EAAE;AAAA,MAC7D,SAAA,EAAW,EAAE,aAAA,EAAe,IAAA,EAAK;AAAA,MAE/B,QAAA,EAAA;AAAA,QAAA,CAAA,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAA,IAAA,yBAChB,QAAA,EAAA,EAAuB,KAAA,EAAO,IAAA,CAAK,EAAA,EACjC,QAAA,EAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAA,EADD,IAAA,CAAK,EAEpB,CACD,CAAA;AAAA,QACA,WAAA,CAAY,SAAS,CAAA,oBACpB,GAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,EAAGA,UAAA,CAAO,mBAAmB,CAAA,CAAA,EAAI,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,CAAA,GAAIA,UAAA,CAAO,8BAAA,GAAiC,EAAE,CAAA,CAAA;AAAA,YAEjH,YAAE,kCAAkC;AAAA;AAAA,SACvC;AAAA,QAED,YAAY,GAAA,CAAI,CAAA,IAAA,0BACd,QAAA,EAAA,EAAuB,KAAA,EAAO,KAAK,EAAA,EAAI,QAAA,EAAA;AAAA,UAAA,YAAA;AAAA,UAClC,IAAA,CAAK;AAAA,SAAA,EAAA,EADI,IAAA,CAAK,EAEpB,CACD;AAAA;AAAA;AAAA,KAEL,CAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".
|
|
4
|
-
var riscStyles = {"
|
|
3
|
+
var css_248z = ".RiScSelectionCard_lockedSectionHeader__8c09a22d25 {\n font-weight: 700;\n font-size: 0.7rem;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n background-color: inherit !important;\n}\n\n.RiScSelectionCard_lockedSectionHeaderWithDivider__8c09a22d25 {\n border-top: 1px solid var(--ros-gray-200);\n margin-top: 4px;\n padding-top: 8px;\n}\n\n[role='listbox'] {\n max-height: 400px;\n overflow-y: auto;\n}\n\n.RiScSelectionCard_riScInfoDialog__8c09a22d25 {\n padding: 24px;\n border-radius: 4px;\n width: 800px;\n}\n\n.RiScSelectionCard_riscSelectionDialogHeader__8c09a22d25 {\n padding: 0 0 16px 0;\n}\n\n.RiScSelectionCard_riscSelectionDialogBody__8c09a22d25 {\n gap: 16px;\n padding: 16px 0 0 0;\n}\n\n.RiScSelectionCard_riscDescriptionComponent__8c09a22d25 {\n padding-bottom: 10px;\n}\n.RiScSelectionCard_componentLayout__8c09a22d25 {\n height: 60%;\n}\n\n.RiScSelectionCard_riscDescriptionContainer__8c09a22d25 {\n margin-bottom: 16px;\n}\n\n.RiScSelectionCard_riScInfoDialog__8c09a22d25 {\n background-color: var(--bui-bg-app);\n}\n";
|
|
4
|
+
var riscStyles = {"lockedSectionHeader":"RiScSelectionCard_lockedSectionHeader__8c09a22d25","lockedSectionHeaderWithDivider":"RiScSelectionCard_lockedSectionHeaderWithDivider__8c09a22d25","riScInfoDialog":"RiScSelectionCard_riScInfoDialog__8c09a22d25","riscDescriptionComponent":"RiScSelectionCard_riscDescriptionComponent__8c09a22d25","componentLayout":"RiScSelectionCard_componentLayout__8c09a22d25","riscDescriptionContainer":"RiScSelectionCard_riscDescriptionContainer__8c09a22d25"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { riscStyles as default };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
+
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
4
|
+
import { EXTERNAL_URLS } from '../../../urls/external.esm.js';
|
|
5
|
+
import { Flex, Text, Link } from '@backstage/ui';
|
|
6
|
+
|
|
7
|
+
function FeedbackLink() {
|
|
8
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
9
|
+
return /* @__PURE__ */ jsx(Flex, { justify: "end", mt: "4", children: /* @__PURE__ */ jsxs(Text, { as: "p", variant: "body-large", children: [
|
|
10
|
+
t("rosStatus.feedbackDescription"),
|
|
11
|
+
" ",
|
|
12
|
+
/* @__PURE__ */ jsxs(
|
|
13
|
+
Link,
|
|
14
|
+
{
|
|
15
|
+
target: "_blank",
|
|
16
|
+
rel: "noreferrer",
|
|
17
|
+
href: EXTERNAL_URLS.feedback_form,
|
|
18
|
+
children: [
|
|
19
|
+
t("rosStatus.feedbackLink"),
|
|
20
|
+
" ",
|
|
21
|
+
/* @__PURE__ */ jsx("i", { className: "ri-external-link-line" })
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
] }) });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { FeedbackLink };
|
|
29
|
+
//# sourceMappingURL=FeedbackLink.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackLink.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/FeedbackLink.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { EXTERNAL_URLS } from '../../../urls/external';\nimport { Flex, Link, Text } from '@backstage/ui';\n\nexport function FeedbackLink() {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex justify=\"end\" mt=\"4\">\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.feedbackDescription')}{' '}\n <Link\n target=\"_blank\"\n rel=\"noreferrer\"\n href={EXTERNAL_URLS.feedback_form}\n >\n {t('rosStatus.feedbackLink')} <i className=\"ri-external-link-line\" />\n </Link>\n </Text>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;AAKO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,KAAA,EAAM,EAAA,EAAG,GAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAClB,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,+BAA+B,CAAA;AAAA,IAAG,GAAA;AAAA,oBACrC,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAO,QAAA;AAAA,QACP,GAAA,EAAI,YAAA;AAAA,QACJ,MAAM,aAAA,CAAc,aAAA;AAAA,QAEnB,QAAA,EAAA;AAAA,UAAA,CAAA,CAAE,wBAAwB,CAAA;AAAA,UAAE,GAAA;AAAA,0BAAC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAwB;AAAA;AAAA;AAAA;AACrE,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -12,6 +12,7 @@ import { RiScStatusEnum } from './utils.esm.js';
|
|
|
12
12
|
import { Card, CardHeader, Text, CardBody, Flex, ButtonLink, Button, Box } from '@backstage/ui';
|
|
13
13
|
import { StatusBanner } from './StatusBanner.esm.js';
|
|
14
14
|
import { StatusBadge } from './StatusBadge.esm.js';
|
|
15
|
+
import { FeedbackLink } from './FeedbackLink.esm.js';
|
|
15
16
|
|
|
16
17
|
const emptyDifferenceFetchState = {
|
|
17
18
|
differenceState: {
|
|
@@ -108,6 +109,7 @@ function RiScStatusComponent({
|
|
|
108
109
|
const lastPublishedDateTime = selectedRiSc.lastPublished?.dateTime;
|
|
109
110
|
const daysSinceLastModified = lastPublishedDateTime ? calculateDaysSince(new Date(lastPublishedDateTime)) : null;
|
|
110
111
|
const numOfCommitsBehind = selectedRiSc.lastPublished?.numberOfCommits ?? null;
|
|
112
|
+
const showFeedbackLink = status === RiScStatusEnum.WAITING || status === RiScStatusEnum.PUBLISHED && daysSinceLastModified !== null && daysSinceLastModified <= 5;
|
|
111
113
|
return /* @__PURE__ */ jsxs(Card, { style: { height: "fit-content" }, children: [
|
|
112
114
|
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
113
115
|
/* @__PURE__ */ jsx(Text, { variant: "title-small", weight: "bold", as: "h5", children: "Status" }),
|
|
@@ -222,7 +224,8 @@ function RiScStatusComponent({
|
|
|
222
224
|
}
|
|
223
225
|
)
|
|
224
226
|
] }),
|
|
225
|
-
!selectedRiSc && /* @__PURE__ */ jsx(Text, { as: "span", children: t("rosStatus.statusBadge.error") })
|
|
227
|
+
!selectedRiSc && /* @__PURE__ */ jsx(Text, { as: "span", children: t("rosStatus.statusBadge.error") }),
|
|
228
|
+
showFeedbackLink && /* @__PURE__ */ jsx(FeedbackLink, {})
|
|
226
229
|
] })
|
|
227
230
|
] });
|
|
228
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScStatusComponent.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/RiScStatusComponent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n DifferenceFetchState,\n DifferenceStatus,\n RiScStatus,\n RiScWithMetadata,\n} from '../../../utils/types';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useAuthenticatedFetch } from '../../../utils/hooks';\nimport { RiScMigrationDialog } from '../MigrationDialog';\nimport { RiScPublishDialog } from '../PublishDialog';\nimport { calculateDaysSince } from '../../../utils/utilityfunctions';\nimport { RiScStatusEnum, RiScStatusEnumType } from './utils';\nimport {\n Text,\n Button,\n Box,\n Flex,\n Card,\n CardBody,\n ButtonLink,\n CardHeader,\n} from '@backstage/ui';\nimport { StatusBanner } from './StatusBanner.tsx';\nimport { StatusBadge } from './StatusBadge.tsx';\n\nconst emptyDifferenceFetchState: DifferenceFetchState = {\n differenceState: {\n type: '4.*',\n migrationChanges: {\n migrationChanges: false,\n migrationRequiresNewApproval: false,\n migrationVersions: undefined,\n migrationChanges40: undefined,\n migrationChanges41: undefined,\n },\n valuations: [],\n scenarios: [],\n },\n status: null,\n isLoading: false,\n errorMessage: '',\n currentDifferenceId: '',\n defaultLastModifiedDateString: '',\n};\n\ninterface RiScStatusProps {\n selectedRiSc: RiScWithMetadata;\n publishRiScFn: () => void;\n}\n\nexport function RiScStatusComponent({\n selectedRiSc,\n publishRiScFn,\n}: RiScStatusProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { fetchDifference } = useAuthenticatedFetch();\n\n const [publishRiScDialogIsOpen, setPublishRiScDialogIsOpen] =\n useState<boolean>(false);\n\n const [migrationDialogIsOpen, setMigrationDialogIsOpen] =\n useState<boolean>(false);\n\n const [differenceFetchState, setDifferenceFetchState] =\n useState<DifferenceFetchState>(emptyDifferenceFetchState);\n\n const { updateRiSc } = useRiScs();\n\n function handleApproveAndPublish() {\n publishRiScFn();\n setPublishRiScDialogIsOpen(false);\n }\n\n function getDifferences() {\n if (\n !selectedRiSc ||\n differenceFetchState.isLoading ||\n differenceFetchState.currentDifferenceId === selectedRiSc.id\n )\n return;\n\n setDifferenceFetchState({ ...differenceFetchState, isLoading: true });\n fetchDifference(\n selectedRiSc,\n response => {\n setDifferenceFetchState({\n differenceState: response.differenceState,\n isLoading: false,\n currentDifferenceId: selectedRiSc.id,\n status: response.status,\n errorMessage: response.errorMessage,\n defaultLastModifiedDateString: response.defaultLastModifiedDateString,\n });\n },\n () => {\n setDifferenceFetchState({\n ...emptyDifferenceFetchState,\n errorMessage: t('rosStatus.difference.error'),\n status: DifferenceStatus.FrontendFallback, // Fallback when the backend does not deliver a response with status\n });\n },\n );\n }\n\n function handleUpdate() {\n updateRiSc(selectedRiSc);\n setMigrationDialogIsOpen(false);\n }\n\n function handleOpenPublishRiScDialog() {\n setPublishRiScDialogIsOpen(true);\n getDifferences();\n }\n\n function handleClosePublishRiScDialog() {\n setPublishRiScDialogIsOpen(false);\n }\n\n useEffect(() => {\n setDifferenceFetchState(emptyDifferenceFetchState);\n }, [selectedRiSc]);\n\n const [status, setStatus] = useState<RiScStatusEnumType>(\n RiScStatusEnum.CREATED,\n );\n\n useEffect(() => {\n if (selectedRiSc.status === RiScStatus.DeletionDraft) {\n setStatus(RiScStatusEnum.DELETION_DRAFT);\n } else if (selectedRiSc.status === RiScStatus.DeletionSentForApproval) {\n setStatus(RiScStatusEnum.DELETION_WAITING);\n } else if (selectedRiSc.content.scenarios.length === 0) {\n setStatus(RiScStatusEnum.CREATED);\n } else if (selectedRiSc.status === RiScStatus.Draft) {\n setStatus(RiScStatusEnum.DRAFT);\n } else if (selectedRiSc.status === RiScStatus.SentForApproval) {\n setStatus(RiScStatusEnum.WAITING);\n } else if (selectedRiSc.status === RiScStatus.Published) {\n setStatus(RiScStatusEnum.PUBLISHED);\n }\n }, [selectedRiSc.status, selectedRiSc.content.scenarios]);\n\n const migration =\n selectedRiSc.migrationStatus?.migrationChanges &&\n selectedRiSc.status !== RiScStatus.DeletionDraft &&\n selectedRiSc.status !== RiScStatus.DeletionSentForApproval;\n\n const lastPublishedDateTime = selectedRiSc.lastPublished?.dateTime;\n const daysSinceLastModified = lastPublishedDateTime\n ? calculateDaysSince(new Date(lastPublishedDateTime))\n : null;\n\n const numOfCommitsBehind =\n selectedRiSc.lastPublished?.numberOfCommits ?? null;\n\n return (\n <Card style={{ height: 'fit-content' }}>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\" as=\"h5\">\n Status\n </Text>\n <StatusBanner\n numOfCommitsBehind={numOfCommitsBehind}\n daysSinceLastModified={daysSinceLastModified}\n differenceFetchState={differenceFetchState}\n />\n </CardHeader>\n <CardBody>\n {!migration && (\n <>\n <Flex\n direction=\"column\"\n justify=\"between\"\n align=\"start\"\n gap=\"1\"\n mt=\"4\"\n >\n <StatusBadge riScStatus={status} />\n <Flex direction=\"row\" mb=\"4\" pl=\"7\" style={{ width: '100%' }}>\n {status === RiScStatusEnum.CREATED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.editing')}\n </Text>\n )}\n {status === RiScStatusEnum.DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.missing')}\n </Text>\n )}\n {status === RiScStatusEnum.DELETION_DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.deletionApproval')}\n </Text>\n )}\n {(status === RiScStatusEnum.WAITING ||\n status === RiScStatusEnum.DELETION_WAITING) && (\n <Flex\n justify=\"between\"\n align=\"baseline\"\n style={{ width: '100%' }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.prStatus')}\n {status === RiScStatusEnum.WAITING &&\n t('rosStatus.prStatus2Update')}\n {status === RiScStatusEnum.DELETION_WAITING &&\n t('rosStatus.prStatus2Delete')}\n </Text>\n <ButtonLink\n target=\"_blank\"\n href={selectedRiSc.pullRequestUrl}\n variant=\"secondary\"\n >\n <i className=\"ri-external-link-line\" />\n {t('rosStatus.githubLink')}\n </ButtonLink>\n </Flex>\n )}\n {status === RiScStatusEnum.PUBLISHED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.approved')}\n </Text>\n )}\n {(status === RiScStatusEnum.DRAFT ||\n status === RiScStatusEnum.DELETION_DRAFT) && (\n <>\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={handleOpenPublishRiScDialog}\n style={{\n display: 'block',\n marginLeft: 'auto',\n fontSize: '14px',\n }}\n >\n {status === RiScStatusEnum.DRAFT &&\n t('rosStatus.approveButtonUpdate')}\n {status === RiScStatusEnum.DELETION_DRAFT &&\n t('rosStatus.approveButtonDelete')}\n </Button>\n <RiScPublishDialog\n openDialog={publishRiScDialogIsOpen}\n isDeletion={status === RiScStatusEnum.DELETION_DRAFT}\n handlePublish={handleApproveAndPublish}\n handleCancel={handleClosePublishRiScDialog}\n differenceFetchState={differenceFetchState}\n />\n </>\n )}\n </Flex>\n </Flex>\n </>\n )}\n {/* Need to include the undefined check here, as TypeScript does not pick up that this check is part of `migration` */}\n {migration && selectedRiSc.migrationStatus && (\n <Box>\n <Box mt=\"2\" mb=\"2\">\n <Text as=\"p\" variant=\"body-large\" weight=\"bold\">\n <i className=\"ri-error-warning-line\" />{' '}\n {t('rosStatus.statusBadge.migration.title')}\n </Text>\n </Box>\n\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.migration.description')}\n </Text>\n\n <Flex direction=\"column\" mt=\"4\" align=\"end\">\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={() => setMigrationDialogIsOpen(!migrationDialogIsOpen)}\n >\n {t('rosStatus.moreInformationButton')}\n </Button>\n </Flex>\n <RiScMigrationDialog\n openDialog={migrationDialogIsOpen}\n handleUpdate={handleUpdate}\n handleCancel={() => setMigrationDialogIsOpen(false)}\n migrationStatus={selectedRiSc.migrationStatus}\n />\n </Box>\n )}\n {/* Error */}\n {!selectedRiSc && (\n <Text as=\"span\">{t('rosStatus.statusBadge.error')}</Text>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScStatusComponent.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/RiScStatusComponent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n DifferenceFetchState,\n DifferenceStatus,\n RiScStatus,\n RiScWithMetadata,\n} from '../../../utils/types';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useAuthenticatedFetch } from '../../../utils/hooks';\nimport { RiScMigrationDialog } from '../MigrationDialog';\nimport { RiScPublishDialog } from '../PublishDialog';\nimport { calculateDaysSince } from '../../../utils/utilityfunctions';\nimport { RiScStatusEnum, RiScStatusEnumType } from './utils';\nimport {\n Text,\n Button,\n Box,\n Flex,\n Card,\n CardBody,\n ButtonLink,\n CardHeader,\n} from '@backstage/ui';\nimport { StatusBanner } from './StatusBanner.tsx';\nimport { StatusBadge } from './StatusBadge.tsx';\nimport { FeedbackLink } from './FeedbackLink.tsx';\n\nconst emptyDifferenceFetchState: DifferenceFetchState = {\n differenceState: {\n type: '4.*',\n migrationChanges: {\n migrationChanges: false,\n migrationRequiresNewApproval: false,\n migrationVersions: undefined,\n migrationChanges40: undefined,\n migrationChanges41: undefined,\n },\n valuations: [],\n scenarios: [],\n },\n status: null,\n isLoading: false,\n errorMessage: '',\n currentDifferenceId: '',\n defaultLastModifiedDateString: '',\n};\n\ninterface RiScStatusProps {\n selectedRiSc: RiScWithMetadata;\n publishRiScFn: () => void;\n}\n\nexport function RiScStatusComponent({\n selectedRiSc,\n publishRiScFn,\n}: RiScStatusProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { fetchDifference } = useAuthenticatedFetch();\n\n const [publishRiScDialogIsOpen, setPublishRiScDialogIsOpen] =\n useState<boolean>(false);\n\n const [migrationDialogIsOpen, setMigrationDialogIsOpen] =\n useState<boolean>(false);\n\n const [differenceFetchState, setDifferenceFetchState] =\n useState<DifferenceFetchState>(emptyDifferenceFetchState);\n\n const { updateRiSc } = useRiScs();\n\n function handleApproveAndPublish() {\n publishRiScFn();\n setPublishRiScDialogIsOpen(false);\n }\n\n function getDifferences() {\n if (\n !selectedRiSc ||\n differenceFetchState.isLoading ||\n differenceFetchState.currentDifferenceId === selectedRiSc.id\n )\n return;\n\n setDifferenceFetchState({ ...differenceFetchState, isLoading: true });\n fetchDifference(\n selectedRiSc,\n response => {\n setDifferenceFetchState({\n differenceState: response.differenceState,\n isLoading: false,\n currentDifferenceId: selectedRiSc.id,\n status: response.status,\n errorMessage: response.errorMessage,\n defaultLastModifiedDateString: response.defaultLastModifiedDateString,\n });\n },\n () => {\n setDifferenceFetchState({\n ...emptyDifferenceFetchState,\n errorMessage: t('rosStatus.difference.error'),\n status: DifferenceStatus.FrontendFallback, // Fallback when the backend does not deliver a response with status\n });\n },\n );\n }\n\n function handleUpdate() {\n updateRiSc(selectedRiSc);\n setMigrationDialogIsOpen(false);\n }\n\n function handleOpenPublishRiScDialog() {\n setPublishRiScDialogIsOpen(true);\n getDifferences();\n }\n\n function handleClosePublishRiScDialog() {\n setPublishRiScDialogIsOpen(false);\n }\n\n useEffect(() => {\n setDifferenceFetchState(emptyDifferenceFetchState);\n }, [selectedRiSc]);\n\n const [status, setStatus] = useState<RiScStatusEnumType>(\n RiScStatusEnum.CREATED,\n );\n\n useEffect(() => {\n if (selectedRiSc.status === RiScStatus.DeletionDraft) {\n setStatus(RiScStatusEnum.DELETION_DRAFT);\n } else if (selectedRiSc.status === RiScStatus.DeletionSentForApproval) {\n setStatus(RiScStatusEnum.DELETION_WAITING);\n } else if (selectedRiSc.content.scenarios.length === 0) {\n setStatus(RiScStatusEnum.CREATED);\n } else if (selectedRiSc.status === RiScStatus.Draft) {\n setStatus(RiScStatusEnum.DRAFT);\n } else if (selectedRiSc.status === RiScStatus.SentForApproval) {\n setStatus(RiScStatusEnum.WAITING);\n } else if (selectedRiSc.status === RiScStatus.Published) {\n setStatus(RiScStatusEnum.PUBLISHED);\n }\n }, [selectedRiSc.status, selectedRiSc.content.scenarios]);\n\n const migration =\n selectedRiSc.migrationStatus?.migrationChanges &&\n selectedRiSc.status !== RiScStatus.DeletionDraft &&\n selectedRiSc.status !== RiScStatus.DeletionSentForApproval;\n\n const lastPublishedDateTime = selectedRiSc.lastPublished?.dateTime;\n const daysSinceLastModified = lastPublishedDateTime\n ? calculateDaysSince(new Date(lastPublishedDateTime))\n : null;\n\n const numOfCommitsBehind =\n selectedRiSc.lastPublished?.numberOfCommits ?? null;\n\n const showFeedbackLink =\n status === RiScStatusEnum.WAITING ||\n (status === RiScStatusEnum.PUBLISHED &&\n daysSinceLastModified !== null &&\n daysSinceLastModified <= 5);\n\n return (\n <Card style={{ height: 'fit-content' }}>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\" as=\"h5\">\n Status\n </Text>\n <StatusBanner\n numOfCommitsBehind={numOfCommitsBehind}\n daysSinceLastModified={daysSinceLastModified}\n differenceFetchState={differenceFetchState}\n />\n </CardHeader>\n <CardBody>\n {!migration && (\n <>\n <Flex\n direction=\"column\"\n justify=\"between\"\n align=\"start\"\n gap=\"1\"\n mt=\"4\"\n >\n <StatusBadge riScStatus={status} />\n <Flex direction=\"row\" mb=\"4\" pl=\"7\" style={{ width: '100%' }}>\n {status === RiScStatusEnum.CREATED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.editing')}\n </Text>\n )}\n {status === RiScStatusEnum.DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.missing')}\n </Text>\n )}\n {status === RiScStatusEnum.DELETION_DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.deletionApproval')}\n </Text>\n )}\n {(status === RiScStatusEnum.WAITING ||\n status === RiScStatusEnum.DELETION_WAITING) && (\n <Flex\n justify=\"between\"\n align=\"baseline\"\n style={{ width: '100%' }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.prStatus')}\n {status === RiScStatusEnum.WAITING &&\n t('rosStatus.prStatus2Update')}\n {status === RiScStatusEnum.DELETION_WAITING &&\n t('rosStatus.prStatus2Delete')}\n </Text>\n <ButtonLink\n target=\"_blank\"\n href={selectedRiSc.pullRequestUrl}\n variant=\"secondary\"\n >\n <i className=\"ri-external-link-line\" />\n {t('rosStatus.githubLink')}\n </ButtonLink>\n </Flex>\n )}\n {status === RiScStatusEnum.PUBLISHED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.approved')}\n </Text>\n )}\n {(status === RiScStatusEnum.DRAFT ||\n status === RiScStatusEnum.DELETION_DRAFT) && (\n <>\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={handleOpenPublishRiScDialog}\n style={{\n display: 'block',\n marginLeft: 'auto',\n fontSize: '14px',\n }}\n >\n {status === RiScStatusEnum.DRAFT &&\n t('rosStatus.approveButtonUpdate')}\n {status === RiScStatusEnum.DELETION_DRAFT &&\n t('rosStatus.approveButtonDelete')}\n </Button>\n <RiScPublishDialog\n openDialog={publishRiScDialogIsOpen}\n isDeletion={status === RiScStatusEnum.DELETION_DRAFT}\n handlePublish={handleApproveAndPublish}\n handleCancel={handleClosePublishRiScDialog}\n differenceFetchState={differenceFetchState}\n />\n </>\n )}\n </Flex>\n </Flex>\n </>\n )}\n {/* Need to include the undefined check here, as TypeScript does not pick up that this check is part of `migration` */}\n {migration && selectedRiSc.migrationStatus && (\n <Box>\n <Box mt=\"2\" mb=\"2\">\n <Text as=\"p\" variant=\"body-large\" weight=\"bold\">\n <i className=\"ri-error-warning-line\" />{' '}\n {t('rosStatus.statusBadge.migration.title')}\n </Text>\n </Box>\n\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.migration.description')}\n </Text>\n\n <Flex direction=\"column\" mt=\"4\" align=\"end\">\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={() => setMigrationDialogIsOpen(!migrationDialogIsOpen)}\n >\n {t('rosStatus.moreInformationButton')}\n </Button>\n </Flex>\n <RiScMigrationDialog\n openDialog={migrationDialogIsOpen}\n handleUpdate={handleUpdate}\n handleCancel={() => setMigrationDialogIsOpen(false)}\n migrationStatus={selectedRiSc.migrationStatus}\n />\n </Box>\n )}\n {/* Error */}\n {!selectedRiSc && (\n <Text as=\"span\">{t('rosStatus.statusBadge.error')}</Text>\n )}\n {showFeedbackLink && <FeedbackLink />}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ import styles from '../common/alertBar.module.css.esm.js';
|
|
|
22
22
|
import { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.esm.js';
|
|
23
23
|
import riscStyles from '../riScInfo/RiScSelectionCard.module.css.esm.js';
|
|
24
24
|
import { ErrorState } from '../riScInfo/ErrorState.esm.js';
|
|
25
|
+
import { LockedRiScView } from '../riScInfo/LockedRiScView.esm.js';
|
|
25
26
|
import { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.esm.js';
|
|
26
27
|
|
|
27
28
|
function RiScPlugin() {
|
|
@@ -46,6 +47,7 @@ function RiScPlugin() {
|
|
|
46
47
|
const {
|
|
47
48
|
approveRiSc,
|
|
48
49
|
selectedRiSc,
|
|
50
|
+
selectedLockedRiSc,
|
|
49
51
|
isFetching,
|
|
50
52
|
resetResponse,
|
|
51
53
|
resetRiScStatus,
|
|
@@ -77,7 +79,7 @@ function RiScPlugin() {
|
|
|
77
79
|
) }),
|
|
78
80
|
scenarioWizardStep !== null ? /* @__PURE__ */ jsx(ScenarioWizard, { step: scenarioWizardStep }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
79
81
|
/* @__PURE__ */ jsx(RiScHeader, { onEditEncryption: openEditEncryptionDialog }),
|
|
80
|
-
!isFetching && riScs !== null && riScs.length === 0 && !selectedRiSc && !allRiScsFailedDecryption && /* @__PURE__ */ jsx(
|
|
82
|
+
!isFetching && riScs !== null && riScs.length === 0 && !selectedRiSc && !selectedLockedRiSc && !allRiScsFailedDecryption && /* @__PURE__ */ jsx(
|
|
81
83
|
Flex,
|
|
82
84
|
{
|
|
83
85
|
justify: "center",
|
|
@@ -86,7 +88,7 @@ function RiScPlugin() {
|
|
|
86
88
|
children: /* @__PURE__ */ jsx(FirstRiScDialog, { onNewRiSc: openCreateRiScDialog })
|
|
87
89
|
}
|
|
88
90
|
),
|
|
89
|
-
!isFetching && !selectedRiSc && (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && /* @__PURE__ */ jsx(
|
|
91
|
+
!isFetching && !selectedRiSc && !selectedLockedRiSc && (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && /* @__PURE__ */ jsx(
|
|
90
92
|
Flex,
|
|
91
93
|
{
|
|
92
94
|
align: "center",
|
|
@@ -96,6 +98,29 @@ function RiScPlugin() {
|
|
|
96
98
|
}
|
|
97
99
|
),
|
|
98
100
|
isFetching && /* @__PURE__ */ jsx(Spinner, { size: 80 }),
|
|
101
|
+
selectedLockedRiSc && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
102
|
+
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 4, children: /* @__PURE__ */ jsx(Grid, { size: 12, children: /* @__PURE__ */ jsxs(Grid, { container: true, rowSpacing: 3, columnSpacing: 4, children: [
|
|
103
|
+
/* @__PURE__ */ jsx(Grid, { size: 8, children: /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "between", children: [
|
|
104
|
+
/* @__PURE__ */ jsx(Text, { as: "h3", variant: "body-large", weight: "bold", children: t("contentHeader.multipleRiScs") }),
|
|
105
|
+
/* @__PURE__ */ jsx(
|
|
106
|
+
CreateNewRiScButton,
|
|
107
|
+
{
|
|
108
|
+
onCreateNew: openCreateRiScDialog
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
] }) }),
|
|
112
|
+
/* @__PURE__ */ jsx(Grid, { size: 8, children: /* @__PURE__ */ jsx(RiScSelectionCard, {}) })
|
|
113
|
+
] }) }) }),
|
|
114
|
+
/* @__PURE__ */ jsx(
|
|
115
|
+
Flex,
|
|
116
|
+
{
|
|
117
|
+
justify: "center",
|
|
118
|
+
align: "center",
|
|
119
|
+
className: riscStyles.componentLayout,
|
|
120
|
+
children: /* @__PURE__ */ jsx(LockedRiScView, { lockedRiSc: selectedLockedRiSc })
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
] }),
|
|
99
124
|
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 4, children: selectedRiSc && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Grid, { size: 12, children: /* @__PURE__ */ jsxs(Grid, { container: true, rowSpacing: 3, columnSpacing: 4, children: [
|
|
100
125
|
/* @__PURE__ */ jsx(Grid, { size: 8, children: /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "between", children: [
|
|
101
126
|
/* @__PURE__ */ jsx(Text, { as: "h3", variant: "body-large", weight: "bold", children: t("contentHeader.multipleRiScs") }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.tsx';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\nimport { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.tsx';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n failedToFetchGcpCryptoKeys,\n allRiScsFailedDecryption,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\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 <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc &&\n !allRiScsFailedDecryption && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {/* Added isFetching condition to avoid showing error state when user e.g., adds new scorecard. */}\n {!isFetching &&\n !selectedRiSc &&\n (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState onCreateNew={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n <Grid size={4} />\n\n <Grid size={8}>\n <Flex gap=\"24px\" direction=\"column\">\n <RiScDescriptionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n />\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Flex>\n </Grid>\n\n <Grid size={4}>\n <Flex direction=\"column\" gap=\"24px\">\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n <ThreatActorsAndVulnerabilitiesCard\n scenarios={selectedRiSc.content.scenarios}\n />\n </Flex>\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.tsx';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\nimport { LockedRiScView } from '../riScInfo/LockedRiScView.tsx';\nimport { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.tsx';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n selectedLockedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n failedToFetchGcpCryptoKeys,\n allRiScsFailedDecryption,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\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 <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc &&\n !selectedLockedRiSc &&\n !allRiScsFailedDecryption && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {/* Added isFetching condition to avoid showing error state when user e.g., adds new scorecard. */}\n {!isFetching &&\n !selectedRiSc &&\n !selectedLockedRiSc &&\n (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState onCreateNew={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n {selectedLockedRiSc && (\n <>\n <Grid container spacing={4}>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <LockedRiScView lockedRiSc={selectedLockedRiSc} />\n </Flex>\n </>\n )}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n <Grid size={4} />\n\n <Grid size={8}>\n <Flex gap=\"24px\" direction=\"column\">\n <RiScDescriptionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n />\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Flex>\n </Grid>\n\n <Grid size={4}>\n <Flex direction=\"column\" gap=\"24px\">\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n <ThreatActorsAndVulnerabilitiesCard\n scenarios={selectedRiSc.content.scenarios}\n />\n </Flex>\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -30,9 +30,11 @@ function RiScProvider({ children }) {
|
|
|
30
30
|
publishRiScs
|
|
31
31
|
} = useAuthenticatedFetch();
|
|
32
32
|
const [riScs, setRiScs] = useState(null);
|
|
33
|
+
const [lockedRiScs, setLockedRiScs] = useState([]);
|
|
33
34
|
const [selectedRiSc, setSelectedRiSc] = useState(
|
|
34
35
|
null
|
|
35
36
|
);
|
|
37
|
+
const [selectedLockedRiSc, setSelectedLockedRiSc] = useState(null);
|
|
36
38
|
const [isFetching, setIsFetching] = useState(true);
|
|
37
39
|
const isFetchingRef = useRef(isFetching);
|
|
38
40
|
const [isFetchingRiScs, setIsFetchingRiScs] = useState(true);
|
|
@@ -137,12 +139,22 @@ function RiScProvider({ children }) {
|
|
|
137
139
|
const successfulRiScs = res.filter(
|
|
138
140
|
(risk) => risk.status === ContentStatus.Success
|
|
139
141
|
);
|
|
140
|
-
const
|
|
142
|
+
const decryptionFailedRiScs = res.filter(
|
|
143
|
+
(risk) => risk.status === ContentStatus.DecryptionFailed
|
|
144
|
+
);
|
|
145
|
+
const allFailed = res.length > 0 && res.every((r) => r.status === ContentStatus.DecryptionFailed);
|
|
141
146
|
setAllRiScsFailedDecryption(allFailed);
|
|
142
147
|
const fetchedRiScs = successfulRiScs.map(
|
|
143
148
|
mapRiScDtoToRiScWithMetadata
|
|
144
149
|
);
|
|
150
|
+
const fetchedLockedRiScs = decryptionFailedRiScs.map(
|
|
151
|
+
(risk) => ({
|
|
152
|
+
id: risk.riScId,
|
|
153
|
+
encryptionKeyId: risk.encryptionKeyId ?? null
|
|
154
|
+
})
|
|
155
|
+
);
|
|
145
156
|
setRiScs(fetchedRiScs);
|
|
157
|
+
setLockedRiScs(fetchedLockedRiScs);
|
|
146
158
|
isFetchingRiScsRef.current = false;
|
|
147
159
|
setIsFetchingRiScs(isFetchingRiScsRef.current);
|
|
148
160
|
if (!isFetchingGcpCryptoKeysRef.current) {
|
|
@@ -162,6 +174,9 @@ function RiScProvider({ children }) {
|
|
|
162
174
|
});
|
|
163
175
|
}
|
|
164
176
|
if (fetchedRiScs.length === 0) {
|
|
177
|
+
if (fetchedLockedRiScs.length > 0 && !riScIdFromParams) {
|
|
178
|
+
navigate(getRiScPath({ riScId: fetchedLockedRiScs[0].id }));
|
|
179
|
+
}
|
|
165
180
|
return;
|
|
166
181
|
}
|
|
167
182
|
if (!riScIdFromParams) {
|
|
@@ -169,7 +184,10 @@ function RiScProvider({ children }) {
|
|
|
169
184
|
return;
|
|
170
185
|
}
|
|
171
186
|
const riSc = fetchedRiScs.find((r) => r.id === riScIdFromParams);
|
|
172
|
-
|
|
187
|
+
const isLockedRiSc = fetchedLockedRiScs.some(
|
|
188
|
+
(r) => r.id === riScIdFromParams
|
|
189
|
+
);
|
|
190
|
+
if (!riSc && !isLockedRiSc) {
|
|
173
191
|
navigate(getRiScPath({ riScId: fetchedRiScs[0].id }), {
|
|
174
192
|
state: t("errorMessages.RiScDoesNotExist")
|
|
175
193
|
});
|
|
@@ -200,13 +218,17 @@ function RiScProvider({ children }) {
|
|
|
200
218
|
);
|
|
201
219
|
}, []);
|
|
202
220
|
useEffect(() => {
|
|
203
|
-
if (riScIdFromParams)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
221
|
+
if (!riScIdFromParams) return;
|
|
222
|
+
const riSc = riScs?.find((r) => r.id === riScIdFromParams);
|
|
223
|
+
const lockedRiSc = lockedRiScs.find((r) => r.id === riScIdFromParams);
|
|
224
|
+
if (riSc) {
|
|
225
|
+
setSelectedRiSc(riSc);
|
|
226
|
+
setSelectedLockedRiSc(null);
|
|
227
|
+
} else if (lockedRiSc) {
|
|
228
|
+
setSelectedLockedRiSc(lockedRiSc);
|
|
229
|
+
setSelectedRiSc(null);
|
|
208
230
|
}
|
|
209
|
-
}, [riScs, riScIdFromParams]);
|
|
231
|
+
}, [riScs, lockedRiScs, riScIdFromParams]);
|
|
210
232
|
const resetRiScStatus = useCallback(() => {
|
|
211
233
|
dispatch({
|
|
212
234
|
type: "SET_STATUS",
|
|
@@ -223,10 +245,7 @@ function RiScProvider({ children }) {
|
|
|
223
245
|
[repoInfo.owner, repoInfo.name]
|
|
224
246
|
);
|
|
225
247
|
function selectRiSc(id) {
|
|
226
|
-
|
|
227
|
-
if (selectedRiScId) {
|
|
228
|
-
navigate(getRiScPath({ riScId: selectedRiScId }));
|
|
229
|
-
}
|
|
248
|
+
navigate(getRiScPath({ riScId: id }));
|
|
230
249
|
}
|
|
231
250
|
function createNewRiSc(riSc, generateInitialRisc, defaultRiScId) {
|
|
232
251
|
setIsFetching(true);
|
|
@@ -476,8 +495,10 @@ function RiScProvider({ children }) {
|
|
|
476
495
|
}
|
|
477
496
|
const value = {
|
|
478
497
|
riScs,
|
|
498
|
+
lockedRiScs,
|
|
479
499
|
selectRiSc,
|
|
480
500
|
selectedRiSc,
|
|
501
|
+
selectedLockedRiSc,
|
|
481
502
|
createNewRiSc,
|
|
482
503
|
deleteRiSc,
|
|
483
504
|
updateRiSc,
|