@kartverket/backstage-plugin-risk-scorecard 3.9.6 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/css/theme.css CHANGED
@@ -48,6 +48,13 @@ Remember to prefix custom styles with 'ros-' to avoid conflicts with other plugi
48
48
  --ros-gray-900: #212121;
49
49
  --ros-gray-medium: #808080;
50
50
 
51
+ --ros-risc-status-updated: var(--ros-green-500);
52
+ --ros-risc-status-little-outdated: var(--ros-orange-400);
53
+ --ros-risc-status-outdated: var(--ros-red-700);
54
+ --ros-risc-status-very-outdated: var(--ros-red-400);
55
+ --ros-risc-status-not-published: var(--ros-orange-400);
56
+ --ros-risc-status-error: var(--ros-red-700);
57
+
51
58
  /* -------Button styles------- */
52
59
  .ros-button-red {
53
60
  background-color: var(--ros-red-bright);
@@ -67,6 +74,11 @@ Remember to prefix custom styles with 'ros-' to avoid conflicts with other plugi
67
74
  }
68
75
 
69
76
  /* Dark mode custom styles can be added here */
70
- /* [data-theme-mode='dark'] {
71
-
72
- } */
77
+ [data-theme-mode='dark'] [data-root-for='ros'] {
78
+ --ros-risc-status-updated: var(--ros-green-200);
79
+ --ros-risc-status-little-outdated: var(--ros-orange-400);
80
+ --ros-risc-status-outdated: var(--ros-red-700);
81
+ --ros-risc-status-very-outdated: var(--ros-red-300);
82
+ --ros-risc-status-not-published: var(--ros-orange-100);
83
+ --ros-risc-status-error: var(--ros-red-700);
84
+ }
@@ -4,7 +4,6 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
4
4
  import { Box, Text, Switch, Flex, RadioGroup, Radio } from '@backstage/ui';
5
5
  import { RiScDialogStates } from './RiScDialog.esm.js';
6
6
  import { Divider } from '@mui/material';
7
- import { DefaultRiScType } from '../../utils/types.esm.js';
8
7
  import { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.esm.js';
9
8
  import { useTheme } from '@mui/material/styles';
10
9
 
@@ -73,36 +72,29 @@ const RadioOption = ({
73
72
  }
74
73
  ) });
75
74
  };
76
- function sortStandardRiScFirst(defaultRiScTypeDescriptors) {
77
- return defaultRiScTypeDescriptors.sort((a, b) => {
78
- if (a.riScType === DefaultRiScType.Standard && b.riScType !== DefaultRiScType.Standard)
79
- return -1;
80
- if (a.riScType !== DefaultRiScType.Standard && b.riScType === DefaultRiScType.Standard)
81
- return 1;
82
- return 0;
83
- });
84
- }
85
75
  function ConfigInitialRisc(props) {
86
76
  const { t } = useTranslationRef(pluginRiScTranslationRef);
87
- const { defaultRiScTypeDescriptors, getDescriptorOfType } = useDefaultRiScTypeDescriptors();
88
- function onSwitchChange() {
77
+ const {
78
+ defaultRiScTypeDescriptors,
79
+ riScSelectedByDefault,
80
+ getDescriptorOfId
81
+ } = useDefaultRiScTypeDescriptors();
82
+ function onCreateDefaultRiScSwitchChange() {
89
83
  if (props.switchOn) {
90
84
  props.setValue("content.title", "");
91
85
  props.setValue("content.scope", "");
92
86
  } else {
93
- const standardDescriptor = getDescriptorOfType(DefaultRiScType.Standard);
94
- props.setSelectedRiScType(DefaultRiScType.Standard);
95
- if (standardDescriptor) {
96
- props.setValue("content.title", standardDescriptor.defaultTitle);
97
- props.setValue("content.scope", standardDescriptor.defaultScope);
87
+ props.setSelectedRiScId(riScSelectedByDefault?.id);
88
+ if (riScSelectedByDefault) {
89
+ props.setValue("content.title", riScSelectedByDefault.defaultTitle);
90
+ props.setValue("content.scope", riScSelectedByDefault.defaultScope);
98
91
  }
99
92
  }
100
93
  props.setSwitchOn(!props.switchOn);
101
94
  }
102
- function onSelectRiScType(newRiScType) {
103
- const defaultRiScType = newRiScType;
104
- props.setSelectedRiScType(defaultRiScType);
105
- const descriptor = getDescriptorOfType(newRiScType);
95
+ function onSelectRiScType(selectedDefaultRiScId) {
96
+ props.setSelectedRiScId(selectedDefaultRiScId);
97
+ const descriptor = getDescriptorOfId(selectedDefaultRiScId);
106
98
  if (descriptor) {
107
99
  props.setValue("content.title", descriptor.defaultTitle);
108
100
  props.setValue("content.scope", descriptor.defaultScope);
@@ -122,7 +114,7 @@ function ConfigInitialRisc(props) {
122
114
  Switch,
123
115
  {
124
116
  isSelected: props.switchOn,
125
- onChange: onSwitchChange,
117
+ onChange: onCreateDefaultRiScSwitchChange,
126
118
  label: props.switchOn ? t("dictionary.yes") : t("dictionary.no")
127
119
  }
128
120
  )
@@ -151,21 +143,19 @@ function ConfigInitialRisc(props) {
151
143
  onChange: onSelectRiScType,
152
144
  isDisabled: !props.switchOn,
153
145
  "aria-label": "Select application type",
154
- value: props.selectedRiScType,
155
- children: sortStandardRiScFirst(defaultRiScTypeDescriptors).map(
156
- (descriptor) => /* @__PURE__ */ jsx(
157
- RadioOption,
158
- {
159
- value: descriptor.riScType,
160
- label: descriptor.listName,
161
- description: descriptor.listDescription,
162
- active: !props.switchOn,
163
- numActions: descriptor.numberOfActions,
164
- numScenarios: descriptor.numberOfScenarios
165
- },
166
- descriptor.riScType
167
- )
168
- )
146
+ value: props.selectedRiScId,
147
+ children: defaultRiScTypeDescriptors.map((descriptor) => /* @__PURE__ */ jsx(
148
+ RadioOption,
149
+ {
150
+ value: descriptor.id,
151
+ label: descriptor.listName,
152
+ description: descriptor.listDescription,
153
+ active: !props.switchOn,
154
+ numActions: descriptor.numberOfActions,
155
+ numScenarios: descriptor.numberOfScenarios
156
+ },
157
+ descriptor.id
158
+ ))
169
159
  }
170
160
  )
171
161
  ] })
@@ -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';\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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"}
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 { RiScWithMetadata } 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 selectedRiScId: string | undefined;\n setSelectedRiScId: (riScId: string | undefined) => void;\n}\n\nfunction ConfigInitialRisc(props: ConfigInitialRiscProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const {\n defaultRiScTypeDescriptors,\n riScSelectedByDefault,\n getDescriptorOfId,\n } = useDefaultRiScTypeDescriptors();\n\n function onCreateDefaultRiScSwitchChange() {\n if (props.switchOn) {\n props.setValue('content.title', '');\n props.setValue('content.scope', '');\n } else {\n props.setSelectedRiScId(riScSelectedByDefault?.id);\n if (riScSelectedByDefault) {\n props.setValue('content.title', riScSelectedByDefault.defaultTitle);\n props.setValue('content.scope', riScSelectedByDefault.defaultScope);\n }\n }\n props.setSwitchOn(!props.switchOn);\n }\n\n function onSelectRiScType(selectedDefaultRiScId: string) {\n props.setSelectedRiScId(selectedDefaultRiScId);\n const descriptor = getDescriptorOfId(selectedDefaultRiScId);\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={onCreateDefaultRiScSwitchChange}\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.selectedRiScId}\n >\n {defaultRiScTypeDescriptors.map(descriptor => (\n <RadioOption\n key={descriptor.id}\n value={descriptor.id}\n label={descriptor.listName}\n description={descriptor.listDescription}\n active={!props.switchOn}\n numActions={descriptor.numberOfActions}\n numScenarios={descriptor.numberOfScenarios}\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,6 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState } from 'react';
3
- import { DefaultRiScType } from '../../utils/types.esm.js';
2
+ import { useState, useEffect } from 'react';
4
3
  import { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions.esm.js';
5
4
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
6
5
  import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
@@ -16,6 +15,7 @@ import ConfigEncryptionDialog from './ConfigEncryptionDialog.esm.js';
16
15
  import ConfigRiscInfo from './ConfigRiscInfo.esm.js';
17
16
  import ConfigInitialRisc from './ConfigInitialRisc.esm.js';
18
17
  import { Button, Flex, Box } from '@backstage/ui';
18
+ import { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.esm.js';
19
19
 
20
20
  var RiScDialogStates = /* @__PURE__ */ ((RiScDialogStates2) => {
21
21
  RiScDialogStates2[RiScDialogStates2["Closed"] = 0] = "Closed";
@@ -73,9 +73,13 @@ function RiScDialog({
73
73
  });
74
74
  const [activeStep, setActiveStep] = useState(0);
75
75
  const [switchOn, setSwitchOn] = useState(false);
76
- const [selectedRiScType, setSelectedRiScType] = useState(
77
- DefaultRiScType.Standard
76
+ const { riScSelectedByDefault } = useDefaultRiScTypeDescriptors();
77
+ const [selectedRiScId, setSelectedRiScId] = useState(
78
+ riScSelectedByDefault?.id
78
79
  );
80
+ useEffect(() => {
81
+ setSelectedRiScId(riScSelectedByDefault?.id);
82
+ }, [riScSelectedByDefault]);
79
83
  const handleNext = handleSubmit(
80
84
  () => {
81
85
  if (activeStep === 0) {
@@ -102,7 +106,7 @@ function RiScDialog({
102
106
  }
103
107
  const handleFinish = handleSubmit((data) => {
104
108
  if (dialogState === 1 /* Create */) {
105
- createNewRiSc(data, switchOn, [selectedRiScType]);
109
+ createNewRiSc(data, switchOn, selectedRiScId);
106
110
  } else if (dialogState === 5 /* Delete */) {
107
111
  deleteRiSc(
108
112
  () => selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : "")
@@ -153,8 +157,8 @@ function RiScDialog({
153
157
  switchOn,
154
158
  setSwitchOn,
155
159
  setValue,
156
- selectedRiScType,
157
- setSelectedRiScType
160
+ selectedRiScId,
161
+ setSelectedRiScId
158
162
  }
159
163
  ),
160
164
  activeStep === 1 && /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { DefaultRiScType, RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport ConfigInitialRisc from './ConfigInitialRisc';\nimport { Flex, Box, Button } from '@backstage/ui';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n SelectInitialRisc = 3,\n EditEncryption = 4,\n Delete = 5,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nfunction RiScStepper({\n children,\n activeStep,\n}: {\n children: React.ReactNode;\n activeStep: number;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [\n t('rosDialog.initialRiscTitle'),\n t('rosDialog.stepRiscDetails'),\n t('rosDialog.stepEncryption'),\n ];\n return (\n <Box style={{ width: '100%', padding: '24px' }}>\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {children}\n </Box>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n createNewRiSc,\n deleteRiSc,\n updateRiSc,\n gcpCryptoKeys,\n } = useRiScs();\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [switchOn, setSwitchOn] = useState(false);\n\n const [selectedRiScType, setSelectedRiScType] = useState<DefaultRiScType>(\n DefaultRiScType.Standard,\n );\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n if (activeStep === 1) {\n setActiveStep(2);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n if (activeStep === 2) {\n setActiveStep(1);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, switchOn, [selectedRiScType]);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc(() =>\n selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : ''),\n );\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleNew')}</DialogTitle>\n <RiScStepper activeStep={activeStep}>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n paddingX: 1,\n paddingY: 0.5,\n }}\n >\n {activeStep === 0 && (\n <ConfigInitialRisc\n dialogState={dialogState}\n switchOn={switchOn}\n setSwitchOn={setSwitchOn}\n setValue={setValue}\n selectedRiScType={selectedRiScType}\n setSelectedRiScType={setSelectedRiScType}\n />\n )}\n {activeStep === 1 && (\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 2 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n </DialogContent>\n </RiScStepper>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Flex>\n <Button\n size=\"medium\"\n variant=\"secondary\"\n isDisabled={activeStep === 0}\n onClick={handleBack}\n >\n {t('dictionary.previous')}\n </Button>\n {activeStep < 2 ? (\n <Button size=\"medium\" variant=\"primary\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('deleteDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContent>{t('deleteDialog.confirmationMessage')}</DialogContent>\n </DialogContent>\n <DialogActions>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>\n <Flex direction=\"column\">{t('rosDialog.titleEdit')}</Flex>\n </DialogTitle>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n width: '100%',\n paddingX: 4,\n paddingY: 3,\n }}\n >\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={onDelete}\n style={{ color: '#d32f2f', paddingLeft: 0 }}\n >\n <i className=\"ri-delete-bin-line\" style={{ fontSize: '16px' }} />\n {t('contentHeader.deleteButton')}\n </Button>\n <Flex>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.editEncryption')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates"],"mappings":"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"}
1
+ {"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport ConfigInitialRisc from './ConfigInitialRisc';\nimport { Flex, Box, Button } from '@backstage/ui';\nimport { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.tsx';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n SelectInitialRisc = 3,\n EditEncryption = 4,\n Delete = 5,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nfunction RiScStepper({\n children,\n activeStep,\n}: {\n children: React.ReactNode;\n activeStep: number;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [\n t('rosDialog.initialRiscTitle'),\n t('rosDialog.stepRiscDetails'),\n t('rosDialog.stepEncryption'),\n ];\n return (\n <Box style={{ width: '100%', padding: '24px' }}>\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {children}\n </Box>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n createNewRiSc,\n deleteRiSc,\n updateRiSc,\n gcpCryptoKeys,\n } = useRiScs();\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [switchOn, setSwitchOn] = useState(false);\n\n const { riScSelectedByDefault } = useDefaultRiScTypeDescriptors();\n const [selectedRiScId, setSelectedRiScId] = useState<string | undefined>(\n riScSelectedByDefault?.id,\n );\n useEffect(() => {\n setSelectedRiScId(riScSelectedByDefault?.id);\n }, [riScSelectedByDefault]);\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n if (activeStep === 1) {\n setActiveStep(2);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n if (activeStep === 2) {\n setActiveStep(1);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, switchOn, selectedRiScId);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc(() =>\n selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : ''),\n );\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleNew')}</DialogTitle>\n <RiScStepper activeStep={activeStep}>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n paddingX: 1,\n paddingY: 0.5,\n }}\n >\n {activeStep === 0 && (\n <ConfigInitialRisc\n dialogState={dialogState}\n switchOn={switchOn}\n setSwitchOn={setSwitchOn}\n setValue={setValue}\n selectedRiScId={selectedRiScId}\n setSelectedRiScId={setSelectedRiScId}\n />\n )}\n {activeStep === 1 && (\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 2 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n </DialogContent>\n </RiScStepper>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Flex>\n <Button\n size=\"medium\"\n variant=\"secondary\"\n isDisabled={activeStep === 0}\n onClick={handleBack}\n >\n {t('dictionary.previous')}\n </Button>\n {activeStep < 2 ? (\n <Button size=\"medium\" variant=\"primary\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('deleteDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContent>{t('deleteDialog.confirmationMessage')}</DialogContent>\n </DialogContent>\n <DialogActions>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>\n <Flex direction=\"column\">{t('rosDialog.titleEdit')}</Flex>\n </DialogTitle>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n width: '100%',\n paddingX: 4,\n paddingY: 3,\n }}\n >\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={onDelete}\n style={{ color: '#d32f2f', paddingLeft: 0 }}\n >\n <i className=\"ri-delete-bin-line\" style={{ fontSize: '16px' }} />\n {t('contentHeader.deleteButton')}\n </Button>\n <Flex>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.editEncryption')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates"],"mappings":"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"}
@@ -42,6 +42,12 @@ function StatusIconWithText(props) {
42
42
  [UpdatedStatusEnum.OUTDATED]: "ri-emotion-unhappy-line",
43
43
  [UpdatedStatusEnum.VERY_OUTDATED]: "ri-emotion-sad-line"
44
44
  };
45
+ const updatedStatusToColor = {
46
+ [UpdatedStatusEnum.UPDATED]: "var(--ros-risc-status-updated)",
47
+ [UpdatedStatusEnum.LITTLE_OUTDATED]: "var(--ros-risc-status-little-outdated)",
48
+ [UpdatedStatusEnum.OUTDATED]: "var(--ros-risc-status-outdated)",
49
+ [UpdatedStatusEnum.VERY_OUTDATED]: "var(--ros-risc-status-very-outdated)"
50
+ };
45
51
  if (props.numOfCommitsBehind !== null && props.daysSinceLastModified !== null) {
46
52
  return /* @__PURE__ */ jsx(
47
53
  IconWithText,
@@ -51,7 +57,8 @@ function StatusIconWithText(props) {
51
57
  text: t("rosStatus.lastModified") + t("rosStatus.daysSinceLastModified", {
52
58
  days: props.daysSinceLastModified.toString(),
53
59
  numCommits: props.numOfCommitsBehind.toString()
54
- })
60
+ }),
61
+ color: updatedStatusToColor[props.updatedStatus]
55
62
  }
56
63
  );
57
64
  }
@@ -61,7 +68,8 @@ function StatusIconWithText(props) {
61
68
  {
62
69
  remixIconClassString: "ri-emotion-sad-line",
63
70
  altText: t("rosStatus.updatedStatus.error"),
64
- text: t("rosStatus.errorMessage")
71
+ text: t("rosStatus.errorMessage"),
72
+ color: "var(--ros-risc-status-error)"
65
73
  }
66
74
  );
67
75
  }
@@ -70,7 +78,8 @@ function StatusIconWithText(props) {
70
78
  {
71
79
  remixIconClassString: "ri-emotion-normal-line",
72
80
  altText: t("rosStatus.updatedStatus.disabled"),
73
- text: t("rosStatus.notPublishedYet")
81
+ text: t("rosStatus.notPublishedYet"),
82
+ color: "var(--ros-risc-status-not-published)"
74
83
  }
75
84
  );
76
85
  }
@@ -81,7 +90,7 @@ function IconWithText(props) {
81
90
  {
82
91
  className: props.remixIconClassString,
83
92
  "aria-label": props.altText,
84
- style: { fontSize: "20px" }
93
+ style: { fontSize: "20px", color: props.color }
85
94
  }
86
95
  ),
87
96
  /* @__PURE__ */ jsx(Text, { as: "h6", variant: "body-large", children: props.text })
@@ -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';\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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"}
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 const updatedStatusToColor: Record<UpdatedStatusEnumType, string> = {\n [UpdatedStatusEnum.UPDATED]: 'var(--ros-risc-status-updated)',\n [UpdatedStatusEnum.LITTLE_OUTDATED]:\n 'var(--ros-risc-status-little-outdated)',\n [UpdatedStatusEnum.OUTDATED]: 'var(--ros-risc-status-outdated)',\n [UpdatedStatusEnum.VERY_OUTDATED]: 'var(--ros-risc-status-very-outdated)',\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 color={updatedStatusToColor[props.updatedStatus]}\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 color=\"var(--ros-risc-status-error)\"\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 color=\"var(--ros-risc-status-not-published)\"\n />\n );\n}\n\ninterface IconWithTextProps {\n remixIconClassString: string;\n altText: string;\n text: string;\n color?: 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', color: props.color }}\n />\n <Text as=\"h6\" variant=\"body-large\">\n {props.text}\n </Text>\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -106,7 +106,7 @@ function ScenarioWizard({ step }) {
106
106
  },
107
107
  children: [
108
108
  /* @__PURE__ */ jsxs(Flex, { justify: "between", children: [
109
- /* @__PURE__ */ jsx(Text, { variant: "title-medium", weight: "bold", children: t("scenarioDrawer.title") }),
109
+ /* @__PURE__ */ jsx(Text, { variant: "title-medium", weight: "bold", children: t("scenarioDrawer.newTitle") }),
110
110
  /* @__PURE__ */ jsx(Button, { size: "medium", variant: "secondary", onClick: handleCloseStepper, children: t("dictionary.cancel") })
111
111
  ] }),
112
112
  /* @__PURE__ */ jsx(
@@ -141,7 +141,7 @@ function ScenarioWizard({ step }) {
141
141
  onClick: onSubmit,
142
142
  size: "medium",
143
143
  isDisabled: !isDirty || updateStatus.isLoading,
144
- children: t("dictionary.saveAndClose")
144
+ children: isLastStep ? t("scenarioDrawer.createNewScenario") : t("scenarioDrawer.saveAsDraft")
145
145
  }
146
146
  ),
147
147
  !isLastStep && /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"ScenarioWizard.esm.js","sources":["../../../src/components/scenarioWizard/ScenarioWizard.tsx"],"sourcesContent":["import { ReactNode, useCallback, useState } from 'react';\nimport Step from '@mui/material/Step';\nimport StepButton from '@mui/material/StepButton';\nimport Stepper from '@mui/material/Stepper';\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight';\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft';\nimport { ScenarioStep } from './steps/ScenarioStep';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport Divider from '@mui/material/Divider';\nimport { ActionsStep } from './steps/ActionsStep';\nimport { RiskStep } from './steps/RiskStep';\nimport Alert from '@mui/material/Alert';\nimport { Spinner } from '../common/Spinner';\nimport { CloseConfirmation } from './components/CloseConfirmation';\nimport {\n scenarioWizardSteps,\n ScenarioWizardSteps,\n useScenario,\n} from '../../contexts/ScenarioContext';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport Container from '@mui/material/Container';\nimport { label } from '../common/typography';\nimport { useForm } from 'react-hook-form';\nimport { FormScenario, Scenario } from '../../utils/types';\nimport { useSearchParams } from 'react-router-dom';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { Text, Button, Flex } from '@backstage/ui';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\n\nexport function ScenarioWizard({ step }: { step: ScenarioWizardSteps }) {\n const { profileInfo } = useBackstageContext();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { isFetching, response, updateStatus } = useRiScs();\n const [, setSearchParams] = useSearchParams();\n\n const { scenario, emptyFormScenario, closeScenarioForm, submitNewScenario } =\n useScenario();\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: emptyFormScenario(scenario),\n mode: 'onBlur',\n });\n\n const { isDirty, isValid } = formMethods.formState;\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n const submitScenario: Scenario = {\n ...data,\n risk: {\n ...data.risk,\n probability: Number(data.risk.probability),\n consequence: Number(data.risk.consequence),\n },\n remainingRisk: {\n ...data.remainingRisk,\n probability: Number(data.remainingRisk.probability),\n consequence: Number(data.remainingRisk.consequence),\n },\n };\n\n formMethods.trigger();\n\n if (isValid) {\n submitNewScenario(submitScenario, profileInfo, () => closeScenarioForm());\n } else {\n formMethods.trigger();\n }\n });\n\n const close = useCallback(() => {\n closeScenarioForm();\n setShowCloseConfirmation(false);\n }, [closeScenarioForm]);\n\n function handleCloseStepper() {\n if (isDirty) {\n setShowCloseConfirmation(true);\n } else {\n close();\n }\n }\n\n function selectStep(newStep: ScenarioWizardSteps) {\n if (isValid) {\n setSearchParams({ step: newStep });\n } else {\n formMethods.trigger();\n }\n }\n\n function nextStep() {\n const currentIndex = scenarioWizardSteps.indexOf(step);\n if (currentIndex < scenarioWizardSteps.length - 1) {\n selectStep(scenarioWizardSteps[currentIndex + 1]);\n }\n }\n\n function previousStep() {\n const currentIndex = scenarioWizardSteps.indexOf(step);\n if (currentIndex > 0) {\n selectStep(scenarioWizardSteps[currentIndex - 1]);\n }\n }\n\n const isFirstStep = step === scenarioWizardSteps.at(0);\n const isLastStep = step === scenarioWizardSteps.at(-1);\n\n const stepComponents: Record<ScenarioWizardSteps, ReactNode> = {\n scenario: <ScenarioStep formMethods={formMethods} />,\n initialRisk: <RiskStep formMethods={formMethods} riskType=\"risk\" />,\n measure: <ActionsStep formMethods={formMethods} />,\n restRisk: <RiskStep formMethods={formMethods} riskType=\"remainingRisk\" />,\n };\n\n return (\n <Container\n maxWidth=\"md\"\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '32px',\n }}\n >\n <Flex justify=\"between\">\n <Text variant=\"title-medium\" weight=\"bold\">\n {t('scenarioDrawer.title')}\n </Text>\n <Button size=\"medium\" variant=\"secondary\" onClick={handleCloseStepper}>\n {t('dictionary.cancel')}\n </Button>\n </Flex>\n <Stepper\n activeStep={scenarioWizardSteps.indexOf(step)}\n alternativeLabel\n nonLinear\n >\n {scenarioWizardSteps.map(wizardStep => (\n <Step key={wizardStep} completed={false}>\n <StepButton sx={label} onClick={() => selectStep(wizardStep)}>\n {t(`dictionary.${wizardStep}`)}\n </StepButton>\n </Step>\n ))}\n </Stepper>\n <Divider />\n {isFetching ? (\n <Spinner size={80} />\n ) : (\n <>\n {stepComponents[step]}\n\n {response && (\n <Alert severity={getAlertSeverity(updateStatus)}>\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </Alert>\n )}\n <Flex justify={isFirstStep ? 'end' : 'between'}>\n {!isFirstStep && (\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={previousStep}\n iconStart={<KeyboardArrowLeft />}\n >\n {t('dictionary.previous')}\n </Button>\n )}\n <Flex gap=\"16px\">\n <Button\n variant={isLastStep ? 'primary' : 'secondary'}\n onClick={onSubmit}\n size=\"medium\"\n isDisabled={!isDirty || updateStatus.isLoading}\n >\n {t('dictionary.saveAndClose')}\n </Button>\n\n {!isLastStep && (\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={nextStep}\n iconEnd={<KeyboardArrowRight />}\n >\n {t('dictionary.next')}\n </Button>\n )}\n </Flex>\n </Flex>\n </>\n )}\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n onCloseDialog={() => setShowCloseConfirmation(false)}\n close={close}\n save={onSubmit}\n />\n </Container>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8BO,SAAS,cAAA,CAAe,EAAE,IAAA,EAAK,EAAkC;AACtE,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,YAAA,KAAiB,QAAA,EAAS;AACxD,EAAA,MAAM,GAAG,eAAe,CAAA,GAAI,eAAA,EAAgB;AAE5C,EAAA,MAAM,EAAE,QAAA,EAAU,iBAAA,EAAmB,iBAAA,EAAmB,iBAAA,KACtD,WAAA,EAAY;AAEd,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,SAAS,KAAK,CAAA;AAExE,EAAA,MAAM,cAAc,OAAA,CAAsB;AAAA,IACxC,aAAA,EAAe,kBAAkB,QAAQ,CAAA;AAAA,IACzC,IAAA,EAAM;AAAA,GACP,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,WAAA,CAAY,SAAA;AAEzC,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,YAAA,CAAa,CAAC,IAAA,KAAuB;AAChE,IAAA,MAAM,cAAA,GAA2B;AAAA,MAC/B,GAAG,IAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,GAAG,IAAA,CAAK,IAAA;AAAA,QACR,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA;AAAA,QACzC,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,WAAW;AAAA,OAC3C;AAAA,MACA,aAAA,EAAe;AAAA,QACb,GAAG,IAAA,CAAK,aAAA;AAAA,QACR,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AAAA,QAClD,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,WAAW;AAAA;AACpD,KACF;AAEA,IAAA,WAAA,CAAY,OAAA,EAAQ;AAEpB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,iBAAA,CAAkB,cAAA,EAAgB,WAAA,EAAa,MAAM,iBAAA,EAAmB,CAAA;AAAA,IAC1E,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,OAAA,EAAQ;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,iBAAA,EAAkB;AAClB,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,SAAS,kBAAA,GAAqB;AAC5B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,wBAAA,CAAyB,IAAI,CAAA;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF;AAEA,EAAA,SAAS,WAAW,OAAA,EAA8B;AAChD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,eAAA,CAAgB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,OAAA,EAAQ;AAAA,IACtB;AAAA,EACF;AAEA,EAAA,SAAS,QAAA,GAAW;AAClB,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA;AACrD,IAAA,IAAI,YAAA,GAAe,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AACjD,MAAA,UAAA,CAAW,mBAAA,CAAoB,YAAA,GAAe,CAAC,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA;AACrD,IAAA,IAAI,eAAe,CAAA,EAAG;AACpB,MAAA,UAAA,CAAW,mBAAA,CAAoB,YAAA,GAAe,CAAC,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,IAAA,KAAS,mBAAA,CAAoB,EAAA,CAAG,CAAC,CAAA;AACrD,EAAA,MAAM,UAAA,GAAa,IAAA,KAAS,mBAAA,CAAoB,EAAA,CAAG,EAAE,CAAA;AAErD,EAAA,MAAM,cAAA,GAAyD;AAAA,IAC7D,QAAA,kBAAU,GAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAA0B,CAAA;AAAA,IAClD,WAAA,kBAAa,GAAA,CAAC,QAAA,EAAA,EAAS,WAAA,EAA0B,UAAS,MAAA,EAAO,CAAA;AAAA,IACjE,OAAA,kBAAS,GAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAA0B,CAAA;AAAA,IAChD,QAAA,kBAAU,GAAA,CAAC,QAAA,EAAA,EAAS,WAAA,EAA0B,UAAS,eAAA,EAAgB;AAAA,GACzE;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,IAAA;AAAA,MACT,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,GAAA,EAAK;AAAA,OACP;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAQ,SAAA,EACZ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAK,OAAA,EAAQ,cAAA,EAAe,QAAO,MAAA,EACjC,QAAA,EAAA,CAAA,CAAE,sBAAsB,CAAA,EAC3B,CAAA;AAAA,0BACA,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,aAAY,OAAA,EAAS,kBAAA,EAChD,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,UAAA,EAAY,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC5C,gBAAA,EAAgB,IAAA;AAAA,YAChB,SAAA,EAAS,IAAA;AAAA,YAER,QAAA,EAAA,mBAAA,CAAoB,IAAI,CAAA,UAAA,qBACvB,GAAA,CAAC,QAAsB,SAAA,EAAW,KAAA,EAChC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAI,KAAA,EAAO,SAAS,MAAM,UAAA,CAAW,UAAU,CAAA,EACxD,QAAA,EAAA,CAAA,CAAE,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA,EAC/B,CAAA,EAAA,EAHS,UAIX,CACD;AAAA;AAAA,SACH;AAAA,4BACC,OAAA,EAAA,EAAQ,CAAA;AAAA,QACR,6BACC,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,oBAEnB,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,cAAA,CAAe,IAAI,CAAA;AAAA,UAEnB,QAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAU,gBAAA,CAAiB,YAAY,CAAA,EAC5C,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAc,QAAA,EAAA,QAAA,CAAS,eAAc,CAAA,EACrD,CAAA;AAAA,0BAEF,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAS,WAAA,GAAc,QAAQ,SAAA,EAClC,QAAA,EAAA;AAAA,YAAA,CAAC,WAAA,oBACA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,UAAA;AAAA,gBACR,OAAA,EAAS,YAAA;AAAA,gBACT,SAAA,sBAAY,iBAAA,EAAA,EAAkB,CAAA;AAAA,gBAE7B,YAAE,qBAAqB;AAAA;AAAA,aAC1B;AAAA,4BAEF,IAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAI,MAAA,EACR,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,aAAa,SAAA,GAAY,WAAA;AAAA,kBAClC,OAAA,EAAS,QAAA;AAAA,kBACT,IAAA,EAAK,QAAA;AAAA,kBACL,UAAA,EAAY,CAAC,OAAA,IAAW,YAAA,CAAa,SAAA;AAAA,kBAEpC,YAAE,yBAAyB;AAAA;AAAA,eAC9B;AAAA,cAEC,CAAC,UAAA,oBACA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,SAAA;AAAA,kBACR,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,QAAA;AAAA,kBACT,OAAA,sBAAU,kBAAA,EAAA,EAAmB,CAAA;AAAA,kBAE5B,YAAE,iBAAiB;AAAA;AAAA;AACtB,aAAA,EAEJ;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAEF,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,qBAAA;AAAA,YACR,aAAA,EAAe,MAAM,wBAAA,CAAyB,KAAK,CAAA;AAAA,YACnD,KAAA;AAAA,YACA,IAAA,EAAM;AAAA;AAAA;AACR;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"ScenarioWizard.esm.js","sources":["../../../src/components/scenarioWizard/ScenarioWizard.tsx"],"sourcesContent":["import { ReactNode, useCallback, useState } from 'react';\nimport Step from '@mui/material/Step';\nimport StepButton from '@mui/material/StepButton';\nimport Stepper from '@mui/material/Stepper';\nimport KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight';\nimport KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft';\nimport { ScenarioStep } from './steps/ScenarioStep';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport Divider from '@mui/material/Divider';\nimport { ActionsStep } from './steps/ActionsStep';\nimport { RiskStep } from './steps/RiskStep';\nimport Alert from '@mui/material/Alert';\nimport { Spinner } from '../common/Spinner';\nimport { CloseConfirmation } from './components/CloseConfirmation';\nimport {\n scenarioWizardSteps,\n ScenarioWizardSteps,\n useScenario,\n} from '../../contexts/ScenarioContext';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport Container from '@mui/material/Container';\nimport { label } from '../common/typography';\nimport { useForm } from 'react-hook-form';\nimport { FormScenario, Scenario } from '../../utils/types';\nimport { useSearchParams } from 'react-router-dom';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { Text, Button, Flex } from '@backstage/ui';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\n\nexport function ScenarioWizard({ step }: { step: ScenarioWizardSteps }) {\n const { profileInfo } = useBackstageContext();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { isFetching, response, updateStatus } = useRiScs();\n const [, setSearchParams] = useSearchParams();\n\n const { scenario, emptyFormScenario, closeScenarioForm, submitNewScenario } =\n useScenario();\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: emptyFormScenario(scenario),\n mode: 'onBlur',\n });\n\n const { isDirty, isValid } = formMethods.formState;\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n const submitScenario: Scenario = {\n ...data,\n risk: {\n ...data.risk,\n probability: Number(data.risk.probability),\n consequence: Number(data.risk.consequence),\n },\n remainingRisk: {\n ...data.remainingRisk,\n probability: Number(data.remainingRisk.probability),\n consequence: Number(data.remainingRisk.consequence),\n },\n };\n\n formMethods.trigger();\n\n if (isValid) {\n submitNewScenario(submitScenario, profileInfo, () => closeScenarioForm());\n } else {\n formMethods.trigger();\n }\n });\n\n const close = useCallback(() => {\n closeScenarioForm();\n setShowCloseConfirmation(false);\n }, [closeScenarioForm]);\n\n function handleCloseStepper() {\n if (isDirty) {\n setShowCloseConfirmation(true);\n } else {\n close();\n }\n }\n\n function selectStep(newStep: ScenarioWizardSteps) {\n if (isValid) {\n setSearchParams({ step: newStep });\n } else {\n formMethods.trigger();\n }\n }\n\n function nextStep() {\n const currentIndex = scenarioWizardSteps.indexOf(step);\n if (currentIndex < scenarioWizardSteps.length - 1) {\n selectStep(scenarioWizardSteps[currentIndex + 1]);\n }\n }\n\n function previousStep() {\n const currentIndex = scenarioWizardSteps.indexOf(step);\n if (currentIndex > 0) {\n selectStep(scenarioWizardSteps[currentIndex - 1]);\n }\n }\n\n const isFirstStep = step === scenarioWizardSteps.at(0);\n const isLastStep = step === scenarioWizardSteps.at(-1);\n\n const stepComponents: Record<ScenarioWizardSteps, ReactNode> = {\n scenario: <ScenarioStep formMethods={formMethods} />,\n initialRisk: <RiskStep formMethods={formMethods} riskType=\"risk\" />,\n measure: <ActionsStep formMethods={formMethods} />,\n restRisk: <RiskStep formMethods={formMethods} riskType=\"remainingRisk\" />,\n };\n\n return (\n <Container\n maxWidth=\"md\"\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '32px',\n }}\n >\n <Flex justify=\"between\">\n <Text variant=\"title-medium\" weight=\"bold\">\n {t('scenarioDrawer.newTitle')}\n </Text>\n <Button size=\"medium\" variant=\"secondary\" onClick={handleCloseStepper}>\n {t('dictionary.cancel')}\n </Button>\n </Flex>\n <Stepper\n activeStep={scenarioWizardSteps.indexOf(step)}\n alternativeLabel\n nonLinear\n >\n {scenarioWizardSteps.map(wizardStep => (\n <Step key={wizardStep} completed={false}>\n <StepButton sx={label} onClick={() => selectStep(wizardStep)}>\n {t(`dictionary.${wizardStep}`)}\n </StepButton>\n </Step>\n ))}\n </Stepper>\n <Divider />\n {isFetching ? (\n <Spinner size={80} />\n ) : (\n <>\n {stepComponents[step]}\n\n {response && (\n <Alert severity={getAlertSeverity(updateStatus)}>\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </Alert>\n )}\n <Flex justify={isFirstStep ? 'end' : 'between'}>\n {!isFirstStep && (\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={previousStep}\n iconStart={<KeyboardArrowLeft />}\n >\n {t('dictionary.previous')}\n </Button>\n )}\n <Flex gap=\"16px\">\n <Button\n variant={isLastStep ? 'primary' : 'secondary'}\n onClick={onSubmit}\n size=\"medium\"\n isDisabled={!isDirty || updateStatus.isLoading}\n >\n {isLastStep\n ? t('scenarioDrawer.createNewScenario')\n : t('scenarioDrawer.saveAsDraft')}\n </Button>\n\n {!isLastStep && (\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={nextStep}\n iconEnd={<KeyboardArrowRight />}\n >\n {t('dictionary.next')}\n </Button>\n )}\n </Flex>\n </Flex>\n </>\n )}\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n onCloseDialog={() => setShowCloseConfirmation(false)}\n close={close}\n save={onSubmit}\n />\n </Container>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,30 +1,45 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useState, useEffect, createContext, useContext } from 'react';
3
3
  import { useAuthenticatedFetch } from '../utils/hooks.esm.js';
4
+ import { useEntity } from '@backstage/plugin-catalog-react';
4
5
 
5
6
  const DefaultRiScTypesContext = createContext(void 0);
6
7
  function DefaultRiScTypesProvider({
7
8
  children
8
9
  }) {
9
10
  const { fetchDefaultRiScTypeDescriptors } = useAuthenticatedFetch();
11
+ const { entity } = useEntity();
10
12
  const [defaultRiScTypeDescriptors, setDefaultRiScTypeDescriptors] = useState([]);
13
+ const [riScSelectedByDefault, setRiScSelectedByDefault] = useState(void 0);
11
14
  useEffect(() => {
12
15
  fetchDefaultRiScTypeDescriptors((response) => {
13
16
  setDefaultRiScTypeDescriptors(response);
17
+ setRiScSelectedByDefault(getRiScSelectedByDefault(response));
14
18
  });
15
19
  }, []);
16
- function getDescriptorOfType(type) {
17
- if (defaultRiScTypeDescriptors === void 0) return null;
18
- const descriptor = defaultRiScTypeDescriptors.find(
19
- (value) => value.riScType === type
20
+ function getRiScSelectedByDefault(descriptors) {
21
+ const componentType = entity.spec?.type;
22
+ if (!componentType) {
23
+ if (descriptors.length > 0) return descriptors[0];
24
+ return void 0;
25
+ }
26
+ const selectedDescriptor = descriptors.find(
27
+ (descriptor) => descriptor.preferredBackstageComponentType === componentType
20
28
  );
21
- if (descriptor === void 0) return null;
22
- return descriptor;
29
+ if (!selectedDescriptor && descriptors.length > 0) return descriptors[0];
30
+ return selectedDescriptor;
31
+ }
32
+ function getDescriptorOfId(id) {
33
+ return defaultRiScTypeDescriptors.find((descriptor) => descriptor.id === id);
23
34
  }
24
35
  return /* @__PURE__ */ jsx(
25
36
  DefaultRiScTypesContext.Provider,
26
37
  {
27
- value: { defaultRiScTypeDescriptors, getDescriptorOfType },
38
+ value: {
39
+ defaultRiScTypeDescriptors,
40
+ riScSelectedByDefault,
41
+ getDescriptorOfId
42
+ },
28
43
  children
29
44
  }
30
45
  );
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultRiScTypesContext.esm.js","sources":["../../src/contexts/DefaultRiScTypesContext.tsx"],"sourcesContent":["import {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { useAuthenticatedFetch } from '../utils/hooks.ts';\nimport { DefaultRiScType, DefaultRiScTypeDescriptor } from '../utils/types.ts';\n\ntype DefaultRiScTypesContextObject = {\n defaultRiScTypeDescriptors: DefaultRiScTypeDescriptor[];\n getDescriptorOfType: (\n type: DefaultRiScType,\n ) => DefaultRiScTypeDescriptor | null;\n};\n\nconst DefaultRiScTypesContext = createContext<\n DefaultRiScTypesContextObject | undefined\n>(undefined);\n\nexport function DefaultRiScTypesProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const { fetchDefaultRiScTypeDescriptors } = useAuthenticatedFetch();\n\n const [defaultRiScTypeDescriptors, setDefaultRiScTypeDescriptors] = useState<\n DefaultRiScTypeDescriptor[]\n >([]);\n\n useEffect(() => {\n fetchDefaultRiScTypeDescriptors(response => {\n setDefaultRiScTypeDescriptors(response);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function getDescriptorOfType(\n type: DefaultRiScType,\n ): DefaultRiScTypeDescriptor | null {\n if (defaultRiScTypeDescriptors === undefined) return null;\n\n const descriptor = defaultRiScTypeDescriptors.find(\n value => value.riScType === type,\n );\n if (descriptor === undefined) return null;\n return descriptor;\n }\n\n return (\n <DefaultRiScTypesContext.Provider\n value={{ defaultRiScTypeDescriptors, getDescriptorOfType }}\n >\n {children}\n </DefaultRiScTypesContext.Provider>\n );\n}\n\nexport function useDefaultRiScTypeDescriptors() {\n const context = useContext(DefaultRiScTypesContext);\n\n if (context === undefined) {\n throw new Error(\n 'useDefaultRiScTypeDescriptors must be used within a DefaultRiScTypesContext provider',\n );\n }\n return context;\n}\n"],"names":[],"mappings":";;;;AAiBA,MAAM,uBAAA,GAA0B,cAE9B,MAAS,CAAA;AAEJ,SAAS,wBAAA,CAAyB;AAAA,EACvC;AACF,CAAA,EAEG;AACD,EAAA,MAAM,EAAE,+BAAA,EAAgC,GAAI,qBAAA,EAAsB;AAElE,EAAA,MAAM,CAAC,0BAAA,EAA4B,6BAA6B,CAAA,GAAI,QAAA,CAElE,EAAE,CAAA;AAEJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,+BAAA,CAAgC,CAAA,QAAA,KAAY;AAC1C,MAAA,6BAAA,CAA8B,QAAQ,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EAEH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAS,oBACP,IAAA,EACkC;AAClC,IAAA,IAAI,0BAAA,KAA+B,QAAW,OAAO,IAAA;AAErD,IAAA,MAAM,aAAa,0BAAA,CAA2B,IAAA;AAAA,MAC5C,CAAA,KAAA,KAAS,MAAM,QAAA,KAAa;AAAA,KAC9B;AACA,IAAA,IAAI,UAAA,KAAe,QAAW,OAAO,IAAA;AACrC,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,uBAAA,CAAwB,QAAA;AAAA,IAAxB;AAAA,MACC,KAAA,EAAO,EAAE,0BAAA,EAA4B,mBAAA,EAAoB;AAAA,MAExD;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,6BAAA,GAAgC;AAC9C,EAAA,MAAM,OAAA,GAAU,WAAW,uBAAuB,CAAA;AAElD,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;;"}
1
+ {"version":3,"file":"DefaultRiScTypesContext.esm.js","sources":["../../src/contexts/DefaultRiScTypesContext.tsx"],"sourcesContent":["import {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { useAuthenticatedFetch } from '../utils/hooks.ts';\nimport { DefaultRiScTypeDescriptor } from '../utils/types.ts';\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\ntype DefaultRiScTypesContextObject = {\n defaultRiScTypeDescriptors: DefaultRiScTypeDescriptor[];\n riScSelectedByDefault: DefaultRiScTypeDescriptor | undefined;\n getDescriptorOfId: (id: string) => DefaultRiScTypeDescriptor | undefined;\n};\n\nconst DefaultRiScTypesContext = createContext<\n DefaultRiScTypesContextObject | undefined\n>(undefined);\n\nexport function DefaultRiScTypesProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const { fetchDefaultRiScTypeDescriptors } = useAuthenticatedFetch();\n const { entity } = useEntity();\n const [defaultRiScTypeDescriptors, setDefaultRiScTypeDescriptors] = useState<\n DefaultRiScTypeDescriptor[]\n >([]);\n const [riScSelectedByDefault, setRiScSelectedByDefault] = useState<\n DefaultRiScTypeDescriptor | undefined\n >(undefined);\n\n useEffect(() => {\n fetchDefaultRiScTypeDescriptors(response => {\n setDefaultRiScTypeDescriptors(response);\n setRiScSelectedByDefault(getRiScSelectedByDefault(response));\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n function getRiScSelectedByDefault(\n descriptors: DefaultRiScTypeDescriptor[],\n ): DefaultRiScTypeDescriptor | undefined {\n const componentType = entity.spec?.type as string | undefined;\n\n if (!componentType) {\n if (descriptors.length > 0) return descriptors[0];\n return undefined;\n }\n\n const selectedDescriptor = descriptors.find(\n descriptor =>\n descriptor.preferredBackstageComponentType === componentType,\n );\n if (!selectedDescriptor && descriptors.length > 0) return descriptors[0];\n return selectedDescriptor;\n }\n\n function getDescriptorOfId(\n id: string,\n ): DefaultRiScTypeDescriptor | undefined {\n return defaultRiScTypeDescriptors.find(descriptor => descriptor.id === id);\n }\n\n return (\n <DefaultRiScTypesContext.Provider\n value={{\n defaultRiScTypeDescriptors,\n riScSelectedByDefault,\n getDescriptorOfId,\n }}\n >\n {children}\n </DefaultRiScTypesContext.Provider>\n );\n}\n\nexport function useDefaultRiScTypeDescriptors() {\n const context = useContext(DefaultRiScTypesContext);\n\n if (context === undefined) {\n throw new Error(\n 'useDefaultRiScTypeDescriptors must be used within a DefaultRiScTypesContext provider',\n );\n }\n return context;\n}\n"],"names":[],"mappings":";;;;;AAiBA,MAAM,uBAAA,GAA0B,cAE9B,MAAS,CAAA;AAEJ,SAAS,wBAAA,CAAyB;AAAA,EACvC;AACF,CAAA,EAEG;AACD,EAAA,MAAM,EAAE,+BAAA,EAAgC,GAAI,qBAAA,EAAsB;AAClE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,CAAC,0BAAA,EAA4B,6BAA6B,CAAA,GAAI,QAAA,CAElE,EAAE,CAAA;AACJ,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAI,SAExD,MAAS,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,+BAAA,CAAgC,CAAA,QAAA,KAAY;AAC1C,MAAA,6BAAA,CAA8B,QAAQ,CAAA;AACtC,MAAA,wBAAA,CAAyB,wBAAA,CAAyB,QAAQ,CAAC,CAAA;AAAA,IAC7D,CAAC,CAAA;AAAA,EAEH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAS,yBACP,WAAA,EACuC;AACvC,IAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,EAAM,IAAA;AAEnC,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,OAAO,YAAY,CAAC,CAAA;AAChD,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,qBAAqB,WAAA,CAAY,IAAA;AAAA,MACrC,CAAA,UAAA,KACE,WAAW,+BAAA,KAAoC;AAAA,KACnD;AACA,IAAA,IAAI,CAAC,kBAAA,IAAsB,WAAA,CAAY,SAAS,CAAA,EAAG,OAAO,YAAY,CAAC,CAAA;AACvE,IAAA,OAAO,kBAAA;AAAA,EACT;AAEA,EAAA,SAAS,kBACP,EAAA,EACuC;AACvC,IAAA,OAAO,0BAAA,CAA2B,IAAA,CAAK,CAAA,UAAA,KAAc,UAAA,CAAW,OAAO,EAAE,CAAA;AAAA,EAC3E;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,uBAAA,CAAwB,QAAA;AAAA,IAAxB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,0BAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,6BAAA,GAAgC;AAC9C,EAAA,MAAM,OAAA,GAAU,WAAW,uBAAuB,CAAA;AAElD,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;;"}
@@ -176,7 +176,7 @@ function RiScProvider({ children }) {
176
176
  navigate(getRiScPath({ riScId: selectedRiScId }));
177
177
  }
178
178
  }
179
- function createNewRiSc(riSc, generateInitialRisc, initialRiscType) {
179
+ function createNewRiSc(riSc, generateInitialRisc, defaultRiScId) {
180
180
  setIsFetching(true);
181
181
  setSelectedRiSc(null);
182
182
  const newRiSc = {
@@ -185,7 +185,7 @@ function RiScProvider({ children }) {
185
185
  newRiSc.content,
186
186
  generateInitialRisc,
187
187
  newRiSc.sopsConfig,
188
- initialRiscType,
188
+ defaultRiScId,
189
189
  (res) => {
190
190
  if (!res.riScId) throw new Error("No RiSc ID returned");
191
191
  if (!res.riScContent) throw new Error("No RiSc content returned");