@kartverket/backstage-plugin-risk-scorecard 1.5.0 → 1.5.2
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/README.md +1 -1
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +4 -1
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js +3 -2
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js +9 -1
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
- package/dist/components/scenarioWizard/components/ProbabilityTable.esm.js +1 -1
- package/dist/components/scenarioWizard/components/ProbabilityTable.esm.js.map +1 -1
- package/dist/contexts/RiScContext.esm.js +10 -1
- package/dist/contexts/RiScContext.esm.js.map +1 -1
- package/dist/contexts/ScenarioContext.esm.js +20 -0
- package/dist/contexts/ScenarioContext.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +6 -2
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js +1 -0
- package/dist/utils/types.esm.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Risk Scorecard (RiSc)
|
|
2
2
|
|
|
3
|
-
This is a plugin for Backstage that helps you and your team when working continuously with
|
|
3
|
+
This is a plugin for Backstage that helps you and your team when working continuously with risk analysis (:))
|
|
4
4
|
The plugin is dependent on a backend service in order to decrypt and communicate with GitHub, and some configuration is
|
|
5
5
|
necessary for them to communicate.
|
|
6
6
|
|
|
@@ -31,7 +31,8 @@ const ScenarioDrawer = () => {
|
|
|
31
31
|
closeScenarioForm,
|
|
32
32
|
submitEditedScenarioToRiSc,
|
|
33
33
|
mapScenarioToFormScenario,
|
|
34
|
-
mapFormScenarioToScenario
|
|
34
|
+
mapFormScenarioToScenario,
|
|
35
|
+
collapseAllActions
|
|
35
36
|
} = useScenario();
|
|
36
37
|
const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] = useState(false);
|
|
37
38
|
const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);
|
|
@@ -50,6 +51,7 @@ const ScenarioDrawer = () => {
|
|
|
50
51
|
closeScenarioForm();
|
|
51
52
|
setIsEditing(false);
|
|
52
53
|
setShowCloseConfirmation(false);
|
|
54
|
+
collapseAllActions();
|
|
53
55
|
};
|
|
54
56
|
const onClose = () => {
|
|
55
57
|
if (formMethods.formState.isDirty) {
|
|
@@ -57,6 +59,7 @@ const ScenarioDrawer = () => {
|
|
|
57
59
|
} else {
|
|
58
60
|
closeScenarioForm();
|
|
59
61
|
setIsEditing(false);
|
|
62
|
+
collapseAllActions();
|
|
60
63
|
}
|
|
61
64
|
};
|
|
62
65
|
const onSubmit = formMethods.handleSubmit((data) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { RiskSection } from './components/RiskSection';\nimport { ActionsSection } from './components/ActionsSection';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { DeleteConfirmation } from './components/DeleteConfirmation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { ScopeSection } from './components/ScopeSection';\nimport { useForm } from 'react-hook-form';\nimport { FormScenario, ProcessingStatus } from '../../utils/types';\nimport RiskFormSection from './components/RiskFormSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport Drawer from '@mui/material/Drawer';\nimport Button from '@mui/material/Button';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Alert from '@mui/material/Alert';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport Typography from '@mui/material/Typography';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\n\nexport const ScenarioDrawer = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n } = useScenario();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { riScUpdateStatus, response } = useRiScs();\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onBlur',\n });\n\n const onCancel = () => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n };\n\n const handleClose = () => {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n };\n\n const onClose = () => {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n closeScenarioForm();\n setIsEditing(false);\n }\n };\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), () =>\n setIsEditing(false),\n );\n });\n\n const onSubmitAndCloseDialog = () => {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n }, [scenario, formMethods, mapScenarioToFormScenario]);\n\n return (\n <Drawer\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection\n formMethods={formMethods}\n isEditing={isEditing}\n onSubmit={onSubmit}\n />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onSubmit}\n disabled={\n !formMethods.formState.isDirty || riScUpdateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {riScUpdateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n <div ref={deleteScenarioRef}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"primary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n sx={{ marginLeft: 'auto' }}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n </Box>\n\n {response &&\n response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && (\n <Alert severity={getAlertSeverity(riScUpdateStatus)}>\n <Typography>{response.statusMessage}</Typography>\n </Alert>\n )}\n\n <DeleteConfirmation\n deleteConfirmationIsOpen={deleteConfirmationIsOpen}\n setDeleteConfirmationIsOpen={setDeleteConfirmationIsOpen}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n};\n"],"names":["RiskFormSection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { RiskSection } from './components/RiskSection';\nimport { ActionsSection } from './components/ActionsSection';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { DeleteConfirmation } from './components/DeleteConfirmation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { ScopeSection } from './components/ScopeSection';\nimport { useForm } from 'react-hook-form';\nimport { FormScenario, ProcessingStatus } from '../../utils/types';\nimport RiskFormSection from './components/RiskFormSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport Drawer from '@mui/material/Drawer';\nimport Button from '@mui/material/Button';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Alert from '@mui/material/Alert';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport Typography from '@mui/material/Typography';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\n\nexport const ScenarioDrawer = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { riScUpdateStatus, response } = useRiScs();\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onBlur',\n });\n\n const onCancel = () => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n };\n\n const handleClose = () => {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n };\n\n const onClose = () => {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n };\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), () =>\n setIsEditing(false),\n );\n });\n\n const onSubmitAndCloseDialog = () => {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n };\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n }, [scenario, formMethods, mapScenarioToFormScenario]);\n\n return (\n <Drawer\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection\n formMethods={formMethods}\n isEditing={isEditing}\n onSubmit={onSubmit}\n />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onSubmit}\n disabled={\n !formMethods.formState.isDirty || riScUpdateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {riScUpdateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n <div ref={deleteScenarioRef}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"primary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n sx={{ marginLeft: 'auto' }}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n </Box>\n\n {response &&\n response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && (\n <Alert severity={getAlertSeverity(riScUpdateStatus)}>\n <Typography>{response.statusMessage}</Typography>\n </Alert>\n )}\n\n <DeleteConfirmation\n deleteConfirmationIsOpen={deleteConfirmationIsOpen}\n setDeleteConfirmationIsOpen={setDeleteConfirmationIsOpen}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n};\n"],"names":["RiskFormSection"],"mappings":"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"}
|
|
@@ -25,7 +25,8 @@ const ActionBox = ({
|
|
|
25
25
|
onSubmit
|
|
26
26
|
}) => {
|
|
27
27
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
28
|
-
const
|
|
28
|
+
const { isActionExpanded, toggleActionExpanded } = useScenario();
|
|
29
|
+
const isExpanded = isActionExpanded(action.ID);
|
|
29
30
|
const [isEditing, setIsEditing] = useState(false);
|
|
30
31
|
const { riScUpdateStatus } = useRiScs();
|
|
31
32
|
const { submitEditedScenarioToRiSc, mapFormScenarioToScenario } = useScenario();
|
|
@@ -81,7 +82,7 @@ const ActionBox = ({
|
|
|
81
82
|
alignItems: "center"
|
|
82
83
|
}
|
|
83
84
|
},
|
|
84
|
-
/* @__PURE__ */ React.createElement(IconButton, { onClick: () =>
|
|
85
|
+
/* @__PURE__ */ React.createElement(IconButton, { onClick: () => toggleActionExpanded(action.ID) }, isExpanded ? /* @__PURE__ */ React.createElement(ExpandLess, null) : /* @__PURE__ */ React.createElement(ExpandMore, null)),
|
|
85
86
|
/* @__PURE__ */ React.createElement(
|
|
86
87
|
Typography,
|
|
87
88
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionBox.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionBox.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Action, FormScenario } from '../../../utils/types';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport Chip from '@mui/material/Chip';\nimport Box from '@mui/material/Box';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport { body2, emptyState, label } from '../../common/typography';\nimport Collapse from '@mui/material/Collapse';\nimport { ExpandLess, ExpandMore, Edit } from '@mui/icons-material';\nimport IconButton from '@mui/material/IconButton';\nimport { UseFormReturn } from 'react-hook-form';\nimport { ActionFormItem } from './ActionFormItem';\nimport Button from '@mui/material/Button';\nimport ButtonGroup from '@mui/material/ButtonGroup';\nimport { useScenario } from '../../../contexts/ScenarioContext';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { DeleteActionConfirmation } from './DeleteActionConfirmation';\n\ninterface ActionBoxProps {\n action: Action;\n index: number;\n formMethods: UseFormReturn<FormScenario>;\n remove: () => void;\n onSubmit: () => void;\n}\n\nexport const ActionBox = ({\n action,\n index,\n formMethods,\n remove,\n onSubmit,\n}: ActionBoxProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const [isEditing, setIsEditing] = useState<boolean>(false);\n\n const { riScUpdateStatus } = useRiScs();\n\n const { submitEditedScenarioToRiSc, mapFormScenarioToScenario } =\n useScenario();\n\n const isActionTitlePresent = action.title !== null && action.title !== '';\n\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n const translatedActionStatus = t(`actionStatus.${action.status}`);\n\n const [deleteActionConfirmationIsOpen, setDeleteActionConfirmationIsOpen] =\n useState(false);\n\n if (isEditing) {\n return (\n <>\n <ActionFormItem\n formMethods={formMethods}\n index={index}\n handleDelete={() => setDeleteActionConfirmationIsOpen(true)}\n showTitleNumber={false}\n remove={remove}\n />\n <ButtonGroup fullWidth>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data));\n })}\n disabled={\n !formMethods.formState.isDirty || riScUpdateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {riScUpdateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n\n <Button onClick={() => setIsEditing(false)}>Avbryt</Button>\n </ButtonGroup>\n <DeleteActionConfirmation\n deleteActionConfirmationIsOpen={deleteActionConfirmationIsOpen}\n setDeleteActionConfirmationIsOpen={setDeleteActionConfirmationIsOpen}\n formMethods={formMethods}\n index={index}\n remove={remove}\n onSubmit={onSubmit}\n />\n </>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <IconButton onClick={() => setIsExpanded(!isExpanded)}>\n {isExpanded ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <Typography\n sx={{\n fontSize: '16px',\n fontWeight: 500,\n }}\n >\n {isActionTitlePresent\n ? action.title\n : `${t('dictionary.measure')} ${index + 1}`}\n </Typography>\n <IconButton\n sx={{\n marginLeft: 'auto',\n opacity: isExpanded ? 1 : 0,\n transition: 'opacity 300ms ease-in',\n }}\n onClick={() => setIsEditing(!isEditing)}\n >\n <Edit />\n </IconButton>\n <Chip\n label={translatedActionStatus}\n sx={{\n margin: 0,\n backgroundColor:\n action.status === 'Completed'\n ? { backgroundColor: '#6BC6A4' }\n : undefined,\n }}\n />\n </Box>\n <Collapse in={isExpanded}>\n <Typography sx={{ ...label, marginTop: 1 }}>\n {t('dictionary.description')}\n </Typography>\n <Typography\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n >\n {action.description}\n </Typography>\n\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'end',\n marginTop: '16px',\n }}\n >\n <Box>\n <Typography sx={label}>{t('dictionary.url')}</Typography>\n {action.url ? (\n <Link\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={\n action.url.startsWith('http') ? action.url : `//${action.url}`\n }\n >\n {action.url}\n </Link>\n ) : (\n <Typography sx={emptyState}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Typography>\n )}\n </Box>\n </Box>\n </Collapse>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionBox.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionBox.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Action, FormScenario } from '../../../utils/types';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport Chip from '@mui/material/Chip';\nimport Box from '@mui/material/Box';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport { body2, emptyState, label } from '../../common/typography';\nimport Collapse from '@mui/material/Collapse';\nimport { ExpandLess, ExpandMore, Edit } from '@mui/icons-material';\nimport IconButton from '@mui/material/IconButton';\nimport { UseFormReturn } from 'react-hook-form';\nimport { ActionFormItem } from './ActionFormItem';\nimport Button from '@mui/material/Button';\nimport ButtonGroup from '@mui/material/ButtonGroup';\nimport { useScenario } from '../../../contexts/ScenarioContext';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { DeleteActionConfirmation } from './DeleteActionConfirmation';\n\ninterface ActionBoxProps {\n action: Action;\n index: number;\n formMethods: UseFormReturn<FormScenario>;\n remove: () => void;\n onSubmit: () => void;\n}\n\nexport const ActionBox = ({\n action,\n index,\n formMethods,\n remove,\n onSubmit,\n}: ActionBoxProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { isActionExpanded, toggleActionExpanded } = useScenario();\n\n const isExpanded = isActionExpanded(action.ID);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n\n const { riScUpdateStatus } = useRiScs();\n\n const { submitEditedScenarioToRiSc, mapFormScenarioToScenario } =\n useScenario();\n\n const isActionTitlePresent = action.title !== null && action.title !== '';\n\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n const translatedActionStatus = t(`actionStatus.${action.status}`);\n\n const [deleteActionConfirmationIsOpen, setDeleteActionConfirmationIsOpen] =\n useState(false);\n\n if (isEditing) {\n return (\n <>\n <ActionFormItem\n formMethods={formMethods}\n index={index}\n handleDelete={() => setDeleteActionConfirmationIsOpen(true)}\n showTitleNumber={false}\n remove={remove}\n />\n <ButtonGroup fullWidth>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data));\n })}\n disabled={\n !formMethods.formState.isDirty || riScUpdateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {riScUpdateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n\n <Button onClick={() => setIsEditing(false)}>Avbryt</Button>\n </ButtonGroup>\n <DeleteActionConfirmation\n deleteActionConfirmationIsOpen={deleteActionConfirmationIsOpen}\n setDeleteActionConfirmationIsOpen={setDeleteActionConfirmationIsOpen}\n formMethods={formMethods}\n index={index}\n remove={remove}\n onSubmit={onSubmit}\n />\n </>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <IconButton onClick={() => toggleActionExpanded(action.ID)}>\n {isExpanded ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <Typography\n sx={{\n fontSize: '16px',\n fontWeight: 500,\n }}\n >\n {isActionTitlePresent\n ? action.title\n : `${t('dictionary.measure')} ${index + 1}`}\n </Typography>\n <IconButton\n sx={{\n marginLeft: 'auto',\n opacity: isExpanded ? 1 : 0,\n transition: 'opacity 300ms ease-in',\n }}\n onClick={() => setIsEditing(!isEditing)}\n >\n <Edit />\n </IconButton>\n <Chip\n label={translatedActionStatus}\n sx={{\n margin: 0,\n backgroundColor:\n action.status === 'Completed'\n ? { backgroundColor: '#6BC6A4' }\n : undefined,\n }}\n />\n </Box>\n <Collapse in={isExpanded}>\n <Typography sx={{ ...label, marginTop: 1 }}>\n {t('dictionary.description')}\n </Typography>\n <Typography\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n >\n {action.description}\n </Typography>\n\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'end',\n marginTop: '16px',\n }}\n >\n <Box>\n <Typography sx={label}>{t('dictionary.url')}</Typography>\n {action.url ? (\n <Link\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={\n action.url.startsWith('http') ? action.url : `//${action.url}`\n }\n >\n {action.url}\n </Link>\n ) : (\n <Typography sx={emptyState}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Typography>\n )}\n </Box>\n </Box>\n </Collapse>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -87,7 +87,15 @@ const ScenarioTableRow = ({
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
), t("scenarioTable.columns.probabilityChar"), ":", getProbabilityLevel(scenario.risk), " ", t("scenarioTable.columns.consequenceChar"), ":", getConsequenceLevel(scenario.risk))),
|
|
90
|
-
/* @__PURE__ */ React.createElement(TableCell, { className: tableCell }, /* @__PURE__ */ React.createElement("div", { className: tableCellContainer },
|
|
90
|
+
/* @__PURE__ */ React.createElement(TableCell, { className: tableCell }, /* @__PURE__ */ React.createElement("div", { className: tableCellContainer }, (() => {
|
|
91
|
+
if (remainingActions.length > 0) {
|
|
92
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, remainingActions.length, " ", t("dictionary.planned").toLowerCase());
|
|
93
|
+
}
|
|
94
|
+
if (scenario.actions.length > 0) {
|
|
95
|
+
return t("dictionary.completed");
|
|
96
|
+
}
|
|
97
|
+
return t("scenarioTable.noActions");
|
|
98
|
+
})())),
|
|
91
99
|
/* @__PURE__ */ React.createElement(TableCell, { className: tableCell }, /* @__PURE__ */ React.createElement("div", { className: tableCellContainer }, /* @__PURE__ */ React.createElement(
|
|
92
100
|
Paper,
|
|
93
101
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioTableRow.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTableRow.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport { IconButton, Paper, Typography } from '@material-ui/core';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport { Scenario } from '../../utils/types';\nimport { useTableStyles } from './ScenarioTableStyles';\nimport {\n getConsequenceLevel,\n getProbabilityLevel,\n getRiskMatrixColor,\n} from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\n\ninterface ScenarioTableRowProps {\n scenario: Scenario;\n viewRow: (id: string) => void;\n index: number;\n moveRow: (dragIndex: number, hoverIndex: number) => void;\n isLastRow?: boolean;\n}\n\nexport const ScenarioTableRow = ({\n scenario,\n viewRow,\n index,\n moveRow,\n isLastRow,\n}: ScenarioTableRowProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const {\n riskColor,\n rowBackground,\n rowBorder,\n tableCell,\n tableCellTitle,\n tableCellContainer,\n } = useTableStyles();\n\n const ref = useRef<HTMLTableRowElement>(null);\n\n const [, drop] = useDrop({\n accept: 'row',\n hover(item: { index: number }, monitor) {\n if (!ref.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n if (dragIndex === hoverIndex) {\n return;\n }\n\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\n\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n\n moveRow(dragIndex, hoverIndex);\n item.index = hoverIndex;\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'row',\n item: { index },\n collect: monitor => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n preview(drop(ref));\n\n const remainingActions = scenario.actions.filter(\n a => a.status !== 'Completed',\n );\n\n return (\n <TableRow\n ref={ref}\n className={`${isLastRow ? undefined : rowBorder} ${rowBackground}`}\n onClick={() => viewRow(scenario.ID)}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n <TableCell>\n <IconButton size=\"small\" ref={drag}>\n <DragIndicatorIcon\n aria-label=\"Drag\"\n sx={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n />\n </IconButton>\n </TableCell>\n <TableCell className={tableCellTitle}>\n <Typography color=\"primary\" style={{ fontWeight: 600 }}>\n {scenario.title}\n </Typography>\n </TableCell>\n <TableCell className={tableCell}>\n <div className={tableCellContainer}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.risk),\n }}\n />\n {t('scenarioTable.columns.probabilityChar')}:\n {getProbabilityLevel(scenario.risk)}{' '}\n {t('scenarioTable.columns.consequenceChar')}:\n {getConsequenceLevel(scenario.risk)}\n </div>\n </TableCell>\n <TableCell className={tableCell}>\n <div className={tableCellContainer}>\n {remainingActions.length > 0
|
|
1
|
+
{"version":3,"file":"ScenarioTableRow.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTableRow.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport { IconButton, Paper, Typography } from '@material-ui/core';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport { Scenario } from '../../utils/types';\nimport { useTableStyles } from './ScenarioTableStyles';\nimport {\n getConsequenceLevel,\n getProbabilityLevel,\n getRiskMatrixColor,\n} from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\n\ninterface ScenarioTableRowProps {\n scenario: Scenario;\n viewRow: (id: string) => void;\n index: number;\n moveRow: (dragIndex: number, hoverIndex: number) => void;\n isLastRow?: boolean;\n}\n\nexport const ScenarioTableRow = ({\n scenario,\n viewRow,\n index,\n moveRow,\n isLastRow,\n}: ScenarioTableRowProps) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const {\n riskColor,\n rowBackground,\n rowBorder,\n tableCell,\n tableCellTitle,\n tableCellContainer,\n } = useTableStyles();\n\n const ref = useRef<HTMLTableRowElement>(null);\n\n const [, drop] = useDrop({\n accept: 'row',\n hover(item: { index: number }, monitor) {\n if (!ref.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n if (dragIndex === hoverIndex) {\n return;\n }\n\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\n\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n\n moveRow(dragIndex, hoverIndex);\n item.index = hoverIndex;\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'row',\n item: { index },\n collect: monitor => ({\n isDragging: monitor.isDragging(),\n }),\n });\n\n preview(drop(ref));\n\n const remainingActions = scenario.actions.filter(\n a => a.status !== 'Completed',\n );\n\n return (\n <TableRow\n ref={ref}\n className={`${isLastRow ? undefined : rowBorder} ${rowBackground}`}\n onClick={() => viewRow(scenario.ID)}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n <TableCell>\n <IconButton size=\"small\" ref={drag}>\n <DragIndicatorIcon\n aria-label=\"Drag\"\n sx={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n />\n </IconButton>\n </TableCell>\n <TableCell className={tableCellTitle}>\n <Typography color=\"primary\" style={{ fontWeight: 600 }}>\n {scenario.title}\n </Typography>\n </TableCell>\n <TableCell className={tableCell}>\n <div className={tableCellContainer}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.risk),\n }}\n />\n {t('scenarioTable.columns.probabilityChar')}:\n {getProbabilityLevel(scenario.risk)}{' '}\n {t('scenarioTable.columns.consequenceChar')}:\n {getConsequenceLevel(scenario.risk)}\n </div>\n </TableCell>\n <TableCell className={tableCell}>\n <div className={tableCellContainer}>\n {(() => {\n if (remainingActions.length > 0) {\n return (\n <>\n {remainingActions.length}{' '}\n {t('dictionary.planned').toLowerCase()}\n </>\n );\n }\n\n if (scenario.actions.length > 0) {\n return t('dictionary.completed');\n }\n\n return t('scenarioTable.noActions');\n })()}\n </div>\n </TableCell>\n <TableCell className={tableCell}>\n <div className={tableCellContainer}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.remainingRisk),\n }}\n />\n {t('scenarioTable.columns.probabilityChar')}:\n {getProbabilityLevel(scenario.remainingRisk)}{' '}\n {t('scenarioTable.columns.consequenceChar')}:\n {getConsequenceLevel(scenario.remainingRisk)}\n </div>\n </TableCell>\n </TableRow>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import Typography from '@mui/material/Typography';
|
|
|
12
12
|
const ProbabilityTableInfo = () => {
|
|
13
13
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
14
14
|
const getContentCell = (row) => /* @__PURE__ */ React.createElement(Box, { sx: riskCell }, t(`probabilityTable.cells.${row + 1}`));
|
|
15
|
-
return /* @__PURE__ */ React.createElement(Box, { sx: riskRow }, getContentCell(
|
|
15
|
+
return /* @__PURE__ */ React.createElement(Box, { sx: riskRow }, getContentCell(0), getContentCell(1), getContentCell(2), getContentCell(3), getContentCell(4));
|
|
16
16
|
};
|
|
17
17
|
const ProbabilityTable = ({
|
|
18
18
|
formMethods,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProbabilityTable.esm.js","sources":["../../../../src/components/scenarioWizard/components/ProbabilityTable.tsx"],"sourcesContent":["import React from 'react';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { riskTable, riskCell, riskRow, riskLabelCell } from '../wizardStyles';\nimport { useController, UseFormReturn } from 'react-hook-form';\nimport { FormScenario } from '../../../utils/types';\nimport { RiskRadioButton } from './RiskRadioButton';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport Box from '@mui/material/Box';\nimport { probabilityOptions } from '../../../utils/constants';\nimport Typography from '@mui/material/Typography';\n\nexport const ProbabilityTableInfo = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const getContentCell = (row: number) => (\n <Box sx={riskCell}>\n {/* @ts-ignore */}\n {t(`probabilityTable.cells.${row + 1}`)}\n </Box>\n );\n\n return (\n <Box sx={riskRow}>\n {getContentCell(
|
|
1
|
+
{"version":3,"file":"ProbabilityTable.esm.js","sources":["../../../../src/components/scenarioWizard/components/ProbabilityTable.tsx"],"sourcesContent":["import React from 'react';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { riskTable, riskCell, riskRow, riskLabelCell } from '../wizardStyles';\nimport { useController, UseFormReturn } from 'react-hook-form';\nimport { FormScenario } from '../../../utils/types';\nimport { RiskRadioButton } from './RiskRadioButton';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport Box from '@mui/material/Box';\nimport { probabilityOptions } from '../../../utils/constants';\nimport Typography from '@mui/material/Typography';\n\nexport const ProbabilityTableInfo = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const getContentCell = (row: number) => (\n <Box sx={riskCell}>\n {/* @ts-ignore */}\n {t(`probabilityTable.cells.${row + 1}`)}\n </Box>\n );\n\n return (\n <Box sx={riskRow}>\n {getContentCell(0)}\n {getContentCell(1)}\n {getContentCell(2)}\n {getContentCell(3)}\n {getContentCell(4)}\n </Box>\n );\n};\n\nexport const ProbabilityTable = ({\n formMethods,\n riskType,\n}: {\n formMethods: UseFormReturn<FormScenario>;\n riskType: keyof Pick<FormScenario, 'risk' | 'remainingRisk'>;\n}) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { field } = useController({\n name: `${riskType}.probability`,\n control: formMethods.control,\n });\n\n const getRadioLabel = (row: number) => {\n /* @ts-ignore Because ts can't typecheck strings agains our keys */\n return `${row}: ${t(`probabilityTable.rows.${row}`)}`;\n };\n\n const getRadioCell = (row: number) => (\n <RiskRadioButton\n value={probabilityOptions[row]}\n ref={field.ref}\n label={getRadioLabel(row + 1)}\n />\n );\n\n return (\n <Box sx={riskTable}>\n <RadioGroup {...field} sx={riskRow}>\n {getRadioCell(0)}\n {getRadioCell(1)}\n {getRadioCell(2)}\n {getRadioCell(3)}\n {getRadioCell(4)}\n </RadioGroup>\n <ProbabilityTableInfo />\n </Box>\n );\n};\n\nexport const ProbabilityTableInfoWithHeaders = () => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const getRadioLabel = (row: number) => {\n return (\n /* @ts-ignore Because ts can't typecheck strings agains our keys */\n <Typography fontWeight={500}>{`${row}: ${t(\n `probabilityTable.rows.${row}`,\n )}`}</Typography>\n );\n };\n return (\n <Box sx={riskTable}>\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'auto repeat(5, 1fr)',\n gap: '4px',\n overflow: 'auto',\n }}\n >\n <Box sx={riskLabelCell} />\n {getRadioLabel(1)}\n {getRadioLabel(2)}\n {getRadioLabel(3)}\n {getRadioLabel(4)}\n {getRadioLabel(5)}\n </Box>\n <ProbabilityTableInfo />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -163,7 +163,7 @@ const RiScProvider = ({ children }) => {
|
|
|
163
163
|
}
|
|
164
164
|
);
|
|
165
165
|
};
|
|
166
|
-
const updateRiSc = (riSc) => {
|
|
166
|
+
const updateRiSc = (riSc, onSuccess, onError) => {
|
|
167
167
|
if (selectedRiSc && riScs) {
|
|
168
168
|
const isRequiresNewApproval = selectedRiSc.migrationStatus?.migrationRequiresNewApproval || requiresNewApproval(selectedRiSc.content, riSc);
|
|
169
169
|
const updatedRiSc = {
|
|
@@ -177,6 +177,8 @@ const RiScProvider = ({ children }) => {
|
|
|
177
177
|
migrationRequiresNewApproval: false
|
|
178
178
|
}
|
|
179
179
|
};
|
|
180
|
+
const originalRiSc = selectedRiSc;
|
|
181
|
+
setSelectedRiSc(updatedRiSc);
|
|
180
182
|
setRiScUpdateStatus({
|
|
181
183
|
isLoading: true,
|
|
182
184
|
isError: false,
|
|
@@ -190,11 +192,16 @@ const RiScProvider = ({ children }) => {
|
|
|
190
192
|
isError: false,
|
|
191
193
|
isSuccess: true
|
|
192
194
|
});
|
|
195
|
+
if ("pendingApproval" in res && res.pendingApproval?.pullRequestUrl) {
|
|
196
|
+
updatedRiSc.pullRequestUrl = res.pendingApproval.pullRequestUrl;
|
|
197
|
+
updatedRiSc.status = RiScStatus.SentForApproval;
|
|
198
|
+
}
|
|
193
199
|
setSelectedRiSc(updatedRiSc);
|
|
194
200
|
setRiScs(
|
|
195
201
|
riScs.map((r) => r.id === selectedRiSc.id ? updatedRiSc : r)
|
|
196
202
|
);
|
|
197
203
|
setIsRequesting(false);
|
|
204
|
+
if (onSuccess) onSuccess();
|
|
198
205
|
setResponse({
|
|
199
206
|
...res,
|
|
200
207
|
statusMessage: getTranslationKey("info", res.status, t)
|
|
@@ -207,6 +214,8 @@ const RiScProvider = ({ children }) => {
|
|
|
207
214
|
isSuccess: false
|
|
208
215
|
});
|
|
209
216
|
setIsRequesting(false);
|
|
217
|
+
if (onError) onError();
|
|
218
|
+
setSelectedRiSc(originalRiSc);
|
|
210
219
|
setResponse({
|
|
211
220
|
...error,
|
|
212
221
|
statusMessage: getTranslationKey("error", error.status, t)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScContext.esm.js","sources":["../../src/contexts/RiScContext.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport {\n ContentStatus,\n ProcessingStatus,\n RiSc,\n RiScStatus,\n RiScWithMetadata,\n SubmitResponseObject,\n} from '../utils/types';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n getTranslationKey,\n requiresNewApproval,\n} from '../utils/utilityfunctions';\nimport { riScRouteRef } from '../routes';\nimport { useLocation, useNavigate, useParams } from 'react-router';\nimport { dtoToRiSc, RiScDTO } from '../utils/DTOs';\nimport { useEffectOnce } from 'react-use';\nimport { useAuthenticatedFetch } from '../utils/hooks';\nimport { latestSupportedVersion } from '../utils/constants';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../utils/translations';\n\nexport type RiScUpdateStatus = {\n isLoading: boolean;\n isError: boolean;\n isSuccess: boolean;\n};\n\ntype RiScDrawerProps = {\n riScs: RiScWithMetadata[] | null;\n selectRiSc: (title: string) => void;\n selectedRiSc: RiScWithMetadata | null;\n createNewRiSc: (riSc: RiSc) => void;\n updateRiSc: (\n riSc: RiSc,\n onSuccess?: () => void,\n onError?: () => void,\n ) => void;\n approveRiSc: () => void;\n riScUpdateStatus: RiScUpdateStatus;\n resetRiScStatus: () => void;\n resetResponse: () => void;\n isFetching: boolean;\n response: SubmitResponseObject | null;\n};\n\nconst RiScContext = React.createContext<RiScDrawerProps | undefined>(undefined);\n\nconst RiScProvider = ({ children }: { children: ReactNode }) => {\n const { riScId: riScIdFromParams } = useParams();\n const location = useLocation();\n const navigate = useNavigate();\n const getRiScPath = useRouteRef(riScRouteRef);\n const [isRequesting, setIsRequesting] = useState<boolean>(false);\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n fetchRiScs,\n postRiScs,\n putRiScs,\n publishRiScs,\n response,\n setResponse,\n } = useAuthenticatedFetch();\n\n const [riScs, setRiScs] = useState<RiScWithMetadata[] | null>(null);\n const [selectedRiSc, setSelectedRiSc] = useState<RiScWithMetadata | null>(\n null,\n );\n const [isFetching, setIsFetching] = useState(true);\n const [riScUpdateStatus, setRiScUpdateStatus] = useState({\n isLoading: false,\n isError: false,\n isSuccess: false,\n });\n\n useEffect(() => {\n if (location.state) {\n setResponse({\n statusMessage: location.state,\n status: ProcessingStatus.ErrorWhenFetchingRiScs,\n });\n }\n }, [location, setResponse]);\n\n // Initial fetch of RiScs\n useEffectOnce(() => {\n fetchRiScs(\n res => {\n const fetchedRiScs: RiScWithMetadata[] = res\n .filter(risk => risk.status === ContentStatus.Success)\n .map(riScDTO => {\n // This action can throw a runtime error if content is not parsable by JSON library.\n // If that happens, it is catched by the fetch onError catch.\n const json = JSON.parse(riScDTO.riScContent) as RiScDTO;\n\n const content = dtoToRiSc(json);\n return {\n id: riScDTO.riScId,\n content: content,\n status: riScDTO.riScStatus,\n pullRequestUrl: riScDTO.pullRequestUrl,\n migrationStatus: riScDTO.migrationStatus,\n };\n });\n setRiScs(fetchedRiScs);\n setIsFetching(false);\n\n const errorRiScs: string[] = res\n .filter(risk => risk.status !== ContentStatus.Success)\n .map(risk => risk.riScId);\n\n if (errorRiScs.length > 0) {\n const errorRiScIds = errorRiScs.join(', ');\n setResponse({\n statusMessage: t('errorMessages.ErrorWhenFetchingRiScs').concat(\n errorRiScIds,\n ),\n status: ProcessingStatus.ErrorWhenFetchingRiScs,\n });\n }\n\n // If there are no RiScs, don't set a selected RiSc\n if (fetchedRiScs.length === 0) {\n return;\n }\n\n // If there is no RiSc ID in the URL, navigate to the first RiSc\n if (!riScIdFromParams) {\n navigate(getRiScPath({ riScId: fetchedRiScs[0].id }));\n return;\n }\n\n const riSc = fetchedRiScs.find(r => r.id === riScIdFromParams);\n\n // If there is an invalid RiSc ID in the URL, navigate to the first RiSc with error state\n if (!riSc) {\n navigate(getRiScPath({ riScId: fetchedRiScs[0].id }), {\n state: t('errorMessages.RiScDoesNotExist'),\n });\n return;\n }\n },\n () => {\n setIsFetching(false);\n },\n );\n });\n\n // Set selected RiSc based on URL\n useEffect(() => {\n if (riScIdFromParams) {\n const riSc = riScs?.find(r => r.id === riScIdFromParams);\n if (riSc) {\n setSelectedRiSc(riSc);\n }\n }\n }, [riScs, riScIdFromParams]);\n\n const resetRiScStatus = useCallback(() => {\n setRiScUpdateStatus({\n isLoading: false,\n isSuccess: false,\n isError: false,\n });\n }, []);\n\n // use callback to avoid infinite loop\n const resetResponse = useCallback(() => {\n setResponse(null);\n }, [setResponse]);\n\n const selectRiSc = (title: string) => {\n const selectedRiScId = riScs?.find(\n riSc => riSc.content.title === title,\n )?.id;\n if (selectedRiScId) {\n navigate(getRiScPath({ riScId: selectedRiScId }));\n }\n };\n\n const createNewRiSc = (riSc: RiSc) => {\n setIsFetching(true);\n setSelectedRiSc(null);\n\n const newRiSc: RiSc = {\n ...riSc,\n schemaVersion: latestSupportedVersion,\n };\n postRiScs(\n newRiSc,\n res => {\n if (!res.riScId) throw new Error('No RiSc ID returned');\n const riScWithMetaData: RiScWithMetadata = {\n id: res.riScId,\n status: RiScStatus.Draft,\n content: riSc,\n schemaVersion: riSc.schemaVersion,\n };\n\n setRiScs(riScs ? [...riScs, riScWithMetaData] : [riScWithMetaData]);\n setSelectedRiSc(riScWithMetaData);\n setIsFetching(false);\n navigate(getRiScPath({ riScId: res.riScId }));\n setResponse({\n ...res,\n statusMessage: getTranslationKey('info', res.status, t),\n });\n setRiScUpdateStatus({\n isLoading: false,\n isError: false,\n isSuccess: true,\n });\n },\n error => {\n setSelectedRiSc(selectedRiSc);\n setIsFetching(false);\n setRiScUpdateStatus({\n isLoading: false,\n isError: true,\n isSuccess: false,\n });\n\n setResponse({\n ...error,\n statusMessage: getTranslationKey('error', error.status, t),\n });\n },\n );\n };\n\n const updateRiSc = (riSc: RiSc) => {\n if (selectedRiSc && riScs) {\n const isRequiresNewApproval =\n selectedRiSc.migrationStatus?.migrationRequiresNewApproval ||\n requiresNewApproval(selectedRiSc.content, riSc);\n\n const updatedRiSc = {\n ...selectedRiSc,\n content: riSc,\n status:\n selectedRiSc.status !== RiScStatus.Draft && isRequiresNewApproval\n ? RiScStatus.Draft\n : selectedRiSc.status,\n isRequiresNewApproval: isRequiresNewApproval,\n schemaVersion: riSc.schemaVersion,\n migrationStatus: {\n migrationChanges: false,\n migrationRequiresNewApproval: false,\n },\n };\n\n setRiScUpdateStatus({\n isLoading: true,\n isError: false,\n isSuccess: false,\n });\n putRiScs(\n updatedRiSc,\n res => {\n setRiScUpdateStatus({\n isLoading: false,\n isError: false,\n isSuccess: true,\n });\n setSelectedRiSc(updatedRiSc);\n setRiScs(\n riScs.map(r => (r.id === selectedRiSc.id ? updatedRiSc : r)),\n );\n setIsRequesting(false);\n setResponse({\n ...res,\n statusMessage: getTranslationKey('info', res.status, t),\n });\n },\n error => {\n setRiScUpdateStatus({\n isLoading: false,\n isError: true,\n isSuccess: false,\n });\n setIsRequesting(false);\n\n setResponse({\n ...error,\n statusMessage: getTranslationKey('error', error.status, t),\n });\n },\n );\n }\n };\n\n const approveRiSc = () => {\n if (selectedRiSc && riScs) {\n setRiScUpdateStatus({\n isLoading: true,\n isError: false,\n isSuccess: false,\n });\n publishRiScs(\n selectedRiSc.id,\n res => {\n const prUrl = res.pendingApproval?.pullRequestUrl;\n const updatedRiSc = {\n ...selectedRiSc,\n status: RiScStatus.SentForApproval,\n pullRequestUrl: prUrl,\n };\n setSelectedRiSc(updatedRiSc);\n setRiScs(\n riScs.map(r => (r.id === selectedRiSc.id ? updatedRiSc : r)),\n );\n setRiScUpdateStatus({\n isLoading: false,\n isError: false,\n isSuccess: true,\n });\n setResponse({\n ...res,\n statusMessage: getTranslationKey('info', res.status, t),\n });\n },\n error => {\n setRiScUpdateStatus({\n isLoading: false,\n isError: true,\n isSuccess: false,\n });\n setResponse({\n ...error,\n statusMessage: getTranslationKey('error', error.status, t),\n });\n },\n );\n }\n };\n\n const value = {\n riScs,\n selectRiSc,\n selectedRiSc,\n createNewRiSc,\n updateRiSc,\n approveRiSc,\n riScUpdateStatus,\n resetRiScStatus,\n resetResponse,\n isRequesting,\n isFetching,\n response,\n };\n\n return <RiScContext.Provider value={value}>{children}</RiScContext.Provider>;\n};\n\nconst useRiScs = () => {\n const context = React.useContext(RiScContext);\n if (context === undefined) {\n throw new Error('useRiScs must be used within a RiScProvider');\n }\n return context;\n};\n\nexport { RiScProvider, useRiScs };\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgDA,MAAM,WAAA,GAAc,KAAM,CAAA,aAAA,CAA2C,KAAS,CAAA,CAAA,CAAA;AAE9E,MAAM,YAAe,GAAA,CAAC,EAAE,QAAA,EAAwC,KAAA;AAC9D,EAAA,MAAM,EAAE,MAAA,EAAQ,gBAAiB,EAAA,GAAI,SAAU,EAAA,CAAA;AAC/C,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAM,MAAA,WAAA,GAAc,YAAY,YAAY,CAAA,CAAA;AAC5C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAC/D,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA,CAAA;AAExD,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,MACE,qBAAsB,EAAA,CAAA;AAE1B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAoC,IAAI,CAAA,CAAA;AAClE,EAAM,MAAA,CAAC,YAAc,EAAA,eAAe,CAAI,GAAA,QAAA;AAAA,IACtC,IAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,IAAI,CAAA,CAAA;AACjD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,QAAS,CAAA;AAAA,IACvD,SAAW,EAAA,KAAA;AAAA,IACX,OAAS,EAAA,KAAA;AAAA,IACT,SAAW,EAAA,KAAA;AAAA,GACZ,CAAA,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAS,KAAO,EAAA;AAClB,MAAY,WAAA,CAAA;AAAA,QACV,eAAe,QAAS,CAAA,KAAA;AAAA,QACxB,QAAQ,gBAAiB,CAAA,sBAAA;AAAA,OAC1B,CAAA,CAAA;AAAA,KACH;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,WAAW,CAAC,CAAA,CAAA;AAG1B,EAAA,aAAA,CAAc,MAAM;AAClB,IAAA,UAAA;AAAA,MACE,CAAO,GAAA,KAAA;AACL,QAAM,MAAA,YAAA,GAAmC,GACtC,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA,IAAA,CAAK,WAAW,aAAc,CAAA,OAAO,CACpD,CAAA,GAAA,CAAI,CAAW,OAAA,KAAA;AAGd,UAAA,MAAM,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AAE3C,UAAM,MAAA,OAAA,GAAU,UAAU,IAAI,CAAA,CAAA;AAC9B,UAAO,OAAA;AAAA,YACL,IAAI,OAAQ,CAAA,MAAA;AAAA,YACZ,OAAA;AAAA,YACA,QAAQ,OAAQ,CAAA,UAAA;AAAA,YAChB,gBAAgB,OAAQ,CAAA,cAAA;AAAA,YACxB,iBAAiB,OAAQ,CAAA,eAAA;AAAA,WAC3B,CAAA;AAAA,SACD,CAAA,CAAA;AACH,QAAA,QAAA,CAAS,YAAY,CAAA,CAAA;AACrB,QAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAEnB,QAAA,MAAM,UAAuB,GAAA,GAAA,CAC1B,MAAO,CAAA,CAAA,IAAA,KAAQ,IAAK,CAAA,MAAA,KAAW,aAAc,CAAA,OAAO,CACpD,CAAA,GAAA,CAAI,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAE1B,QAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,UAAM,MAAA,YAAA,GAAe,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AACzC,UAAY,WAAA,CAAA;AAAA,YACV,aAAA,EAAe,CAAE,CAAA,sCAAsC,CAAE,CAAA,MAAA;AAAA,cACvD,YAAA;AAAA,aACF;AAAA,YACA,QAAQ,gBAAiB,CAAA,sBAAA;AAAA,WAC1B,CAAA,CAAA;AAAA,SACH;AAGA,QAAI,IAAA,YAAA,CAAa,WAAW,CAAG,EAAA;AAC7B,UAAA,OAAA;AAAA,SACF;AAGA,QAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,UAAS,QAAA,CAAA,WAAA,CAAY,EAAE,MAAQ,EAAA,YAAA,CAAa,CAAC,CAAE,CAAA,EAAA,EAAI,CAAC,CAAA,CAAA;AACpD,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,OAAO,YAAa,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,OAAO,gBAAgB,CAAA,CAAA;AAG7D,QAAA,IAAI,CAAC,IAAM,EAAA;AACT,UAAS,QAAA,CAAA,WAAA,CAAY,EAAE,MAAQ,EAAA,YAAA,CAAa,CAAC,CAAE,CAAA,EAAA,EAAI,CAAG,EAAA;AAAA,YACpD,KAAA,EAAO,EAAE,gCAAgC,CAAA;AAAA,WAC1C,CAAA,CAAA;AACD,UAAA,OAAA;AAAA,SACF;AAAA,OACF;AAAA,MACA,MAAM;AACJ,QAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAAA,OACrB;AAAA,KACF,CAAA;AAAA,GACD,CAAA,CAAA;AAGD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAA,MAAM,OAAO,KAAO,EAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,OAAO,gBAAgB,CAAA,CAAA;AACvD,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAAA,GACC,EAAA,CAAC,KAAO,EAAA,gBAAgB,CAAC,CAAA,CAAA;AAE5B,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAoB,mBAAA,CAAA;AAAA,MAClB,SAAW,EAAA,KAAA;AAAA,MACX,SAAW,EAAA,KAAA;AAAA,MACX,OAAS,EAAA,KAAA;AAAA,KACV,CAAA,CAAA;AAAA,GACH,EAAG,EAAE,CAAA,CAAA;AAGL,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,GAClB,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEhB,EAAM,MAAA,UAAA,GAAa,CAAC,KAAkB,KAAA;AACpC,IAAA,MAAM,iBAAiB,KAAO,EAAA,IAAA;AAAA,MAC5B,CAAA,IAAA,KAAQ,IAAK,CAAA,OAAA,CAAQ,KAAU,KAAA,KAAA;AAAA,KAC9B,EAAA,EAAA,CAAA;AACH,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,QAAA,CAAS,WAAY,CAAA,EAAE,MAAQ,EAAA,cAAA,EAAgB,CAAC,CAAA,CAAA;AAAA,KAClD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,IAAe,KAAA;AACpC,IAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAClB,IAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AAEpB,IAAA,MAAM,OAAgB,GAAA;AAAA,MACpB,GAAG,IAAA;AAAA,MACH,aAAe,EAAA,sBAAA;AAAA,KACjB,CAAA;AACA,IAAA,SAAA;AAAA,MACE,OAAA;AAAA,MACA,CAAO,GAAA,KAAA;AACL,QAAA,IAAI,CAAC,GAAI,CAAA,MAAA,EAAc,MAAA,IAAI,MAAM,qBAAqB,CAAA,CAAA;AACtD,QAAA,MAAM,gBAAqC,GAAA;AAAA,UACzC,IAAI,GAAI,CAAA,MAAA;AAAA,UACR,QAAQ,UAAW,CAAA,KAAA;AAAA,UACnB,OAAS,EAAA,IAAA;AAAA,UACT,eAAe,IAAK,CAAA,aAAA;AAAA,SACtB,CAAA;AAEA,QAAS,QAAA,CAAA,KAAA,GAAQ,CAAC,GAAG,KAAA,EAAO,gBAAgB,CAAI,GAAA,CAAC,gBAAgB,CAAC,CAAA,CAAA;AAClE,QAAA,eAAA,CAAgB,gBAAgB,CAAA,CAAA;AAChC,QAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACnB,QAAA,QAAA,CAAS,YAAY,EAAE,MAAA,EAAQ,GAAI,CAAA,MAAA,EAAQ,CAAC,CAAA,CAAA;AAC5C,QAAY,WAAA,CAAA;AAAA,UACV,GAAG,GAAA;AAAA,UACH,aAAe,EAAA,iBAAA,CAAkB,MAAQ,EAAA,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,SACvD,CAAA,CAAA;AACD,QAAoB,mBAAA,CAAA;AAAA,UAClB,SAAW,EAAA,KAAA;AAAA,UACX,OAAS,EAAA,KAAA;AAAA,UACT,SAAW,EAAA,IAAA;AAAA,SACZ,CAAA,CAAA;AAAA,OACH;AAAA,MACA,CAAS,KAAA,KAAA;AACP,QAAA,eAAA,CAAgB,YAAY,CAAA,CAAA;AAC5B,QAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACnB,QAAoB,mBAAA,CAAA;AAAA,UAClB,SAAW,EAAA,KAAA;AAAA,UACX,OAAS,EAAA,IAAA;AAAA,UACT,SAAW,EAAA,KAAA;AAAA,SACZ,CAAA,CAAA;AAED,QAAY,WAAA,CAAA;AAAA,UACV,GAAG,KAAA;AAAA,UACH,aAAe,EAAA,iBAAA,CAAkB,OAAS,EAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,SAC1D,CAAA,CAAA;AAAA,OACH;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,CAAC,IAAe,KAAA;AACjC,IAAA,IAAI,gBAAgB,KAAO,EAAA;AACzB,MAAA,MAAM,wBACJ,YAAa,CAAA,eAAA,EAAiB,gCAC9B,mBAAoB,CAAA,YAAA,CAAa,SAAS,IAAI,CAAA,CAAA;AAEhD,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,GAAG,YAAA;AAAA,QACH,OAAS,EAAA,IAAA;AAAA,QACT,MAAA,EACE,aAAa,MAAW,KAAA,UAAA,CAAW,SAAS,qBACxC,GAAA,UAAA,CAAW,QACX,YAAa,CAAA,MAAA;AAAA,QACnB,qBAAA;AAAA,QACA,eAAe,IAAK,CAAA,aAAA;AAAA,QACpB,eAAiB,EAAA;AAAA,UACf,gBAAkB,EAAA,KAAA;AAAA,UAClB,4BAA8B,EAAA,KAAA;AAAA,SAChC;AAAA,OACF,CAAA;AAEA,MAAoB,mBAAA,CAAA;AAAA,QAClB,SAAW,EAAA,IAAA;AAAA,QACX,OAAS,EAAA,KAAA;AAAA,QACT,SAAW,EAAA,KAAA;AAAA,OACZ,CAAA,CAAA;AACD,MAAA,QAAA;AAAA,QACE,WAAA;AAAA,QACA,CAAO,GAAA,KAAA;AACL,UAAoB,mBAAA,CAAA;AAAA,YAClB,SAAW,EAAA,KAAA;AAAA,YACX,OAAS,EAAA,KAAA;AAAA,YACT,SAAW,EAAA,IAAA;AAAA,WACZ,CAAA,CAAA;AACD,UAAA,eAAA,CAAgB,WAAW,CAAA,CAAA;AAC3B,UAAA,QAAA;AAAA,YACE,KAAA,CAAM,IAAI,CAAM,CAAA,KAAA,CAAA,CAAE,OAAO,YAAa,CAAA,EAAA,GAAK,cAAc,CAAE,CAAA;AAAA,WAC7D,CAAA;AACA,UAAA,eAAA,CAAgB,KAAK,CAAA,CAAA;AACrB,UAAY,WAAA,CAAA;AAAA,YACV,GAAG,GAAA;AAAA,YACH,aAAe,EAAA,iBAAA,CAAkB,MAAQ,EAAA,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,WACvD,CAAA,CAAA;AAAA,SACH;AAAA,QACA,CAAS,KAAA,KAAA;AACP,UAAoB,mBAAA,CAAA;AAAA,YAClB,SAAW,EAAA,KAAA;AAAA,YACX,OAAS,EAAA,IAAA;AAAA,YACT,SAAW,EAAA,KAAA;AAAA,WACZ,CAAA,CAAA;AACD,UAAA,eAAA,CAAgB,KAAK,CAAA,CAAA;AAErB,UAAY,WAAA,CAAA;AAAA,YACV,GAAG,KAAA;AAAA,YACH,aAAe,EAAA,iBAAA,CAAkB,OAAS,EAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,WAC1D,CAAA,CAAA;AAAA,SACH;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,gBAAgB,KAAO,EAAA;AACzB,MAAoB,mBAAA,CAAA;AAAA,QAClB,SAAW,EAAA,IAAA;AAAA,QACX,OAAS,EAAA,KAAA;AAAA,QACT,SAAW,EAAA,KAAA;AAAA,OACZ,CAAA,CAAA;AACD,MAAA,YAAA;AAAA,QACE,YAAa,CAAA,EAAA;AAAA,QACb,CAAO,GAAA,KAAA;AACL,UAAM,MAAA,KAAA,GAAQ,IAAI,eAAiB,EAAA,cAAA,CAAA;AACnC,UAAA,MAAM,WAAc,GAAA;AAAA,YAClB,GAAG,YAAA;AAAA,YACH,QAAQ,UAAW,CAAA,eAAA;AAAA,YACnB,cAAgB,EAAA,KAAA;AAAA,WAClB,CAAA;AACA,UAAA,eAAA,CAAgB,WAAW,CAAA,CAAA;AAC3B,UAAA,QAAA;AAAA,YACE,KAAA,CAAM,IAAI,CAAM,CAAA,KAAA,CAAA,CAAE,OAAO,YAAa,CAAA,EAAA,GAAK,cAAc,CAAE,CAAA;AAAA,WAC7D,CAAA;AACA,UAAoB,mBAAA,CAAA;AAAA,YAClB,SAAW,EAAA,KAAA;AAAA,YACX,OAAS,EAAA,KAAA;AAAA,YACT,SAAW,EAAA,IAAA;AAAA,WACZ,CAAA,CAAA;AACD,UAAY,WAAA,CAAA;AAAA,YACV,GAAG,GAAA;AAAA,YACH,aAAe,EAAA,iBAAA,CAAkB,MAAQ,EAAA,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,WACvD,CAAA,CAAA;AAAA,SACH;AAAA,QACA,CAAS,KAAA,KAAA;AACP,UAAoB,mBAAA,CAAA;AAAA,YAClB,SAAW,EAAA,KAAA;AAAA,YACX,OAAS,EAAA,IAAA;AAAA,YACT,SAAW,EAAA,KAAA;AAAA,WACZ,CAAA,CAAA;AACD,UAAY,WAAA,CAAA;AAAA,YACV,GAAG,KAAA;AAAA,YACH,aAAe,EAAA,iBAAA,CAAkB,OAAS,EAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,WAC1D,CAAA,CAAA;AAAA,SACH;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,KAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,GACF,CAAA;AAEA,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,WAAA,CAAY,QAAZ,EAAA,EAAqB,SAAe,QAAS,CAAA,CAAA;AACvD,EAAA;AAEA,MAAM,WAAW,MAAM;AACrB,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAW,WAAW,CAAA,CAAA;AAC5C,EAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,IAAM,MAAA,IAAI,MAAM,6CAA6C,CAAA,CAAA;AAAA,GAC/D;AACA,EAAO,OAAA,OAAA,CAAA;AACT;;;;"}
|
|
1
|
+
{"version":3,"file":"RiScContext.esm.js","sources":["../../src/contexts/RiScContext.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport {\n ContentStatus,\n ProcessingStatus,\n RiSc,\n RiScStatus,\n RiScWithMetadata,\n SubmitResponseObject,\n} from '../utils/types';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n getTranslationKey,\n requiresNewApproval,\n} from '../utils/utilityfunctions';\nimport { riScRouteRef } from '../routes';\nimport { useLocation, useNavigate, useParams } from 'react-router';\nimport { dtoToRiSc, RiScDTO } from '../utils/DTOs';\nimport { useEffectOnce } from 'react-use';\nimport { useAuthenticatedFetch } from '../utils/hooks';\nimport { latestSupportedVersion } from '../utils/constants';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../utils/translations';\n\nexport type RiScUpdateStatus = {\n isLoading: boolean;\n isError: boolean;\n isSuccess: boolean;\n};\n\ntype RiScDrawerProps = {\n riScs: RiScWithMetadata[] | null;\n selectRiSc: (title: string) => void;\n selectedRiSc: RiScWithMetadata | null;\n createNewRiSc: (riSc: RiSc) => void;\n updateRiSc: (\n riSc: RiSc,\n onSuccess?: () => void,\n onError?: () => void,\n ) => void;\n approveRiSc: () => void;\n riScUpdateStatus: RiScUpdateStatus;\n resetRiScStatus: () => void;\n resetResponse: () => void;\n isFetching: boolean;\n response: SubmitResponseObject | null;\n};\n\nconst RiScContext = React.createContext<RiScDrawerProps | undefined>(undefined);\n\nconst RiScProvider = ({ children }: { children: ReactNode }) => {\n const { riScId: riScIdFromParams } = useParams();\n const location = useLocation();\n const navigate = useNavigate();\n const getRiScPath = useRouteRef(riScRouteRef);\n const [isRequesting, setIsRequesting] = useState<boolean>(false);\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n fetchRiScs,\n postRiScs,\n putRiScs,\n publishRiScs,\n response,\n setResponse,\n } = useAuthenticatedFetch();\n\n const [riScs, setRiScs] = useState<RiScWithMetadata[] | null>(null);\n const [selectedRiSc, setSelectedRiSc] = useState<RiScWithMetadata | null>(\n null,\n );\n const [isFetching, setIsFetching] = useState(true);\n const [riScUpdateStatus, setRiScUpdateStatus] = useState({\n isLoading: false,\n isError: false,\n isSuccess: false,\n });\n\n useEffect(() => {\n if (location.state) {\n setResponse({\n statusMessage: location.state,\n status: ProcessingStatus.ErrorWhenFetchingRiScs,\n });\n }\n }, [location, setResponse]);\n\n // Initial fetch of RiScs\n useEffectOnce(() => {\n fetchRiScs(\n res => {\n const fetchedRiScs: RiScWithMetadata[] = res\n .filter(risk => risk.status === ContentStatus.Success)\n .map(riScDTO => {\n // This action can throw a runtime error if content is not parsable by JSON library.\n // If that happens, it is catched by the fetch onError catch.\n const json = JSON.parse(riScDTO.riScContent) as RiScDTO;\n\n const content = dtoToRiSc(json);\n return {\n id: riScDTO.riScId,\n content: content,\n status: riScDTO.riScStatus,\n pullRequestUrl: riScDTO.pullRequestUrl,\n migrationStatus: riScDTO.migrationStatus,\n };\n });\n setRiScs(fetchedRiScs);\n setIsFetching(false);\n\n const errorRiScs: string[] = res\n .filter(risk => risk.status !== ContentStatus.Success)\n .map(risk => risk.riScId);\n\n if (errorRiScs.length > 0) {\n const errorRiScIds = errorRiScs.join(', ');\n setResponse({\n statusMessage: t('errorMessages.ErrorWhenFetchingRiScs').concat(\n errorRiScIds,\n ),\n status: ProcessingStatus.ErrorWhenFetchingRiScs,\n });\n }\n\n // If there are no RiScs, don't set a selected RiSc\n if (fetchedRiScs.length === 0) {\n return;\n }\n\n // If there is no RiSc ID in the URL, navigate to the first RiSc\n if (!riScIdFromParams) {\n navigate(getRiScPath({ riScId: fetchedRiScs[0].id }));\n return;\n }\n\n const riSc = fetchedRiScs.find(r => r.id === riScIdFromParams);\n\n // If there is an invalid RiSc ID in the URL, navigate to the first RiSc with error state\n if (!riSc) {\n navigate(getRiScPath({ riScId: fetchedRiScs[0].id }), {\n state: t('errorMessages.RiScDoesNotExist'),\n });\n return;\n }\n },\n () => {\n setIsFetching(false);\n },\n );\n });\n\n // Set selected RiSc based on URL\n useEffect(() => {\n if (riScIdFromParams) {\n const riSc = riScs?.find(r => r.id === riScIdFromParams);\n if (riSc) {\n setSelectedRiSc(riSc);\n }\n }\n }, [riScs, riScIdFromParams]);\n\n const resetRiScStatus = useCallback(() => {\n setRiScUpdateStatus({\n isLoading: false,\n isSuccess: false,\n isError: false,\n });\n }, []);\n\n // use callback to avoid infinite loop\n const resetResponse = useCallback(() => {\n setResponse(null);\n }, [setResponse]);\n\n const selectRiSc = (title: string) => {\n const selectedRiScId = riScs?.find(\n riSc => riSc.content.title === title,\n )?.id;\n if (selectedRiScId) {\n navigate(getRiScPath({ riScId: selectedRiScId }));\n }\n };\n\n const createNewRiSc = (riSc: RiSc) => {\n setIsFetching(true);\n setSelectedRiSc(null);\n\n const newRiSc: RiSc = {\n ...riSc,\n schemaVersion: latestSupportedVersion,\n };\n postRiScs(\n newRiSc,\n res => {\n if (!res.riScId) throw new Error('No RiSc ID returned');\n const riScWithMetaData: RiScWithMetadata = {\n id: res.riScId,\n status: RiScStatus.Draft,\n content: riSc,\n schemaVersion: riSc.schemaVersion,\n };\n\n setRiScs(riScs ? [...riScs, riScWithMetaData] : [riScWithMetaData]);\n setSelectedRiSc(riScWithMetaData);\n setIsFetching(false);\n navigate(getRiScPath({ riScId: res.riScId }));\n setResponse({\n ...res,\n statusMessage: getTranslationKey('info', res.status, t),\n });\n setRiScUpdateStatus({\n isLoading: false,\n isError: false,\n isSuccess: true,\n });\n },\n error => {\n setSelectedRiSc(selectedRiSc);\n setIsFetching(false);\n setRiScUpdateStatus({\n isLoading: false,\n isError: true,\n isSuccess: false,\n });\n\n setResponse({\n ...error,\n statusMessage: getTranslationKey('error', error.status, t),\n });\n },\n );\n };\n\n const updateRiSc = (\n riSc: RiSc,\n onSuccess?: () => void,\n onError?: () => void,\n ) => {\n if (selectedRiSc && riScs) {\n const isRequiresNewApproval =\n selectedRiSc.migrationStatus?.migrationRequiresNewApproval ||\n requiresNewApproval(selectedRiSc.content, riSc);\n\n const updatedRiSc = {\n ...selectedRiSc,\n content: riSc,\n status:\n selectedRiSc.status !== RiScStatus.Draft && isRequiresNewApproval\n ? RiScStatus.Draft\n : selectedRiSc.status,\n isRequiresNewApproval: isRequiresNewApproval,\n schemaVersion: riSc.schemaVersion,\n migrationStatus: {\n migrationChanges: false,\n migrationRequiresNewApproval: false,\n },\n };\n const originalRiSc = selectedRiSc;\n setSelectedRiSc(updatedRiSc);\n setRiScUpdateStatus({\n isLoading: true,\n isError: false,\n isSuccess: false,\n });\n putRiScs(\n updatedRiSc,\n res => {\n setRiScUpdateStatus({\n isLoading: false,\n isError: false,\n isSuccess: true,\n });\n if ('pendingApproval' in res && res.pendingApproval?.pullRequestUrl) {\n updatedRiSc.pullRequestUrl = res.pendingApproval.pullRequestUrl;\n updatedRiSc.status = RiScStatus.SentForApproval;\n }\n setSelectedRiSc(updatedRiSc);\n setRiScs(\n riScs.map(r => (r.id === selectedRiSc.id ? updatedRiSc : r)),\n );\n setIsRequesting(false);\n if (onSuccess) onSuccess();\n setResponse({\n ...res,\n statusMessage: getTranslationKey('info', res.status, t),\n });\n },\n error => {\n setRiScUpdateStatus({\n isLoading: false,\n isError: true,\n isSuccess: false,\n });\n setIsRequesting(false);\n if (onError) onError();\n setSelectedRiSc(originalRiSc);\n setResponse({\n ...error,\n statusMessage: getTranslationKey('error', error.status, t),\n });\n },\n );\n }\n };\n\n const approveRiSc = () => {\n if (selectedRiSc && riScs) {\n setRiScUpdateStatus({\n isLoading: true,\n isError: false,\n isSuccess: false,\n });\n publishRiScs(\n selectedRiSc.id,\n res => {\n const prUrl = res.pendingApproval?.pullRequestUrl;\n const updatedRiSc = {\n ...selectedRiSc,\n status: RiScStatus.SentForApproval,\n pullRequestUrl: prUrl,\n };\n setSelectedRiSc(updatedRiSc);\n setRiScs(\n riScs.map(r => (r.id === selectedRiSc.id ? updatedRiSc : r)),\n );\n setRiScUpdateStatus({\n isLoading: false,\n isError: false,\n isSuccess: true,\n });\n setResponse({\n ...res,\n statusMessage: getTranslationKey('info', res.status, t),\n });\n },\n error => {\n setRiScUpdateStatus({\n isLoading: false,\n isError: true,\n isSuccess: false,\n });\n setResponse({\n ...error,\n statusMessage: getTranslationKey('error', error.status, t),\n });\n },\n );\n }\n };\n\n const value = {\n riScs,\n selectRiSc,\n selectedRiSc,\n createNewRiSc,\n updateRiSc,\n approveRiSc,\n riScUpdateStatus,\n resetRiScStatus,\n resetResponse,\n isRequesting,\n isFetching,\n response,\n };\n\n return <RiScContext.Provider value={value}>{children}</RiScContext.Provider>;\n};\n\nconst useRiScs = () => {\n const context = React.useContext(RiScContext);\n if (context === undefined) {\n throw new Error('useRiScs must be used within a RiScProvider');\n }\n return context;\n};\n\nexport { RiScProvider, useRiScs };\n"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,23 @@ const ScenarioProvider = ({ children }) => {
|
|
|
53
53
|
const [scenario, setScenario] = useState(emptyScenario());
|
|
54
54
|
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
|
|
55
55
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
56
|
+
const [expandedActions, setExpandedActions] = useState({});
|
|
57
|
+
const toggleActionExpanded = (actionId) => {
|
|
58
|
+
setExpandedActions((prevState) => ({
|
|
59
|
+
...prevState,
|
|
60
|
+
[actionId]: !prevState[actionId]
|
|
61
|
+
}));
|
|
62
|
+
};
|
|
63
|
+
const collapseAllActions = () => {
|
|
64
|
+
const allCollapsed = Object.keys(expandedActions).reduce((acc, key) => {
|
|
65
|
+
acc[key] = false;
|
|
66
|
+
return acc;
|
|
67
|
+
}, {});
|
|
68
|
+
setExpandedActions(allCollapsed);
|
|
69
|
+
};
|
|
70
|
+
const isActionExpanded = (actionId) => {
|
|
71
|
+
return expandedActions[actionId] || false;
|
|
72
|
+
};
|
|
56
73
|
const emptyFormScenario = (initialScenario) => ({
|
|
57
74
|
...initialScenario,
|
|
58
75
|
risk: {
|
|
@@ -175,6 +192,9 @@ const ScenarioProvider = ({ children }) => {
|
|
|
175
192
|
};
|
|
176
193
|
const value = {
|
|
177
194
|
isDrawerOpen,
|
|
195
|
+
isActionExpanded,
|
|
196
|
+
toggleActionExpanded,
|
|
197
|
+
collapseAllActions,
|
|
178
198
|
emptyFormScenario,
|
|
179
199
|
scenario,
|
|
180
200
|
submitNewScenario,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioContext.esm.js","sources":["../../src/contexts/ScenarioContext.tsx"],"sourcesContent":["import React, { ReactNode, useState, useEffect } from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Action, FormScenario, Scenario } from '../utils/types';\nimport { riScRouteRef, scenarioRouteRef } from '../routes';\nimport { useNavigate, useParams } from 'react-router';\nimport { useSearchParams } from 'react-router-dom';\nimport { generateRandomId } from '../utils/utilityfunctions';\nimport { useRiScs } from './RiScContext';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../utils/translations';\n\nexport const emptyAction = (): Action => ({\n ID: generateRandomId(),\n title: '',\n description: '',\n status: 'Not started',\n url: '',\n});\n\nconst emptyScenario = (): Scenario => ({\n ID: generateRandomId(),\n title: '',\n description: '',\n threatActors: [],\n vulnerabilities: [],\n risk: {\n summary: '',\n probability: 0.01,\n consequence: 1000,\n },\n actions: [],\n remainingRisk: {\n summary: '',\n probability: 0.01,\n consequence: 1000,\n },\n});\n\ntype ScenarioDrawerProps = {\n isDrawerOpen: boolean;\n\n emptyFormScenario: (scenario: Scenario) => FormScenario;\n scenario: Scenario;\n submitNewScenario: (\n newScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => void;\n submitEditedScenarioToRiSc: (\n editedScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => void;\n\n openScenarioDrawer: (id: string) => void;\n openNewScenarioWizard: () => void;\n closeScenarioForm: () => void;\n mapFormScenarioToScenario: (formScenario: FormScenario) => Scenario;\n mapScenarioToFormScenario: (scenario: Scenario) => FormScenario;\n};\n\nexport type ScenarioWizardSteps = (typeof scenarioWizardSteps)[number];\nexport const scenarioWizardSteps = [\n 'scenario',\n 'initialRisk',\n 'measure',\n 'restRisk',\n] as const;\n\nconst ScenarioContext = React.createContext<ScenarioDrawerProps | undefined>(\n undefined,\n);\n\nconst ScenarioProvider = ({ children }: { children: ReactNode }) => {\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const getRiScPath = useRouteRef(riScRouteRef);\n const getScenarioPath = useRouteRef(scenarioRouteRef);\n const { scenarioId: scenarioIdFromParams } = useParams();\n\n const { selectedRiSc, updateRiSc } = useRiScs();\n const riSc = selectedRiSc ?? null;\n\n const [scenario, setScenario] = useState(emptyScenario());\n\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const emptyFormScenario = (initialScenario: Scenario): FormScenario => ({\n ...initialScenario,\n risk: {\n summary: '',\n probability: '0.01',\n consequence: '1000',\n },\n remainingRisk: {\n summary: '',\n probability: '0.01',\n consequence: '1000',\n },\n });\n\n // Open scenario when url changes\n useEffect(() => {\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n if (riSc) {\n // If there is no scenario ID in the URL, close the drawer and reset the scenario to an empty state\n if (!scenarioIdFromParams) {\n setIsDrawerOpen(false);\n const s = emptyScenario();\n\n setScenario(s);\n return;\n }\n\n if (scenarioWizardStep) {\n // If step query param exists in url then we are creating a new scenario with the wizard.\n return;\n }\n\n const selectedScenario = riSc.content.scenarios.find(\n s => s.ID === scenarioIdFromParams,\n );\n\n // If there is an invalid scenario ID in the URL, navigate to the RiSc with error state\n if (!selectedScenario) {\n navigate(getRiScPath({ riScId: riSc.id }), {\n state: t('errorMessages.ScenarioDoesNotExist'),\n });\n return;\n }\n\n setScenario(selectedScenario);\n setIsDrawerOpen(true);\n }\n }, [riSc, scenarioIdFromParams, getRiScPath, navigate, searchParams, t]);\n\n // SCENARIO DRAWER FUNCTIONS\n const openScenarioDrawer = (id: string) => {\n if (riSc) {\n navigate(getScenarioPath({ riScId: riSc.id, scenarioId: id }));\n }\n };\n\n const closeScenarioForm = () => {\n if (riSc) {\n navigate(getRiScPath({ riScId: riSc.id }));\n }\n };\n\n const submitNewScenario = (\n newScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => {\n if (riSc) {\n updateRiSc(\n {\n ...riSc.content,\n scenarios: riSc.content.scenarios.concat(newScenario),\n },\n onSuccess,\n onError,\n );\n }\n };\n\n const submitEditedScenarioToRiSc = (\n editedScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => {\n if (riSc) {\n updateRiSc(\n {\n ...riSc.content,\n scenarios: riSc.content.scenarios.map(s =>\n s.ID === editedScenario.ID ? editedScenario : s,\n ),\n },\n onSuccess,\n onError,\n );\n }\n };\n\n const openNewScenarioWizard = () => {\n if (riSc) {\n const s = emptyScenario();\n setScenario(s);\n\n navigate(\n `${getScenarioPath({\n riScId: riSc.id,\n scenarioId: s.ID,\n })}?step=scenario`,\n );\n }\n };\n\n const mapFormScenarioToScenario = (formScenario: FormScenario): Scenario => {\n const returnScenario: Scenario = {\n ...formScenario,\n risk: {\n ...formScenario.risk,\n probability: Number(formScenario.risk.probability),\n consequence: Number(formScenario.risk.consequence),\n },\n remainingRisk: {\n ...formScenario.remainingRisk,\n probability: Number(formScenario.remainingRisk.probability),\n consequence: Number(formScenario.remainingRisk.consequence),\n },\n };\n return returnScenario;\n };\n\n const mapScenarioToFormScenario = (apiScenario: Scenario): FormScenario => {\n const returnFormScenario: FormScenario = {\n ...apiScenario,\n risk: {\n ...apiScenario.risk,\n probability: `${apiScenario.risk.probability}`,\n consequence: `${apiScenario.risk.consequence}`,\n },\n remainingRisk: {\n ...apiScenario.remainingRisk,\n probability: `${apiScenario.remainingRisk.probability}`,\n consequence: `${apiScenario.remainingRisk.consequence}`,\n },\n };\n return returnFormScenario;\n };\n\n const value = {\n isDrawerOpen,\n\n emptyFormScenario,\n scenario,\n submitNewScenario,\n submitEditedScenarioToRiSc,\n\n openScenarioDrawer,\n openNewScenarioWizard,\n closeScenarioForm,\n mapFormScenarioToScenario,\n mapScenarioToFormScenario,\n };\n\n return (\n <ScenarioContext.Provider value={value}>\n {children}\n </ScenarioContext.Provider>\n );\n};\n\nconst useScenario = () => {\n const context = React.useContext(ScenarioContext);\n if (context === undefined) {\n throw new Error('useScenario must be used within a ScenarioProvider');\n }\n return context;\n};\n\nexport { ScenarioProvider, useScenario };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioContext.esm.js","sources":["../../src/contexts/ScenarioContext.tsx"],"sourcesContent":["import React, { ReactNode, useState, useEffect } from 'react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Action, FormScenario, Scenario } from '../utils/types';\nimport { riScRouteRef, scenarioRouteRef } from '../routes';\nimport { useNavigate, useParams } from 'react-router';\nimport { useSearchParams } from 'react-router-dom';\nimport { generateRandomId } from '../utils/utilityfunctions';\nimport { useRiScs } from './RiScContext';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../utils/translations';\n\nexport const emptyAction = (): Action => ({\n ID: generateRandomId(),\n title: '',\n description: '',\n status: 'Not started',\n url: '',\n});\n\nconst emptyScenario = (): Scenario => ({\n ID: generateRandomId(),\n title: '',\n description: '',\n threatActors: [],\n vulnerabilities: [],\n risk: {\n summary: '',\n probability: 0.01,\n consequence: 1000,\n },\n actions: [],\n remainingRisk: {\n summary: '',\n probability: 0.01,\n consequence: 1000,\n },\n});\n\ntype ScenarioDrawerProps = {\n isDrawerOpen: boolean;\n\n isActionExpanded: (actionId: string) => boolean;\n toggleActionExpanded: (actionId: string) => void;\n collapseAllActions: () => void;\n\n emptyFormScenario: (scenario: Scenario) => FormScenario;\n scenario: Scenario;\n submitNewScenario: (\n newScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => void;\n submitEditedScenarioToRiSc: (\n editedScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => void;\n\n openScenarioDrawer: (id: string) => void;\n openNewScenarioWizard: () => void;\n closeScenarioForm: () => void;\n mapFormScenarioToScenario: (formScenario: FormScenario) => Scenario;\n mapScenarioToFormScenario: (scenario: Scenario) => FormScenario;\n};\n\nexport type ScenarioWizardSteps = (typeof scenarioWizardSteps)[number];\nexport const scenarioWizardSteps = [\n 'scenario',\n 'initialRisk',\n 'measure',\n 'restRisk',\n] as const;\n\nconst ScenarioContext = React.createContext<ScenarioDrawerProps | undefined>(\n undefined,\n);\n\nconst ScenarioProvider = ({ children }: { children: ReactNode }) => {\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const getRiScPath = useRouteRef(riScRouteRef);\n const getScenarioPath = useRouteRef(scenarioRouteRef);\n const { scenarioId: scenarioIdFromParams } = useParams();\n\n const { selectedRiSc, updateRiSc } = useRiScs();\n const riSc = selectedRiSc ?? null;\n\n const [scenario, setScenario] = useState(emptyScenario());\n\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [expandedActions, setExpandedActions] = useState<{\n [key: string]: boolean;\n }>({});\n\n const toggleActionExpanded = (actionId: string) => {\n setExpandedActions(prevState => ({\n ...prevState,\n [actionId]: !prevState[actionId],\n }));\n };\n\n const collapseAllActions = () => {\n const allCollapsed = Object.keys(expandedActions).reduce((acc, key) => {\n acc[key] = false;\n return acc;\n }, {} as { [key: string]: boolean });\n setExpandedActions(allCollapsed);\n };\n\n const isActionExpanded = (actionId: string) => {\n return expandedActions[actionId] || false;\n };\n\n const emptyFormScenario = (initialScenario: Scenario): FormScenario => ({\n ...initialScenario,\n risk: {\n summary: '',\n probability: '0.01',\n consequence: '1000',\n },\n remainingRisk: {\n summary: '',\n probability: '0.01',\n consequence: '1000',\n },\n });\n\n // Open scenario when url changes\n useEffect(() => {\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n if (riSc) {\n // If there is no scenario ID in the URL, close the drawer and reset the scenario to an empty state\n if (!scenarioIdFromParams) {\n setIsDrawerOpen(false);\n const s = emptyScenario();\n\n setScenario(s);\n return;\n }\n\n if (scenarioWizardStep) {\n // If step query param exists in url then we are creating a new scenario with the wizard.\n return;\n }\n\n const selectedScenario = riSc.content.scenarios.find(\n s => s.ID === scenarioIdFromParams,\n );\n\n // If there is an invalid scenario ID in the URL, navigate to the RiSc with error state\n if (!selectedScenario) {\n navigate(getRiScPath({ riScId: riSc.id }), {\n state: t('errorMessages.ScenarioDoesNotExist'),\n });\n return;\n }\n\n setScenario(selectedScenario);\n setIsDrawerOpen(true);\n }\n }, [riSc, scenarioIdFromParams, getRiScPath, navigate, searchParams, t]);\n\n // SCENARIO DRAWER FUNCTIONS\n const openScenarioDrawer = (id: string) => {\n if (riSc) {\n navigate(getScenarioPath({ riScId: riSc.id, scenarioId: id }));\n }\n };\n\n const closeScenarioForm = () => {\n if (riSc) {\n navigate(getRiScPath({ riScId: riSc.id }));\n }\n };\n\n const submitNewScenario = (\n newScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => {\n if (riSc) {\n updateRiSc(\n {\n ...riSc.content,\n scenarios: riSc.content.scenarios.concat(newScenario),\n },\n onSuccess,\n onError,\n );\n }\n };\n\n const submitEditedScenarioToRiSc = (\n editedScenario: Scenario,\n onSuccess?: () => void,\n onError?: () => void,\n ) => {\n if (riSc) {\n updateRiSc(\n {\n ...riSc.content,\n scenarios: riSc.content.scenarios.map(s =>\n s.ID === editedScenario.ID ? editedScenario : s,\n ),\n },\n onSuccess,\n onError,\n );\n }\n };\n\n const openNewScenarioWizard = () => {\n if (riSc) {\n const s = emptyScenario();\n setScenario(s);\n\n navigate(\n `${getScenarioPath({\n riScId: riSc.id,\n scenarioId: s.ID,\n })}?step=scenario`,\n );\n }\n };\n\n const mapFormScenarioToScenario = (formScenario: FormScenario): Scenario => {\n const returnScenario: Scenario = {\n ...formScenario,\n risk: {\n ...formScenario.risk,\n probability: Number(formScenario.risk.probability),\n consequence: Number(formScenario.risk.consequence),\n },\n remainingRisk: {\n ...formScenario.remainingRisk,\n probability: Number(formScenario.remainingRisk.probability),\n consequence: Number(formScenario.remainingRisk.consequence),\n },\n };\n return returnScenario;\n };\n\n const mapScenarioToFormScenario = (apiScenario: Scenario): FormScenario => {\n const returnFormScenario: FormScenario = {\n ...apiScenario,\n risk: {\n ...apiScenario.risk,\n probability: `${apiScenario.risk.probability}`,\n consequence: `${apiScenario.risk.consequence}`,\n },\n remainingRisk: {\n ...apiScenario.remainingRisk,\n probability: `${apiScenario.remainingRisk.probability}`,\n consequence: `${apiScenario.remainingRisk.consequence}`,\n },\n };\n return returnFormScenario;\n };\n\n const value = {\n isDrawerOpen,\n\n isActionExpanded,\n toggleActionExpanded,\n collapseAllActions,\n\n emptyFormScenario,\n scenario,\n submitNewScenario,\n submitEditedScenarioToRiSc,\n\n openScenarioDrawer,\n openNewScenarioWizard,\n closeScenarioForm,\n mapFormScenarioToScenario,\n mapScenarioToFormScenario,\n };\n\n return (\n <ScenarioContext.Provider value={value}>\n {children}\n </ScenarioContext.Provider>\n );\n};\n\nconst useScenario = () => {\n const context = React.useContext(ScenarioContext);\n if (context === undefined) {\n throw new Error('useScenario must be used within a ScenarioProvider');\n }\n return context;\n};\n\nexport { ScenarioProvider, useScenario };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.esm.js","sources":["../../src/utils/hooks.ts"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { useCallback, useState } from 'react';\nimport {\n configApiRef,\n fetchApiRef,\n googleAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport {\n DifferenceDTO,\n GithubRepoInfo,\n ProcessingStatus,\n RiSc,\n RiScWithMetadata,\n SubmitResponseObject,\n} from './types';\nimport {\n ProcessRiScResultDTO,\n profileInfoToDTOString,\n PublishRiScResultDTO,\n RiScContentResultDTO,\n riScToDTOString,\n} from './DTOs';\nimport { latestSupportedVersion } from './constants';\nimport { pluginRiScTranslationRef } from './translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useGithubRepositoryInformation = (): GithubRepoInfo => {\n const [, org, repo] =\n useEntity().entity.metadata.annotations?.['backstage.io/view-url'].match(\n /github\\.com\\/([^\\/]+)\\/([^\\/]+)/,\n ) || [];\n\n return {\n owner: org,\n name: repo,\n };\n};\n\nexport const useAuthenticatedFetch = () => {\n const repoInformation = useGithubRepositoryInformation();\n const googleApi = useApi(googleAuthApiRef);\n const identityApi = useApi(identityApiRef);\n const { fetch } = useApi(fetchApiRef);\n const backendUrl = useApi(configApiRef).getString('backend.baseUrl');\n const riScUri = `${backendUrl}/api/proxy/risc-proxy/api/risc/${repoInformation.owner}/${repoInformation.name}`;\n const uriToFetchAllRiScs = `${riScUri}/${latestSupportedVersion}/all`;\n const uriToFetchDifference = (id: string) => `${riScUri}/${id}/difference`;\n const uriToFetchRiSc = (id: string) => `${riScUri}/${id}`;\n const uriToPublishRiSc = (id: string) => `${riScUri}/publish/${id}`;\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const useResponse = (): [\n SubmitResponseObject | null,\n (submitStatus: SubmitResponseObject | null) => void,\n ] => {\n const [submitResponse, setSubmitResponse] =\n useState<SubmitResponseObject | null>(null);\n\n // use callback to avoid infinite loop\n const displaySubmitResponse = useCallback(\n (submitStatus: SubmitResponseObject | null) => {\n setSubmitResponse(submitStatus);\n setTimeout(() => {\n setSubmitResponse(null);\n }, 10000);\n },\n [],\n );\n\n return [submitResponse, displaySubmitResponse];\n };\n\n const [response, setResponse] = useResponse();\n\n const authenticatedFetch = <T, K>(\n uri: string,\n method: 'GET' | 'POST' | 'PUT',\n onSuccess: (response: T) => void,\n onError: (error: K) => void,\n body?: string,\n ) => {\n Promise.all([\n identityApi.getCredentials(),\n googleApi.getAccessToken(['https://www.googleapis.com/auth/cloudkms']),\n ]).then(([idToken, googleAccessToken]) => {\n fetch(uri, {\n method: method,\n headers: {\n Authorization: `Bearer ${idToken.token}`,\n 'GCP-Access-Token': googleAccessToken,\n 'Content-Type': 'application/json',\n },\n body: body,\n }).then(res => {\n if (!res.ok) {\n return res\n .json()\n .then(json => json as K)\n .then(typedJson => onError(typedJson))\n .catch(error => onError(error));\n }\n return res\n .json()\n .then(json => json as T)\n .then(typedJson => onSuccess(typedJson));\n });\n });\n };\n\n const fetchDifference = (\n selectedRiSc: RiScWithMetadata,\n onSuccess: (response: DifferenceDTO) => void,\n onError?: () => void,\n ) =>\n identityApi.getProfileInfo().then(profile => {\n authenticatedFetch<DifferenceDTO, DifferenceDTO>(\n uriToFetchDifference(selectedRiSc.id),\n 'POST',\n onSuccess,\n () => {\n if (onError) onError();\n },\n riScToDTOString(selectedRiSc.content, false, profile),\n );\n });\n\n const fetchRiScs = (\n onSuccess: (response: RiScContentResultDTO[]) => void,\n onError?: () => void,\n ) =>\n authenticatedFetch<RiScContentResultDTO[], RiScContentResultDTO[]>(\n uriToFetchAllRiScs,\n 'GET',\n onSuccess,\n () => {\n if (onError) onError();\n setResponse({\n statusMessage: t('errorMessages.FailedToFetchRiScs'),\n status: ProcessingStatus.ErrorWhenFetchingRiScs,\n });\n },\n );\n\n const publishRiScs = (\n riScId: string,\n onSuccess?: (response: PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO) => void,\n ) =>\n identityApi.getProfileInfo().then(profile =>\n authenticatedFetch<PublishRiScResultDTO, ProcessRiScResultDTO>(\n uriToPublishRiSc(riScId),\n 'POST',\n res => {\n setResponse(res);\n if (onSuccess) onSuccess(res);\n },\n error => {\n setResponse(error);\n if (onError) onError(error);\n },\n profileInfoToDTOString(profile),\n ),\n );\n\n const postRiScs = (\n riSc: RiSc,\n onSuccess?: (response: ProcessRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO) => void,\n ) =>\n identityApi.getProfileInfo().then(profile =>\n authenticatedFetch<ProcessRiScResultDTO, ProcessRiScResultDTO>(\n riScUri,\n 'POST',\n res => {\n setResponse(res);\n if (onSuccess) onSuccess(res);\n },\n error => {\n setResponse(error);\n if (onError) onError(error);\n },\n riScToDTOString(riSc, true, profile),\n ),\n );\n\n const putRiScs = (\n riSc: RiScWithMetadata,\n onSuccess?: (response: ProcessRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO) => void,\n ) => {\n identityApi.getProfileInfo().then(profile =>\n authenticatedFetch<ProcessRiScResultDTO, ProcessRiScResultDTO>(\n uriToFetchRiSc(riSc.id),\n 'PUT',\n res => {\n setResponse(res);\n if (onSuccess) onSuccess(res);\n },\n error => {\n setResponse(error);\n if (onError) onError(error);\n },\n riScToDTOString(riSc.content, riSc.isRequiresNewApproval!!, profile),\n ),\n );\n };\n\n return {\n fetchRiScs,\n postRiScs,\n putRiScs,\n publishRiScs,\n response,\n setResponse,\n fetchDifference,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.esm.js","sources":["../../src/utils/hooks.ts"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { useCallback, useState } from 'react';\nimport {\n configApiRef,\n fetchApiRef,\n googleAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport {\n DifferenceDTO,\n GithubRepoInfo,\n ProcessingStatus,\n RiSc,\n RiScWithMetadata,\n SubmitResponseObject,\n} from './types';\nimport {\n ProcessRiScResultDTO,\n profileInfoToDTOString,\n PublishRiScResultDTO,\n RiScContentResultDTO,\n riScToDTOString,\n} from './DTOs';\nimport { latestSupportedVersion } from './constants';\nimport { pluginRiScTranslationRef } from './translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useGithubRepositoryInformation = (): GithubRepoInfo => {\n const [, org, repo] =\n useEntity().entity.metadata.annotations?.['backstage.io/view-url'].match(\n /github\\.com\\/([^\\/]+)\\/([^\\/]+)/,\n ) || [];\n\n return {\n owner: org,\n name: repo,\n };\n};\n\nexport const useAuthenticatedFetch = () => {\n const repoInformation = useGithubRepositoryInformation();\n const googleApi = useApi(googleAuthApiRef);\n const identityApi = useApi(identityApiRef);\n const { fetch } = useApi(fetchApiRef);\n const backendUrl = useApi(configApiRef).getString('backend.baseUrl');\n const riScUri = `${backendUrl}/api/proxy/risc-proxy/api/risc/${repoInformation.owner}/${repoInformation.name}`;\n const uriToFetchAllRiScs = `${riScUri}/${latestSupportedVersion}/all`;\n const uriToFetchDifference = (id: string) => `${riScUri}/${id}/difference`;\n const uriToFetchRiSc = (id: string) => `${riScUri}/${id}`;\n const uriToPublishRiSc = (id: string) => `${riScUri}/publish/${id}`;\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const useResponse = (): [\n SubmitResponseObject | null,\n (submitStatus: SubmitResponseObject | null) => void,\n ] => {\n const [submitResponse, setSubmitResponse] =\n useState<SubmitResponseObject | null>(null);\n\n // use callback to avoid infinite loop\n const displaySubmitResponse = useCallback(\n (submitStatus: SubmitResponseObject | null) => {\n setSubmitResponse(submitStatus);\n setTimeout(() => {\n setSubmitResponse(null);\n }, 10000);\n },\n [],\n );\n\n return [submitResponse, displaySubmitResponse];\n };\n\n const [response, setResponse] = useResponse();\n\n const authenticatedFetch = <T, K>(\n uri: string,\n method: 'GET' | 'POST' | 'PUT',\n onSuccess: (response: T) => void,\n onError: (error: K) => void,\n body?: string,\n ) => {\n Promise.all([\n identityApi.getCredentials(),\n googleApi.getAccessToken(['https://www.googleapis.com/auth/cloudkms']),\n ]).then(([idToken, googleAccessToken]) => {\n fetch(uri, {\n method: method,\n headers: {\n Authorization: `Bearer ${idToken.token}`,\n 'GCP-Access-Token': googleAccessToken,\n 'Content-Type': 'application/json',\n },\n body: body,\n }).then(res => {\n if (!res.ok) {\n return res\n .json()\n .then(json => json as K)\n .then(typedJson => onError(typedJson))\n .catch(error => onError(error));\n }\n return res\n .json()\n .then(json => json as T)\n .then(typedJson => onSuccess(typedJson));\n });\n });\n };\n\n const fetchDifference = (\n selectedRiSc: RiScWithMetadata,\n onSuccess: (response: DifferenceDTO) => void,\n onError?: () => void,\n ) =>\n identityApi.getProfileInfo().then(profile => {\n authenticatedFetch<DifferenceDTO, DifferenceDTO>(\n uriToFetchDifference(selectedRiSc.id),\n 'POST',\n onSuccess,\n () => {\n if (onError) onError();\n },\n riScToDTOString(selectedRiSc.content, false, profile),\n );\n });\n\n const fetchRiScs = (\n onSuccess: (response: RiScContentResultDTO[]) => void,\n onError?: () => void,\n ) =>\n authenticatedFetch<RiScContentResultDTO[], RiScContentResultDTO[]>(\n uriToFetchAllRiScs,\n 'GET',\n onSuccess,\n () => {\n if (onError) onError();\n setResponse({\n statusMessage: t('errorMessages.FailedToFetchRiScs'),\n status: ProcessingStatus.ErrorWhenFetchingRiScs,\n });\n },\n );\n\n const publishRiScs = (\n riScId: string,\n onSuccess?: (response: PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO) => void,\n ) =>\n identityApi.getProfileInfo().then(profile =>\n authenticatedFetch<PublishRiScResultDTO, ProcessRiScResultDTO>(\n uriToPublishRiSc(riScId),\n 'POST',\n res => {\n setResponse(res);\n if (onSuccess) onSuccess(res);\n },\n error => {\n setResponse(error);\n if (onError) onError(error);\n },\n profileInfoToDTOString(profile),\n ),\n );\n\n const postRiScs = (\n riSc: RiSc,\n onSuccess?: (response: ProcessRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO) => void,\n ) =>\n identityApi.getProfileInfo().then(profile =>\n authenticatedFetch<ProcessRiScResultDTO, ProcessRiScResultDTO>(\n riScUri,\n 'POST',\n res => {\n setResponse(res);\n if (onSuccess) onSuccess(res);\n },\n error => {\n setResponse(error);\n if (onError) onError(error);\n },\n riScToDTOString(riSc, true, profile),\n ),\n );\n\n const putRiScs = (\n riSc: RiScWithMetadata,\n onSuccess?: (response: ProcessRiScResultDTO | PublishRiScResultDTO) => void,\n onError?: (error: ProcessRiScResultDTO) => void,\n ) => {\n identityApi.getProfileInfo().then(profile =>\n authenticatedFetch<\n ProcessRiScResultDTO | PublishRiScResultDTO,\n ProcessRiScResultDTO\n >(\n uriToFetchRiSc(riSc.id),\n 'PUT',\n res => {\n setResponse(res);\n if (onSuccess) onSuccess(res);\n },\n error => {\n setResponse(error);\n if (onError) onError(error);\n },\n riScToDTOString(riSc.content, riSc.isRequiresNewApproval!!, profile),\n ),\n );\n };\n\n return {\n fetchRiScs,\n postRiScs,\n putRiScs,\n publishRiScs,\n response,\n setResponse,\n fetchDifference,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -103,6 +103,7 @@ const pluginRiScTranslationRef = createTranslationRef({
|
|
|
103
103
|
scenarioTable: {
|
|
104
104
|
title: "Risk scenarios",
|
|
105
105
|
addScenarioButton: "Add scenario",
|
|
106
|
+
noActions: "No actions",
|
|
106
107
|
columns: {
|
|
107
108
|
consequenceChar: "C",
|
|
108
109
|
probabilityChar: "P",
|
|
@@ -330,7 +331,8 @@ const pluginRiScTranslationRef = createTranslationRef({
|
|
|
330
331
|
CreatedPullRequest: "Successfully saved approval of risk scorecard ",
|
|
331
332
|
UpdatedRiSc: "Risk scorecard updated",
|
|
332
333
|
UpdatedRiScRequiresNewApproval: "Risk scorecard update and requires new approval",
|
|
333
|
-
CreatedRiSc: "Created new risk scorecard successfully"
|
|
334
|
+
CreatedRiSc: "Created new risk scorecard successfully",
|
|
335
|
+
UpdatedRiScAndCreatedPullRequest: "Risk scorecard updated and ready for approval in Github"
|
|
334
336
|
}
|
|
335
337
|
}
|
|
336
338
|
});
|
|
@@ -407,6 +409,7 @@ const pluginRiScNorwegianTranslation = createTranslationResource({
|
|
|
407
409
|
"migrationDialog.checkboxLabel": "Jeg bekrefter at jeg har gjennomg\xE5tt og \xF8nsker \xE5 lagre endringene som er gjort under migreringen.",
|
|
408
410
|
"scenarioTable.title": "Risikoscenarioer",
|
|
409
411
|
"scenarioTable.addScenarioButton": "Legg til scenario",
|
|
412
|
+
"scenarioTable.noActions": "Ingen tiltak",
|
|
410
413
|
"scenarioTable.columns.consequenceChar": "K",
|
|
411
414
|
"scenarioTable.columns.probabilityChar": "S",
|
|
412
415
|
"scenarioTable.columns.completed": "fullf\xF8rt",
|
|
@@ -537,7 +540,8 @@ const pluginRiScNorwegianTranslation = createTranslationResource({
|
|
|
537
540
|
"infoMessages.CreatedPullRequest": "Godkjenning av risiko- og s\xE5rbarhetsanalysen ble lagret",
|
|
538
541
|
"infoMessages.UpdatedRiSc": "Risiko- og s\xE5rbarhetsanalysen ble oppdatert",
|
|
539
542
|
"infoMessages.UpdatedRiScRequiresNewApproval": "Risiko- og s\xE5rbarhetsanalysen ble oppdatert og trenger ny godkjenning",
|
|
540
|
-
"infoMessages.CreatedRiSc": "Risiko- og s\xE5rbarhetsanalyse ble opprettet"
|
|
543
|
+
"infoMessages.CreatedRiSc": "Risiko- og s\xE5rbarhetsanalyse ble opprettet",
|
|
544
|
+
"infoMessages.UpdatedRiScAndCreatedPullRequest": "Risiko- og s\xE5rbarhetsanalysen ble oppdatert og er klar for godkjenning i Github"
|
|
541
545
|
}
|
|
542
546
|
})
|
|
543
547
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.esm.js","sources":["../../src/utils/translations.ts"],"sourcesContent":["import {\n createTranslationRef,\n createTranslationResource,\n} from '@backstage/core-plugin-api/alpha';\n\nexport const pluginRiScTranslationRef = createTranslationRef({\n id: 'plugin.riSc',\n messages: {\n contentHeader: {\n title: 'Risk scorecard',\n createNewButton: 'Create new scorecard',\n },\n dictionary: {\n cancel: 'Cancel',\n close: 'Close',\n completed: 'Completed',\n confirm: 'Confirm',\n consequence: 'Consequence', // Severity, Impact, Effect or Consequence\n deadline: 'Deadline', // Deadline or Due date\n delete: 'Delete',\n description: 'Description',\n discardChanges: 'Discard changes',\n edit: 'Edit',\n estimatedRisk: 'Estimated risk',\n initialRisk: 'Initial risk', // Starting or Initial risk\n measure: 'Action', // Measure, Action or Initiative\n measures: 'Actions', // Measure, Action or Initiative\n measureOwner: 'Responsible', // Responsible? Measure owner? Initiative owner?\n next: 'Next',\n planned: 'Planned',\n previous: 'Previous',\n probability: 'Probability', // Likelihood or Probability\n restRisk: 'Remaining risk', // Residual or Remaining risk\n risk: 'Risk',\n save: 'Save',\n saveAndClose: 'Save and close',\n scenario: 'Scenario',\n scope: 'Scope',\n status: 'Status',\n threatActors: 'Threat actors',\n title: 'Title',\n url: 'URL',\n emptyField: 'No {{field}} specified',\n vulnerabilities: 'Vulnerabilities',\n },\n rosStatus: {\n statusBadge: {\n missing: 'Awaiting acceptance from risk owner', // Mangler godkjenning av risikoeier\n approved: 'Accepted by risk owner', // Godkjent av risikoeier\n error: 'Failed to retrieve status', // Kunne ikke hente status\n migration: {\n title: 'You are required to review and save changes',\n description:\n 'There has been done changes to the risk scorecard, as a result of a migration to the newest version. The changes may include deletion and modification of information. It will not be possible to save edits of the scorecard without including and accepting the changes.', // Automatisk migrering av ROS\n },\n },\n difference: {\n description: 'Summary of changes that will be approved by risk owner.',\n publishDate: 'Last published changes {{date}}',\n fetching: 'Fetching changes',\n error: 'Error while fetching changes',\n newROS: 'No published Risk scorecards to compare with',\n differences: {\n title: 'CHANGES',\n noneRemoved: 'Nothing is removed',\n titleRemoved: 'Removed from ROS-analysis',\n titleExisting: 'Changed existing ROS-analysis',\n noneExisting: 'Nothing is changed',\n titleAdded: 'Added to ROS-analysis',\n noneAdded: 'Nothing is added',\n },\n },\n prStatus: ' Pending pull request in ', // Avventer godkjenning av PR i Github\n approveButton: 'Accept risks', // Godkjenn ROS\n moreInformationButton: 'More information', // Lagre ROS migrering\n },\n publishDialog: {\n title: 'Accept risks', // Godkjenn ROS\n checkboxLabel:\n 'I confirm that I am the risk owner and accept the risks detailed in this risk scorecard.',\n },\n migrationDialog: {\n description:\n 'The changes have been done to adhere to the latest schema version. In this case, the RiSc was update to ',\n description2: 'from',\n description3: '. Review the ',\n description4: 'for more information.',\n changelog: 'schema changelog',\n title: 'Save changes', // Lagre ROS migrering\n checkboxLabel:\n 'I confirm that I have reviewed and wish to save the changes made during the migration.',\n },\n scenarioTable: {\n title: 'Risk scenarios',\n addScenarioButton: 'Add scenario',\n columns: {\n consequenceChar: 'C',\n probabilityChar: 'P',\n completed: 'complete',\n },\n },\n riskMatrix: {\n title: 'Risk matrix', // Risk matrix or Risk overview\n estimatedRisk: {\n title: 'Estimated risk',\n suffix: {\n thousand: '{{count}} thousand',\n million_one: '{{count}} million',\n million_other: '{{count}} million',\n billion_one: '{{count}} billion',\n billion_other: '{{count}} billion',\n trillion_one: '{{count}} trillion',\n trillion_other: '{{count}} trillion',\n },\n unit: {\n nokPerYear: 'NOK/year',\n },\n },\n tooltip: {\n title: 'Risk scenarios',\n },\n },\n infoDialog: {\n title: 'Estimated risk',\n description:\n 'The estimated risk is a calculation based on the risks the different scenarios pose. If there is a high probability that a serious consequence will occur, this could potentially become a large cost for the organization. In other words, the cost is an attempt to make the risk value more tangible and is the sum of the estimated risk for all the risk scenarios in this risk scorecard.',\n calculatedHowTitle: 'How do we calculate the estimated risk?',\n calculatedHow:\n 'Consequence is measured in cost (in NOK) per incident and probability is measured in incidents per year. ' +\n 'The estimated risk is calculated as C x P.',\n consequenceTitle: 'Consequence (NOK/incident)', // incident, event or occurrence\n probabilityTitle: 'Probability (incidents/year)',\n probabilityDescription: {\n '0': 'every 100 years', // 100 year intervals?\n '1': 'every 10 years', // 10 year intervals?\n '2': 'yearly', // almost yearly?\n '3': 'weekly',\n '4': 'daily',\n },\n example:\n 'A scenario with consequence 2 and probability 4 has an estimated risk of ' +\n '30 000 NOK/incident x 50 incidents/year = 1 500 000 NOK/year.',\n },\n rosDialog: {\n titleNew: 'New risk scorecard',\n titleEdit: 'Edit scorecard',\n titleError: 'The scorecard has to have a title',\n scopeDescription:\n 'Describe what the risk analysis will assess. Specify any key areas which are not part of the scope.',\n scopeError: 'The scorecard has to have a description of the scope',\n },\n scenarioStepper: {\n initialRiskStep: {\n title: 'Initial risk',\n subtitle:\n 'The initial risk is defined by the consequence of the scenario and the probability of it occurring.',\n consequenceSubtitle:\n 'How severe is the potential impact? If the scenario can impact more than one category, choose the highest level of consequence.',\n probabilitySubtitle:\n 'How likely is it that this scenario will occur? If you are between two probability values, choose the higher one.',\n },\n restRiskStep: {\n title: 'Remaining risk',\n subtitle:\n 'What is the risk reduced to when all the planned actions have been completed?',\n consequenceSubtitle:\n 'How severe is the consequence of this scenario after all actions are complete?',\n probabilitySubtitle:\n 'What is the likelihood of this scenario after all actions are complete?',\n },\n },\n scenarioDrawer: {\n action: {\n requiredError: 'Field is required',\n descriptionError: 'Description cannot be empty',\n urlError: 'Invalid url',\n emptyState: 'This scenario has no defined actions',\n },\n title: 'Risk scenario',\n titleError: 'Scenario title is required',\n subtitle:\n 'An unwanted incident that could potentially harm the component.', // harm or affect negatively?\n threatActorSubtitle: 'Someone who attempts to access or abuse the system', // system or component or both?\n vulnerabilitySubtitle:\n 'Weakness in the system that the threat actor can exploit',\n riskMatrixModal: {\n startRisk: 'What is the risk before any mitigating actions are taken?',\n restRisk: 'What is the risk after all planned actions are completed?',\n title: 'Risk matrixes',\n },\n consequenceTab: {\n subtitle:\n 'How severe is the potential impact? If the scenario can impact more than one category, choose the highest level of consequence.',\n },\n probabilityTab: {\n subtitle:\n 'How likely is it that this scenario will occur? If you are between two probability values, choose the higher one.',\n },\n measureTab: {\n subtitle:\n 'What actions should be taken to avoid or reduce the risk of this scenario?',\n measureOwnerDescription:\n 'Decide who will be responsible for completion of this action',\n addMeasureButton: 'Add planned action',\n plannedMeasures: 'Planned actions',\n },\n restRiskTab: {\n subtitle:\n 'Define the remaining risk for the scenario. Remaining risk is the consequence and probability for this ' +\n 'scenario after all planned actions have been completed.',\n },\n deleteScenarioButton: 'Delete scenario',\n deleteScenarioConfirmation:\n 'Are you sure you want to delete this scenario?',\n deleteActionButton: 'Delete action',\n deleteActionConfirmation: 'Are you sure you want to delete this action?',\n closeConfirmation: 'Do you want to save your changes?',\n },\n consequenceTable: {\n rows: {\n '1': 'Negligible', // Insignificant, negligible (ubetydelig)\n '2': 'Small', // Liten\n '3': 'Moderate',\n '4': 'Severe', // Alvorlig\n '5': 'Critical', // Catastrophic eller Critical\n },\n columns: {\n health: 'Life and health', // Health and safety, Life and limb, Health and lives (Liv og helse)\n economical: 'Financial', // Financial consequences, economic implications\n privacy: 'Privacy', // Personvern\n reputation: 'Reputation and trust', // Reputation and trust, confidence, faith (Omdømme og tillit)\n },\n cells: {\n health: {\n '1': 'Impact on life and health cannot be rated less severe than 3', // Liv og helse kan ikke være mindre alvorlig enn 3\n '2': 'Impact on life and health cannot be rated less severe than 3',\n '3': 'Temporary or less severe health implications. Temporary or minor damage to local environment.', // implications, effects or consequence? Temporary or minor? Midlertidige eller mindre alvorlige helsemessige konsekvenser. Midlertidig eller mindre skade på miljøet\n '4': 'Permanent or severe health implications for a few people. Moderate damage to the environment in a limited area.',\n '5': 'Death or permanent severe health implications for many people. Severe damage to the environment across large areas.',\n },\n economical: {\n '1': 'Temporary minor financial loss.\\n\\nMay be fixed within an hour by one employee',\n '2': 'Temporary financial loss.\\n\\nMay be fixed within three days by one employee',\n '3': 'Financial loss of some duration.\\n\\nMay be fixed within a month by three employees',\n '4': 'Financial loss of considerable duration for the organization and any third parties.\\n\\nMay be fixed within a year by 10 employees',\n '5': 'Permanent and severe financial loss.\\n\\nMay be fixed within three years by 100 employees',\n },\n privacy: {\n '1': 'The right to privacy is violated for a very short period and does not involve sensitive categories or vulnerable groups', // særlige kategorier = sensitive kategorier? special/particular/sensitive categories\n '2': 'The right to privacy is violated for a longer period and involves sensitive categories or vulnerable groups.',\n '3': 'Violations of the rights and freedoms for the registered people.',\n '4': 'Severe violations and breaches of the rights and freedoms for the registered people, as well as violations of the law.',\n '5': 'Impact on privacy cannot be rated more severe than 4',\n },\n reputation: {\n '1': 'Temporary loss of reputation and little impact on trust',\n '2': 'Negative attention in national media that leads to loss of reputation.\\n\\nMay reduce trust.',\n '3': 'Lasting negative attention in national and international media that leads to severe loss of reputation.\\n\\nSevere loss of trust from authorities.\\n\\nUsers who do not dare or want to use the services.', // lasting, severe, severe loss, severe loss of trust, do not dare or want to use the services\n '4': 'Impact on reputation and trust cannot be rated more severe than 3',\n '5': 'Impact on reputation and trust cannot be rated more severe than 3',\n },\n },\n },\n probabilityTable: {\n rows: {\n '1': 'Very low', // svært liten\n '2': 'Low', // liten\n '3': 'Moderat', // moderat\n '4': 'High', // stor\n '5': 'Very high', // svært stor\n },\n cells: {\n '1': 'The scenario is unlikely to occur.\\n\\nIt occurs less often than every 100 years',\n '2': 'The scenario is unlikely to occur.\\n\\nIt can occur every 10 years',\n '3': 'The scenario can occur.\\n\\nIt can occur almost every year',\n '4': 'The scenario will very likely occur.\\n\\nIt can occur almost weekly',\n '5': 'The scenario is almost guaranteed to occur.\\n\\nIt can occur almost daily',\n },\n },\n threatActors: {\n 'Script kiddie': 'Script kiddie',\n Hacktivist: 'Hacktivist',\n 'Reckless employee': 'Reckless employee',\n Insider: 'Insider',\n 'Organised crime': 'Organised crime',\n 'Terrorist organisation': 'Terrorist organisation',\n 'Nation/government': 'Nation/government',\n },\n vulnerabilities: {\n 'Flawed design': 'Flawed design',\n Misconfiguration: 'Misconfiguration',\n 'Dependency vulnerability': 'Dependency vulnerability',\n 'Unauthorized access': 'Unauthorized use',\n 'Unmonitored use': 'Unmonitored use',\n 'Input tampering': 'Input tampering',\n 'Information leak': 'Information leak',\n 'Excessive use': 'Excessive use',\n },\n actionStatus: {\n 'Not started': 'Not started',\n 'In progress': 'In progress',\n 'On hold': 'On hold',\n Completed: 'Completed',\n Aborted: 'Aborted',\n },\n errorMessages: {\n DefaultErrorMessage: 'An error occured',\n ErrorWhenUpdatingRiSc: 'Failed to update risk scorecard',\n ErrorWhenCreatingPullRequest: 'Failed to save approval of risk scorecard',\n ErrorWhenCreatingRiSc: 'Failed to create risk scorecard',\n ErrorWhenFetchingRiScs: 'Failed to fetch risk scorecards with ids: ',\n FailedToFetchRiScs: 'Failed to fetch risk scorecards',\n RiScDoesNotExist:\n 'The risk scorecard you are trying to open does not exist',\n ScenarioDoesNotExist:\n 'The scenario you are trying to open does not exist',\n },\n infoMessages: {\n CreatedPullRequest: 'Successfully saved approval of risk scorecard ',\n UpdatedRiSc: 'Risk scorecard updated',\n UpdatedRiScRequiresNewApproval:\n 'Risk scorecard update and requires new approval',\n CreatedRiSc: 'Created new risk scorecard successfully',\n },\n },\n});\n\nexport const pluginRiScNorwegianTranslation = createTranslationResource({\n ref: pluginRiScTranslationRef,\n translations: {\n no: () =>\n Promise.resolve({\n default: {\n 'contentHeader.title': 'Risiko- og sårbarhetsanalyse',\n 'contentHeader.createNewButton': 'Opprett ny analyse',\n\n 'dictionary.cancel': 'Avbryt',\n 'dictionary.close': 'Lukk',\n 'dictionary.completed': 'Fullført',\n 'dictionary.confirm': 'Bekreft',\n 'dictionary.consequence': 'Konsekvens',\n 'dictionary.deadline': 'Frist',\n 'dictionary.delete': 'Slett',\n 'dictionary.description': 'Beskrivelse',\n 'dictionary.discardChanges': 'Forkast endringer',\n 'dictionary.edit': 'Rediger',\n 'dictionary.estimatedRisk': 'Estimert risiko',\n 'dictionary.initialRisk': 'Startrisiko',\n 'dictionary.measure': 'Tiltak',\n 'dictionary.measures': 'Tiltak',\n 'dictionary.measureOwner': 'Tiltakseier',\n 'dictionary.next': 'Neste',\n 'dictionary.planned': 'Planlagt',\n 'dictionary.previous': 'Forrige',\n 'dictionary.probability': 'Sannsynlighet',\n 'dictionary.restRisk': 'Restrisiko',\n 'dictionary.risk': 'Risiko',\n 'dictionary.save': 'Lagre',\n 'dictionary.saveAndClose': 'Lagre og lukk',\n 'dictionary.scenario': 'Scenario',\n 'dictionary.scope': 'Omfang',\n 'dictionary.status': 'Status',\n 'dictionary.threatActors': 'Trusselaktører',\n 'dictionary.title': 'Tittel',\n 'dictionary.url': 'URL',\n 'dictionary.emptyField': 'Ingen {{field}} spesifisert',\n 'dictionary.vulnerabilities': 'Sårbarheter',\n\n 'scenarioDrawer.action.descriptionError':\n 'Beskrivelse kan ikke være tom',\n 'scenarioDrawer.action.urlError': 'Ugyldig URL',\n 'scenarioDrawer.action.requiredError': 'Feltet er påkrevd',\n 'scenarioDrawer.action.emptyState':\n 'Scenariet har ingen definerte tiltak',\n\n 'rosStatus.statusBadge.missing':\n 'Venter på godkjenning av risikoeier',\n 'rosStatus.statusBadge.approved': 'Godkjent av risikoeier',\n 'rosStatus.statusBadge.error': 'Kunne ikke hente status',\n 'rosStatus.statusBadge.migration.title':\n 'Gjennomgang og lagring av endringer kreves',\n 'rosStatus.statusBadge.migration.description':\n 'Det har blitt gjort endringer i risiko- og sårbarhetsanalysen, som følge av en migrering til nyeste versjon. Endringene kan være både sletting og endring av informsasjon. Det vil ikke være mulig å lagre endringer av analysen uten å inkludere og godta endringene.',\n 'rosStatus.prStatus': ' Avventer godkjenning av pull request i ',\n 'rosStatus.approveButton': 'Godkjenn ROS',\n 'rosStatus.moreInformationButton': 'Mer informasjon',\n 'rosStatus.difference.description':\n 'Oppsummering av endringer som må godkjennes av risikoeier.',\n 'rosStatus.difference.publishDate':\n 'Siste publiserte endringer {{date}}',\n 'rosStatus.difference.fetching': 'Henter endringer',\n 'rosStatus.difference.error': 'Feil med uthenting av endringer',\n 'rosStatus.difference.newROS':\n 'Ingen publiserte ROS-analyser å sammenligne med',\n 'rosStatus.difference.differences.title': 'ENDRINGER',\n 'rosStatus.difference.differences.titleRemoved':\n 'Fjernet fra ROS-analyse',\n 'rosStatus.difference.differences.noneRemoved':\n 'Ingenting er fjernet',\n 'rosStatus.difference.differences.titleExisting':\n 'Endret eksisterende ROS-analyse',\n 'rosStatus.difference.differences.noneExisting':\n 'Ingenting er endret',\n 'rosStatus.difference.differences.titleAdded':\n 'Lagt til i ROS-analyse',\n 'rosStatus.difference.differences.noneAdded': 'Ingenting er lagt til',\n\n 'publishDialog.title': 'Godkjenn ROS-analyse',\n 'publishDialog.checkboxLabel':\n 'Jeg bekrefter at jeg er risikoeier og godtar risikoen beskrevet i denne risiko- og sårbarhetsanalysen.',\n\n 'migrationDialog.title': 'Lagre endringer',\n 'migrationDialog.description':\n 'Endringene er gjort for å følge den nyeste skjema versjonen. I dette tilfellet ble ROS-analysen oppdatert til ',\n 'migrationDialog.description2': 'fra',\n 'migrationDialog.description3': '. Se ',\n 'migrationDialog.description4': 'for mer informasjon.',\n 'migrationDialog.changelog': 'endringslogg for skjema',\n\n 'migrationDialog.checkboxLabel':\n 'Jeg bekrefter at jeg har gjennomgått og ønsker å lagre endringene som er gjort under migreringen.',\n\n 'scenarioTable.title': 'Risikoscenarioer',\n 'scenarioTable.addScenarioButton': 'Legg til scenario',\n 'scenarioTable.columns.consequenceChar': 'K',\n 'scenarioTable.columns.probabilityChar': 'S',\n 'scenarioTable.columns.completed': 'fullført',\n\n 'riskMatrix.title': 'Risikomatrise',\n 'riskMatrix.estimatedRisk.title': 'Estimert risiko',\n 'riskMatrix.estimatedRisk.suffix.thousand': '{{count}} tusen',\n 'riskMatrix.estimatedRisk.suffix.million_one': '{{count}} million',\n 'riskMatrix.estimatedRisk.suffix.million_other':\n '{{count}} millioner',\n 'riskMatrix.estimatedRisk.suffix.billion_one': '{{count}} milliard',\n 'riskMatrix.estimatedRisk.suffix.billion_other':\n '{{count}} milliarder',\n 'riskMatrix.estimatedRisk.suffix.trillion_one': '{{count}} billion',\n 'riskMatrix.estimatedRisk.suffix.trillion_other':\n '{{count}} billioner',\n 'riskMatrix.estimatedRisk.unit.nokPerYear': 'kr/år',\n 'riskMatrix.tooltip.title': 'Risikoscenarioer',\n\n 'infoDialog.title': 'Estimert risiko',\n 'infoDialog.description':\n 'Den estimerte risikoen er basert på hvor stor risiko de forskjellige scenariene utgjør. Hvis det er stor sannsynlighet for at en alvorlig konsekvens skjer er det høy risiko for at det kan bli en stor kostnad for organisasjonen. Kostnaden er med andre ord et forsøk på å konkretisere verdien av risiko og er summen av den estimerte risikoen for alle risikoscenariene i denne ROS-analysen.',\n 'infoDialog.calculatedHowTitle':\n 'Hvordan regner vi ut estimert risiko?',\n 'infoDialog.calculatedHow':\n 'Konsekvens måles i kroner per hendelse og sannsynlighet måles i hendelser per år. Den estimerte risikoen blir da: K x S.',\n 'infoDialog.consequenceTitle': 'Konsekvens (kr/hendelse)',\n 'infoDialog.probabilityTitle': 'Sannsynlighet (hendelser/år)',\n 'infoDialog.probabilityDescription.0': 'ca hvert 100. år',\n 'infoDialog.probabilityDescription.1': 'ca hvert 10. år',\n 'infoDialog.probabilityDescription.2': 'ca årlig',\n 'infoDialog.probabilityDescription.3': 'ca ukentlig',\n 'infoDialog.probabilityDescription.4': 'ca daglig',\n 'infoDialog.example':\n 'Et risikoscenario med konsekvens 2 og sannsynlighet 4 har en estimert risiko på 30 000 kr/hendelse x 50 hendelser/år = 1 500 000 kr/år.',\n\n 'rosDialog.titleNew': 'Ny risiko- og sårbarhetsanalyse',\n 'rosDialog.titleEdit': 'Rediger tittel og omfang',\n 'rosDialog.titleError': 'ROS-analysen må ha en tittel',\n 'rosDialog.scopeDescription':\n 'Beskriv hva analysen skal vurdere. Hva som ikke inngår som en del av omfanget må også defineres.', // TODO\n 'rosDialog.scopeError': 'ROS-analysen må ha et omfang',\n\n 'scenarioStepper.initialRiskStep.title': 'Startrisiko',\n 'scenarioStepper.initialRiskStep.subtitle':\n 'Risikoen er kombinasjonen av konsekvensen av scenarioet og sannsynligheten for at det inntreffer.',\n 'scenarioStepper.initialRiskStep.consequenceSubtitle':\n 'Hvor alvorlig er den potensielle konsekvensen? Hvis konsekvensen gjelder flere kategorier velg det høyeste konsekvensnivået av disse.',\n 'scenarioStepper.initialRiskStep.probabilitySubtitle':\n 'Hvor stor sannsynlighet er det for at dette scenarioet vil forekomme. Dersom du er mellom to sannsynlighetsverdier velg den høyeste.',\n 'scenarioStepper.restRiskStep.title': 'Restrisiko',\n 'scenarioStepper.restRiskStep.subtitle':\n 'Hvordan endrer risikoen seg fra startrisikoen etter alle tiltakene er fullført?',\n 'scenarioStepper.restRiskStep.consequenceSubtitle':\n 'Hva blir konsekvensen etter alle tiltakene er fullført?',\n 'scenarioStepper.restRiskStep.probabilitySubtitle':\n 'Hva blir sannsynligheten etter alle tiltakene er fullført?',\n\n 'scenarioDrawer.title': 'Risikoscenario',\n 'scenarioDrawer.titleError': 'Scenarioet må ha en tittel',\n 'scenarioDrawer.subtitle':\n 'En uønsket hendelse som potensielt kan ramme komponenten',\n 'scenarioDrawer.riskMatrixModal.title': 'Risikomatriser',\n 'scenarioDrawer.riskMatrixModal.startRisk':\n 'Hvor stor er risikoen før man utfører noen tiltak?',\n 'scenarioDrawer.riskMatrixModal.restRisk':\n 'Hvor stor er risikoen etter at alle tiltakene er fullført?',\n\n 'scenarioDrawer.threatActorSubtitle':\n 'Noen som prøver å få tilgang til eller misbruke systemet',\n 'scenarioDrawer.vulnerabilitySubtitle':\n 'Svakhet i systemet som kan utnyttes av trusselaktøren',\n 'scenarioDrawer.consequenceTab.subtitle':\n 'Hvor alvorlig er den potensielle konsekvensen? Hvis scenarioet kan få konsekvenser i flere kategorier velg det høyeste konsekvensnivået av disse.',\n 'scenarioDrawer.probabilityTab.subtitle':\n 'Hvor stor sannsynlighet er det for at dette scenarioet vil forekomme. Dersom du er mellom to sannsynlighetsverdier velg den høyeste.',\n 'scenarioDrawer.measureTab.subtitle':\n 'Hvilke tiltak bør gjøres for å unngå scenarioet?',\n 'scenarioDrawer.measureTab.measureOwnerDescription':\n 'De eller den som er ansvarlig for at tiltaket blir gjennomført',\n 'scenarioDrawer.measureTab.addMeasureButton': 'Legg til tiltak',\n 'scenarioDrawer.measureTab.plannedMeasures': 'Planlagte tiltak',\n 'scenarioDrawer.restRiskTab.subtitle':\n 'Sett restrisiko for scenarioet. Restrisiko er konsekvens og sannsynlighet for scenarioet etter at alle tiltak i listen er gjennomført.',\n 'scenarioDrawer.deleteScenarioButton': 'Slett scenario',\n 'scenarioDrawer.deleteScenarioConfirmation':\n 'Er du sikker på at du vil slette scenario?',\n 'scenarioDrawer.deleteActionButton': 'Slett tiltak',\n 'scenarioDrawer.deleteActionConfirmation':\n 'Er du sikker på at du vil slette tiltak?',\n 'scenarioDrawer.closeConfirmation': 'Vil du lagre endringene dine?',\n\n 'consequenceTable.rows.1': 'Ubetydelig',\n 'consequenceTable.rows.2': 'Liten',\n 'consequenceTable.rows.3': 'Moderat',\n 'consequenceTable.rows.4': 'Alvorlig',\n 'consequenceTable.rows.5': 'Kritisk',\n 'consequenceTable.columns.health': 'Liv og helse',\n 'consequenceTable.columns.economical': 'Økonomi og drift',\n 'consequenceTable.columns.privacy': 'Personvern',\n 'consequenceTable.columns.reputation': 'Omdømme og tillit',\n 'consequenceTable.cells.health.1':\n 'Liv og helse kan ikke være mindre alvorlig enn 3',\n 'consequenceTable.cells.health.2':\n 'Liv og helse kan ikke være mindre alvorlig enn 3',\n 'consequenceTable.cells.health.3':\n 'Lettere skade på personer.\\n\\nNoe skade på lokalt miljø.',\n 'consequenceTable.cells.health.4':\n 'Et fåtall alvorlige personskader.\\n\\nModerat skade på miljø på et begrenset område.',\n 'consequenceTable.cells.health.5':\n 'Dødsfall. Svært alvorlig skade på milhø over store områder.',\n 'consequenceTable.cells.economical.1':\n 'Ubetydelig økonomisk tap.\\n\\nKan fikses i løpet av en time av én ansatt.',\n 'consequenceTable.cells.economical.2':\n 'Mindre økonomisk tap.\\n\\nKan fikses i løpet av tre dager av én ansatt.',\n 'consequenceTable.cells.economical.3':\n 'Moderat økonomisk tap.\\n\\nKan fikses i løpet av en måned av tre ansatte.',\n 'consequenceTable.cells.economical.4':\n 'Større økonomisk tap.\\n\\nKan fikses i løpet av et år av 10 ansatte.',\n 'consequenceTable.cells.economical.5':\n 'Kritisk økonomisk tap.\\n\\nKan fikses i løpet av tre år av 100 ansatte.',\n 'consequenceTable.cells.privacy.1': 'Ingen brudd.',\n 'consequenceTable.cells.privacy.2': 'Mindre brudd.',\n 'consequenceTable.cells.privacy.3':\n 'Brudd på registrertes rettigheter og friheter.',\n 'consequenceTable.cells.privacy.4':\n 'Meget alvorlige brudd på registrertes rettigheter og friheter, samt lovbrudd.',\n 'consequenceTable.cells.privacy.5':\n 'Personvern kan ikke være mer alvorlig enn 4',\n 'consequenceTable.cells.reputation.1':\n 'Liten fare for omdømmetap og liten innvikrning på tillit',\n 'consequenceTable.cells.reputation.2':\n 'Negativ oppmerksomhet i regionale og nasjonale medier som fører til omdømmetap.\\n\\nKan redusere tillit.',\n 'consequenceTable.cells.reputation.3':\n 'Negativ oppmerksomhet i nasjonale og internasjonale medier som fører til alvorlig omdømmetap.\\n\\nAlvorlig redusert tillit fra myndigheter.\\n\\nBrukere som ikke tør / vil bruke tjenestene.',\n 'consequenceTable.cells.reputation.4':\n 'Omdømme og tillit kan ikke være mer alvorlig enn 3',\n 'consequenceTable.cells.reputation.5':\n 'Omdømme og tillit kan ikke være mer alvorlig enn 3',\n\n 'probabilityTable.rows.1': 'Svært liten',\n 'probabilityTable.rows.2': 'Liten',\n 'probabilityTable.rows.3': 'Moderat',\n 'probabilityTable.rows.4': 'Stor',\n 'probabilityTable.rows.5': 'Svært stor',\n 'probabilityTable.cells.1':\n 'Scenarioet er usannsynlig å inntreffe.\\n\\nDet inntreffer sjeldnere enn hvert 100. år',\n 'probabilityTable.cells.2':\n 'Scenarioet er lite sannsynlig å inntreffe.\\n\\nDet kan inntreffe hvert 10. år',\n 'probabilityTable.cells.3':\n 'Scenarioet kan inntreffe.\\n\\nDet kan inntreffe nærmest årlig',\n 'probabilityTable.cells.4':\n 'Scenarioet vil med stor sannsynlighet inntreffe.\\n\\nDet kan inntreffe nærmest ukentlig',\n 'probabilityTable.cells.5':\n 'Scenarioet er nesten garantert å inntreffe.\\n\\nDet kan inntreffe nærmest daglig',\n 'threatActors.Script kiddie': 'Datasnok',\n 'threatActors.Hacktivist': 'Hacktivist',\n 'threatActors.Reckless employee': 'Uheldig ansatt',\n 'threatActors.Insider': 'Innside-aktør',\n 'threatActors.Organised crime': 'Organiserte kriminelle',\n 'threatActors.Terrorist organisation': 'Terroristorganisasjon',\n 'threatActors.Nation/government': 'Nasjon/stat',\n\n 'vulnerabilities.Flawed design': 'Mangelfullt design',\n 'vulnerabilities.Misconfiguration': 'Feilkonfigurering',\n 'vulnerabilities.Dependency vulnerability': 'Sårbarhet i avhengighet',\n 'vulnerabilities.Unauthorized access': 'Uautorisert tilgang',\n 'vulnerabilities.Unmonitored use': 'Uovervåket bruk',\n 'vulnerabilities.Input tampering': 'Klussing med input',\n 'vulnerabilities.Information leak': 'Informasjonslekkasje',\n 'vulnerabilities.Excessive use': 'Overdreven bruk',\n\n 'actionStatus.Not started': 'Ikke startet',\n 'actionStatus.In progress': 'Startet',\n 'actionStatus.On hold': 'På vent',\n 'actionStatus.Completed': 'Fullført',\n 'actionStatus.Aborted': 'Avbrutt',\n\n 'errorMessages.DefaultErrorMessage': 'Det oppstod en feil',\n 'errorMessages.ErrorWhenUpdatingRiSc':\n 'Kunne ikke lagre risiko- og sårbarhetsanalyse',\n 'errorMessages.ErrorWhenCreatingRiSc':\n 'Kunne ikke opprette risiko- og sårbarhetsanalyse',\n 'errorMessages.RiScDoesNotExist':\n 'Risiko- og sårbarhetsanalysen du prøver å åpne eksisterer ikke',\n 'errorMessages.ScenarioDoesNotExist':\n 'Scenariet du prøver å åpne eksisterer ikke',\n 'errorMessages.ErrorWhenCreatingPullRequest':\n 'Kunne ikke lagre godkjenning av risiko- og sårbarhetsanalysen',\n 'errorMessages.ErrorWhenFetchingRiScs':\n 'Kunne ikke hente risiko- og sårbarhetsanalyser med id-er: ',\n 'errorMessages.FailedToFetchRiScs':\n 'Kunne ikke hente risiko- og sårbarhetsanalyser',\n\n 'infoMessages.CreatedPullRequest':\n 'Godkjenning av risiko- og sårbarhetsanalysen ble lagret',\n 'infoMessages.UpdatedRiSc':\n 'Risiko- og sårbarhetsanalysen ble oppdatert',\n 'infoMessages.UpdatedRiScRequiresNewApproval':\n 'Risiko- og sårbarhetsanalysen ble oppdatert og trenger ny godkjenning',\n 'infoMessages.CreatedRiSc':\n 'Risiko- og sårbarhetsanalyse ble opprettet',\n },\n }),\n },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"translations.esm.js","sources":["../../src/utils/translations.ts"],"sourcesContent":["import {\n createTranslationRef,\n createTranslationResource,\n} from '@backstage/core-plugin-api/alpha';\n\nexport const pluginRiScTranslationRef = createTranslationRef({\n id: 'plugin.riSc',\n messages: {\n contentHeader: {\n title: 'Risk scorecard',\n createNewButton: 'Create new scorecard',\n },\n dictionary: {\n cancel: 'Cancel',\n close: 'Close',\n completed: 'Completed',\n confirm: 'Confirm',\n consequence: 'Consequence', // Severity, Impact, Effect or Consequence\n deadline: 'Deadline', // Deadline or Due date\n delete: 'Delete',\n description: 'Description',\n discardChanges: 'Discard changes',\n edit: 'Edit',\n estimatedRisk: 'Estimated risk',\n initialRisk: 'Initial risk', // Starting or Initial risk\n measure: 'Action', // Measure, Action or Initiative\n measures: 'Actions', // Measure, Action or Initiative\n measureOwner: 'Responsible', // Responsible? Measure owner? Initiative owner?\n next: 'Next',\n planned: 'Planned',\n previous: 'Previous',\n probability: 'Probability', // Likelihood or Probability\n restRisk: 'Remaining risk', // Residual or Remaining risk\n risk: 'Risk',\n save: 'Save',\n saveAndClose: 'Save and close',\n scenario: 'Scenario',\n scope: 'Scope',\n status: 'Status',\n threatActors: 'Threat actors',\n title: 'Title',\n url: 'URL',\n emptyField: 'No {{field}} specified',\n vulnerabilities: 'Vulnerabilities',\n },\n rosStatus: {\n statusBadge: {\n missing: 'Awaiting acceptance from risk owner', // Mangler godkjenning av risikoeier\n approved: 'Accepted by risk owner', // Godkjent av risikoeier\n error: 'Failed to retrieve status', // Kunne ikke hente status\n migration: {\n title: 'You are required to review and save changes',\n description:\n 'There has been done changes to the risk scorecard, as a result of a migration to the newest version. The changes may include deletion and modification of information. It will not be possible to save edits of the scorecard without including and accepting the changes.', // Automatisk migrering av ROS\n },\n },\n difference: {\n description: 'Summary of changes that will be approved by risk owner.',\n publishDate: 'Last published changes {{date}}',\n fetching: 'Fetching changes',\n error: 'Error while fetching changes',\n newROS: 'No published Risk scorecards to compare with',\n differences: {\n title: 'CHANGES',\n noneRemoved: 'Nothing is removed',\n titleRemoved: 'Removed from ROS-analysis',\n titleExisting: 'Changed existing ROS-analysis',\n noneExisting: 'Nothing is changed',\n titleAdded: 'Added to ROS-analysis',\n noneAdded: 'Nothing is added',\n },\n },\n prStatus: ' Pending pull request in ', // Avventer godkjenning av PR i Github\n approveButton: 'Accept risks', // Godkjenn ROS\n moreInformationButton: 'More information', // Lagre ROS migrering\n },\n publishDialog: {\n title: 'Accept risks', // Godkjenn ROS\n checkboxLabel:\n 'I confirm that I am the risk owner and accept the risks detailed in this risk scorecard.',\n },\n migrationDialog: {\n description:\n 'The changes have been done to adhere to the latest schema version. In this case, the RiSc was update to ',\n description2: 'from',\n description3: '. Review the ',\n description4: 'for more information.',\n changelog: 'schema changelog',\n title: 'Save changes', // Lagre ROS migrering\n checkboxLabel:\n 'I confirm that I have reviewed and wish to save the changes made during the migration.',\n },\n scenarioTable: {\n title: 'Risk scenarios',\n addScenarioButton: 'Add scenario',\n noActions: 'No actions',\n columns: {\n consequenceChar: 'C',\n probabilityChar: 'P',\n completed: 'complete',\n },\n },\n riskMatrix: {\n title: 'Risk matrix', // Risk matrix or Risk overview\n estimatedRisk: {\n title: 'Estimated risk',\n suffix: {\n thousand: '{{count}} thousand',\n million_one: '{{count}} million',\n million_other: '{{count}} million',\n billion_one: '{{count}} billion',\n billion_other: '{{count}} billion',\n trillion_one: '{{count}} trillion',\n trillion_other: '{{count}} trillion',\n },\n unit: {\n nokPerYear: 'NOK/year',\n },\n },\n tooltip: {\n title: 'Risk scenarios',\n },\n },\n infoDialog: {\n title: 'Estimated risk',\n description:\n 'The estimated risk is a calculation based on the risks the different scenarios pose. If there is a high probability that a serious consequence will occur, this could potentially become a large cost for the organization. In other words, the cost is an attempt to make the risk value more tangible and is the sum of the estimated risk for all the risk scenarios in this risk scorecard.',\n calculatedHowTitle: 'How do we calculate the estimated risk?',\n calculatedHow:\n 'Consequence is measured in cost (in NOK) per incident and probability is measured in incidents per year. ' +\n 'The estimated risk is calculated as C x P.',\n consequenceTitle: 'Consequence (NOK/incident)', // incident, event or occurrence\n probabilityTitle: 'Probability (incidents/year)',\n probabilityDescription: {\n '0': 'every 100 years', // 100 year intervals?\n '1': 'every 10 years', // 10 year intervals?\n '2': 'yearly', // almost yearly?\n '3': 'weekly',\n '4': 'daily',\n },\n example:\n 'A scenario with consequence 2 and probability 4 has an estimated risk of ' +\n '30 000 NOK/incident x 50 incidents/year = 1 500 000 NOK/year.',\n },\n rosDialog: {\n titleNew: 'New risk scorecard',\n titleEdit: 'Edit scorecard',\n titleError: 'The scorecard has to have a title',\n scopeDescription:\n 'Describe what the risk analysis will assess. Specify any key areas which are not part of the scope.',\n scopeError: 'The scorecard has to have a description of the scope',\n },\n scenarioStepper: {\n initialRiskStep: {\n title: 'Initial risk',\n subtitle:\n 'The initial risk is defined by the consequence of the scenario and the probability of it occurring.',\n consequenceSubtitle:\n 'How severe is the potential impact? If the scenario can impact more than one category, choose the highest level of consequence.',\n probabilitySubtitle:\n 'How likely is it that this scenario will occur? If you are between two probability values, choose the higher one.',\n },\n restRiskStep: {\n title: 'Remaining risk',\n subtitle:\n 'What is the risk reduced to when all the planned actions have been completed?',\n consequenceSubtitle:\n 'How severe is the consequence of this scenario after all actions are complete?',\n probabilitySubtitle:\n 'What is the likelihood of this scenario after all actions are complete?',\n },\n },\n scenarioDrawer: {\n action: {\n requiredError: 'Field is required',\n descriptionError: 'Description cannot be empty',\n urlError: 'Invalid url',\n emptyState: 'This scenario has no defined actions',\n },\n title: 'Risk scenario',\n titleError: 'Scenario title is required',\n subtitle:\n 'An unwanted incident that could potentially harm the component.', // harm or affect negatively?\n threatActorSubtitle: 'Someone who attempts to access or abuse the system', // system or component or both?\n vulnerabilitySubtitle:\n 'Weakness in the system that the threat actor can exploit',\n riskMatrixModal: {\n startRisk: 'What is the risk before any mitigating actions are taken?',\n restRisk: 'What is the risk after all planned actions are completed?',\n title: 'Risk matrixes',\n },\n consequenceTab: {\n subtitle:\n 'How severe is the potential impact? If the scenario can impact more than one category, choose the highest level of consequence.',\n },\n probabilityTab: {\n subtitle:\n 'How likely is it that this scenario will occur? If you are between two probability values, choose the higher one.',\n },\n measureTab: {\n subtitle:\n 'What actions should be taken to avoid or reduce the risk of this scenario?',\n measureOwnerDescription:\n 'Decide who will be responsible for completion of this action',\n addMeasureButton: 'Add planned action',\n plannedMeasures: 'Planned actions',\n },\n restRiskTab: {\n subtitle:\n 'Define the remaining risk for the scenario. Remaining risk is the consequence and probability for this ' +\n 'scenario after all planned actions have been completed.',\n },\n deleteScenarioButton: 'Delete scenario',\n deleteScenarioConfirmation:\n 'Are you sure you want to delete this scenario?',\n deleteActionButton: 'Delete action',\n deleteActionConfirmation: 'Are you sure you want to delete this action?',\n closeConfirmation: 'Do you want to save your changes?',\n },\n consequenceTable: {\n rows: {\n '1': 'Negligible', // Insignificant, negligible (ubetydelig)\n '2': 'Small', // Liten\n '3': 'Moderate',\n '4': 'Severe', // Alvorlig\n '5': 'Critical', // Catastrophic eller Critical\n },\n columns: {\n health: 'Life and health', // Health and safety, Life and limb, Health and lives (Liv og helse)\n economical: 'Financial', // Financial consequences, economic implications\n privacy: 'Privacy', // Personvern\n reputation: 'Reputation and trust', // Reputation and trust, confidence, faith (Omdømme og tillit)\n },\n cells: {\n health: {\n '1': 'Impact on life and health cannot be rated less severe than 3', // Liv og helse kan ikke være mindre alvorlig enn 3\n '2': 'Impact on life and health cannot be rated less severe than 3',\n '3': 'Temporary or less severe health implications. Temporary or minor damage to local environment.', // implications, effects or consequence? Temporary or minor? Midlertidige eller mindre alvorlige helsemessige konsekvenser. Midlertidig eller mindre skade på miljøet\n '4': 'Permanent or severe health implications for a few people. Moderate damage to the environment in a limited area.',\n '5': 'Death or permanent severe health implications for many people. Severe damage to the environment across large areas.',\n },\n economical: {\n '1': 'Temporary minor financial loss.\\n\\nMay be fixed within an hour by one employee',\n '2': 'Temporary financial loss.\\n\\nMay be fixed within three days by one employee',\n '3': 'Financial loss of some duration.\\n\\nMay be fixed within a month by three employees',\n '4': 'Financial loss of considerable duration for the organization and any third parties.\\n\\nMay be fixed within a year by 10 employees',\n '5': 'Permanent and severe financial loss.\\n\\nMay be fixed within three years by 100 employees',\n },\n privacy: {\n '1': 'The right to privacy is violated for a very short period and does not involve sensitive categories or vulnerable groups', // særlige kategorier = sensitive kategorier? special/particular/sensitive categories\n '2': 'The right to privacy is violated for a longer period and involves sensitive categories or vulnerable groups.',\n '3': 'Violations of the rights and freedoms for the registered people.',\n '4': 'Severe violations and breaches of the rights and freedoms for the registered people, as well as violations of the law.',\n '5': 'Impact on privacy cannot be rated more severe than 4',\n },\n reputation: {\n '1': 'Temporary loss of reputation and little impact on trust',\n '2': 'Negative attention in national media that leads to loss of reputation.\\n\\nMay reduce trust.',\n '3': 'Lasting negative attention in national and international media that leads to severe loss of reputation.\\n\\nSevere loss of trust from authorities.\\n\\nUsers who do not dare or want to use the services.', // lasting, severe, severe loss, severe loss of trust, do not dare or want to use the services\n '4': 'Impact on reputation and trust cannot be rated more severe than 3',\n '5': 'Impact on reputation and trust cannot be rated more severe than 3',\n },\n },\n },\n probabilityTable: {\n rows: {\n '1': 'Very low', // svært liten\n '2': 'Low', // liten\n '3': 'Moderat', // moderat\n '4': 'High', // stor\n '5': 'Very high', // svært stor\n },\n cells: {\n '1': 'The scenario is unlikely to occur.\\n\\nIt occurs less often than every 100 years',\n '2': 'The scenario is unlikely to occur.\\n\\nIt can occur every 10 years',\n '3': 'The scenario can occur.\\n\\nIt can occur almost every year',\n '4': 'The scenario will very likely occur.\\n\\nIt can occur almost weekly',\n '5': 'The scenario is almost guaranteed to occur.\\n\\nIt can occur almost daily',\n },\n },\n threatActors: {\n 'Script kiddie': 'Script kiddie',\n Hacktivist: 'Hacktivist',\n 'Reckless employee': 'Reckless employee',\n Insider: 'Insider',\n 'Organised crime': 'Organised crime',\n 'Terrorist organisation': 'Terrorist organisation',\n 'Nation/government': 'Nation/government',\n },\n vulnerabilities: {\n 'Flawed design': 'Flawed design',\n Misconfiguration: 'Misconfiguration',\n 'Dependency vulnerability': 'Dependency vulnerability',\n 'Unauthorized access': 'Unauthorized use',\n 'Unmonitored use': 'Unmonitored use',\n 'Input tampering': 'Input tampering',\n 'Information leak': 'Information leak',\n 'Excessive use': 'Excessive use',\n },\n actionStatus: {\n 'Not started': 'Not started',\n 'In progress': 'In progress',\n 'On hold': 'On hold',\n Completed: 'Completed',\n Aborted: 'Aborted',\n },\n errorMessages: {\n DefaultErrorMessage: 'An error occured',\n ErrorWhenUpdatingRiSc: 'Failed to update risk scorecard',\n ErrorWhenCreatingPullRequest: 'Failed to save approval of risk scorecard',\n ErrorWhenCreatingRiSc: 'Failed to create risk scorecard',\n ErrorWhenFetchingRiScs: 'Failed to fetch risk scorecards with ids: ',\n FailedToFetchRiScs: 'Failed to fetch risk scorecards',\n RiScDoesNotExist:\n 'The risk scorecard you are trying to open does not exist',\n ScenarioDoesNotExist:\n 'The scenario you are trying to open does not exist',\n },\n infoMessages: {\n CreatedPullRequest: 'Successfully saved approval of risk scorecard ',\n UpdatedRiSc: 'Risk scorecard updated',\n UpdatedRiScRequiresNewApproval:\n 'Risk scorecard update and requires new approval',\n CreatedRiSc: 'Created new risk scorecard successfully',\n UpdatedRiScAndCreatedPullRequest:\n 'Risk scorecard updated and ready for approval in Github',\n },\n },\n});\n\nexport const pluginRiScNorwegianTranslation = createTranslationResource({\n ref: pluginRiScTranslationRef,\n translations: {\n no: () =>\n Promise.resolve({\n default: {\n 'contentHeader.title': 'Risiko- og sårbarhetsanalyse',\n 'contentHeader.createNewButton': 'Opprett ny analyse',\n\n 'dictionary.cancel': 'Avbryt',\n 'dictionary.close': 'Lukk',\n 'dictionary.completed': 'Fullført',\n 'dictionary.confirm': 'Bekreft',\n 'dictionary.consequence': 'Konsekvens',\n 'dictionary.deadline': 'Frist',\n 'dictionary.delete': 'Slett',\n 'dictionary.description': 'Beskrivelse',\n 'dictionary.discardChanges': 'Forkast endringer',\n 'dictionary.edit': 'Rediger',\n 'dictionary.estimatedRisk': 'Estimert risiko',\n 'dictionary.initialRisk': 'Startrisiko',\n 'dictionary.measure': 'Tiltak',\n 'dictionary.measures': 'Tiltak',\n 'dictionary.measureOwner': 'Tiltakseier',\n 'dictionary.next': 'Neste',\n 'dictionary.planned': 'Planlagt',\n 'dictionary.previous': 'Forrige',\n 'dictionary.probability': 'Sannsynlighet',\n 'dictionary.restRisk': 'Restrisiko',\n 'dictionary.risk': 'Risiko',\n 'dictionary.save': 'Lagre',\n 'dictionary.saveAndClose': 'Lagre og lukk',\n 'dictionary.scenario': 'Scenario',\n 'dictionary.scope': 'Omfang',\n 'dictionary.status': 'Status',\n 'dictionary.threatActors': 'Trusselaktører',\n 'dictionary.title': 'Tittel',\n 'dictionary.url': 'URL',\n 'dictionary.emptyField': 'Ingen {{field}} spesifisert',\n 'dictionary.vulnerabilities': 'Sårbarheter',\n\n 'scenarioDrawer.action.descriptionError':\n 'Beskrivelse kan ikke være tom',\n 'scenarioDrawer.action.urlError': 'Ugyldig URL',\n 'scenarioDrawer.action.requiredError': 'Feltet er påkrevd',\n 'scenarioDrawer.action.emptyState':\n 'Scenariet har ingen definerte tiltak',\n\n 'rosStatus.statusBadge.missing':\n 'Venter på godkjenning av risikoeier',\n 'rosStatus.statusBadge.approved': 'Godkjent av risikoeier',\n 'rosStatus.statusBadge.error': 'Kunne ikke hente status',\n 'rosStatus.statusBadge.migration.title':\n 'Gjennomgang og lagring av endringer kreves',\n 'rosStatus.statusBadge.migration.description':\n 'Det har blitt gjort endringer i risiko- og sårbarhetsanalysen, som følge av en migrering til nyeste versjon. Endringene kan være både sletting og endring av informsasjon. Det vil ikke være mulig å lagre endringer av analysen uten å inkludere og godta endringene.',\n 'rosStatus.prStatus': ' Avventer godkjenning av pull request i ',\n 'rosStatus.approveButton': 'Godkjenn ROS',\n 'rosStatus.moreInformationButton': 'Mer informasjon',\n 'rosStatus.difference.description':\n 'Oppsummering av endringer som må godkjennes av risikoeier.',\n 'rosStatus.difference.publishDate':\n 'Siste publiserte endringer {{date}}',\n 'rosStatus.difference.fetching': 'Henter endringer',\n 'rosStatus.difference.error': 'Feil med uthenting av endringer',\n 'rosStatus.difference.newROS':\n 'Ingen publiserte ROS-analyser å sammenligne med',\n 'rosStatus.difference.differences.title': 'ENDRINGER',\n 'rosStatus.difference.differences.titleRemoved':\n 'Fjernet fra ROS-analyse',\n 'rosStatus.difference.differences.noneRemoved':\n 'Ingenting er fjernet',\n 'rosStatus.difference.differences.titleExisting':\n 'Endret eksisterende ROS-analyse',\n 'rosStatus.difference.differences.noneExisting':\n 'Ingenting er endret',\n 'rosStatus.difference.differences.titleAdded':\n 'Lagt til i ROS-analyse',\n 'rosStatus.difference.differences.noneAdded': 'Ingenting er lagt til',\n\n 'publishDialog.title': 'Godkjenn ROS-analyse',\n 'publishDialog.checkboxLabel':\n 'Jeg bekrefter at jeg er risikoeier og godtar risikoen beskrevet i denne risiko- og sårbarhetsanalysen.',\n\n 'migrationDialog.title': 'Lagre endringer',\n 'migrationDialog.description':\n 'Endringene er gjort for å følge den nyeste skjema versjonen. I dette tilfellet ble ROS-analysen oppdatert til ',\n 'migrationDialog.description2': 'fra',\n 'migrationDialog.description3': '. Se ',\n 'migrationDialog.description4': 'for mer informasjon.',\n 'migrationDialog.changelog': 'endringslogg for skjema',\n\n 'migrationDialog.checkboxLabel':\n 'Jeg bekrefter at jeg har gjennomgått og ønsker å lagre endringene som er gjort under migreringen.',\n\n 'scenarioTable.title': 'Risikoscenarioer',\n 'scenarioTable.addScenarioButton': 'Legg til scenario',\n 'scenarioTable.noActions': 'Ingen tiltak',\n 'scenarioTable.columns.consequenceChar': 'K',\n 'scenarioTable.columns.probabilityChar': 'S',\n 'scenarioTable.columns.completed': 'fullført',\n\n 'riskMatrix.title': 'Risikomatrise',\n 'riskMatrix.estimatedRisk.title': 'Estimert risiko',\n 'riskMatrix.estimatedRisk.suffix.thousand': '{{count}} tusen',\n 'riskMatrix.estimatedRisk.suffix.million_one': '{{count}} million',\n 'riskMatrix.estimatedRisk.suffix.million_other':\n '{{count}} millioner',\n 'riskMatrix.estimatedRisk.suffix.billion_one': '{{count}} milliard',\n 'riskMatrix.estimatedRisk.suffix.billion_other':\n '{{count}} milliarder',\n 'riskMatrix.estimatedRisk.suffix.trillion_one': '{{count}} billion',\n 'riskMatrix.estimatedRisk.suffix.trillion_other':\n '{{count}} billioner',\n 'riskMatrix.estimatedRisk.unit.nokPerYear': 'kr/år',\n 'riskMatrix.tooltip.title': 'Risikoscenarioer',\n\n 'infoDialog.title': 'Estimert risiko',\n 'infoDialog.description':\n 'Den estimerte risikoen er basert på hvor stor risiko de forskjellige scenariene utgjør. Hvis det er stor sannsynlighet for at en alvorlig konsekvens skjer er det høy risiko for at det kan bli en stor kostnad for organisasjonen. Kostnaden er med andre ord et forsøk på å konkretisere verdien av risiko og er summen av den estimerte risikoen for alle risikoscenariene i denne ROS-analysen.',\n 'infoDialog.calculatedHowTitle':\n 'Hvordan regner vi ut estimert risiko?',\n 'infoDialog.calculatedHow':\n 'Konsekvens måles i kroner per hendelse og sannsynlighet måles i hendelser per år. Den estimerte risikoen blir da: K x S.',\n 'infoDialog.consequenceTitle': 'Konsekvens (kr/hendelse)',\n 'infoDialog.probabilityTitle': 'Sannsynlighet (hendelser/år)',\n 'infoDialog.probabilityDescription.0': 'ca hvert 100. år',\n 'infoDialog.probabilityDescription.1': 'ca hvert 10. år',\n 'infoDialog.probabilityDescription.2': 'ca årlig',\n 'infoDialog.probabilityDescription.3': 'ca ukentlig',\n 'infoDialog.probabilityDescription.4': 'ca daglig',\n 'infoDialog.example':\n 'Et risikoscenario med konsekvens 2 og sannsynlighet 4 har en estimert risiko på 30 000 kr/hendelse x 50 hendelser/år = 1 500 000 kr/år.',\n\n 'rosDialog.titleNew': 'Ny risiko- og sårbarhetsanalyse',\n 'rosDialog.titleEdit': 'Rediger tittel og omfang',\n 'rosDialog.titleError': 'ROS-analysen må ha en tittel',\n 'rosDialog.scopeDescription':\n 'Beskriv hva analysen skal vurdere. Hva som ikke inngår som en del av omfanget må også defineres.', // TODO\n 'rosDialog.scopeError': 'ROS-analysen må ha et omfang',\n\n 'scenarioStepper.initialRiskStep.title': 'Startrisiko',\n 'scenarioStepper.initialRiskStep.subtitle':\n 'Risikoen er kombinasjonen av konsekvensen av scenarioet og sannsynligheten for at det inntreffer.',\n 'scenarioStepper.initialRiskStep.consequenceSubtitle':\n 'Hvor alvorlig er den potensielle konsekvensen? Hvis konsekvensen gjelder flere kategorier velg det høyeste konsekvensnivået av disse.',\n 'scenarioStepper.initialRiskStep.probabilitySubtitle':\n 'Hvor stor sannsynlighet er det for at dette scenarioet vil forekomme. Dersom du er mellom to sannsynlighetsverdier velg den høyeste.',\n 'scenarioStepper.restRiskStep.title': 'Restrisiko',\n 'scenarioStepper.restRiskStep.subtitle':\n 'Hvordan endrer risikoen seg fra startrisikoen etter alle tiltakene er fullført?',\n 'scenarioStepper.restRiskStep.consequenceSubtitle':\n 'Hva blir konsekvensen etter alle tiltakene er fullført?',\n 'scenarioStepper.restRiskStep.probabilitySubtitle':\n 'Hva blir sannsynligheten etter alle tiltakene er fullført?',\n\n 'scenarioDrawer.title': 'Risikoscenario',\n 'scenarioDrawer.titleError': 'Scenarioet må ha en tittel',\n 'scenarioDrawer.subtitle':\n 'En uønsket hendelse som potensielt kan ramme komponenten',\n 'scenarioDrawer.riskMatrixModal.title': 'Risikomatriser',\n 'scenarioDrawer.riskMatrixModal.startRisk':\n 'Hvor stor er risikoen før man utfører noen tiltak?',\n 'scenarioDrawer.riskMatrixModal.restRisk':\n 'Hvor stor er risikoen etter at alle tiltakene er fullført?',\n\n 'scenarioDrawer.threatActorSubtitle':\n 'Noen som prøver å få tilgang til eller misbruke systemet',\n 'scenarioDrawer.vulnerabilitySubtitle':\n 'Svakhet i systemet som kan utnyttes av trusselaktøren',\n 'scenarioDrawer.consequenceTab.subtitle':\n 'Hvor alvorlig er den potensielle konsekvensen? Hvis scenarioet kan få konsekvenser i flere kategorier velg det høyeste konsekvensnivået av disse.',\n 'scenarioDrawer.probabilityTab.subtitle':\n 'Hvor stor sannsynlighet er det for at dette scenarioet vil forekomme. Dersom du er mellom to sannsynlighetsverdier velg den høyeste.',\n 'scenarioDrawer.measureTab.subtitle':\n 'Hvilke tiltak bør gjøres for å unngå scenarioet?',\n 'scenarioDrawer.measureTab.measureOwnerDescription':\n 'De eller den som er ansvarlig for at tiltaket blir gjennomført',\n 'scenarioDrawer.measureTab.addMeasureButton': 'Legg til tiltak',\n 'scenarioDrawer.measureTab.plannedMeasures': 'Planlagte tiltak',\n 'scenarioDrawer.restRiskTab.subtitle':\n 'Sett restrisiko for scenarioet. Restrisiko er konsekvens og sannsynlighet for scenarioet etter at alle tiltak i listen er gjennomført.',\n 'scenarioDrawer.deleteScenarioButton': 'Slett scenario',\n 'scenarioDrawer.deleteScenarioConfirmation':\n 'Er du sikker på at du vil slette scenario?',\n 'scenarioDrawer.deleteActionButton': 'Slett tiltak',\n 'scenarioDrawer.deleteActionConfirmation':\n 'Er du sikker på at du vil slette tiltak?',\n 'scenarioDrawer.closeConfirmation': 'Vil du lagre endringene dine?',\n\n 'consequenceTable.rows.1': 'Ubetydelig',\n 'consequenceTable.rows.2': 'Liten',\n 'consequenceTable.rows.3': 'Moderat',\n 'consequenceTable.rows.4': 'Alvorlig',\n 'consequenceTable.rows.5': 'Kritisk',\n 'consequenceTable.columns.health': 'Liv og helse',\n 'consequenceTable.columns.economical': 'Økonomi og drift',\n 'consequenceTable.columns.privacy': 'Personvern',\n 'consequenceTable.columns.reputation': 'Omdømme og tillit',\n 'consequenceTable.cells.health.1':\n 'Liv og helse kan ikke være mindre alvorlig enn 3',\n 'consequenceTable.cells.health.2':\n 'Liv og helse kan ikke være mindre alvorlig enn 3',\n 'consequenceTable.cells.health.3':\n 'Lettere skade på personer.\\n\\nNoe skade på lokalt miljø.',\n 'consequenceTable.cells.health.4':\n 'Et fåtall alvorlige personskader.\\n\\nModerat skade på miljø på et begrenset område.',\n 'consequenceTable.cells.health.5':\n 'Dødsfall. Svært alvorlig skade på milhø over store områder.',\n 'consequenceTable.cells.economical.1':\n 'Ubetydelig økonomisk tap.\\n\\nKan fikses i løpet av en time av én ansatt.',\n 'consequenceTable.cells.economical.2':\n 'Mindre økonomisk tap.\\n\\nKan fikses i løpet av tre dager av én ansatt.',\n 'consequenceTable.cells.economical.3':\n 'Moderat økonomisk tap.\\n\\nKan fikses i løpet av en måned av tre ansatte.',\n 'consequenceTable.cells.economical.4':\n 'Større økonomisk tap.\\n\\nKan fikses i løpet av et år av 10 ansatte.',\n 'consequenceTable.cells.economical.5':\n 'Kritisk økonomisk tap.\\n\\nKan fikses i løpet av tre år av 100 ansatte.',\n 'consequenceTable.cells.privacy.1': 'Ingen brudd.',\n 'consequenceTable.cells.privacy.2': 'Mindre brudd.',\n 'consequenceTable.cells.privacy.3':\n 'Brudd på registrertes rettigheter og friheter.',\n 'consequenceTable.cells.privacy.4':\n 'Meget alvorlige brudd på registrertes rettigheter og friheter, samt lovbrudd.',\n 'consequenceTable.cells.privacy.5':\n 'Personvern kan ikke være mer alvorlig enn 4',\n 'consequenceTable.cells.reputation.1':\n 'Liten fare for omdømmetap og liten innvikrning på tillit',\n 'consequenceTable.cells.reputation.2':\n 'Negativ oppmerksomhet i regionale og nasjonale medier som fører til omdømmetap.\\n\\nKan redusere tillit.',\n 'consequenceTable.cells.reputation.3':\n 'Negativ oppmerksomhet i nasjonale og internasjonale medier som fører til alvorlig omdømmetap.\\n\\nAlvorlig redusert tillit fra myndigheter.\\n\\nBrukere som ikke tør / vil bruke tjenestene.',\n 'consequenceTable.cells.reputation.4':\n 'Omdømme og tillit kan ikke være mer alvorlig enn 3',\n 'consequenceTable.cells.reputation.5':\n 'Omdømme og tillit kan ikke være mer alvorlig enn 3',\n\n 'probabilityTable.rows.1': 'Svært liten',\n 'probabilityTable.rows.2': 'Liten',\n 'probabilityTable.rows.3': 'Moderat',\n 'probabilityTable.rows.4': 'Stor',\n 'probabilityTable.rows.5': 'Svært stor',\n 'probabilityTable.cells.1':\n 'Scenarioet er usannsynlig å inntreffe.\\n\\nDet inntreffer sjeldnere enn hvert 100. år',\n 'probabilityTable.cells.2':\n 'Scenarioet er lite sannsynlig å inntreffe.\\n\\nDet kan inntreffe hvert 10. år',\n 'probabilityTable.cells.3':\n 'Scenarioet kan inntreffe.\\n\\nDet kan inntreffe nærmest årlig',\n 'probabilityTable.cells.4':\n 'Scenarioet vil med stor sannsynlighet inntreffe.\\n\\nDet kan inntreffe nærmest ukentlig',\n 'probabilityTable.cells.5':\n 'Scenarioet er nesten garantert å inntreffe.\\n\\nDet kan inntreffe nærmest daglig',\n 'threatActors.Script kiddie': 'Datasnok',\n 'threatActors.Hacktivist': 'Hacktivist',\n 'threatActors.Reckless employee': 'Uheldig ansatt',\n 'threatActors.Insider': 'Innside-aktør',\n 'threatActors.Organised crime': 'Organiserte kriminelle',\n 'threatActors.Terrorist organisation': 'Terroristorganisasjon',\n 'threatActors.Nation/government': 'Nasjon/stat',\n\n 'vulnerabilities.Flawed design': 'Mangelfullt design',\n 'vulnerabilities.Misconfiguration': 'Feilkonfigurering',\n 'vulnerabilities.Dependency vulnerability': 'Sårbarhet i avhengighet',\n 'vulnerabilities.Unauthorized access': 'Uautorisert tilgang',\n 'vulnerabilities.Unmonitored use': 'Uovervåket bruk',\n 'vulnerabilities.Input tampering': 'Klussing med input',\n 'vulnerabilities.Information leak': 'Informasjonslekkasje',\n 'vulnerabilities.Excessive use': 'Overdreven bruk',\n\n 'actionStatus.Not started': 'Ikke startet',\n 'actionStatus.In progress': 'Startet',\n 'actionStatus.On hold': 'På vent',\n 'actionStatus.Completed': 'Fullført',\n 'actionStatus.Aborted': 'Avbrutt',\n\n 'errorMessages.DefaultErrorMessage': 'Det oppstod en feil',\n 'errorMessages.ErrorWhenUpdatingRiSc':\n 'Kunne ikke lagre risiko- og sårbarhetsanalyse',\n 'errorMessages.ErrorWhenCreatingRiSc':\n 'Kunne ikke opprette risiko- og sårbarhetsanalyse',\n 'errorMessages.RiScDoesNotExist':\n 'Risiko- og sårbarhetsanalysen du prøver å åpne eksisterer ikke',\n 'errorMessages.ScenarioDoesNotExist':\n 'Scenariet du prøver å åpne eksisterer ikke',\n 'errorMessages.ErrorWhenCreatingPullRequest':\n 'Kunne ikke lagre godkjenning av risiko- og sårbarhetsanalysen',\n 'errorMessages.ErrorWhenFetchingRiScs':\n 'Kunne ikke hente risiko- og sårbarhetsanalyser med id-er: ',\n 'errorMessages.FailedToFetchRiScs':\n 'Kunne ikke hente risiko- og sårbarhetsanalyser',\n\n 'infoMessages.CreatedPullRequest':\n 'Godkjenning av risiko- og sårbarhetsanalysen ble lagret',\n 'infoMessages.UpdatedRiSc':\n 'Risiko- og sårbarhetsanalysen ble oppdatert',\n 'infoMessages.UpdatedRiScRequiresNewApproval':\n 'Risiko- og sårbarhetsanalysen ble oppdatert og trenger ny godkjenning',\n 'infoMessages.CreatedRiSc':\n 'Risiko- og sårbarhetsanalyse ble opprettet',\n 'infoMessages.UpdatedRiScAndCreatedPullRequest':\n 'Risiko- og sårbarhetsanalysen ble oppdatert og er klar for godkjenning i Github',\n },\n }),\n },\n});\n"],"names":[],"mappings":"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"}
|
package/dist/utils/types.esm.js
CHANGED
|
@@ -10,6 +10,7 @@ var ProcessingStatus = /* @__PURE__ */ ((ProcessingStatus2) => {
|
|
|
10
10
|
ProcessingStatus2["CouldNotCreateBranch"] = "CouldNotCreateBranch";
|
|
11
11
|
ProcessingStatus2["UpdatedRiSc"] = "UpdatedRiSc";
|
|
12
12
|
ProcessingStatus2["UpdatedRiScRequiresNewApproval"] = "UpdatedRiScRequiresNewApproval";
|
|
13
|
+
ProcessingStatus2["UpdatedRiScAndCreatedPullRequest"] = "UpdatedRiScAndCreatedPullRequest";
|
|
13
14
|
ProcessingStatus2["CreatedRiSc"] = "CreatedRiSc";
|
|
14
15
|
ProcessingStatus2["CreatedPullRequest"] = "CreatedPullRequest";
|
|
15
16
|
ProcessingStatus2["ErrorWhenCreatingRiSc"] = "ErrorWhenCreatingRiSc";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.esm.js","sources":["../../src/utils/types.ts"],"sourcesContent":["/**\n * Modify one key on an object type. Modify takes 3 type arguments. First one takes the original type you want to modify. Second is the specific key you want to modify. Third is the new type for that key.\n * @template {object} O Which object type to use as basis\n * @template {string} K Key of field in object to modify\n * @template R New type to set field of key to\n */\nexport type Modify<O, K extends keyof any, R> = Omit<O, K> & { [P in K]: R };\n\nexport type RiScWithMetadata = {\n id: string;\n status: RiScStatus;\n content: RiSc;\n isRequiresNewApproval?: boolean;\n pullRequestUrl?: string;\n schemaVersion?: string;\n migrationStatus?: MigrationStatus;\n};\n\nexport type MigrationStatus = {\n migrationChanges: boolean;\n migrationRequiresNewApproval: boolean;\n migrationVersions?: MigrationVersions;\n};\n\nexport type MigrationVersions = {\n fromVersion: string;\n toVersion: string;\n};\n\nexport type RiSc = {\n schemaVersion: string;\n title: string;\n scope: string;\n valuations: Valuations[];\n scenarios: Scenario[];\n};\n\nexport type Valuations = {\n description: string;\n confidentiality: string;\n integrity: string;\n availability: string;\n};\n\nexport type Scenario = {\n ID: string;\n title: string;\n url?: string;\n description: string;\n threatActors: string[];\n vulnerabilities: string[];\n risk: Risk;\n remainingRisk: Risk;\n actions: Action[];\n};\n\nexport type Risk = {\n summary: string;\n probability: number;\n consequence: number;\n};\n\nexport type Action = {\n ID: string;\n title: string;\n description: string;\n status: string;\n url: string;\n};\n\nexport type GithubRepoInfo = {\n name: string;\n owner: string;\n};\n\nexport type SubmitResponseObject = {\n status: ProcessingStatus;\n statusMessage: string;\n};\n\nexport enum RiScStatus {\n Draft = 'Draft',\n Published = 'Published',\n SentForApproval = 'SentForApproval',\n}\n\nexport enum ProcessingStatus {\n RiScNotValid = 'RiScNotValid',\n EncryptionFailed = 'EncryptionFailed',\n CouldNotCreateBranch = 'CouldNotCreateBranch',\n UpdatedRiSc = 'UpdatedRiSc',\n UpdatedRiScRequiresNewApproval = 'UpdatedRiScRequiresNewApproval',\n CreatedRiSc = 'CreatedRiSc',\n CreatedPullRequest = 'CreatedPullRequest',\n ErrorWhenCreatingRiSc = 'ErrorWhenCreatingRiSc',\n ErrorWhenUpdatingRiSc = 'ErrorWhenUpdatingRiSc',\n ErrorWhenPublishingRiSc = 'ErrorWhenPublishingRiSc',\n ErrorWhenFetchingRiScs = 'ErrorWhenFetchingRiScs',\n ErrorWhenCreatingPullRequest = 'ErrorWhenCreatingPullRequest',\n}\n\nexport enum ContentStatus {\n Success = 'Success',\n Failure = 'Failure',\n FileNotFound = 'FileNotFound',\n DecryptionFailed = 'DecryptionFailed',\n}\n\ntype FormRisk = Modify<\n Modify<Risk, 'probability', string>,\n 'consequence',\n string\n>;\n\nexport type FormScenario = Modify<\n Modify<Scenario, 'risk', FormRisk>,\n 'remainingRisk',\n FormRisk\n>;\n\nexport type Difference = {\n entriesOnLeft: string[];\n entriesOnRight: string[];\n difference: string[];\n};\n\nexport type DifferenceDTO = {\n status:\n | 'Success'\n | 'GithubFailure'\n | 'JsonFailure'\n | 'DecryptionFailure'\n | 'GithubFileNotFound'\n | 'FrontendFallback';\n differenceState: Difference;\n errorMessage?: string;\n defaultLastModifiedDateString: string;\n};\n\nexport type DifferenceFetchState = Modify<\n DifferenceDTO,\n 'status',\n DifferenceDTO['status'] | null\n> & { isLoading: boolean; currentDifferenceId: string };\n"],"names":["RiScStatus","ProcessingStatus","ContentStatus"],"mappings":"AAgFY,IAAA,UAAA,qBAAAA,WAAL,KAAA;AACL,EAAAA,YAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AACR,EAAAA,YAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AACZ,EAAAA,YAAA,iBAAkB,CAAA,GAAA,iBAAA,CAAA;AAHR,EAAAA,OAAAA,WAAAA,CAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA,EAAA;AAMA,IAAA,gBAAA,qBAAAC,iBAAL,KAAA;AACL,EAAAA,kBAAA,cAAe,CAAA,GAAA,cAAA,CAAA;AACf,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,kBAAA,CAAA;AACnB,EAAAA,kBAAA,sBAAuB,CAAA,GAAA,sBAAA,CAAA;AACvB,EAAAA,kBAAA,aAAc,CAAA,GAAA,aAAA,CAAA;AACd,EAAAA,kBAAA,gCAAiC,CAAA,GAAA,gCAAA,CAAA;AACjC,EAAAA,kBAAA,aAAc,CAAA,GAAA,aAAA,CAAA;AACd,EAAAA,kBAAA,oBAAqB,CAAA,GAAA,oBAAA,CAAA;AACrB,EAAAA,kBAAA,uBAAwB,CAAA,GAAA,uBAAA,CAAA;AACxB,EAAAA,kBAAA,uBAAwB,CAAA,GAAA,uBAAA,CAAA;AACxB,EAAAA,kBAAA,yBAA0B,CAAA,GAAA,yBAAA,CAAA;AAC1B,EAAAA,kBAAA,wBAAyB,CAAA,GAAA,wBAAA,CAAA;AACzB,EAAAA,kBAAA,8BAA+B,CAAA,GAAA,8BAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"types.esm.js","sources":["../../src/utils/types.ts"],"sourcesContent":["/**\n * Modify one key on an object type. Modify takes 3 type arguments. First one takes the original type you want to modify. Second is the specific key you want to modify. Third is the new type for that key.\n * @template {object} O Which object type to use as basis\n * @template {string} K Key of field in object to modify\n * @template R New type to set field of key to\n */\nexport type Modify<O, K extends keyof any, R> = Omit<O, K> & { [P in K]: R };\n\nexport type RiScWithMetadata = {\n id: string;\n status: RiScStatus;\n content: RiSc;\n isRequiresNewApproval?: boolean;\n pullRequestUrl?: string;\n schemaVersion?: string;\n migrationStatus?: MigrationStatus;\n};\n\nexport type MigrationStatus = {\n migrationChanges: boolean;\n migrationRequiresNewApproval: boolean;\n migrationVersions?: MigrationVersions;\n};\n\nexport type MigrationVersions = {\n fromVersion: string;\n toVersion: string;\n};\n\nexport type RiSc = {\n schemaVersion: string;\n title: string;\n scope: string;\n valuations: Valuations[];\n scenarios: Scenario[];\n};\n\nexport type Valuations = {\n description: string;\n confidentiality: string;\n integrity: string;\n availability: string;\n};\n\nexport type Scenario = {\n ID: string;\n title: string;\n url?: string;\n description: string;\n threatActors: string[];\n vulnerabilities: string[];\n risk: Risk;\n remainingRisk: Risk;\n actions: Action[];\n};\n\nexport type Risk = {\n summary: string;\n probability: number;\n consequence: number;\n};\n\nexport type Action = {\n ID: string;\n title: string;\n description: string;\n status: string;\n url: string;\n};\n\nexport type GithubRepoInfo = {\n name: string;\n owner: string;\n};\n\nexport type SubmitResponseObject = {\n status: ProcessingStatus;\n statusMessage: string;\n};\n\nexport enum RiScStatus {\n Draft = 'Draft',\n Published = 'Published',\n SentForApproval = 'SentForApproval',\n}\n\nexport enum ProcessingStatus {\n RiScNotValid = 'RiScNotValid',\n EncryptionFailed = 'EncryptionFailed',\n CouldNotCreateBranch = 'CouldNotCreateBranch',\n UpdatedRiSc = 'UpdatedRiSc',\n UpdatedRiScRequiresNewApproval = 'UpdatedRiScRequiresNewApproval',\n UpdatedRiScAndCreatedPullRequest = 'UpdatedRiScAndCreatedPullRequest',\n CreatedRiSc = 'CreatedRiSc',\n CreatedPullRequest = 'CreatedPullRequest',\n ErrorWhenCreatingRiSc = 'ErrorWhenCreatingRiSc',\n ErrorWhenUpdatingRiSc = 'ErrorWhenUpdatingRiSc',\n ErrorWhenPublishingRiSc = 'ErrorWhenPublishingRiSc',\n ErrorWhenFetchingRiScs = 'ErrorWhenFetchingRiScs',\n ErrorWhenCreatingPullRequest = 'ErrorWhenCreatingPullRequest',\n}\n\nexport enum ContentStatus {\n Success = 'Success',\n Failure = 'Failure',\n FileNotFound = 'FileNotFound',\n DecryptionFailed = 'DecryptionFailed',\n}\n\ntype FormRisk = Modify<\n Modify<Risk, 'probability', string>,\n 'consequence',\n string\n>;\n\nexport type FormScenario = Modify<\n Modify<Scenario, 'risk', FormRisk>,\n 'remainingRisk',\n FormRisk\n>;\n\nexport type Difference = {\n entriesOnLeft: string[];\n entriesOnRight: string[];\n difference: string[];\n};\n\nexport type DifferenceDTO = {\n status:\n | 'Success'\n | 'GithubFailure'\n | 'JsonFailure'\n | 'DecryptionFailure'\n | 'GithubFileNotFound'\n | 'FrontendFallback';\n differenceState: Difference;\n errorMessage?: string;\n defaultLastModifiedDateString: string;\n};\n\nexport type DifferenceFetchState = Modify<\n DifferenceDTO,\n 'status',\n DifferenceDTO['status'] | null\n> & { isLoading: boolean; currentDifferenceId: string };\n"],"names":["RiScStatus","ProcessingStatus","ContentStatus"],"mappings":"AAgFY,IAAA,UAAA,qBAAAA,WAAL,KAAA;AACL,EAAAA,YAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AACR,EAAAA,YAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AACZ,EAAAA,YAAA,iBAAkB,CAAA,GAAA,iBAAA,CAAA;AAHR,EAAAA,OAAAA,WAAAA,CAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA,EAAA;AAMA,IAAA,gBAAA,qBAAAC,iBAAL,KAAA;AACL,EAAAA,kBAAA,cAAe,CAAA,GAAA,cAAA,CAAA;AACf,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,kBAAA,CAAA;AACnB,EAAAA,kBAAA,sBAAuB,CAAA,GAAA,sBAAA,CAAA;AACvB,EAAAA,kBAAA,aAAc,CAAA,GAAA,aAAA,CAAA;AACd,EAAAA,kBAAA,gCAAiC,CAAA,GAAA,gCAAA,CAAA;AACjC,EAAAA,kBAAA,kCAAmC,CAAA,GAAA,kCAAA,CAAA;AACnC,EAAAA,kBAAA,aAAc,CAAA,GAAA,aAAA,CAAA;AACd,EAAAA,kBAAA,oBAAqB,CAAA,GAAA,oBAAA,CAAA;AACrB,EAAAA,kBAAA,uBAAwB,CAAA,GAAA,uBAAA,CAAA;AACxB,EAAAA,kBAAA,uBAAwB,CAAA,GAAA,uBAAA,CAAA;AACxB,EAAAA,kBAAA,yBAA0B,CAAA,GAAA,yBAAA,CAAA;AAC1B,EAAAA,kBAAA,wBAAyB,CAAA,GAAA,wBAAA,CAAA;AACzB,EAAAA,kBAAA,8BAA+B,CAAA,GAAA,8BAAA,CAAA;AAbrB,EAAAA,OAAAA,iBAAAA,CAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA,EAAA;AAgBA,IAAA,aAAA,qBAAAC,cAAL,KAAA;AACL,EAAAA,eAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AACV,EAAAA,eAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AACV,EAAAA,eAAA,cAAe,CAAA,GAAA,cAAA,CAAA;AACf,EAAAA,eAAA,kBAAmB,CAAA,GAAA,kBAAA,CAAA;AAJT,EAAAA,OAAAA,cAAAA,CAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;;;;"}
|