@kartverket/backstage-plugin-risk-scorecard 3.12.0 → 4.0.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/dist/@kartverket-backstage-plugin-risk-scorecard-4.0.1.tgz +0 -0
- package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js +42 -27
- package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/ErrorState.esm.js +26 -0
- package/dist/components/riScInfo/ErrorState.esm.js.map +1 -0
- package/dist/components/riScInfo/MigrationDialog.esm.js +2 -2
- package/dist/components/riScInfo/MigrationDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/PublishDialog.esm.js +2 -2
- package/dist/components/riScInfo/PublishDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/RiScSelectionCard.esm.js +2 -2
- package/dist/components/riScInfo/RiScSelectionCard.esm.js.map +1 -1
- package/dist/components/riScInfo/RiScSelectionCard.module.css.esm.js +3 -3
- package/dist/components/riScInfo/migrations/RiScMigrationChanges.esm.js +1 -1
- package/dist/components/riScInfo/migrations/RiScMigrationChanges.esm.js.map +1 -1
- package/dist/components/riScInfo/migrations/RiScMigrationChanges52.esm.js +11 -43
- package/dist/components/riScInfo/migrations/RiScMigrationChanges52.esm.js.map +1 -1
- package/dist/components/riScPlugin/RiScPlugin.esm.js +12 -3
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/components/sopsConfigDialog/GcpCryptoKeyRadioGroup.esm.js +62 -0
- package/dist/components/sopsConfigDialog/GcpCryptoKeyRadioGroup.esm.js.map +1 -0
- package/dist/components/sopsConfigDialog/GcpCryptoKeyRadioGroup.module.css.esm.js +8 -0
- package/dist/components/sopsConfigDialog/GcpCryptoKeyRadioGroup.module.css.esm.js.map +1 -0
- package/dist/contexts/RiScContext.esm.js +46 -7
- package/dist/contexts/RiScContext.esm.js.map +1 -1
- package/dist/utils/DTOs.esm.js +7 -1
- package/dist/utils/DTOs.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +12 -8
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js.map +1 -1
- package/package.json +1 -1
- package/dist/@kartverket-backstage-plugin-risk-scorecard-3.12.0.tgz +0 -0
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenu.esm.js +0 -119
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenu.esm.js.map +0 -1
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenuItem.esm.js +0 -48
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenuItem.esm.js.map +0 -1
- package/dist/components/sopsConfigDialog/SopsConfigDialog.module.css.esm.js +0 -8
- package/dist/components/sopsConfigDialog/SopsConfigDialog.module.css.esm.js.map +0 -1
|
Binary file
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { jsxs, jsx
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Accordion, AccordionSummary, AccordionDetails, FormLabel, List, ListItem, ListItemText, ListItemSecondaryAction, IconButton, TextField } from '@mui/material';
|
|
3
|
-
import {
|
|
3
|
+
import { GcpCryptoKeyRadioGroup } from '../sopsConfigDialog/GcpCryptoKeyRadioGroup.esm.js';
|
|
4
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
5
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
6
6
|
import { ExpandMore, AddCircle } from '@mui/icons-material';
|
|
7
7
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
8
|
+
import { CryptoKeyPermission } from '../../utils/DTOs.esm.js';
|
|
8
9
|
import { useState, useEffect } from 'react';
|
|
9
10
|
import { RiScDialogStates } from './RiScDialog.esm.js';
|
|
10
11
|
import { isPublicAgeKeyValid } from '../../utils/utilityfunctions.esm.js';
|
|
@@ -31,23 +32,21 @@ function ConfigEncryptionDialog({
|
|
|
31
32
|
}
|
|
32
33
|
return [];
|
|
33
34
|
});
|
|
35
|
+
const riscCryptoKey = state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms ? gcpCryptoKeys.find(
|
|
36
|
+
(key) => key.resourceId === sopsData.gcp_kms[0].resource_id
|
|
37
|
+
) ?? buildKeyFromSopsData(sopsData) : void 0;
|
|
38
|
+
const choosableCryptoKeys = riscCryptoKey ? [
|
|
39
|
+
riscCryptoKey,
|
|
40
|
+
...gcpCryptoKeys.filter(
|
|
41
|
+
(key) => key.resourceId !== riscCryptoKey.resourceId
|
|
42
|
+
)
|
|
43
|
+
] : gcpCryptoKeys;
|
|
34
44
|
const [chosenGcpCryptoKey, setChosenGcpCryptoKey] = useState(() => {
|
|
35
45
|
if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {
|
|
36
46
|
const gcpKms = sopsData.gcp_kms[0];
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
projectId: resourceParts[1],
|
|
42
|
-
keyRing: resourceParts[5],
|
|
43
|
-
keyName: resourceParts[7],
|
|
44
|
-
locations: resourceParts[3],
|
|
45
|
-
resourceId: gcpKms.resource_id,
|
|
46
|
-
createdAt: gcpKms.created_at,
|
|
47
|
-
hasEncryptDecryptAccess: true
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
47
|
+
return choosableCryptoKeys.find(
|
|
48
|
+
(key) => key.resourceId === gcpKms?.resource_id
|
|
49
|
+
);
|
|
51
50
|
}
|
|
52
51
|
return gcpCryptoKeys[0];
|
|
53
52
|
});
|
|
@@ -95,17 +94,14 @@ function ConfigEncryptionDialog({
|
|
|
95
94
|
/* @__PURE__ */ jsx(Text, { children: state === RiScDialogStates.Create ? t("sopsConfigDialog.description.new") : t("sopsConfigDialog.description.edit") }),
|
|
96
95
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "0px", children: [
|
|
97
96
|
/* @__PURE__ */ jsx(Text, { variant: "body-medium", weight: "bold", children: t("sopsConfigDialog.selectKeysTitle") }),
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
)
|
|
108
|
-
] }) : /* @__PURE__ */ jsx(Text, { variant: "body-medium", children: t("sopsConfigDialog.gcpCryptoKeyNoSelectableKey") })
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
GcpCryptoKeyRadioGroup,
|
|
99
|
+
{
|
|
100
|
+
chosenGcpCryptoKey,
|
|
101
|
+
onChange: handleChangeGcpCryptoKey,
|
|
102
|
+
gcpCryptoKeys: choosableCryptoKeys
|
|
103
|
+
}
|
|
104
|
+
)
|
|
109
105
|
] }),
|
|
110
106
|
errors.sopsConfig !== void 0 && /* @__PURE__ */ jsx(FormHelperText, { error: true, children: t("sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage") }),
|
|
111
107
|
/* @__PURE__ */ jsx(Box, { className: styles.accordionContainer, children: /* @__PURE__ */ jsxs(Accordion, { elevation: 0, defaultExpanded: publicAgeKeys.length > 0, children: [
|
|
@@ -219,6 +215,25 @@ function ConfigEncryptionDialog({
|
|
|
219
215
|
] }) })
|
|
220
216
|
] });
|
|
221
217
|
}
|
|
218
|
+
function buildKeyFromSopsData(sopsData) {
|
|
219
|
+
const gcpKms = sopsData?.gcp_kms?.[0];
|
|
220
|
+
if (!gcpKms || !gcpKms.resource_id) {
|
|
221
|
+
return void 0;
|
|
222
|
+
}
|
|
223
|
+
const resourceParts = gcpKms.resource_id.split("/");
|
|
224
|
+
if (resourceParts.length === 8) {
|
|
225
|
+
return {
|
|
226
|
+
projectId: resourceParts[1],
|
|
227
|
+
keyRing: resourceParts[5],
|
|
228
|
+
name: resourceParts[7],
|
|
229
|
+
locations: resourceParts[3],
|
|
230
|
+
resourceId: gcpKms.resource_id,
|
|
231
|
+
createdAt: gcpKms.created_at,
|
|
232
|
+
userPermissions: [CryptoKeyPermission.UNKNOWN]
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
return void 0;
|
|
236
|
+
}
|
|
222
237
|
|
|
223
238
|
export { ConfigEncryptionDialog as default };
|
|
224
239
|
//# sourceMappingURL=ConfigEncryptionDialog.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigEncryptionDialog.esm.js","sources":["../../../src/components/riScDialog/ConfigEncryptionDialog.tsx"],"sourcesContent":["import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n FormLabel,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n TextField,\n} from '@mui/material';\nimport { GcpCryptoKeyMenu } from '../sopsConfigDialog/GcpCryptoKeyMenu';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { AddCircle, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { GcpCryptoKeyObject, SopsConfigDTO } from '../../utils/DTOs';\nimport { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { RiScDialogStates } from './RiScDialog';\nimport { isPublicAgeKeyValid } from '../../utils/utilityfunctions';\nimport { FieldErrors } from 'react-hook-form/dist/types/errors';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { URLS } from '../../urls';\nimport { Text, Link, Button, Flex, Box } from '@backstage/ui';\nimport styles from '../riScDialog/RiScDialog.module.css';\n\ninterface ConfigEncryptionDialogProps {\n gcpCryptoKeys: GcpCryptoKeyObject[];\n sopsData?: SopsConfigDTO;\n setValue: UseFormSetValue<RiScWithMetadata>;\n register: UseFormRegister<RiScWithMetadata>;\n errors: FieldErrors<RiScWithMetadata>;\n state: RiScDialogStates;\n}\n\nfunction ConfigEncryptionDialog({\n gcpCryptoKeys,\n sopsData,\n setValue,\n register,\n errors,\n state,\n}: ConfigEncryptionDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [publicAgeKeyHelperText, setPublicKeyTextFieldHelperText] =\n useState('');\n const [publicAgeKeyError, setPublicKeyTextFieldError] = useState(false);\n const [newPublicAgeKey, setNewPublicAgeKey] = useState('');\n const [publicAgeKeys, setPublicAgeKeys] = useState<string[]>(() => {\n if (sopsData?.age) {\n return sopsData.age.map(age => age.recipient);\n }\n return [];\n });\n\n const [chosenGcpCryptoKey, setChosenGcpCryptoKey] =\n useState<GcpCryptoKeyObject>(() => {\n if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {\n const gcpKms = sopsData.gcp_kms[0];\n if (gcpKms?.resource_id) {\n const resourceParts = gcpKms.resource_id.split('/');\n if (resourceParts.length === 8) {\n return {\n projectId: resourceParts[1],\n keyRing: resourceParts[5],\n keyName: resourceParts[7],\n locations: resourceParts[3],\n resourceId: gcpKms.resource_id,\n createdAt: gcpKms.created_at,\n hasEncryptDecryptAccess: true,\n };\n }\n }\n }\n return gcpCryptoKeys[0];\n });\n\n const [isAddPublicAgeKeyVisible, setIsAddPublicAgeKeyVisible] =\n useState(false);\n\n function showAddPublicAgeKey() {\n setIsAddPublicAgeKeyVisible(true);\n }\n\n useEffect(() => {\n setValue('sopsConfig', {\n shamir_threshold: 2,\n gcp_kms: chosenGcpCryptoKey\n ? [\n {\n resource_id: chosenGcpCryptoKey.resourceId,\n created_at: chosenGcpCryptoKey.createdAt,\n },\n ]\n : [],\n age: publicAgeKeys.map(key => ({ recipient: key })),\n });\n }, [chosenGcpCryptoKey, publicAgeKeys, setValue]);\n\n // Require one key group to contain a GCP key\n register('sopsConfig.gcp_kms', {\n validate: gcpKeys => gcpKeys.length > 0,\n });\n\n function handleChangeGcpCryptoKey(newKey: GcpCryptoKeyObject) {\n setChosenGcpCryptoKey(newKey);\n }\n\n function handleAddPublicAgeKey() {\n if (isPublicAgeKeyValid(newPublicAgeKey)) {\n if (publicAgeKeys.includes(newPublicAgeKey)) {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyAlreadyExistInSopsConfig'),\n );\n setPublicKeyTextFieldError(true);\n } else {\n setPublicAgeKeys([...publicAgeKeys, newPublicAgeKey]);\n setNewPublicAgeKey('');\n }\n } else {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyNotValid'),\n );\n setPublicKeyTextFieldError(true);\n }\n }\n\n return (\n <Flex direction=\"column\">\n <Text>\n {state === RiScDialogStates.Create\n ? t('sopsConfigDialog.description.new')\n : t('sopsConfigDialog.description.edit')}\n </Text>\n <Flex direction=\"column\" gap=\"0px\">\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('sopsConfigDialog.selectKeysTitle')}\n </Text>\n {chosenGcpCryptoKey !== undefined ? (\n <>\n <Text>{t('sopsConfigDialog.gcpCryptoKeyDescription')}</Text>\n <GcpCryptoKeyMenu\n chosenGcpCryptoKey={chosenGcpCryptoKey}\n onChange={handleChangeGcpCryptoKey}\n gcpCryptoKeys={\n gcpCryptoKeys.includes(chosenGcpCryptoKey)\n ? gcpCryptoKeys\n : [...gcpCryptoKeys, chosenGcpCryptoKey]\n }\n />\n </>\n ) : (\n <Text variant=\"body-medium\">\n {t('sopsConfigDialog.gcpCryptoKeyNoSelectableKey')}\n </Text>\n )}\n </Flex>\n {errors.sopsConfig !== undefined && (\n <FormHelperText error={true}>\n {t('sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage')}\n </FormHelperText>\n )}\n <Box className={styles.accordionContainer}>\n <Accordion elevation={0} defaultExpanded={publicAgeKeys.length > 0}>\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n {t('sopsConfigDialog.publicAgeKeyQuestion')}\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n {publicAgeKeys.length > 0 && (\n <FormLabel>\n {t('sopsConfigDialog.publicAgeKeysAlreadyPresent')}\n </FormLabel>\n )}\n {publicAgeKeys.length > 0 && (\n <Box\n style={{\n border: '1px solid',\n borderRadius: '4px',\n marginBottom: 2,\n }}\n >\n <List>\n {publicAgeKeys.map(key => (\n <ListItem key={key} dense>\n <ListItemText>{key}</ListItemText>\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n setPublicAgeKeys(\n publicAgeKeys.filter(k => k !== key),\n );\n }}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {t('dictionary.click')}{' '}\n <Link\n href={\n URLS.external.kartverket_atlassian_net__write_ros_locally\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n {t('dictionary.here')}\n </Link>{' '}\n {t('sopsConfigDialog.writeLocalRiscSuffix')}\n </Text>\n <Text as=\"p\" variant=\"body-large\">\n {`${t('sopsConfigDialog.publicAgeKeyDescription')} (${t(\n 'dictionary.optional',\n )})`}{' '}\n </Text>\n <Flex direction=\"column\" justify=\"between\" gap=\"2\" mt=\"2\">\n {!isAddPublicAgeKeyVisible && (\n <Button\n iconStart={<AddCircle />}\n type=\"button\"\n variant=\"secondary\"\n onClick={showAddPublicAgeKey}\n style={{\n width: 'fit-content',\n marginTop: '1rem',\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n )}\n {isAddPublicAgeKeyVisible && (\n <Flex align=\"center\" gap=\"1\">\n <TextField\n label={t('sopsConfigDialog.publicAgeKey')}\n helperText={publicAgeKeyHelperText}\n error={publicAgeKeyError}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleAddPublicAgeKey();\n }\n }}\n onFocus={() => {\n setPublicKeyTextFieldError(false);\n setPublicKeyTextFieldHelperText('');\n }}\n value={newPublicAgeKey}\n onChange={e => setNewPublicAgeKey(e.target.value)}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n onClick={handleAddPublicAgeKey}\n style={{\n maxWidth: 200,\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n </Flex>\n )}\n </Flex>\n </Box>\n </AccordionDetails>\n </Accordion>\n </Box>\n </Flex>\n );\n}\n\nexport default ConfigEncryptionDialog;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfigEncryptionDialog.esm.js","sources":["../../../src/components/riScDialog/ConfigEncryptionDialog.tsx"],"sourcesContent":["import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n FormLabel,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n TextField,\n} from '@mui/material';\nimport { GcpCryptoKeyRadioGroup } from '../sopsConfigDialog/GcpCryptoKeyRadioGroup';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { AddCircle, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport {\n CryptoKeyPermission,\n GcpCryptoKeyObject,\n SopsConfigDTO,\n} from '../../utils/DTOs';\nimport { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { RiScDialogStates } from './RiScDialog';\nimport { isPublicAgeKeyValid } from '../../utils/utilityfunctions';\nimport { FieldErrors } from 'react-hook-form/dist/types/errors';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { URLS } from '../../urls';\nimport { Text, Link, Button, Flex, Box } from '@backstage/ui';\nimport styles from '../riScDialog/RiScDialog.module.css';\n\ninterface ConfigEncryptionDialogProps {\n gcpCryptoKeys: GcpCryptoKeyObject[];\n sopsData?: SopsConfigDTO;\n setValue: UseFormSetValue<RiScWithMetadata>;\n register: UseFormRegister<RiScWithMetadata>;\n errors: FieldErrors<RiScWithMetadata>;\n state: RiScDialogStates;\n}\n\nfunction ConfigEncryptionDialog({\n gcpCryptoKeys,\n sopsData,\n setValue,\n register,\n errors,\n state,\n}: ConfigEncryptionDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [publicAgeKeyHelperText, setPublicKeyTextFieldHelperText] =\n useState('');\n const [publicAgeKeyError, setPublicKeyTextFieldError] = useState(false);\n const [newPublicAgeKey, setNewPublicAgeKey] = useState('');\n const [publicAgeKeys, setPublicAgeKeys] = useState<string[]>(() => {\n if (sopsData?.age) {\n return sopsData.age.map(age => age.recipient);\n }\n return [];\n });\n\n // The RiSc may have been encrypted with a key that\n // no longer matches the naming convention of keys\n // returned from the backend. But we still want to show\n // that key as an option in the radio group, so we\n // build a key object from the sops data of the RiSc if needed.\n const riscCryptoKey =\n state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms\n ? (gcpCryptoKeys.find(\n key => key.resourceId === sopsData.gcp_kms![0].resource_id,\n ) ?? buildKeyFromSopsData(sopsData))\n : undefined;\n\n const choosableCryptoKeys = riscCryptoKey\n ? [\n riscCryptoKey,\n ...gcpCryptoKeys.filter(\n key => key.resourceId !== riscCryptoKey.resourceId,\n ),\n ]\n : gcpCryptoKeys;\n\n const [chosenGcpCryptoKey, setChosenGcpCryptoKey] = useState<\n GcpCryptoKeyObject | undefined\n >(() => {\n if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {\n const gcpKms = sopsData.gcp_kms[0];\n return choosableCryptoKeys.find(\n key => key.resourceId === gcpKms?.resource_id,\n );\n }\n return gcpCryptoKeys[0];\n });\n\n const [isAddPublicAgeKeyVisible, setIsAddPublicAgeKeyVisible] =\n useState(false);\n\n function showAddPublicAgeKey() {\n setIsAddPublicAgeKeyVisible(true);\n }\n\n useEffect(() => {\n setValue('sopsConfig', {\n shamir_threshold: 2,\n gcp_kms: chosenGcpCryptoKey\n ? [\n {\n resource_id: chosenGcpCryptoKey.resourceId,\n created_at: chosenGcpCryptoKey.createdAt,\n },\n ]\n : [],\n age: publicAgeKeys.map(key => ({ recipient: key })),\n });\n }, [chosenGcpCryptoKey, publicAgeKeys, setValue]);\n\n // Require one key group to contain a GCP key\n register('sopsConfig.gcp_kms', {\n validate: gcpKeys => gcpKeys.length > 0,\n });\n\n function handleChangeGcpCryptoKey(newKey: GcpCryptoKeyObject) {\n setChosenGcpCryptoKey(newKey);\n }\n\n function handleAddPublicAgeKey() {\n if (isPublicAgeKeyValid(newPublicAgeKey)) {\n if (publicAgeKeys.includes(newPublicAgeKey)) {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyAlreadyExistInSopsConfig'),\n );\n setPublicKeyTextFieldError(true);\n } else {\n setPublicAgeKeys([...publicAgeKeys, newPublicAgeKey]);\n setNewPublicAgeKey('');\n }\n } else {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyNotValid'),\n );\n setPublicKeyTextFieldError(true);\n }\n }\n\n return (\n <Flex direction=\"column\">\n <Text>\n {state === RiScDialogStates.Create\n ? t('sopsConfigDialog.description.new')\n : t('sopsConfigDialog.description.edit')}\n </Text>\n <Flex direction=\"column\" gap=\"0px\">\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('sopsConfigDialog.selectKeysTitle')}\n </Text>\n <GcpCryptoKeyRadioGroup\n chosenGcpCryptoKey={chosenGcpCryptoKey}\n onChange={handleChangeGcpCryptoKey}\n gcpCryptoKeys={choosableCryptoKeys}\n />\n </Flex>\n {errors.sopsConfig !== undefined && (\n <FormHelperText error={true}>\n {t('sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage')}\n </FormHelperText>\n )}\n <Box className={styles.accordionContainer}>\n <Accordion elevation={0} defaultExpanded={publicAgeKeys.length > 0}>\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n {t('sopsConfigDialog.publicAgeKeyQuestion')}\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n {publicAgeKeys.length > 0 && (\n <FormLabel>\n {t('sopsConfigDialog.publicAgeKeysAlreadyPresent')}\n </FormLabel>\n )}\n {publicAgeKeys.length > 0 && (\n <Box\n style={{\n border: '1px solid',\n borderRadius: '4px',\n marginBottom: 2,\n }}\n >\n <List>\n {publicAgeKeys.map(key => (\n <ListItem key={key} dense>\n <ListItemText>{key}</ListItemText>\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n setPublicAgeKeys(\n publicAgeKeys.filter(k => k !== key),\n );\n }}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {t('dictionary.click')}{' '}\n <Link\n href={\n URLS.external.kartverket_atlassian_net__write_ros_locally\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n {t('dictionary.here')}\n </Link>{' '}\n {t('sopsConfigDialog.writeLocalRiscSuffix')}\n </Text>\n <Text as=\"p\" variant=\"body-large\">\n {`${t('sopsConfigDialog.publicAgeKeyDescription')} (${t(\n 'dictionary.optional',\n )})`}{' '}\n </Text>\n <Flex direction=\"column\" justify=\"between\" gap=\"2\" mt=\"2\">\n {!isAddPublicAgeKeyVisible && (\n <Button\n iconStart={<AddCircle />}\n type=\"button\"\n variant=\"secondary\"\n onClick={showAddPublicAgeKey}\n style={{\n width: 'fit-content',\n marginTop: '1rem',\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n )}\n {isAddPublicAgeKeyVisible && (\n <Flex align=\"center\" gap=\"1\">\n <TextField\n label={t('sopsConfigDialog.publicAgeKey')}\n helperText={publicAgeKeyHelperText}\n error={publicAgeKeyError}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleAddPublicAgeKey();\n }\n }}\n onFocus={() => {\n setPublicKeyTextFieldError(false);\n setPublicKeyTextFieldHelperText('');\n }}\n value={newPublicAgeKey}\n onChange={e => setNewPublicAgeKey(e.target.value)}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n onClick={handleAddPublicAgeKey}\n style={{\n maxWidth: 200,\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n </Flex>\n )}\n </Flex>\n </Box>\n </AccordionDetails>\n </Accordion>\n </Box>\n </Flex>\n );\n}\n\nexport default ConfigEncryptionDialog;\n\nfunction buildKeyFromSopsData(sopsData: SopsConfigDTO | undefined) {\n const gcpKms = sopsData?.gcp_kms?.[0];\n if (!gcpKms || !gcpKms.resource_id) {\n return undefined;\n }\n const resourceParts = gcpKms.resource_id.split('/');\n if (resourceParts.length === 8) {\n return {\n projectId: resourceParts[1],\n keyRing: resourceParts[5],\n name: resourceParts[7],\n locations: resourceParts[3],\n resourceId: gcpKms.resource_id,\n createdAt: gcpKms.created_at,\n userPermissions: [CryptoKeyPermission.UNKNOWN],\n };\n }\n\n return undefined;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Card, CardBody, Flex, Text, Button } from '@backstage/ui';
|
|
3
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
4
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
|
+
|
|
6
|
+
function ErrorState() {
|
|
7
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
8
|
+
const refreshPage = () => {
|
|
9
|
+
window.location.reload();
|
|
10
|
+
};
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
Card,
|
|
13
|
+
{
|
|
14
|
+
style: {
|
|
15
|
+
width: "520px"
|
|
16
|
+
},
|
|
17
|
+
children: /* @__PURE__ */ jsx(CardBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", align: "center", children: [
|
|
18
|
+
/* @__PURE__ */ jsx(Text, { variant: "body-large", children: t("errorMessages.FailedToFetchRiScs") }),
|
|
19
|
+
/* @__PURE__ */ jsx(Button, { onClick: refreshPage, children: t("dictionary.refresh") })
|
|
20
|
+
] }) })
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { ErrorState };
|
|
26
|
+
//# sourceMappingURL=ErrorState.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorState.esm.js","sources":["../../../src/components/riScInfo/ErrorState.tsx"],"sourcesContent":["import { Card, CardBody, Flex, Text, Button } from '@backstage/ui';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport function ErrorState() {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const refreshPage = () => {\n window.location.reload();\n };\n return (\n <Card\n style={{\n width: '520px',\n }}\n >\n <CardBody>\n <Flex direction=\"column\" align=\"center\">\n <Text variant=\"body-large\">\n {t('errorMessages.FailedToFetchRiScs')}\n </Text>\n <Button onClick={refreshPage}>{t('dictionary.refresh')}</Button>\n </Flex>\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":";;;;;AAIO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,MAAA,CAAO,SAAS,MAAA,EAAO;AAAA,EACzB,CAAA;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,KAAA,EAAO;AAAA,OACT;AAAA,MAEA,8BAAC,QAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,QAAK,SAAA,EAAU,QAAA,EAAS,OAAM,QAAA,EAC7B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EACX,QAAA,EAAA,CAAA,CAAE,kCAAkC,CAAA,EACvC,CAAA;AAAA,4BACC,MAAA,EAAA,EAAO,OAAA,EAAS,WAAA,EAAc,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAE;AAAA,OAAA,EACzD,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -9,7 +9,7 @@ import Box from '@mui/material/Box';
|
|
|
9
9
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
10
10
|
import { RiScMigrationChanges } from './migrations/RiScMigrationChanges.esm.js';
|
|
11
11
|
import { Text, Flex } from '@backstage/ui';
|
|
12
|
-
import
|
|
12
|
+
import riscStyles from './RiScSelectionCard.module.css.esm.js';
|
|
13
13
|
import DialogComponent from '../dialog/DialogComponent.esm.js';
|
|
14
14
|
|
|
15
15
|
const RiScMigrationDialog = ({
|
|
@@ -29,7 +29,7 @@ const RiScMigrationDialog = ({
|
|
|
29
29
|
isOpen: openDialog,
|
|
30
30
|
onClick: handleCancel,
|
|
31
31
|
header: t("migrationDialog.title"),
|
|
32
|
-
className:
|
|
32
|
+
className: riscStyles.riScInfoDialog,
|
|
33
33
|
children: [
|
|
34
34
|
/* @__PURE__ */ jsx(Box, { sx: { marginBottom: "16px" }, children: /* @__PURE__ */ jsx(Text, { variant: "body-large", children: t("migrationDialog.description") }) }),
|
|
35
35
|
/* @__PURE__ */ jsx(RiScMigrationChanges, { migrationStatus }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationDialog.esm.js","sources":["../../../src/components/riScInfo/MigrationDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Box from '@mui/material/Box';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { MigrationStatus } from '../../utils/types';\nimport { RiScMigrationChanges } from './migrations/RiScMigrationChanges.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\n\ninterface RiScMigrationDialogProps {\n openDialog: boolean;\n handleCancel: () => void;\n handleUpdate: () => void;\n migrationStatus: MigrationStatus;\n}\n\nexport const RiScMigrationDialog = ({\n openDialog,\n handleCancel,\n handleUpdate,\n migrationStatus,\n}: RiScMigrationDialogProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [saveMigration, setSaveMigration] = useState<boolean>(false);\n\n function handleCheckboxInput(event: React.ChangeEvent<HTMLInputElement>) {\n setSaveMigration(event.target.checked);\n }\n\n return (\n <DialogComponent\n isOpen={openDialog}\n onClick={handleCancel}\n header={t('migrationDialog.title')}\n className={styles.riScInfoDialog}\n >\n <Box sx={{ marginBottom: '16px' }}>\n <Text variant=\"body-large\">{t('migrationDialog.description')}</Text>\n </Box>\n <RiScMigrationChanges migrationStatus={migrationStatus} />\n <Alert severity=\"info\" icon={false}>\n <FormControlLabel\n control={\n <Checkbox checked={saveMigration} onChange={handleCheckboxInput} />\n }\n label={t('migrationDialog.checkboxLabel')}\n />\n </Alert>\n <Flex justify=\"between\" pt=\"24px\">\n <Button variant=\"outlined\" color=\"primary\" onClick={handleCancel}>\n {t('dictionary.cancel')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleUpdate}\n disabled={!saveMigration}\n >\n {t('dictionary.confirm')}\n </Button>\n </Flex>\n </DialogComponent>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqBO,MAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAkB,KAAK,CAAA;AAEjE,EAAA,SAAS,oBAAoB,KAAA,EAA4C;AACvE,IAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,MAAA,EAAQ,EAAE,uBAAuB,CAAA;AAAA,MACjC,
|
|
1
|
+
{"version":3,"file":"MigrationDialog.esm.js","sources":["../../../src/components/riScInfo/MigrationDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Box from '@mui/material/Box';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { MigrationStatus } from '../../utils/types';\nimport { RiScMigrationChanges } from './migrations/RiScMigrationChanges.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\n\ninterface RiScMigrationDialogProps {\n openDialog: boolean;\n handleCancel: () => void;\n handleUpdate: () => void;\n migrationStatus: MigrationStatus;\n}\n\nexport const RiScMigrationDialog = ({\n openDialog,\n handleCancel,\n handleUpdate,\n migrationStatus,\n}: RiScMigrationDialogProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [saveMigration, setSaveMigration] = useState<boolean>(false);\n\n function handleCheckboxInput(event: React.ChangeEvent<HTMLInputElement>) {\n setSaveMigration(event.target.checked);\n }\n\n return (\n <DialogComponent\n isOpen={openDialog}\n onClick={handleCancel}\n header={t('migrationDialog.title')}\n className={styles.riScInfoDialog}\n >\n <Box sx={{ marginBottom: '16px' }}>\n <Text variant=\"body-large\">{t('migrationDialog.description')}</Text>\n </Box>\n <RiScMigrationChanges migrationStatus={migrationStatus} />\n <Alert severity=\"info\" icon={false}>\n <FormControlLabel\n control={\n <Checkbox checked={saveMigration} onChange={handleCheckboxInput} />\n }\n label={t('migrationDialog.checkboxLabel')}\n />\n </Alert>\n <Flex justify=\"between\" pt=\"24px\">\n <Button variant=\"outlined\" color=\"primary\" onClick={handleCancel}>\n {t('dictionary.cancel')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleUpdate}\n disabled={!saveMigration}\n >\n {t('dictionary.confirm')}\n </Button>\n </Flex>\n </DialogComponent>\n );\n};\n"],"names":["styles"],"mappings":";;;;;;;;;;;;;;AAqBO,MAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAkB,KAAK,CAAA;AAEjE,EAAA,SAAS,oBAAoB,KAAA,EAA4C;AACvE,IAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,MAAA,EAAQ,EAAE,uBAAuB,CAAA;AAAA,MACjC,WAAWA,UAAA,CAAO,cAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,YAAA,EAAc,MAAA,EAAO,EAC9B,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAc,QAAA,EAAA,CAAA,CAAE,6BAA6B,GAAE,CAAA,EAC/D,CAAA;AAAA,wBACA,GAAA,CAAC,wBAAqB,eAAA,EAAkC,CAAA;AAAA,wBACxD,GAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAS,MAAA,EAAO,MAAM,KAAA,EAC3B,QAAA,kBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,yBACE,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAS,aAAA,EAAe,UAAU,mBAAA,EAAqB,CAAA;AAAA,YAEnE,KAAA,EAAO,EAAE,+BAA+B;AAAA;AAAA,SAC1C,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,IAAG,MAAA,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,UAAA,EAAW,KAAA,EAAM,WAAU,OAAA,EAAS,YAAA,EACjD,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,WAAA;AAAA,cACR,OAAA,EAAS,YAAA;AAAA,cACT,UAAU,CAAC,aAAA;AAAA,cAEV,YAAE,oBAAoB;AAAA;AAAA;AACzB,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -7,7 +7,7 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
|
7
7
|
import FormControlLabel from '@mui/material/FormControlLabel';
|
|
8
8
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
9
9
|
import { RiScDifferenceDialog } from './riScStatus/RiScDifferenceDialog.esm.js';
|
|
10
|
-
import
|
|
10
|
+
import riscStyles from './RiScSelectionCard.module.css.esm.js';
|
|
11
11
|
import DialogComponent from '../dialog/DialogComponent.esm.js';
|
|
12
12
|
|
|
13
13
|
const RiScPublishDialog = ({
|
|
@@ -28,7 +28,7 @@ const RiScPublishDialog = ({
|
|
|
28
28
|
isOpen: openDialog,
|
|
29
29
|
onClick: handleCancel,
|
|
30
30
|
header: isDeletion ? t("publishDialog.titleDelete") : t("publishDialog.titleUpdate"),
|
|
31
|
-
className:
|
|
31
|
+
className: riscStyles.riScInfoDialog,
|
|
32
32
|
children: [
|
|
33
33
|
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
34
34
|
!isDeletion && /* @__PURE__ */ jsx(RiScDifferenceDialog, { differenceFetchState }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublishDialog.esm.js","sources":["../../../src/components/riScInfo/PublishDialog.tsx"],"sourcesContent":["import { ReactComponentElement, useState } from 'react';\nimport Alert from '@mui/material/Alert';\nimport { Button } from '@backstage/ui';\n\nimport Checkbox from '@mui/material/Checkbox';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { DifferenceFetchState } from '../../utils/types';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScDifferenceDialog } from './riScStatus/RiScDifferenceDialog';\nimport { Flex } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\nimport DialogComponent from '../dialog/DialogComponent';\n\ninterface RiScPublishDialogProps {\n openDialog: boolean;\n isDeletion: boolean;\n handleCancel: () => void;\n handlePublish: () => void;\n differenceFetchState: DifferenceFetchState;\n}\n\nexport const RiScPublishDialog = ({\n openDialog,\n isDeletion,\n handleCancel,\n handlePublish,\n differenceFetchState,\n}: RiScPublishDialogProps): ReactComponentElement<any> => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [riskOwnerApproves, setRiskOwnerApproves] = useState<boolean>(false);\n\n function handleCheckboxInput(event: React.ChangeEvent<HTMLInputElement>) {\n setRiskOwnerApproves(event.target.checked);\n }\n\n return (\n <DialogComponent\n isOpen={openDialog}\n onClick={handleCancel}\n header={\n isDeletion\n ? t('publishDialog.titleDelete')\n : t('publishDialog.titleUpdate')\n }\n className={styles.riScInfoDialog}\n >\n <>\n {!isDeletion && (\n <RiScDifferenceDialog differenceFetchState={differenceFetchState} />\n )}\n <Alert severity=\"info\" icon={false}>\n <FormControlLabel\n control={\n <Checkbox\n color=\"primary\"\n checked={riskOwnerApproves}\n onChange={handleCheckboxInput}\n />\n }\n label={\n isDeletion\n ? t('publishDialog.checkboxLabelDelete')\n : t('publishDialog.checkboxLabelUpdate')\n }\n />\n </Alert>\n </>\n <Flex justify=\"between\" pt=\"24px\">\n <Button size=\"medium\" variant=\"secondary\" onClick={handleCancel}>\n {t('dictionary.cancel')}\n </Button>\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={handlePublish}\n isDisabled={!riskOwnerApproves}\n >\n {t('dictionary.confirm')}\n </Button>\n </Flex>\n </DialogComponent>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAsBO,MAAM,oBAAoB,CAAC;AAAA,EAChC,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAA0D;AACxD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAkB,KAAK,CAAA;AAEzE,EAAA,SAAS,oBAAoB,KAAA,EAA4C;AACvE,IAAA,oBAAA,CAAqB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,QACE,UAAA,GACI,CAAA,CAAE,2BAA2B,CAAA,GAC7B,EAAE,2BAA2B,CAAA;AAAA,MAEnC,
|
|
1
|
+
{"version":3,"file":"PublishDialog.esm.js","sources":["../../../src/components/riScInfo/PublishDialog.tsx"],"sourcesContent":["import { ReactComponentElement, useState } from 'react';\nimport Alert from '@mui/material/Alert';\nimport { Button } from '@backstage/ui';\n\nimport Checkbox from '@mui/material/Checkbox';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { DifferenceFetchState } from '../../utils/types';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScDifferenceDialog } from './riScStatus/RiScDifferenceDialog';\nimport { Flex } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\nimport DialogComponent from '../dialog/DialogComponent';\n\ninterface RiScPublishDialogProps {\n openDialog: boolean;\n isDeletion: boolean;\n handleCancel: () => void;\n handlePublish: () => void;\n differenceFetchState: DifferenceFetchState;\n}\n\nexport const RiScPublishDialog = ({\n openDialog,\n isDeletion,\n handleCancel,\n handlePublish,\n differenceFetchState,\n}: RiScPublishDialogProps): ReactComponentElement<any> => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [riskOwnerApproves, setRiskOwnerApproves] = useState<boolean>(false);\n\n function handleCheckboxInput(event: React.ChangeEvent<HTMLInputElement>) {\n setRiskOwnerApproves(event.target.checked);\n }\n\n return (\n <DialogComponent\n isOpen={openDialog}\n onClick={handleCancel}\n header={\n isDeletion\n ? t('publishDialog.titleDelete')\n : t('publishDialog.titleUpdate')\n }\n className={styles.riScInfoDialog}\n >\n <>\n {!isDeletion && (\n <RiScDifferenceDialog differenceFetchState={differenceFetchState} />\n )}\n <Alert severity=\"info\" icon={false}>\n <FormControlLabel\n control={\n <Checkbox\n color=\"primary\"\n checked={riskOwnerApproves}\n onChange={handleCheckboxInput}\n />\n }\n label={\n isDeletion\n ? t('publishDialog.checkboxLabelDelete')\n : t('publishDialog.checkboxLabelUpdate')\n }\n />\n </Alert>\n </>\n <Flex justify=\"between\" pt=\"24px\">\n <Button size=\"medium\" variant=\"secondary\" onClick={handleCancel}>\n {t('dictionary.cancel')}\n </Button>\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={handlePublish}\n isDisabled={!riskOwnerApproves}\n >\n {t('dictionary.confirm')}\n </Button>\n </Flex>\n </DialogComponent>\n );\n};\n"],"names":["styles"],"mappings":";;;;;;;;;;;;AAsBO,MAAM,oBAAoB,CAAC;AAAA,EAChC,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAA0D;AACxD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAkB,KAAK,CAAA;AAEzE,EAAA,SAAS,oBAAoB,KAAA,EAA4C;AACvE,IAAA,oBAAA,CAAqB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,QACE,UAAA,GACI,CAAA,CAAE,2BAA2B,CAAA,GAC7B,EAAE,2BAA2B,CAAA;AAAA,MAEnC,WAAWA,UAAA,CAAO,cAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,CAAC,UAAA,oBACA,GAAA,CAAC,oBAAA,EAAA,EAAqB,oBAAA,EAA4C,CAAA;AAAA,0BAEpE,GAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAS,MAAA,EAAO,MAAM,KAAA,EAC3B,QAAA,kBAAA,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,OAAA,kBACE,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,SAAA;AAAA,kBACN,OAAA,EAAS,iBAAA;AAAA,kBACT,QAAA,EAAU;AAAA;AAAA,eACZ;AAAA,cAEF,OACE,UAAA,GACI,CAAA,CAAE,mCAAmC,CAAA,GACrC,EAAE,mCAAmC;AAAA;AAAA,WAE7C,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,IAAG,MAAA,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,MAAK,QAAA,EAAS,OAAA,EAAQ,aAAY,OAAA,EAAS,YAAA,EAChD,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,aAAA;AAAA,cACT,YAAY,CAAC,iBAAA;AAAA,cAEZ,YAAE,oBAAoB;AAAA;AAAA;AACzB,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -4,7 +4,7 @@ import { useRiScs } from '../../contexts/RiScContext.esm.js';
|
|
|
4
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
5
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
6
6
|
import { Flex, Select, Card, CardBody, Text, ButtonIcon } from '@backstage/ui';
|
|
7
|
-
import
|
|
7
|
+
import riscStyles from './RiScSelectionCard.module.css.esm.js';
|
|
8
8
|
|
|
9
9
|
function RiScSelectionCard(props) {
|
|
10
10
|
const { riScs, selectedRiSc, selectRiSc } = useRiScs();
|
|
@@ -14,7 +14,7 @@ function RiScSelectionCard(props) {
|
|
|
14
14
|
Select,
|
|
15
15
|
{
|
|
16
16
|
value: selectedRiSc?.id,
|
|
17
|
-
className:
|
|
17
|
+
className: riscStyles.selectTrigger,
|
|
18
18
|
"aria-label": t("contentHeader.multipleRiScs"),
|
|
19
19
|
options: riScs.map((riSc) => ({
|
|
20
20
|
value: riSc.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScSelectionCard.esm.js","sources":["../../../src/components/riScInfo/RiScSelectionCard.tsx"],"sourcesContent":["import { Markdown } from '../common/Markdown.tsx';\nimport { RiScWithMetadata } from '../../utils/types.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Card, CardBody, Text, Select, ButtonIcon, Flex } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\n\ninterface Props {\n riScWithMetadata: RiScWithMetadata;\n edit: () => void;\n onCreateNew: () => void;\n}\n\nexport function RiScSelectionCard(props: Props) {\n const { riScs, selectedRiSc, selectRiSc } = useRiScs();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex direction=\"column\" gap=\"24px\">\n <Flex direction=\"column\">\n {riScs !== null && riScs.length !== 0 && (\n <>\n <Select\n value={selectedRiSc?.id}\n className={styles.selectTrigger}\n aria-label={t('contentHeader.multipleRiScs')}\n options={riScs.map(riSc => ({\n value: riSc.id,\n label: riSc.content.title,\n }))}\n onSelectionChange={key => {\n if (key) selectRiSc(key.toString());\n }}\n size=\"medium\"\n />\n </>\n )}\n </Flex>\n <Card>\n <CardBody>\n <Flex\n justify=\"between\"\n align=\"center\"\n style={{\n marginBottom: '16px',\n marginTop: '8px',\n }}\n >\n <Text variant=\"title-small\" as=\"h6\" weight=\"bold\">\n {props.riScWithMetadata.content.title}\n </Text>\n <ButtonIcon\n onClick={props.edit}\n icon={\n <i className=\"ri-edit-line\" style={{ fontSize: 'large' }} />\n }\n variant=\"tertiary\"\n />\n </Flex>\n <Markdown description={props.riScWithMetadata.content.scope} />\n </CardBody>\n </Card>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAcO,SAAS,kBAAkB,KAAA,EAAc;AAC9C,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,UAAA,KAAe,QAAA,EAAS;AACrD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,MAAA,EAC3B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,QAAA,EACb,QAAA,EAAA,KAAA,KAAU,QAAQ,KAAA,CAAM,MAAA,KAAW,qBAClC,GAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,YAAA,EAAc,EAAA;AAAA,QACrB,
|
|
1
|
+
{"version":3,"file":"RiScSelectionCard.esm.js","sources":["../../../src/components/riScInfo/RiScSelectionCard.tsx"],"sourcesContent":["import { Markdown } from '../common/Markdown.tsx';\nimport { RiScWithMetadata } from '../../utils/types.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Card, CardBody, Text, Select, ButtonIcon, Flex } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\n\ninterface Props {\n riScWithMetadata: RiScWithMetadata;\n edit: () => void;\n onCreateNew: () => void;\n}\n\nexport function RiScSelectionCard(props: Props) {\n const { riScs, selectedRiSc, selectRiSc } = useRiScs();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex direction=\"column\" gap=\"24px\">\n <Flex direction=\"column\">\n {riScs !== null && riScs.length !== 0 && (\n <>\n <Select\n value={selectedRiSc?.id}\n className={styles.selectTrigger}\n aria-label={t('contentHeader.multipleRiScs')}\n options={riScs.map(riSc => ({\n value: riSc.id,\n label: riSc.content.title,\n }))}\n onSelectionChange={key => {\n if (key) selectRiSc(key.toString());\n }}\n size=\"medium\"\n />\n </>\n )}\n </Flex>\n <Card>\n <CardBody>\n <Flex\n justify=\"between\"\n align=\"center\"\n style={{\n marginBottom: '16px',\n marginTop: '8px',\n }}\n >\n <Text variant=\"title-small\" as=\"h6\" weight=\"bold\">\n {props.riScWithMetadata.content.title}\n </Text>\n <ButtonIcon\n onClick={props.edit}\n icon={\n <i className=\"ri-edit-line\" style={{ fontSize: 'large' }} />\n }\n variant=\"tertiary\"\n />\n </Flex>\n <Markdown description={props.riScWithMetadata.content.scope} />\n </CardBody>\n </Card>\n </Flex>\n );\n}\n"],"names":["styles"],"mappings":";;;;;;;;AAcO,SAAS,kBAAkB,KAAA,EAAc;AAC9C,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,UAAA,KAAe,QAAA,EAAS;AACrD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,MAAA,EAC3B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,QAAA,EACb,QAAA,EAAA,KAAA,KAAU,QAAQ,KAAA,CAAM,MAAA,KAAW,qBAClC,GAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,YAAA,EAAc,EAAA;AAAA,QACrB,WAAWA,UAAA,CAAO,aAAA;AAAA,QAClB,YAAA,EAAY,EAAE,6BAA6B,CAAA;AAAA,QAC3C,OAAA,EAAS,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,UAC1B,OAAO,IAAA,CAAK,EAAA;AAAA,UACZ,KAAA,EAAO,KAAK,OAAA,CAAQ;AAAA,SACtB,CAAE,CAAA;AAAA,QACF,mBAAmB,CAAA,GAAA,KAAO;AACxB,UAAA,IAAI,GAAA,EAAK,UAAA,CAAW,GAAA,CAAI,QAAA,EAAU,CAAA;AAAA,QACpC,CAAA;AAAA,QACA,IAAA,EAAK;AAAA;AAAA,OAET,CAAA,EAEJ,CAAA;AAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,MAAA;AAAA,YACd,SAAA,EAAW;AAAA,WACb;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,aAAA,EAAc,EAAA,EAAG,IAAA,EAAK,QAAO,MAAA,EACxC,QAAA,EAAA,KAAA,CAAM,gBAAA,CAAiB,OAAA,CAAQ,KAAA,EAClC,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,SAAS,KAAA,CAAM,IAAA;AAAA,gBACf,IAAA,sBACG,GAAA,EAAA,EAAE,SAAA,EAAU,gBAAe,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAG,CAAA;AAAA,gBAE5D,OAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,OACF;AAAA,0BACC,QAAA,EAAA,EAAS,WAAA,EAAa,KAAA,CAAM,gBAAA,CAAiB,QAAQ,KAAA,EAAO;AAAA,KAAA,EAC/D,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".RiScSelectionCard-module_selectTrigger__Sfe03 button {\n background-color: transparent;\n}\n\n.RiScSelectionCard-module_riScInfoDialog__ZuSak {\n padding: 24px;\n border-radius: 4px;\n width: 800px;\n}\n\n.RiScSelectionCard-module_riscSelectionDialogHeader__c24oM {\n padding: 0 0 16px 0;\n}\n\n.RiScSelectionCard-module_riscSelectionDialogBody__kjzta {\n gap: 16px;\n padding: 16px 0 0 0;\n}\n";
|
|
4
|
-
var
|
|
3
|
+
var css_248z = ".RiScSelectionCard-module_selectTrigger__Sfe03 button {\n background-color: transparent;\n}\n\n.RiScSelectionCard-module_riScInfoDialog__ZuSak {\n padding: 24px;\n border-radius: 4px;\n width: 800px;\n}\n\n.RiScSelectionCard-module_riscSelectionDialogHeader__c24oM {\n padding: 0 0 16px 0;\n}\n\n.RiScSelectionCard-module_riscSelectionDialogBody__kjzta {\n gap: 16px;\n padding: 16px 0 0 0;\n}\n\n.RiScSelectionCard-module_componentLayout__h7XdA {\n height: 60%;\n}\n";
|
|
4
|
+
var riscStyles = {"selectTrigger":"RiScSelectionCard-module_selectTrigger__Sfe03","riScInfoDialog":"RiScSelectionCard-module_riScInfoDialog__ZuSak","componentLayout":"RiScSelectionCard-module_componentLayout__h7XdA"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
|
-
export {
|
|
7
|
+
export { riscStyles as default };
|
|
8
8
|
//# sourceMappingURL=RiScSelectionCard.module.css.esm.js.map
|
|
@@ -31,7 +31,7 @@ function RiScMigrationChanges({
|
|
|
31
31
|
migrationStatus.migrationChanges42 && /* @__PURE__ */ jsx(RiScMigrationChanges42, { changes: migrationStatus.migrationChanges42 }),
|
|
32
32
|
migrationStatus.migrationChanges50 && /* @__PURE__ */ jsx(RiScMigrationChanges50, { changes: migrationStatus.migrationChanges50 }),
|
|
33
33
|
migrationStatus.migrationChanges51 && /* @__PURE__ */ jsx(RiScMigrationChanges51, { changes: migrationStatus.migrationChanges51 }),
|
|
34
|
-
migrationStatus.
|
|
34
|
+
migrationStatus.migrationVersions?.toVersion === "5.2" && /* @__PURE__ */ jsx(RiScMigrationChanges52, {})
|
|
35
35
|
] });
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScMigrationChanges.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges.tsx"],"sourcesContent":["import { ChangeSetTitle } from '../changeset/components/ChangeSetTitle.tsx';\nimport { ChangeSetBox } from '../changeset/components/ChangeSetBox.tsx';\nimport { RiScMigrationChanges40 } from './RiScMigrationChanges40.tsx';\nimport { RiScMigrationChanges41 } from './RiScMigrationChanges41.tsx';\nimport { MigrationStatus } from '../../../utils/types.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { ChangeSetChangedProperty } from '../changeset/components/ChangeSetChangedProperty.tsx';\nimport { RiScMigrationChanges42 } from './RiScMigrationChanges42.tsx';\nimport { RiScMigrationChanges50 } from './RiScMigrationChanges50.tsx';\nimport { RiScMigrationChanges51 } from './RiScMigrationChanges51.tsx';\nimport { RiScMigrationChanges52 } from './RiScMigrationChanges52.tsx';\n\ninterface RiScMigrationChangesProps {\n migrationStatus: MigrationStatus;\n}\n\nexport function RiScMigrationChanges({\n migrationStatus,\n}: RiScMigrationChangesProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <div>\n <ChangeSetTitle text={t('migrationDialog.schemaVersion')} />\n <ChangeSetBox type=\"primary\">\n <ChangeSetChangedProperty\n propertyName={t('migrationDialog.schemaVersion')}\n oldValue={migrationStatus.migrationVersions?.fromVersion || ''}\n newValue={migrationStatus.migrationVersions?.toVersion || ''}\n compact={true}\n />\n </ChangeSetBox>\n {migrationStatus.migrationChanges40 && (\n <RiScMigrationChanges40 changes={migrationStatus.migrationChanges40} />\n )}\n {migrationStatus.migrationChanges41 && (\n <RiScMigrationChanges41 changes={migrationStatus.migrationChanges41} />\n )}\n {migrationStatus.migrationChanges42 && (\n <RiScMigrationChanges42 changes={migrationStatus.migrationChanges42} />\n )}\n {migrationStatus.migrationChanges50 && (\n <RiScMigrationChanges50 changes={migrationStatus.migrationChanges50} />\n )}\n {migrationStatus.migrationChanges51 && (\n <RiScMigrationChanges51 changes={migrationStatus.migrationChanges51} />\n )}\n {migrationStatus.
|
|
1
|
+
{"version":3,"file":"RiScMigrationChanges.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges.tsx"],"sourcesContent":["import { ChangeSetTitle } from '../changeset/components/ChangeSetTitle.tsx';\nimport { ChangeSetBox } from '../changeset/components/ChangeSetBox.tsx';\nimport { RiScMigrationChanges40 } from './RiScMigrationChanges40.tsx';\nimport { RiScMigrationChanges41 } from './RiScMigrationChanges41.tsx';\nimport { MigrationStatus } from '../../../utils/types.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { ChangeSetChangedProperty } from '../changeset/components/ChangeSetChangedProperty.tsx';\nimport { RiScMigrationChanges42 } from './RiScMigrationChanges42.tsx';\nimport { RiScMigrationChanges50 } from './RiScMigrationChanges50.tsx';\nimport { RiScMigrationChanges51 } from './RiScMigrationChanges51.tsx';\nimport { RiScMigrationChanges52 } from './RiScMigrationChanges52.tsx';\n\ninterface RiScMigrationChangesProps {\n migrationStatus: MigrationStatus;\n}\n\nexport function RiScMigrationChanges({\n migrationStatus,\n}: RiScMigrationChangesProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <div>\n <ChangeSetTitle text={t('migrationDialog.schemaVersion')} />\n <ChangeSetBox type=\"primary\">\n <ChangeSetChangedProperty\n propertyName={t('migrationDialog.schemaVersion')}\n oldValue={migrationStatus.migrationVersions?.fromVersion || ''}\n newValue={migrationStatus.migrationVersions?.toVersion || ''}\n compact={true}\n />\n </ChangeSetBox>\n {migrationStatus.migrationChanges40 && (\n <RiScMigrationChanges40 changes={migrationStatus.migrationChanges40} />\n )}\n {migrationStatus.migrationChanges41 && (\n <RiScMigrationChanges41 changes={migrationStatus.migrationChanges41} />\n )}\n {migrationStatus.migrationChanges42 && (\n <RiScMigrationChanges42 changes={migrationStatus.migrationChanges42} />\n )}\n {migrationStatus.migrationChanges50 && (\n <RiScMigrationChanges50 changes={migrationStatus.migrationChanges50} />\n )}\n {migrationStatus.migrationChanges51 && (\n <RiScMigrationChanges51 changes={migrationStatus.migrationChanges51} />\n )}\n {migrationStatus.migrationVersions?.toVersion === '5.2' && (\n <RiScMigrationChanges52 />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAiBO,SAAS,oBAAA,CAAqB;AAAA,EACnC;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,CAAA,CAAE,+BAA+B,CAAA,EAAG,CAAA;AAAA,oBAC1D,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,SAAA,EACjB,QAAA,kBAAA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,EAAE,+BAA+B,CAAA;AAAA,QAC/C,QAAA,EAAU,eAAA,CAAgB,iBAAA,EAAmB,WAAA,IAAe,EAAA;AAAA,QAC5D,QAAA,EAAU,eAAA,CAAgB,iBAAA,EAAmB,SAAA,IAAa,EAAA;AAAA,QAC1D,OAAA,EAAS;AAAA;AAAA,KACX,EACF,CAAA;AAAA,IACC,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,eAAA,CAAgB,iBAAA,EAAmB,SAAA,KAAc,KAAA,wBAC/C,sBAAA,EAAA,EAAuB;AAAA,GAAA,EAE5B,CAAA;AAEJ;;;;"}
|
|
@@ -1,51 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ChangeSetBox } from '../changeset/components/ChangeSetBox.esm.js';
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
2
|
import { MigrationTitle } from './components/MigrationTitle.esm.js';
|
|
4
|
-
import { ChangeSetTag } from '../changeset/components/ChangeSetTag.esm.js';
|
|
5
|
-
import { ChangeSetBoxTitle } from '../changeset/components/ChangeSetBoxTitle.esm.js';
|
|
6
|
-
import { ChangeSetTags } from '../changeset/components/ChangeSetTags.esm.js';
|
|
7
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
8
4
|
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
9
|
-
import { ChangeSetChangedProperty } from '../changeset/components/ChangeSetChangedProperty.esm.js';
|
|
10
5
|
|
|
11
|
-
function RiScMigrationChanges52({
|
|
12
|
-
changes
|
|
13
|
-
}) {
|
|
6
|
+
function RiScMigrationChanges52() {
|
|
14
7
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
migrationExplanation: t(
|
|
25
|
-
"migrationDialog.migration52.changeExplanation"
|
|
26
|
-
),
|
|
27
|
-
changelogUrl: "https://github.com/kartverket/backstage-plugin-risk-scorecard-backend/blob/main/docs/schemaChangelog.md#52"
|
|
28
|
-
}
|
|
29
|
-
),
|
|
30
|
-
/* @__PURE__ */ jsxs(ChangeSetBox, { type: "primary", children: [
|
|
31
|
-
/* @__PURE__ */ jsx(ChangeSetTags, { children: /* @__PURE__ */ jsx(
|
|
32
|
-
ChangeSetTag,
|
|
33
|
-
{
|
|
34
|
-
type: "primary",
|
|
35
|
-
text: t("migrationDialog.schemaVersion")
|
|
36
|
-
}
|
|
37
|
-
) }),
|
|
38
|
-
/* @__PURE__ */ jsx(ChangeSetBoxTitle, { title: t("migrationDialog.migration52.title") }),
|
|
39
|
-
/* @__PURE__ */ jsx(
|
|
40
|
-
ChangeSetChangedProperty,
|
|
41
|
-
{
|
|
42
|
-
propertyName: t("dictionary.valuation"),
|
|
43
|
-
oldValue: `${t("migrationDialog.migration52.oldValue")}: ${count}`,
|
|
44
|
-
newValue: t("migrationDialog.removed")
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
] })
|
|
48
|
-
] });
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
MigrationTitle,
|
|
10
|
+
{
|
|
11
|
+
from: "5.1",
|
|
12
|
+
to: "5.2",
|
|
13
|
+
migrationExplanation: t("migrationDialog.migration52.changeExplanation"),
|
|
14
|
+
changelogUrl: "https://github.com/kartverket/backstage-plugin-risk-scorecard-backend/blob/main/docs/schemaChangelog.md#52"
|
|
15
|
+
}
|
|
16
|
+
);
|
|
49
17
|
}
|
|
50
18
|
|
|
51
19
|
export { RiScMigrationChanges52 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScMigrationChanges52.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges52.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"RiScMigrationChanges52.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges52.tsx"],"sourcesContent":["import { MigrationTitle } from './components/MigrationTitle.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\n\nexport function RiScMigrationChanges52() {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <MigrationTitle\n from=\"5.1\"\n to=\"5.2\"\n migrationExplanation={t('migrationDialog.migration52.changeExplanation')}\n changelogUrl=\"https://github.com/kartverket/backstage-plugin-risk-scorecard-backend/blob/main/docs/schemaChangelog.md#52\"\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAIO,SAAS,sBAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,KAAA;AAAA,MACL,EAAA,EAAG,KAAA;AAAA,MACH,oBAAA,EAAsB,EAAE,+CAA+C,CAAA;AAAA,MACvE,YAAA,EAAa;AAAA;AAAA,GACf;AAEJ;;;;"}
|
|
@@ -21,6 +21,8 @@ import { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.
|
|
|
21
21
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
22
22
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
23
23
|
import styles from '../common/alertBar.module.css.esm.js';
|
|
24
|
+
import riscStyles from '../riScInfo/RiScSelectionCard.module.css.esm.js';
|
|
25
|
+
import { ErrorState } from '../riScInfo/ErrorState.esm.js';
|
|
24
26
|
|
|
25
27
|
function RiScPlugin() {
|
|
26
28
|
const [riScDialogState, setRiScDialogState] = useState(
|
|
@@ -88,12 +90,19 @@ function RiScPlugin() {
|
|
|
88
90
|
{
|
|
89
91
|
justify: "center",
|
|
90
92
|
align: "center",
|
|
91
|
-
|
|
92
|
-
height: "60%"
|
|
93
|
-
},
|
|
93
|
+
className: riscStyles.componentLayout,
|
|
94
94
|
children: /* @__PURE__ */ jsx(FirstRiScDialog, { onNewRiSc: openCreateRiScDialog })
|
|
95
95
|
}
|
|
96
96
|
),
|
|
97
|
+
!isFetching && riScs === null && /* @__PURE__ */ jsx(
|
|
98
|
+
Flex,
|
|
99
|
+
{
|
|
100
|
+
align: "center",
|
|
101
|
+
justify: "center",
|
|
102
|
+
className: riscStyles.componentLayout,
|
|
103
|
+
children: /* @__PURE__ */ jsx(ErrorState, {})
|
|
104
|
+
}
|
|
105
|
+
),
|
|
97
106
|
isFetching && /* @__PURE__ */ jsx(Spinner, { size: 80 }),
|
|
98
107
|
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 4, children: selectedRiSc && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
99
108
|
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs(Grid, { container: true, rowSpacing: 1, columnSpacing: 4, children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n {response && !updateStatus.isLoading && (\n <Flex className={styles.alertBarBox}>\n <AlertBar\n severity={getAlertSeverity(updateStatus, response)}\n className={styles.alertBar}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </AlertBar>\n </Flex>\n )}\n {updateStatus.isLoading && (\n <LinearProgress\n sx={{\n position: 'sticky',\n top: 0,\n margin: 2,\n }}\n />\n )}\n\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n style={{\n height: '60%',\n }}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <Grid container rowSpacing={1} columnSpacing={4}>\n <Grid item xs={6}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n\n <Grid item xs={6} />\n\n <Grid item xs={6}>\n <RiScSelectionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n onCreateNew={openCreateRiScDialog}\n />\n </Grid>\n <Grid item xs={6}>\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} lg={8}>\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Grid>\n <Grid item xs={12} lg={4}>\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n {response && !updateStatus.isLoading && (\n <Flex className={styles.alertBarBox}>\n <AlertBar\n severity={getAlertSeverity(updateStatus, response)}\n className={styles.alertBar}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </AlertBar>\n </Flex>\n )}\n {updateStatus.isLoading && (\n <LinearProgress\n sx={{\n position: 'sticky',\n top: 0,\n margin: 2,\n }}\n />\n )}\n\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {!isFetching && riScs === null && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <Grid container rowSpacing={1} columnSpacing={4}>\n <Grid item xs={6}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n\n <Grid item xs={6} />\n\n <Grid item xs={6}>\n <RiScSelectionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n onCreateNew={openCreateRiScDialog}\n />\n </Grid>\n <Grid item xs={6}>\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} lg={8}>\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Grid>\n <Grid item xs={12} lg={4}>\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|