@kartverket/backstage-plugin-risk-scorecard 3.6.17 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/components/common/MarkdownInput.esm.js +2 -2
  2. package/dist/components/common/MarkdownInput.esm.js.map +1 -1
  3. package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js +3 -4
  4. package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js.map +1 -1
  5. package/dist/components/riScDialog/ConfigInitialRisc.esm.js +74 -24
  6. package/dist/components/riScDialog/ConfigInitialRisc.esm.js.map +1 -1
  7. package/dist/components/riScInfo/CreateNewRiScButton.esm.js +0 -2
  8. package/dist/components/riScInfo/CreateNewRiScButton.esm.js.map +1 -1
  9. package/dist/components/riScInfo/riScStatus/StatusBanner.esm.js +6 -2
  10. package/dist/components/riScInfo/riScStatus/StatusBanner.esm.js.map +1 -1
  11. package/dist/components/riScPlugin/RiScPlugin.esm.js +3 -2
  12. package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
  13. package/dist/components/riskMatrix/AggregatedCost.esm.js +1 -1
  14. package/dist/components/riskMatrix/AggregatedCost.esm.js.map +1 -1
  15. package/dist/components/riskMatrix/EstimatedRiskInfoDialog.esm.js +124 -71
  16. package/dist/components/riskMatrix/EstimatedRiskInfoDialog.esm.js.map +1 -1
  17. package/dist/components/riskMatrix/riskMatrixStyle.esm.js +3 -4
  18. package/dist/components/riskMatrix/riskMatrixStyle.esm.js.map +1 -1
  19. package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +49 -2
  20. package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
  21. package/dist/components/scenarioDrawer/components/ActionFormItem.esm.js +1 -1
  22. package/dist/components/scenarioDrawer/components/ActionsSection.esm.js +64 -69
  23. package/dist/components/scenarioDrawer/components/ActionsSection.esm.js.map +1 -1
  24. package/dist/components/scenarioDrawer/scenarioDrawerComponents.esm.js +20 -1
  25. package/dist/components/scenarioDrawer/scenarioDrawerComponents.esm.js.map +1 -1
  26. package/dist/components/scenarioTable/ActionsCard.esm.js +96 -60
  27. package/dist/components/scenarioTable/ActionsCard.esm.js.map +1 -1
  28. package/dist/components/scenarioTable/OutdatedActionsCounts.esm.js +21 -10
  29. package/dist/components/scenarioTable/OutdatedActionsCounts.esm.js.map +1 -1
  30. package/dist/components/scenarioTable/ScenarioTable.esm.js +63 -45
  31. package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
  32. package/dist/components/scenarioTable/ScenarioTableCard.esm.js +40 -20
  33. package/dist/components/scenarioTable/ScenarioTableCard.esm.js.map +1 -1
  34. package/dist/components/scenarioTable/ScenarioTableCardHeader.esm.js +4 -19
  35. package/dist/components/scenarioTable/ScenarioTableCardHeader.esm.js.map +1 -1
  36. package/dist/components/scenarioTable/ScenarioTableFilter.esm.js +57 -0
  37. package/dist/components/scenarioTable/ScenarioTableFilter.esm.js.map +1 -0
  38. package/dist/components/scenarioTable/ScenarioTableRow.esm.js +72 -41
  39. package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
  40. package/dist/components/scenarioTable/ScenarioTableStyles.esm.js +6 -11
  41. package/dist/components/scenarioTable/ScenarioTableStyles.esm.js.map +1 -1
  42. package/dist/hooks/UseSortActionsByRelevance.esm.js +21 -0
  43. package/dist/hooks/UseSortActionsByRelevance.esm.js.map +1 -0
  44. package/dist/utils/actions.esm.js +10 -0
  45. package/dist/utils/actions.esm.js.map +1 -0
  46. package/dist/utils/hooks.esm.js +124 -3
  47. package/dist/utils/hooks.esm.js.map +1 -1
  48. package/dist/utils/translations.esm.js +36 -6
  49. package/dist/utils/translations.esm.js.map +1 -1
  50. package/dist/utils/utilityfunctions.esm.js +1 -1
  51. package/dist/utils/utilityfunctions.esm.js.map +1 -1
  52. package/package.json +1 -1
  53. package/dist/components/riskMatrix/estimatedRiskInfoDialogStyle.esm.js +0 -17
  54. package/dist/components/riskMatrix/estimatedRiskInfoDialogStyle.esm.js.map +0 -1
@@ -33,7 +33,7 @@ const MarkdownInput = forwardRef(
33
33
  return /* @__PURE__ */ jsxs(FormControl, { sx: formControlStyles, error, children: [
34
34
  label && /* @__PURE__ */ jsx(FormLabel, { sx: formLabel, children: label }),
35
35
  sublabel && /* @__PURE__ */ jsx(FormHelperText, { sx: formHelperText, children: sublabel }),
36
- /* @__PURE__ */ jsx(
36
+ /* @__PURE__ */ jsx("div", { "data-color-mode": theme.palette.mode, children: /* @__PURE__ */ jsx(
37
37
  MDEditor,
38
38
  {
39
39
  ref,
@@ -46,7 +46,7 @@ const MarkdownInput = forwardRef(
46
46
  backgroundColor: commonBackgroundColor(theme, disabled)
47
47
  }
48
48
  }
49
- ),
49
+ ) }),
50
50
  helperText && /* @__PURE__ */ jsx(FormHelperText, { children: helperText })
51
51
  ] });
52
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownInput.esm.js","sources":["../../../src/components/common/MarkdownInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect } from 'react';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport MDEditor from '@uiw/react-md-editor';\nimport { formHelperText, formLabel } from './typography';\nimport { TextFieldProps } from '@material-ui/core';\nimport { useTheme } from '@mui/material/styles';\nimport {\n commonTextColor,\n commonBackgroundColor,\n formControlStyles,\n} from '../../utils/style';\n\ntype Props = TextFieldProps & {\n sublabel?: string;\n value?: string;\n onMarkdownChange?: (markdown: string) => void;\n minRows?: number;\n};\n\nexport const MarkdownInput = forwardRef<HTMLDivElement, Props>(\n (\n {\n label,\n sublabel,\n error,\n helperText,\n minRows,\n value,\n onMarkdownChange,\n disabled = false,\n },\n ref,\n ) => {\n const [markdownContent, setMarkdownContent] = useState<string | undefined>(\n value,\n );\n\n const theme = useTheme();\n\n useEffect(() => {\n setMarkdownContent(value);\n }, [value]);\n\n const handleMarkdownChange = (newValue: string | undefined) => {\n setMarkdownContent(newValue || '');\n onMarkdownChange?.(newValue || '');\n };\n\n return (\n <FormControl sx={formControlStyles} error={error}>\n {label && <FormLabel sx={formLabel}>{label}</FormLabel>}\n {sublabel && (\n <FormHelperText sx={formHelperText}>{sublabel}</FormHelperText>\n )}\n <MDEditor\n ref={ref}\n value={markdownContent}\n onChange={handleMarkdownChange}\n preview=\"edit\"\n height={minRows ? minRows * 24 : 64}\n style={{\n color: commonTextColor(theme, disabled),\n backgroundColor: commonBackgroundColor(theme, disabled),\n }}\n />\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;;AAqBO,MAAM,aAAgB,GAAA,UAAA;AAAA,EAC3B,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAW,GAAA;AAAA,KAEb,GACG,KAAA;AACH,IAAM,MAAA,CAAC,eAAiB,EAAA,kBAAkB,CAAI,GAAA,QAAA;AAAA,MAC5C;AAAA,KACF;AAEA,IAAA,MAAM,QAAQ,QAAS,EAAA;AAEvB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,KAC1B,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAM,MAAA,oBAAA,GAAuB,CAAC,QAAiC,KAAA;AAC7D,MAAA,kBAAA,CAAmB,YAAY,EAAE,CAAA;AACjC,MAAA,gBAAA,GAAmB,YAAY,EAAE,CAAA;AAAA,KACnC;AAEA,IAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,EAAI,EAAA,iBAAA,EAAmB,KACjC,EAAA,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAU,GAAA,CAAA,SAAA,EAAA,EAAU,EAAI,EAAA,SAAA,EAAY,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,MAC1C,QACC,oBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,EAAA,EAAI,gBAAiB,QAAS,EAAA,QAAA,EAAA,CAAA;AAAA,sBAEhD,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,KAAO,EAAA,eAAA;AAAA,UACP,QAAU,EAAA,oBAAA;AAAA,UACV,OAAQ,EAAA,MAAA;AAAA,UACR,MAAA,EAAQ,OAAU,GAAA,OAAA,GAAU,EAAK,GAAA,EAAA;AAAA,UACjC,KAAO,EAAA;AAAA,YACL,KAAA,EAAO,eAAgB,CAAA,KAAA,EAAO,QAAQ,CAAA;AAAA,YACtC,eAAA,EAAiB,qBAAsB,CAAA,KAAA,EAAO,QAAQ;AAAA;AACxD;AAAA,OACF;AAAA,MACC,UAAA,oBAAe,GAAA,CAAA,cAAA,EAAA,EAAgB,QAAW,EAAA,UAAA,EAAA;AAAA,KAC7C,EAAA,CAAA;AAAA;AAGN;;;;"}
1
+ {"version":3,"file":"MarkdownInput.esm.js","sources":["../../../src/components/common/MarkdownInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect } from 'react';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport MDEditor from '@uiw/react-md-editor';\nimport { formHelperText, formLabel } from './typography';\nimport { TextFieldProps } from '@material-ui/core';\nimport { useTheme } from '@mui/material/styles';\nimport {\n commonTextColor,\n commonBackgroundColor,\n formControlStyles,\n} from '../../utils/style';\n\ntype Props = TextFieldProps & {\n sublabel?: string;\n value?: string;\n onMarkdownChange?: (markdown: string) => void;\n minRows?: number;\n};\n\nexport const MarkdownInput = forwardRef<HTMLDivElement, Props>(\n (\n {\n label,\n sublabel,\n error,\n helperText,\n minRows,\n value,\n onMarkdownChange,\n disabled = false,\n },\n ref,\n ) => {\n const [markdownContent, setMarkdownContent] = useState<string | undefined>(\n value,\n );\n\n const theme = useTheme();\n\n useEffect(() => {\n setMarkdownContent(value);\n }, [value]);\n\n const handleMarkdownChange = (newValue: string | undefined) => {\n setMarkdownContent(newValue || '');\n onMarkdownChange?.(newValue || '');\n };\n\n return (\n <FormControl sx={formControlStyles} error={error}>\n {label && <FormLabel sx={formLabel}>{label}</FormLabel>}\n {sublabel && (\n <FormHelperText sx={formHelperText}>{sublabel}</FormHelperText>\n )}\n <div data-color-mode={theme.palette.mode}>\n <MDEditor\n ref={ref}\n value={markdownContent}\n onChange={handleMarkdownChange}\n preview=\"edit\"\n height={minRows ? minRows * 24 : 64}\n style={{\n color: commonTextColor(theme, disabled),\n backgroundColor: commonBackgroundColor(theme, disabled),\n }}\n />\n </div>\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;;AAqBO,MAAM,aAAgB,GAAA,UAAA;AAAA,EAC3B,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAW,GAAA;AAAA,KAEb,GACG,KAAA;AACH,IAAM,MAAA,CAAC,eAAiB,EAAA,kBAAkB,CAAI,GAAA,QAAA;AAAA,MAC5C;AAAA,KACF;AAEA,IAAA,MAAM,QAAQ,QAAS,EAAA;AAEvB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,KAC1B,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAM,MAAA,oBAAA,GAAuB,CAAC,QAAiC,KAAA;AAC7D,MAAA,kBAAA,CAAmB,YAAY,EAAE,CAAA;AACjC,MAAA,gBAAA,GAAmB,YAAY,EAAE,CAAA;AAAA,KACnC;AAEA,IAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,EAAI,EAAA,iBAAA,EAAmB,KACjC,EAAA,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAU,GAAA,CAAA,SAAA,EAAA,EAAU,EAAI,EAAA,SAAA,EAAY,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,MAC1C,QACC,oBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,EAAA,EAAI,gBAAiB,QAAS,EAAA,QAAA,EAAA,CAAA;AAAA,sBAE/C,GAAA,CAAA,KAAA,EAAA,EAAI,iBAAiB,EAAA,KAAA,CAAM,QAAQ,IAClC,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,KAAO,EAAA,eAAA;AAAA,UACP,QAAU,EAAA,oBAAA;AAAA,UACV,OAAQ,EAAA,MAAA;AAAA,UACR,MAAA,EAAQ,OAAU,GAAA,OAAA,GAAU,EAAK,GAAA,EAAA;AAAA,UACjC,KAAO,EAAA;AAAA,YACL,KAAA,EAAO,eAAgB,CAAA,KAAA,EAAO,QAAQ,CAAA;AAAA,YACtC,eAAA,EAAiB,qBAAsB,CAAA,KAAA,EAAO,QAAQ;AAAA;AACxD;AAAA,OAEJ,EAAA,CAAA;AAAA,MACC,UAAA,oBAAe,GAAA,CAAA,cAAA,EAAA,EAAgB,QAAW,EAAA,UAAA,EAAA;AAAA,KAC7C,EAAA,CAAA;AAAA;AAGN;;;;"}
@@ -171,12 +171,11 @@ function ConfigEncryptionDialog({
171
171
  {
172
172
  iconStart: /* @__PURE__ */ jsx(AddCircle, {}),
173
173
  type: "button",
174
- variant: "tertiary",
174
+ variant: "secondary",
175
175
  onClick: showAddPublicAgeKey,
176
176
  style: {
177
- maxWidth: 150,
178
- marginTop: "1rem",
179
- color: "#1f5493"
177
+ width: "fit-content",
178
+ marginTop: "1rem"
180
179
  },
181
180
  children: t("sopsConfigDialog.addPublicAgeKey")
182
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigEncryptionDialog.esm.js","sources":["../../../src/components/riScDialog/ConfigEncryptionDialog.tsx"],"sourcesContent":["import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n DialogContentText,\n FormLabel,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n TextField,\n} from '@mui/material';\nimport { GcpCryptoKeyMenu } from '../sopsConfigDialog/GcpCryptoKeyMenu';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { AddCircle, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { GcpCryptoKeyObject, SopsConfigDTO } from '../../utils/DTOs';\nimport { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { RiScDialogStates } from './RiScDialog';\nimport { isPublicAgeKeyValid } from '../../utils/utilityfunctions';\nimport { FieldErrors } from 'react-hook-form/dist/types/errors';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { URLS } from '../../urls';\nimport { Text, Link, Button, Flex, Box } from '@backstage/ui';\nimport { Divider } from '@mui/material';\n\ninterface ConfigEncryptionDialogProps {\n gcpCryptoKeys: GcpCryptoKeyObject[];\n sopsData?: SopsConfigDTO;\n setValue: UseFormSetValue<RiScWithMetadata>;\n register: UseFormRegister<RiScWithMetadata>;\n errors: FieldErrors<RiScWithMetadata>;\n state: RiScDialogStates;\n}\n\nfunction ConfigEncryptionDialog({\n gcpCryptoKeys,\n sopsData,\n setValue,\n register,\n errors,\n state,\n}: ConfigEncryptionDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [publicAgeKeyHelperText, setPublicKeyTextFieldHelperText] =\n useState('');\n const [publicAgeKeyError, setPublicKeyTextFieldError] = useState(false);\n const [newPublicAgeKey, setNewPublicAgeKey] = useState('');\n const [publicAgeKeys, setPublicAgeKeys] = useState<string[]>(() => {\n if (sopsData?.age) {\n return sopsData.age.map(age => age.recipient);\n }\n return [];\n });\n\n const [chosenGcpCryptoKey, setChosenGcpCryptoKey] =\n useState<GcpCryptoKeyObject>(() => {\n if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {\n const gcpKms = sopsData.gcp_kms[0];\n if (gcpKms?.resource_id) {\n const resourceParts = gcpKms.resource_id.split('/');\n if (resourceParts.length === 8) {\n return {\n projectId: resourceParts[1],\n keyRing: resourceParts[5],\n keyName: resourceParts[7],\n locations: resourceParts[3],\n resourceId: gcpKms.resource_id,\n createdAt: gcpKms.created_at,\n hasEncryptDecryptAccess: true,\n };\n }\n }\n }\n return gcpCryptoKeys[0];\n });\n\n const [isAddPublicAgeKeyVisible, setIsAddPublicAgeKeyVisible] =\n useState(false);\n\n function showAddPublicAgeKey() {\n setIsAddPublicAgeKeyVisible(true);\n }\n\n useEffect(() => {\n setValue('sopsConfig', {\n shamir_threshold: 2,\n gcp_kms: chosenGcpCryptoKey\n ? [\n {\n resource_id: chosenGcpCryptoKey.resourceId,\n created_at: chosenGcpCryptoKey.createdAt,\n },\n ]\n : [],\n age: publicAgeKeys.map(key => ({ recipient: key })),\n });\n }, [chosenGcpCryptoKey, publicAgeKeys, setValue]);\n\n // Require one key group to contain a GCP key\n register('sopsConfig.gcp_kms', {\n validate: gcpKeys => gcpKeys.length > 0,\n });\n\n function handleChangeGcpCryptoKey(newKey: GcpCryptoKeyObject) {\n setChosenGcpCryptoKey(newKey);\n }\n\n function handleAddPublicAgeKey() {\n if (isPublicAgeKeyValid(newPublicAgeKey)) {\n if (publicAgeKeys.includes(newPublicAgeKey)) {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyAlreadyExistInSopsConfig'),\n );\n setPublicKeyTextFieldError(true);\n } else {\n setPublicAgeKeys([...publicAgeKeys, newPublicAgeKey]);\n setNewPublicAgeKey('');\n }\n } else {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyNotValid'),\n );\n setPublicKeyTextFieldError(true);\n }\n }\n\n return (\n <Flex direction=\"column\" gap=\"16px\">\n <Divider />\n <Text as=\"h2\" variant=\"title-small\" weight=\"bold\">\n {t('rosDialog.stepEncryption')}\n </Text>\n <DialogContentText>\n {state === RiScDialogStates.Create\n ? t('sopsConfigDialog.description.new')\n : t('sopsConfigDialog.description.edit')}\n </DialogContentText>\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('sopsConfigDialog.selectKeysTitle')}\n </Text>\n\n {chosenGcpCryptoKey !== undefined ? (\n <>\n {t('sopsConfigDialog.gcpCryptoKeyDescription')}\n <GcpCryptoKeyMenu\n chosenGcpCryptoKey={chosenGcpCryptoKey}\n onChange={handleChangeGcpCryptoKey}\n gcpCryptoKeys={\n gcpCryptoKeys.includes(chosenGcpCryptoKey)\n ? gcpCryptoKeys\n : [...gcpCryptoKeys, chosenGcpCryptoKey]\n }\n />\n </>\n ) : (\n <Text variant=\"body-medium\">\n {t('sopsConfigDialog.gcpCryptoKeyNoSelectableKey')}\n </Text>\n )}\n {errors.sopsConfig !== undefined && (\n <FormHelperText error={true}>\n {t('sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage')}\n </FormHelperText>\n )}\n <Box>\n <Accordion elevation={1} defaultExpanded={publicAgeKeys.length > 0}>\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n {t('sopsConfigDialog.publicAgeKeyQuestion')}\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n {publicAgeKeys.length > 0 && (\n <FormLabel>\n {t('sopsConfigDialog.publicAgeKeysAlreadyPresent')}\n </FormLabel>\n )}\n {publicAgeKeys.length > 0 && (\n <Box\n style={{\n border: '1px solid',\n borderRadius: '4px',\n marginBottom: 2,\n }}\n >\n <List>\n {publicAgeKeys.map(key => (\n <ListItem key={key} dense>\n <ListItemText>{key}</ListItemText>\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n setPublicAgeKeys(\n publicAgeKeys.filter(k => k !== key),\n );\n }}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {t('dictionary.click')}{' '}\n <Link\n href={\n URLS.external.kartverket_atlassian_net__write_ros_locally\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n {t('dictionary.here')}\n </Link>{' '}\n {t('sopsConfigDialog.writeLocalRiscSuffix')}\n </Text>\n <Text as=\"p\" variant=\"body-large\">\n {`${t('sopsConfigDialog.publicAgeKeyDescription')} (${t(\n 'dictionary.optional',\n )})`}{' '}\n </Text>\n <Flex direction=\"column\" justify=\"between\" gap=\"2\" mt=\"2\">\n {!isAddPublicAgeKeyVisible && (\n <Button\n iconStart={<AddCircle />}\n type=\"button\"\n variant=\"tertiary\"\n onClick={showAddPublicAgeKey}\n style={{\n maxWidth: 150,\n marginTop: '1rem',\n color: '#1f5493',\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n )}\n {isAddPublicAgeKeyVisible && (\n <Flex align=\"center\" gap=\"1\">\n <TextField\n label={t('sopsConfigDialog.publicAgeKey')}\n helperText={publicAgeKeyHelperText}\n error={publicAgeKeyError}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleAddPublicAgeKey();\n }\n }}\n onFocus={() => {\n setPublicKeyTextFieldError(false);\n setPublicKeyTextFieldHelperText('');\n }}\n value={newPublicAgeKey}\n onChange={e => setNewPublicAgeKey(e.target.value)}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n onClick={handleAddPublicAgeKey}\n style={{\n maxWidth: 200,\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n </Flex>\n )}\n </Flex>\n </Box>\n </AccordionDetails>\n </Accordion>\n </Box>\n </Flex>\n );\n}\n\nexport default ConfigEncryptionDialog;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigEncryptionDialog.esm.js","sources":["../../../src/components/riScDialog/ConfigEncryptionDialog.tsx"],"sourcesContent":["import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n DialogContentText,\n FormLabel,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n TextField,\n} from '@mui/material';\nimport { GcpCryptoKeyMenu } from '../sopsConfigDialog/GcpCryptoKeyMenu';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { AddCircle, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { GcpCryptoKeyObject, SopsConfigDTO } from '../../utils/DTOs';\nimport { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { RiScDialogStates } from './RiScDialog';\nimport { isPublicAgeKeyValid } from '../../utils/utilityfunctions';\nimport { FieldErrors } from 'react-hook-form/dist/types/errors';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { URLS } from '../../urls';\nimport { Text, Link, Button, Flex, Box } from '@backstage/ui';\nimport { Divider } from '@mui/material';\n\ninterface ConfigEncryptionDialogProps {\n gcpCryptoKeys: GcpCryptoKeyObject[];\n sopsData?: SopsConfigDTO;\n setValue: UseFormSetValue<RiScWithMetadata>;\n register: UseFormRegister<RiScWithMetadata>;\n errors: FieldErrors<RiScWithMetadata>;\n state: RiScDialogStates;\n}\n\nfunction ConfigEncryptionDialog({\n gcpCryptoKeys,\n sopsData,\n setValue,\n register,\n errors,\n state,\n}: ConfigEncryptionDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [publicAgeKeyHelperText, setPublicKeyTextFieldHelperText] =\n useState('');\n const [publicAgeKeyError, setPublicKeyTextFieldError] = useState(false);\n const [newPublicAgeKey, setNewPublicAgeKey] = useState('');\n const [publicAgeKeys, setPublicAgeKeys] = useState<string[]>(() => {\n if (sopsData?.age) {\n return sopsData.age.map(age => age.recipient);\n }\n return [];\n });\n\n const [chosenGcpCryptoKey, setChosenGcpCryptoKey] =\n useState<GcpCryptoKeyObject>(() => {\n if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {\n const gcpKms = sopsData.gcp_kms[0];\n if (gcpKms?.resource_id) {\n const resourceParts = gcpKms.resource_id.split('/');\n if (resourceParts.length === 8) {\n return {\n projectId: resourceParts[1],\n keyRing: resourceParts[5],\n keyName: resourceParts[7],\n locations: resourceParts[3],\n resourceId: gcpKms.resource_id,\n createdAt: gcpKms.created_at,\n hasEncryptDecryptAccess: true,\n };\n }\n }\n }\n return gcpCryptoKeys[0];\n });\n\n const [isAddPublicAgeKeyVisible, setIsAddPublicAgeKeyVisible] =\n useState(false);\n\n function showAddPublicAgeKey() {\n setIsAddPublicAgeKeyVisible(true);\n }\n\n useEffect(() => {\n setValue('sopsConfig', {\n shamir_threshold: 2,\n gcp_kms: chosenGcpCryptoKey\n ? [\n {\n resource_id: chosenGcpCryptoKey.resourceId,\n created_at: chosenGcpCryptoKey.createdAt,\n },\n ]\n : [],\n age: publicAgeKeys.map(key => ({ recipient: key })),\n });\n }, [chosenGcpCryptoKey, publicAgeKeys, setValue]);\n\n // Require one key group to contain a GCP key\n register('sopsConfig.gcp_kms', {\n validate: gcpKeys => gcpKeys.length > 0,\n });\n\n function handleChangeGcpCryptoKey(newKey: GcpCryptoKeyObject) {\n setChosenGcpCryptoKey(newKey);\n }\n\n function handleAddPublicAgeKey() {\n if (isPublicAgeKeyValid(newPublicAgeKey)) {\n if (publicAgeKeys.includes(newPublicAgeKey)) {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyAlreadyExistInSopsConfig'),\n );\n setPublicKeyTextFieldError(true);\n } else {\n setPublicAgeKeys([...publicAgeKeys, newPublicAgeKey]);\n setNewPublicAgeKey('');\n }\n } else {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyNotValid'),\n );\n setPublicKeyTextFieldError(true);\n }\n }\n\n return (\n <Flex direction=\"column\" gap=\"16px\">\n <Divider />\n <Text as=\"h2\" variant=\"title-small\" weight=\"bold\">\n {t('rosDialog.stepEncryption')}\n </Text>\n <DialogContentText>\n {state === RiScDialogStates.Create\n ? t('sopsConfigDialog.description.new')\n : t('sopsConfigDialog.description.edit')}\n </DialogContentText>\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('sopsConfigDialog.selectKeysTitle')}\n </Text>\n\n {chosenGcpCryptoKey !== undefined ? (\n <>\n {t('sopsConfigDialog.gcpCryptoKeyDescription')}\n <GcpCryptoKeyMenu\n chosenGcpCryptoKey={chosenGcpCryptoKey}\n onChange={handleChangeGcpCryptoKey}\n gcpCryptoKeys={\n gcpCryptoKeys.includes(chosenGcpCryptoKey)\n ? gcpCryptoKeys\n : [...gcpCryptoKeys, chosenGcpCryptoKey]\n }\n />\n </>\n ) : (\n <Text variant=\"body-medium\">\n {t('sopsConfigDialog.gcpCryptoKeyNoSelectableKey')}\n </Text>\n )}\n {errors.sopsConfig !== undefined && (\n <FormHelperText error={true}>\n {t('sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage')}\n </FormHelperText>\n )}\n <Box>\n <Accordion elevation={1} defaultExpanded={publicAgeKeys.length > 0}>\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n {t('sopsConfigDialog.publicAgeKeyQuestion')}\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n {publicAgeKeys.length > 0 && (\n <FormLabel>\n {t('sopsConfigDialog.publicAgeKeysAlreadyPresent')}\n </FormLabel>\n )}\n {publicAgeKeys.length > 0 && (\n <Box\n style={{\n border: '1px solid',\n borderRadius: '4px',\n marginBottom: 2,\n }}\n >\n <List>\n {publicAgeKeys.map(key => (\n <ListItem key={key} dense>\n <ListItemText>{key}</ListItemText>\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n setPublicAgeKeys(\n publicAgeKeys.filter(k => k !== key),\n );\n }}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {t('dictionary.click')}{' '}\n <Link\n href={\n URLS.external.kartverket_atlassian_net__write_ros_locally\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n {t('dictionary.here')}\n </Link>{' '}\n {t('sopsConfigDialog.writeLocalRiscSuffix')}\n </Text>\n <Text as=\"p\" variant=\"body-large\">\n {`${t('sopsConfigDialog.publicAgeKeyDescription')} (${t(\n 'dictionary.optional',\n )})`}{' '}\n </Text>\n <Flex direction=\"column\" justify=\"between\" gap=\"2\" mt=\"2\">\n {!isAddPublicAgeKeyVisible && (\n <Button\n iconStart={<AddCircle />}\n type=\"button\"\n variant=\"secondary\"\n onClick={showAddPublicAgeKey}\n style={{\n width: 'fit-content',\n marginTop: '1rem',\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n )}\n {isAddPublicAgeKeyVisible && (\n <Flex align=\"center\" gap=\"1\">\n <TextField\n label={t('sopsConfigDialog.publicAgeKey')}\n helperText={publicAgeKeyHelperText}\n error={publicAgeKeyError}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleAddPublicAgeKey();\n }\n }}\n onFocus={() => {\n setPublicKeyTextFieldError(false);\n setPublicKeyTextFieldHelperText('');\n }}\n value={newPublicAgeKey}\n onChange={e => setNewPublicAgeKey(e.target.value)}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n onClick={handleAddPublicAgeKey}\n style={{\n maxWidth: 200,\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n </Flex>\n )}\n </Flex>\n </Box>\n </AccordionDetails>\n </Accordion>\n </Box>\n </Flex>\n );\n}\n\nexport default ConfigEncryptionDialog;\n"],"names":[],"mappings":"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"}
@@ -6,33 +6,72 @@ import { RiScDialogStates } from './RiScDialog.esm.js';
6
6
  import { Divider } from '@mui/material';
7
7
  import { DefaultRiScType } from '../../utils/types.esm.js';
8
8
  import { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.esm.js';
9
+ import { useTheme } from '@mui/material/styles';
9
10
 
10
11
  const RadioOption = ({
11
12
  value,
12
13
  label,
13
14
  description,
14
- active = true
15
+ active = true,
16
+ numActions,
17
+ numScenarios
15
18
  }) => {
16
- return /* @__PURE__ */ jsxs(Fragment, { children: [
17
- /* @__PURE__ */ jsx(Flex, { align: "center", pt: "2", children: /* @__PURE__ */ jsx(Radio, { value, children: /* @__PURE__ */ jsx(
18
- Text,
19
- {
20
- as: "h5",
21
- variant: "body-medium",
22
- color: active ? "secondary" : "primary",
23
- children: label
24
- }
25
- ) }) }),
26
- description && /* @__PURE__ */ jsx(Flex, { ml: "6", children: /* @__PURE__ */ jsx(
27
- Text,
28
- {
29
- as: "p",
30
- variant: "body-small",
31
- color: active ? "secondary" : "primary",
32
- children: description
33
- }
34
- ) })
35
- ] });
19
+ const { t } = useTranslationRef(pluginRiScTranslationRef);
20
+ const theme = useTheme();
21
+ const style = {
22
+ fontSize: "12px",
23
+ border: `1px solid ${active ? "var(--bui-gray-6)" : "var(--bui-gray-8)"}`,
24
+ borderRadius: "24px",
25
+ padding: "2px 8px"
26
+ };
27
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
28
+ Flex,
29
+ {
30
+ direction: "column",
31
+ align: "start",
32
+ p: "12px 16px",
33
+ gap: "2",
34
+ style: {
35
+ backgroundColor: theme.palette.mode === "dark" ? "var(--bui-gray-5)" : "var(--bui-gray-2)",
36
+ borderRadius: "8px"
37
+ },
38
+ children: [
39
+ /* @__PURE__ */ jsxs(Radio, { value, children: [
40
+ /* @__PURE__ */ jsx(
41
+ Text,
42
+ {
43
+ weight: "bold",
44
+ as: "h5",
45
+ variant: "body-large",
46
+ color: active ? "secondary" : "primary",
47
+ children: label
48
+ }
49
+ ),
50
+ /* @__PURE__ */ jsxs(Flex, { gap: "8px", children: [
51
+ /* @__PURE__ */ jsxs(Text, { color: active ? "secondary" : "primary", style, children: [
52
+ numActions,
53
+ " ",
54
+ t("dictionary.measuresInitialRiSc")
55
+ ] }),
56
+ /* @__PURE__ */ jsxs(Text, { color: active ? "secondary" : "primary", style, children: [
57
+ numScenarios,
58
+ " ",
59
+ t("dictionary.scenarios")
60
+ ] })
61
+ ] })
62
+ ] }),
63
+ description && /* @__PURE__ */ jsx(Flex, { ml: "6", children: /* @__PURE__ */ jsx(
64
+ Text,
65
+ {
66
+ as: "p",
67
+ variant: "body-large",
68
+ color: active ? "secondary" : "primary",
69
+ children: description
70
+ }
71
+ ) })
72
+ ]
73
+ }
74
+ ) });
36
75
  };
37
76
  function sortStandardRiScFirst(defaultRiScTypeDescriptors) {
38
77
  return defaultRiScTypeDescriptors.sort((a, b) => {
@@ -70,8 +109,8 @@ function ConfigInitialRisc(props) {
70
109
  }
71
110
  }
72
111
  return /* @__PURE__ */ jsxs(Fragment, { children: [
73
- /* @__PURE__ */ jsx(Divider, {}),
74
- props.dialogState === RiScDialogStates.Create && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { mt: "4", children: [
112
+ /* @__PURE__ */ jsx(Divider, { sx: { margin: "16px" } }),
113
+ props.dialogState === RiScDialogStates.Create && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { children: [
75
114
  /* @__PURE__ */ jsx(Box, { mb: "4", children: /* @__PURE__ */ jsxs(Text, { variant: "title-small", as: "h6", weight: "bold", children: [
76
115
  t("rosDialog.initialRiscTitle"),
77
116
  " "
@@ -89,6 +128,15 @@ function ConfigInitialRisc(props) {
89
128
  )
90
129
  ] }),
91
130
  /* @__PURE__ */ jsxs(Flex, { direction: "column", justify: "between", mt: "2", gap: "2", children: [
131
+ /* @__PURE__ */ jsx(
132
+ Text,
133
+ {
134
+ weight: "bold",
135
+ as: "p",
136
+ color: !props.switchOn ? "secondary" : "primary",
137
+ children: t("rosDialog.applicationType")
138
+ }
139
+ ),
92
140
  /* @__PURE__ */ jsx(
93
141
  Text,
94
142
  {
@@ -111,7 +159,9 @@ function ConfigInitialRisc(props) {
111
159
  value: descriptor.riScType,
112
160
  label: descriptor.listName,
113
161
  description: descriptor.listDescription,
114
- active: !props.switchOn
162
+ active: !props.switchOn,
163
+ numActions: descriptor.numberOfActions,
164
+ numScenarios: descriptor.numberOfScenarios
115
165
  },
116
166
  descriptor.riScType
117
167
  )
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigInitialRisc.esm.js","sources":["../../../src/components/riScDialog/ConfigInitialRisc.tsx"],"sourcesContent":["import { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, Flex, Radio, RadioGroup, Switch, Text } from '@backstage/ui';\nimport { RiScDialogStates } from './RiScDialog';\nimport { Divider } from '@mui/material';\nimport {\n DefaultRiScType,\n DefaultRiScTypeDescriptor,\n RiScWithMetadata,\n} from '../../utils/types.ts';\nimport { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.tsx';\nimport { UseFormSetValue } from 'react-hook-form/dist/types/form';\n\ntype RadioOptionProps = {\n value: string;\n label: string;\n description?: string;\n active?: boolean;\n};\n\nconst RadioOption = ({\n value,\n label,\n description,\n active = true,\n}: RadioOptionProps) => {\n return (\n <>\n <Flex align=\"center\" pt=\"2\">\n <Radio value={value}>\n <Text\n as=\"h5\"\n variant=\"body-medium\"\n color={active ? 'secondary' : 'primary'}\n >\n {label}\n </Text>\n </Radio>\n </Flex>\n {description && (\n <Flex ml=\"6\">\n <Text\n as=\"p\"\n variant=\"body-small\"\n color={active ? 'secondary' : 'primary'}\n >\n {description}\n </Text>\n </Flex>\n )}\n </>\n );\n};\n\ninterface ConfigInitialRiscProps {\n dialogState: RiScDialogStates;\n switchOn: boolean;\n setSwitchOn: (val: boolean) => void;\n setValue: UseFormSetValue<RiScWithMetadata>;\n selectedRiScType: DefaultRiScType;\n setSelectedRiScType: (riScType: DefaultRiScType) => void;\n}\n\nfunction sortStandardRiScFirst(\n defaultRiScTypeDescriptors: DefaultRiScTypeDescriptor[],\n): DefaultRiScTypeDescriptor[] {\n return defaultRiScTypeDescriptors.sort((a, b) => {\n if (\n a.riScType === DefaultRiScType.Standard &&\n b.riScType !== DefaultRiScType.Standard\n )\n return -1;\n if (\n a.riScType !== DefaultRiScType.Standard &&\n b.riScType === DefaultRiScType.Standard\n )\n return 1;\n return 0;\n });\n}\n\nfunction ConfigInitialRisc(props: ConfigInitialRiscProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { defaultRiScTypeDescriptors, getDescriptorOfType } =\n useDefaultRiScTypeDescriptors();\n\n function onSwitchChange() {\n if (props.switchOn) {\n props.setValue('content.title', '');\n props.setValue('content.scope', '');\n } else {\n const standardDescriptor = getDescriptorOfType(DefaultRiScType.Standard);\n props.setSelectedRiScType(DefaultRiScType.Standard);\n if (standardDescriptor) {\n props.setValue('content.title', standardDescriptor.defaultTitle);\n props.setValue('content.scope', standardDescriptor.defaultScope);\n }\n }\n props.setSwitchOn(!props.switchOn);\n }\n\n function onSelectRiScType(newRiScType: string) {\n const defaultRiScType = newRiScType as DefaultRiScType;\n props.setSelectedRiScType(defaultRiScType);\n const descriptor = getDescriptorOfType(newRiScType as DefaultRiScType);\n if (descriptor) {\n props.setValue('content.title', descriptor.defaultTitle);\n props.setValue('content.scope', descriptor.defaultScope);\n }\n }\n\n return (\n <>\n <Divider />\n {props.dialogState === RiScDialogStates.Create && (\n <>\n <Box mt=\"4\">\n <Box mb=\"4\">\n <Text variant=\"title-small\" as=\"h6\" weight=\"bold\">\n {t('rosDialog.initialRiscTitle')}{' '}\n </Text>\n </Box>\n {defaultRiScTypeDescriptors.length > 0 && (\n <>\n <Box pb=\"2\">\n <Text variant=\"body-medium\" as=\"p\">\n {t('rosDialog.initialRiscScopeDescription')}\n </Text>\n <Switch\n isSelected={props.switchOn}\n onChange={onSwitchChange}\n label={\n props.switchOn ? t('dictionary.yes') : t('dictionary.no')\n }\n />\n </Box>\n <Flex direction=\"column\" justify=\"between\" mt=\"2\" gap=\"2\">\n <Text\n variant=\"body-medium\"\n color={!props.switchOn ? 'secondary' : 'primary'}\n >\n {t('rosDialog.initialRiscApplicationType')}\n </Text>\n\n <RadioGroup\n onChange={onSelectRiScType}\n isDisabled={!props.switchOn}\n aria-label=\"Select application type\"\n value={props.selectedRiScType}\n >\n {sortStandardRiScFirst(defaultRiScTypeDescriptors).map(\n descriptor => (\n <RadioOption\n key={descriptor.riScType}\n value={descriptor.riScType}\n label={descriptor.listName}\n description={descriptor.listDescription}\n active={!props.switchOn}\n />\n ),\n )}\n </RadioGroup>\n </Flex>\n </>\n )}\n {defaultRiScTypeDescriptors.length === 0 && (\n <Text>{t('rosDialog.noInitialRiScFound')}</Text>\n )}\n </Box>\n </>\n )}\n </>\n );\n}\n\nexport default ConfigInitialRisc;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigInitialRisc.esm.js","sources":["../../../src/components/riScDialog/ConfigInitialRisc.tsx"],"sourcesContent":["import { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, Flex, Radio, RadioGroup, Switch, Text } from '@backstage/ui';\nimport { RiScDialogStates } from './RiScDialog';\nimport { Divider } from '@mui/material';\nimport {\n DefaultRiScType,\n DefaultRiScTypeDescriptor,\n RiScWithMetadata,\n} from '../../utils/types.ts';\nimport { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.tsx';\nimport { UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { useTheme } from '@mui/material/styles';\n\ntype RadioOptionProps = {\n value: string;\n label: string;\n description?: string;\n active?: boolean;\n numActions: number | null;\n numScenarios: number | null;\n};\n\nconst RadioOption = ({\n value,\n label,\n description,\n active = true,\n numActions,\n numScenarios,\n}: RadioOptionProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const theme = useTheme();\n const style = {\n fontSize: '12px',\n border: `1px solid ${active ? 'var(--bui-gray-6)' : 'var(--bui-gray-8)'}`,\n borderRadius: '24px',\n padding: '2px 8px',\n };\n\n return (\n <>\n <Flex\n direction=\"column\"\n align=\"start\"\n p=\"12px 16px\"\n gap=\"2\"\n style={{\n backgroundColor:\n theme.palette.mode === 'dark'\n ? 'var(--bui-gray-5)'\n : 'var(--bui-gray-2)',\n borderRadius: '8px',\n }}\n >\n <Radio value={value}>\n <Text\n weight=\"bold\"\n as=\"h5\"\n variant=\"body-large\"\n color={active ? 'secondary' : 'primary'}\n >\n {label}\n </Text>\n <Flex gap=\"8px\">\n <Text color={active ? 'secondary' : 'primary'} style={style}>\n {numActions} {t('dictionary.measuresInitialRiSc')}\n </Text>\n <Text color={active ? 'secondary' : 'primary'} style={style}>\n {numScenarios} {t('dictionary.scenarios')}\n </Text>\n </Flex>\n </Radio>\n {description && (\n <Flex ml=\"6\">\n <Text\n as=\"p\"\n variant=\"body-large\"\n color={active ? 'secondary' : 'primary'}\n >\n {description}\n </Text>\n </Flex>\n )}\n </Flex>\n </>\n );\n};\n\ninterface ConfigInitialRiscProps {\n dialogState: RiScDialogStates;\n switchOn: boolean;\n setSwitchOn: (val: boolean) => void;\n setValue: UseFormSetValue<RiScWithMetadata>;\n selectedRiScType: DefaultRiScType;\n setSelectedRiScType: (riScType: DefaultRiScType) => void;\n}\n\nfunction sortStandardRiScFirst(\n defaultRiScTypeDescriptors: DefaultRiScTypeDescriptor[],\n): DefaultRiScTypeDescriptor[] {\n return defaultRiScTypeDescriptors.sort((a, b) => {\n if (\n a.riScType === DefaultRiScType.Standard &&\n b.riScType !== DefaultRiScType.Standard\n )\n return -1;\n if (\n a.riScType !== DefaultRiScType.Standard &&\n b.riScType === DefaultRiScType.Standard\n )\n return 1;\n return 0;\n });\n}\n\nfunction ConfigInitialRisc(props: ConfigInitialRiscProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { defaultRiScTypeDescriptors, getDescriptorOfType } =\n useDefaultRiScTypeDescriptors();\n\n function onSwitchChange() {\n if (props.switchOn) {\n props.setValue('content.title', '');\n props.setValue('content.scope', '');\n } else {\n const standardDescriptor = getDescriptorOfType(DefaultRiScType.Standard);\n props.setSelectedRiScType(DefaultRiScType.Standard);\n if (standardDescriptor) {\n props.setValue('content.title', standardDescriptor.defaultTitle);\n props.setValue('content.scope', standardDescriptor.defaultScope);\n }\n }\n props.setSwitchOn(!props.switchOn);\n }\n\n function onSelectRiScType(newRiScType: string) {\n const defaultRiScType = newRiScType as DefaultRiScType;\n props.setSelectedRiScType(defaultRiScType);\n const descriptor = getDescriptorOfType(newRiScType as DefaultRiScType);\n if (descriptor) {\n props.setValue('content.title', descriptor.defaultTitle);\n props.setValue('content.scope', descriptor.defaultScope);\n }\n }\n\n return (\n <>\n <Divider sx={{ margin: '16px' }} />\n {props.dialogState === RiScDialogStates.Create && (\n <>\n <Box>\n <Box mb=\"4\">\n <Text variant=\"title-small\" as=\"h6\" weight=\"bold\">\n {t('rosDialog.initialRiscTitle')}{' '}\n </Text>\n </Box>\n {defaultRiScTypeDescriptors.length > 0 && (\n <>\n <Box pb=\"2\">\n <Text variant=\"body-medium\" as=\"p\">\n {t('rosDialog.initialRiscScopeDescription')}\n </Text>\n <Switch\n isSelected={props.switchOn}\n onChange={onSwitchChange}\n label={\n props.switchOn ? t('dictionary.yes') : t('dictionary.no')\n }\n />\n </Box>\n <Flex direction=\"column\" justify=\"between\" mt=\"2\" gap=\"2\">\n <Text\n weight=\"bold\"\n as=\"p\"\n color={!props.switchOn ? 'secondary' : 'primary'}\n >\n {t('rosDialog.applicationType')}\n </Text>\n <Text\n variant=\"body-medium\"\n color={!props.switchOn ? 'secondary' : 'primary'}\n >\n {t('rosDialog.initialRiscApplicationType')}\n </Text>\n\n <RadioGroup\n onChange={onSelectRiScType}\n isDisabled={!props.switchOn}\n aria-label=\"Select application type\"\n value={props.selectedRiScType}\n >\n {sortStandardRiScFirst(defaultRiScTypeDescriptors).map(\n descriptor => (\n <RadioOption\n key={descriptor.riScType}\n value={descriptor.riScType}\n label={descriptor.listName}\n description={descriptor.listDescription}\n active={!props.switchOn}\n numActions={descriptor.numberOfActions}\n numScenarios={descriptor.numberOfScenarios}\n />\n ),\n )}\n </RadioGroup>\n </Flex>\n </>\n )}\n {defaultRiScTypeDescriptors.length === 0 && (\n <Text>{t('rosDialog.noInitialRiScFound')}</Text>\n )}\n </Box>\n </>\n )}\n </>\n );\n}\n\nexport default ConfigInitialRisc;\n"],"names":[],"mappings":"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"}
@@ -12,8 +12,6 @@ function CreateNewRiScButton(props) {
12
12
  variant: "secondary",
13
13
  onClick: props.onCreateNew,
14
14
  style: {
15
- color: "#2E7D32",
16
- // Green color from MUI, change when BUI is more mature
17
15
  width: "fit-content"
18
16
  },
19
17
  children: t("contentHeader.createNewButton")
@@ -1 +1 @@
1
- {"version":3,"file":"CreateNewRiScButton.esm.js","sources":["../../../src/components/riScInfo/CreateNewRiScButton.tsx"],"sourcesContent":["import { Button } from '@backstage/ui';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\n\ntype CreateNewRiScButtonProps = {\n onCreateNew: () => void;\n};\n\nexport function CreateNewRiScButton(props: CreateNewRiScButtonProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <Button\n iconStart={<i className=\"ri-add-line\" />}\n variant=\"secondary\"\n onClick={props.onCreateNew}\n style={{\n color: '#2E7D32', // Green color from MUI, change when BUI is more mature\n width: 'fit-content',\n }}\n >\n {t('contentHeader.createNewButton')}\n </Button>\n );\n}\n"],"names":[],"mappings":";;;;;AAQO,SAAS,oBAAoB,KAAiC,EAAA;AACnE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAW,kBAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAU,aAAc,EAAA,CAAA;AAAA,MACtC,OAAQ,EAAA,WAAA;AAAA,MACR,SAAS,KAAM,CAAA,WAAA;AAAA,MACf,KAAO,EAAA;AAAA,QACL,KAAO,EAAA,SAAA;AAAA;AAAA,QACP,KAAO,EAAA;AAAA,OACT;AAAA,MAEC,YAAE,+BAA+B;AAAA;AAAA,GACpC;AAEJ;;;;"}
1
+ {"version":3,"file":"CreateNewRiScButton.esm.js","sources":["../../../src/components/riScInfo/CreateNewRiScButton.tsx"],"sourcesContent":["import { Button } from '@backstage/ui';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\n\ntype CreateNewRiScButtonProps = {\n onCreateNew: () => void;\n};\n\nexport function CreateNewRiScButton(props: CreateNewRiScButtonProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <Button\n iconStart={<i className=\"ri-add-line\" />}\n variant=\"secondary\"\n onClick={props.onCreateNew}\n style={{\n width: 'fit-content',\n }}\n >\n {t('contentHeader.createNewButton')}\n </Button>\n );\n}\n"],"names":[],"mappings":";;;;;AAQO,SAAS,oBAAoB,KAAiC,EAAA;AACnE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAW,kBAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAU,aAAc,EAAA,CAAA;AAAA,MACtC,OAAQ,EAAA,WAAA;AAAA,MACR,SAAS,KAAM,CAAA,WAAA;AAAA,MACf,KAAO,EAAA;AAAA,QACL,KAAO,EAAA;AAAA,OACT;AAAA,MAEC,YAAE,+BAA+B;AAAA;AAAA,GACpC;AAEJ;;;;"}
@@ -4,12 +4,14 @@ import { DifferenceStatus } from '../../../utils/types.esm.js';
4
4
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
5
5
  import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
6
6
  import { calculateUpdatedStatus, UpdatedStatusEnum } from '../../../utils/utilityfunctions.esm.js';
7
+ import { useTheme } from '@mui/material/styles';
7
8
 
8
9
  function StatusBanner(props) {
9
10
  const updatedStatus = calculateUpdatedStatus(
10
11
  props.daysSinceLastModified,
11
12
  props.numOfCommitsBehind
12
13
  );
14
+ const theme = useTheme();
13
15
  return /* @__PURE__ */ jsx(
14
16
  Flex,
15
17
  {
@@ -17,7 +19,9 @@ function StatusBanner(props) {
17
19
  mt: "2",
18
20
  py: "2",
19
21
  px: "4",
20
- style: { backgroundColor: "#FCEBCD" },
22
+ style: {
23
+ backgroundColor: theme.palette.mode === "dark" ? "var(--bui-gray-5)" : "#FCEBCD"
24
+ },
21
25
  children: /* @__PURE__ */ jsx(
22
26
  StatusIconWithText,
23
27
  {
@@ -38,7 +42,7 @@ function StatusIconWithText(props) {
38
42
  [UpdatedStatusEnum.OUTDATED]: "ri-emotion-unhappy-line",
39
43
  [UpdatedStatusEnum.VERY_OUTDATED]: "ri-emotion-sad-line"
40
44
  };
41
- if (props.numOfCommitsBehind && props.daysSinceLastModified) {
45
+ if (props.numOfCommitsBehind !== null && props.daysSinceLastModified !== null) {
42
46
  return /* @__PURE__ */ jsx(
43
47
  IconWithText,
44
48
  {
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBanner.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/StatusBanner.tsx"],"sourcesContent":["import { Flex, Text } from '@backstage/ui';\nimport {\n DifferenceFetchState,\n DifferenceStatus,\n} from '../../../utils/types.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport {\n calculateUpdatedStatus,\n UpdatedStatusEnum,\n UpdatedStatusEnumType,\n} from '../../../utils/utilityfunctions.ts';\n\ntype StatusBannerProps = {\n numOfCommitsBehind: number | null;\n daysSinceLastModified: number | null;\n differenceFetchState: DifferenceFetchState;\n};\n\nexport function StatusBanner(props: StatusBannerProps) {\n const updatedStatus = calculateUpdatedStatus(\n props.daysSinceLastModified,\n props.numOfCommitsBehind,\n );\n\n return (\n <Flex\n direction=\"row\"\n mt=\"2\"\n py=\"2\"\n px=\"4\"\n style={{ backgroundColor: '#FCEBCD' }}\n >\n <StatusIconWithText\n numOfCommitsBehind={props.numOfCommitsBehind}\n daysSinceLastModified={props.daysSinceLastModified}\n updatedStatus={updatedStatus}\n differenceFetchState={props.differenceFetchState}\n />\n </Flex>\n );\n}\n\ntype StatusIconWithTextProps = {\n numOfCommitsBehind: number | null;\n daysSinceLastModified: number | null;\n updatedStatus: UpdatedStatusEnumType;\n differenceFetchState: DifferenceFetchState;\n};\n\nfunction StatusIconWithText(props: StatusIconWithTextProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const updatedStatusToRemixIconString: Record<UpdatedStatusEnumType, string> =\n {\n [UpdatedStatusEnum.UPDATED]: 'ri-emotion-happy-line',\n [UpdatedStatusEnum.LITTLE_OUTDATED]: 'ri-emotion-normal-line',\n [UpdatedStatusEnum.OUTDATED]: 'ri-emotion-unhappy-line',\n [UpdatedStatusEnum.VERY_OUTDATED]: 'ri-emotion-sad-line',\n };\n\n if (props.numOfCommitsBehind && props.daysSinceLastModified) {\n return (\n <IconWithText\n remixIconClassString={\n updatedStatusToRemixIconString[props.updatedStatus]\n }\n altText={t(`rosStatus.updatedStatus.${props.updatedStatus}`)}\n text={\n t('rosStatus.lastModified') +\n t('rosStatus.daysSinceLastModified', {\n days: props.daysSinceLastModified.toString(),\n numCommits: props.numOfCommitsBehind.toString(),\n })\n }\n />\n );\n }\n\n if (\n props.differenceFetchState.errorMessage &&\n props.differenceFetchState.status !== DifferenceStatus.GithubFileNotFound\n ) {\n return (\n <IconWithText\n remixIconClassString=\"ri-emotion-sad-line\"\n altText={t('rosStatus.updatedStatus.error')}\n text={t('rosStatus.errorMessage')}\n />\n );\n }\n\n return (\n <IconWithText\n remixIconClassString=\"ri-emotion-normal-line\"\n altText={t('rosStatus.updatedStatus.disabled')}\n text={t('rosStatus.notPublishedYet')}\n />\n );\n}\n\ninterface IconWithTextProps {\n remixIconClassString: string;\n altText: string;\n text: string;\n}\n\nexport function IconWithText(props: IconWithTextProps) {\n return (\n <Flex direction=\"row\" align=\"center\" gap=\"2\">\n <i\n className={props.remixIconClassString}\n aria-label={props.altText}\n style={{ fontSize: '20px' }}\n />\n <Text as=\"h6\" variant=\"body-large\">\n {props.text}\n </Text>\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatusBanner.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/StatusBanner.tsx"],"sourcesContent":["import { Flex, Text } from '@backstage/ui';\nimport {\n DifferenceFetchState,\n DifferenceStatus,\n} from '../../../utils/types.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport {\n calculateUpdatedStatus,\n UpdatedStatusEnum,\n UpdatedStatusEnumType,\n} from '../../../utils/utilityfunctions.ts';\nimport { useTheme } from '@mui/material/styles';\n\ntype StatusBannerProps = {\n numOfCommitsBehind: number | null;\n daysSinceLastModified: number | null;\n differenceFetchState: DifferenceFetchState;\n};\n\nexport function StatusBanner(props: StatusBannerProps) {\n const updatedStatus = calculateUpdatedStatus(\n props.daysSinceLastModified,\n props.numOfCommitsBehind,\n );\n const theme = useTheme();\n\n return (\n <Flex\n direction=\"row\"\n mt=\"2\"\n py=\"2\"\n px=\"4\"\n style={{\n backgroundColor:\n theme.palette.mode === 'dark' ? 'var(--bui-gray-5)' : '#FCEBCD',\n }}\n >\n <StatusIconWithText\n numOfCommitsBehind={props.numOfCommitsBehind}\n daysSinceLastModified={props.daysSinceLastModified}\n updatedStatus={updatedStatus}\n differenceFetchState={props.differenceFetchState}\n />\n </Flex>\n );\n}\n\ntype StatusIconWithTextProps = {\n numOfCommitsBehind: number | null;\n daysSinceLastModified: number | null;\n updatedStatus: UpdatedStatusEnumType;\n differenceFetchState: DifferenceFetchState;\n};\n\nfunction StatusIconWithText(props: StatusIconWithTextProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const updatedStatusToRemixIconString: Record<UpdatedStatusEnumType, string> =\n {\n [UpdatedStatusEnum.UPDATED]: 'ri-emotion-happy-line',\n [UpdatedStatusEnum.LITTLE_OUTDATED]: 'ri-emotion-normal-line',\n [UpdatedStatusEnum.OUTDATED]: 'ri-emotion-unhappy-line',\n [UpdatedStatusEnum.VERY_OUTDATED]: 'ri-emotion-sad-line',\n };\n\n if (\n props.numOfCommitsBehind !== null &&\n props.daysSinceLastModified !== null\n ) {\n return (\n <IconWithText\n remixIconClassString={\n updatedStatusToRemixIconString[props.updatedStatus]\n }\n altText={t(`rosStatus.updatedStatus.${props.updatedStatus}`)}\n text={\n t('rosStatus.lastModified') +\n t('rosStatus.daysSinceLastModified', {\n days: props.daysSinceLastModified.toString(),\n numCommits: props.numOfCommitsBehind.toString(),\n })\n }\n />\n );\n }\n\n if (\n props.differenceFetchState.errorMessage &&\n props.differenceFetchState.status !== DifferenceStatus.GithubFileNotFound\n ) {\n return (\n <IconWithText\n remixIconClassString=\"ri-emotion-sad-line\"\n altText={t('rosStatus.updatedStatus.error')}\n text={t('rosStatus.errorMessage')}\n />\n );\n }\n\n return (\n <IconWithText\n remixIconClassString=\"ri-emotion-normal-line\"\n altText={t('rosStatus.updatedStatus.disabled')}\n text={t('rosStatus.notPublishedYet')}\n />\n );\n}\n\ninterface IconWithTextProps {\n remixIconClassString: string;\n altText: string;\n text: string;\n}\n\nexport function IconWithText(props: IconWithTextProps) {\n return (\n <Flex direction=\"row\" align=\"center\" gap=\"2\">\n <i\n className={props.remixIconClassString}\n aria-label={props.altText}\n style={{ fontSize: '20px' }}\n />\n <Text as=\"h6\" variant=\"body-large\">\n {props.text}\n </Text>\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -42,7 +42,8 @@ function RiScPlugin() {
42
42
  resetResponse,
43
43
  resetRiScStatus,
44
44
  response,
45
- updateStatus
45
+ updateStatus,
46
+ riScs
46
47
  } = useRiScs();
47
48
  const [searchParams] = useSearchParams();
48
49
  const scenarioWizardStep = searchParams.get(
@@ -75,7 +76,7 @@ function RiScPlugin() {
75
76
  ),
76
77
  scenarioWizardStep !== null ? /* @__PURE__ */ jsx(ScenarioWizard, { step: scenarioWizardStep }) : /* @__PURE__ */ jsxs(Fragment, { children: [
77
78
  /* @__PURE__ */ jsx(RiScHeader, { onEditEncryption: openEditEncryptionDialog }),
78
- !isFetching && !selectedRiSc && /* @__PURE__ */ jsx(
79
+ !isFetching && riScs !== null && riScs.length === 0 && !selectedRiSc && /* @__PURE__ */ jsx(
79
80
  Flex,
80
81
  {
81
82
  justify: "center",
@@ -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 Alert from '@mui/material/Alert';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { RiScInfo } from '../riScInfo/RiScInfo';\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';\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 selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\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 && !updateStatus.isLoading && (\n <Alert\n severity={getAlertSeverity(updateStatus)}\n sx={{ marginBottom: 2 }}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\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 <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching && !selectedRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n style={{\n height: '60%',\n }}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <RiScInfo\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n onCreateNew={openCreateRiScDialog}\n />\n </Grid>\n <Grid item xs={12} lg={8}>\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Grid>\n <Grid item xs={12} lg={4}>\n <RiskMatrix riScWithMetadata={selectedRiSc} />\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 Alert from '@mui/material/Alert';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { RiScInfo } from '../riScInfo/RiScInfo';\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';\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 selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\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 && !updateStatus.isLoading && (\n <Alert\n severity={getAlertSeverity(updateStatus)}\n sx={{ marginBottom: 2 }}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\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 <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n style={{\n height: '60%',\n }}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <RiScInfo\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n onCreateNew={openCreateRiScDialog}\n />\n </Grid>\n <Grid item xs={12} lg={8}>\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Grid>\n <Grid item xs={12} lg={4}>\n <RiskMatrix riScWithMetadata={selectedRiSc} />\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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"}
@@ -22,7 +22,7 @@ function AggregatedCost({ riSc, initialRisk }) {
22
22
  Box,
23
23
  {
24
24
  style: {
25
- backgroundColor: theme.palette.mode === "dark" ? "#FCEBCD" : "#FCEBCD",
25
+ backgroundColor: theme.palette.mode === "dark" ? "var(--bui-gray-5)" : "#FCEBCD",
26
26
  padding: "8px 16px"
27
27
  },
28
28
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"AggregatedCost.esm.js","sources":["../../../src/components/riskMatrix/AggregatedCost.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, IconButton } from '@material-ui/core';\nimport InfoIcon from '@mui/icons-material/Info';\nimport { useState } from 'react';\nimport { useFontStyles } from '../../utils/style';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiSc } from '../../utils/types';\nimport { formatNumber } from '../../utils/utilityfunctions';\nimport { EstimatedRiskInfoDialog } from './EstimatedRiskInfoDialog';\nimport { Flex, Text } from '@backstage/ui';\nimport { useTheme } from '@mui/material/styles';\n\ninterface AggregatedCostProps {\n riSc: RiSc;\n initialRisk: boolean;\n}\n\nexport function AggregatedCost({ riSc, initialRisk }: AggregatedCostProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const theme = useTheme();\n const { body2 } = useFontStyles();\n\n const [showDialog, setShowDialog] = useState(false);\n\n const cost = riSc.scenarios\n .map(scenario => {\n return initialRisk\n ? scenario.risk.probability * scenario.risk.consequence\n : scenario.remainingRisk.probability *\n scenario.remainingRisk.consequence;\n })\n .reduce((a, b) => a + b, 0);\n\n return (\n <Box\n style={{\n backgroundColor: theme.palette.mode === 'dark' ? '#FCEBCD' : '#FCEBCD',\n padding: '8px 16px',\n }}\n >\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('riskMatrix.estimatedRisk.title')}\n </Text>\n <Flex align=\"center\" gap=\"0\">\n <Text variant=\"body-large\" className={body2}>\n {formatNumber(cost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <IconButton size=\"small\" onClick={() => setShowDialog(true)}>\n <InfoIcon />\n </IconButton>\n </Flex>\n <EstimatedRiskInfoDialog\n isOpen={showDialog}\n onClose={() => setShowDialog(false)}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAiBO,SAAS,cAAe,CAAA,EAAE,IAAM,EAAA,WAAA,EAAoC,EAAA;AACzE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,aAAc,EAAA;AAEhC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,IAAO,GAAA,IAAA,CAAK,SACf,CAAA,GAAA,CAAI,CAAY,QAAA,KAAA;AACf,IAAO,OAAA,WAAA,GACH,QAAS,CAAA,IAAA,CAAK,WAAc,GAAA,QAAA,CAAS,IAAK,CAAA,WAAA,GAC1C,QAAS,CAAA,aAAA,CAAc,WACrB,GAAA,QAAA,CAAS,aAAc,CAAA,WAAA;AAAA,GAC9B,EACA,MAAO,CAAA,CAAC,GAAG,CAAM,KAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AAE5B,EACE,uBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,eAAiB,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,SAAY,GAAA,SAAA;AAAA,QAC7D,OAAS,EAAA;AAAA,OACX;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAG,IAAK,EAAA,OAAA,EAAQ,cAAa,MAAO,EAAA,MAAA,EACvC,QAAE,EAAA,CAAA,CAAA,gCAAgC,CACrC,EAAA,CAAA;AAAA,wBACC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAM,EAAA,QAAA,EAAS,KAAI,GACvB,EAAA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,YAAa,EAAA,SAAA,EAAW,KACnC,EAAA,QAAA,EAAA;AAAA,YAAA,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,YAAG,GAAA;AAAA,YACvB,EAAE,0CAA0C;AAAA,WAC/C,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,UAAW,EAAA,EAAA,IAAA,EAAK,OAAQ,EAAA,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA,EACxD,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,CACZ,EAAA;AAAA,SACF,EAAA,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,uBAAA;AAAA,UAAA;AAAA,YACC,MAAQ,EAAA,UAAA;AAAA,YACR,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACpC;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"AggregatedCost.esm.js","sources":["../../../src/components/riskMatrix/AggregatedCost.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, IconButton } from '@material-ui/core';\nimport InfoIcon from '@mui/icons-material/Info';\nimport { useState } from 'react';\nimport { useFontStyles } from '../../utils/style';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiSc } from '../../utils/types';\nimport { formatNumber } from '../../utils/utilityfunctions';\nimport { EstimatedRiskInfoDialog } from './EstimatedRiskInfoDialog';\nimport { Flex, Text } from '@backstage/ui';\nimport { useTheme } from '@mui/material/styles';\n\ninterface AggregatedCostProps {\n riSc: RiSc;\n initialRisk: boolean;\n}\n\nexport function AggregatedCost({ riSc, initialRisk }: AggregatedCostProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const theme = useTheme();\n const { body2 } = useFontStyles();\n\n const [showDialog, setShowDialog] = useState(false);\n\n const cost = riSc.scenarios\n .map(scenario => {\n return initialRisk\n ? scenario.risk.probability * scenario.risk.consequence\n : scenario.remainingRisk.probability *\n scenario.remainingRisk.consequence;\n })\n .reduce((a, b) => a + b, 0);\n\n return (\n <Box\n style={{\n backgroundColor:\n theme.palette.mode === 'dark' ? 'var(--bui-gray-5)' : '#FCEBCD',\n padding: '8px 16px',\n }}\n >\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('riskMatrix.estimatedRisk.title')}\n </Text>\n <Flex align=\"center\" gap=\"0\">\n <Text variant=\"body-large\" className={body2}>\n {formatNumber(cost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <IconButton size=\"small\" onClick={() => setShowDialog(true)}>\n <InfoIcon />\n </IconButton>\n </Flex>\n <EstimatedRiskInfoDialog\n isOpen={showDialog}\n onClose={() => setShowDialog(false)}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAiBO,SAAS,cAAe,CAAA,EAAE,IAAM,EAAA,WAAA,EAAoC,EAAA;AACzE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAM,MAAA,EAAE,KAAM,EAAA,GAAI,aAAc,EAAA;AAEhC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,IAAO,GAAA,IAAA,CAAK,SACf,CAAA,GAAA,CAAI,CAAY,QAAA,KAAA;AACf,IAAO,OAAA,WAAA,GACH,QAAS,CAAA,IAAA,CAAK,WAAc,GAAA,QAAA,CAAS,IAAK,CAAA,WAAA,GAC1C,QAAS,CAAA,aAAA,CAAc,WACrB,GAAA,QAAA,CAAS,aAAc,CAAA,WAAA;AAAA,GAC9B,EACA,MAAO,CAAA,CAAC,GAAG,CAAM,KAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AAE5B,EACE,uBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,eACE,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,mBAAsB,GAAA,SAAA;AAAA,QACxD,OAAS,EAAA;AAAA,OACX;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAG,IAAK,EAAA,OAAA,EAAQ,cAAa,MAAO,EAAA,MAAA,EACvC,QAAE,EAAA,CAAA,CAAA,gCAAgC,CACrC,EAAA,CAAA;AAAA,wBACC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAM,EAAA,QAAA,EAAS,KAAI,GACvB,EAAA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,YAAa,EAAA,SAAA,EAAW,KACnC,EAAA,QAAA,EAAA;AAAA,YAAA,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,YAAG,GAAA;AAAA,YACvB,EAAE,0CAA0C;AAAA,WAC/C,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,UAAW,EAAA,EAAA,IAAA,EAAK,OAAQ,EAAA,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA,EACxD,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,CACZ,EAAA;AAAA,SACF,EAAA,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,uBAAA;AAAA,UAAA;AAAA,YACC,MAAQ,EAAA,UAAA;AAAA,YACR,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACpC;AAAA;AAAA,GACF;AAEJ;;;;"}