@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 +15 -3
- package/dist/components/riScDialog/ConfigInitialRisc.esm.js +27 -37
- package/dist/components/riScDialog/ConfigInitialRisc.esm.js.map +1 -1
- package/dist/components/riScDialog/RiScDialog.esm.js +11 -7
- package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/riScStatus/StatusBanner.esm.js +13 -4
- package/dist/components/riScInfo/riScStatus/StatusBanner.esm.js.map +1 -1
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js +2 -2
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js.map +1 -1
- package/dist/contexts/DefaultRiScTypesContext.esm.js +22 -7
- package/dist/contexts/DefaultRiScTypesContext.esm.js.map +1 -1
- package/dist/contexts/RiScContext.esm.js +2 -2
- package/dist/contexts/RiScContext.esm.js.map +1 -1
- package/dist/utils/DTOs.esm.js +2 -2
- package/dist/utils/DTOs.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js +2 -2
- package/dist/utils/hooks.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +6 -0
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js +1 -8
- package/dist/utils/types.esm.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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 {
|
|
88
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
props.setValue("content.
|
|
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(
|
|
103
|
-
|
|
104
|
-
|
|
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:
|
|
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.
|
|
155
|
-
children:
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
|
77
|
-
|
|
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,
|
|
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
|
-
|
|
157
|
-
|
|
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":";;;;;;;;AAoBO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,MAAM,aAAA,GAAgB,sBAAA;AAAA,IACpB,KAAA,CAAM,qBAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AACA,EAAA,MAAM,QAAQ,QAAA,EAAS;AAEvB,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,KAAA;AAAA,MACV,EAAA,EAAG,GAAA;AAAA,MACH,EAAA,EAAG,GAAA;AAAA,MACH,EAAA,EAAG,GAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,eAAA,EACE,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,SAAS,mBAAA,GAAsB;AAAA,OAC1D;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,oBAAoB,KAAA,CAAM,kBAAA;AAAA,UAC1B,uBAAuB,KAAA,CAAM,qBAAA;AAAA,UAC7B,aAAA;AAAA,UACA,sBAAsB,KAAA,CAAM;AAAA;AAAA;AAC9B;AAAA,GACF;AAEJ;AASA,SAAS,mBAAmB,KAAA,EAAgC;AAC1D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,8BAAA,GACJ;AAAA,IACE,CAAC,iBAAA,CAAkB,OAAO,GAAG,uBAAA;AAAA,IAC7B,CAAC,iBAAA,CAAkB,eAAe,GAAG,wBAAA;AAAA,IACrC,CAAC,iBAAA,CAAkB,QAAQ,GAAG,yBAAA;AAAA,IAC9B,CAAC,iBAAA,CAAkB,aAAa,GAAG;AAAA,GACrC;
|
|
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.
|
|
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("
|
|
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":"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"}
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
(
|
|
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 (
|
|
22
|
-
return
|
|
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: {
|
|
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 {
|
|
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,
|
|
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
|
-
|
|
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");
|