@kartverket/backstage-plugin-risk-scorecard 3.9.1 → 3.9.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/dist/components/common/UpdatedStatusBadge.esm.js +58 -0
- package/dist/components/common/UpdatedStatusBadge.esm.js.map +1 -0
- package/dist/components/common/UpdatedStatusBadge.module.css.esm.js +8 -0
- package/dist/components/common/UpdatedStatusBadge.module.css.esm.js.map +1 -0
- package/dist/components/riScDialog/RiScDialog.esm.js +12 -2
- package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/RiScSelectionCard.esm.js +1 -1
- package/dist/components/riScInfo/RiScSelectionCard.esm.js.map +1 -1
- package/dist/components/riScPlugin/RiScPlugin.esm.js +2 -2
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js +24 -47
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
- package/dist/components/scenarioTable/ActionsCard.esm.js +13 -47
- package/dist/components/scenarioTable/ActionsCard.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js +4 -2
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
- package/dist/theme.css.esm.js +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
+
import { Text } from '@backstage/ui';
|
|
4
|
+
import { Tooltip } from '@material-ui/core';
|
|
5
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
6
|
+
import { UpdatedStatusEnum } from '../../utils/utilityfunctions.esm.js';
|
|
7
|
+
import styles from './UpdatedStatusBadge.module.css.esm.js';
|
|
8
|
+
|
|
9
|
+
function UpdatedStatusBadge({
|
|
10
|
+
status,
|
|
11
|
+
isPending = false
|
|
12
|
+
}) {
|
|
13
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
14
|
+
let ariaLabel;
|
|
15
|
+
if (isPending) {
|
|
16
|
+
ariaLabel = t("rosStatus.updated");
|
|
17
|
+
} else if (status === UpdatedStatusEnum.VERY_OUTDATED) {
|
|
18
|
+
ariaLabel = t("rosStatus.veryOutdated");
|
|
19
|
+
} else if (status === UpdatedStatusEnum.OUTDATED) {
|
|
20
|
+
ariaLabel = t("rosStatus.outdated");
|
|
21
|
+
} else {
|
|
22
|
+
ariaLabel = void 0;
|
|
23
|
+
}
|
|
24
|
+
if (isPending) {
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
"span",
|
|
27
|
+
{
|
|
28
|
+
className: `${styles.badge} ${styles.pending}`,
|
|
29
|
+
"aria-label": ariaLabel,
|
|
30
|
+
children: /* @__PURE__ */ jsx(Text, { as: "p", children: t("rosStatus.updated") })
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
if (status === UpdatedStatusEnum.VERY_OUTDATED) {
|
|
35
|
+
return /* @__PURE__ */ jsx(Tooltip, { title: t("rosStatus.updatedStatus.tooltip.VERY_OUTDATED"), children: /* @__PURE__ */ jsx(
|
|
36
|
+
"span",
|
|
37
|
+
{
|
|
38
|
+
className: `${styles.badge} ${styles.veryOutdated}`,
|
|
39
|
+
"aria-label": ariaLabel,
|
|
40
|
+
children: /* @__PURE__ */ jsx(Text, { as: "p", className: styles.text, children: t("rosStatus.veryOutdated") })
|
|
41
|
+
}
|
|
42
|
+
) });
|
|
43
|
+
}
|
|
44
|
+
if (status === UpdatedStatusEnum.OUTDATED) {
|
|
45
|
+
return /* @__PURE__ */ jsx(Tooltip, { title: t("rosStatus.updatedStatus.tooltip.OUTDATED"), children: /* @__PURE__ */ jsx(
|
|
46
|
+
"span",
|
|
47
|
+
{
|
|
48
|
+
className: `${styles.badge} ${styles.outdated}`,
|
|
49
|
+
"aria-label": ariaLabel,
|
|
50
|
+
children: /* @__PURE__ */ jsx(Text, { as: "p", className: styles.text, children: t("rosStatus.outdated") })
|
|
51
|
+
}
|
|
52
|
+
) });
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { UpdatedStatusBadge as default };
|
|
58
|
+
//# sourceMappingURL=UpdatedStatusBadge.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdatedStatusBadge.esm.js","sources":["../../../src/components/common/UpdatedStatusBadge.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Text } from '@backstage/ui';\nimport { Tooltip } from '@material-ui/core';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport {\n UpdatedStatusEnum,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions';\nimport styles from './UpdatedStatusBadge.module.css';\n\ntype Props = {\n status?: UpdatedStatusEnumType | null;\n isPending?: boolean;\n};\n\nexport default function UpdatedStatusBadge({\n status,\n isPending = false,\n}: Props) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n let ariaLabel: string | undefined;\n if (isPending) {\n ariaLabel = t('rosStatus.updated');\n } else if (status === UpdatedStatusEnum.VERY_OUTDATED) {\n ariaLabel = t('rosStatus.veryOutdated');\n } else if (status === UpdatedStatusEnum.OUTDATED) {\n ariaLabel = t('rosStatus.outdated');\n } else {\n ariaLabel = undefined;\n }\n\n if (isPending) {\n return (\n <span\n className={`${styles.badge} ${styles.pending}`}\n aria-label={ariaLabel}\n >\n <Text as=\"p\">{t('rosStatus.updated')}</Text>\n </span>\n );\n }\n\n if (status === UpdatedStatusEnum.VERY_OUTDATED) {\n return (\n <Tooltip title={t('rosStatus.updatedStatus.tooltip.VERY_OUTDATED')}>\n <span\n className={`${styles.badge} ${styles.veryOutdated}`}\n aria-label={ariaLabel}\n >\n <Text as=\"p\" className={styles.text}>\n {t('rosStatus.veryOutdated')}\n </Text>\n </span>\n </Tooltip>\n );\n }\n\n if (status === UpdatedStatusEnum.OUTDATED) {\n return (\n <Tooltip title={t('rosStatus.updatedStatus.tooltip.OUTDATED')}>\n <span\n className={`${styles.badge} ${styles.outdated}`}\n aria-label={ariaLabel}\n >\n <Text as=\"p\" className={styles.text}>\n {t('rosStatus.outdated')}\n </Text>\n </span>\n </Tooltip>\n );\n }\n return null;\n}\n"],"names":[],"mappings":";;;;;;;;AAeA,SAAwB,kBAAA,CAAmB;AAAA,EACzC,MAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAU;AACR,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,SAAA,GAAY,EAAE,mBAAmB,CAAA;AAAA,EACnC,CAAA,MAAA,IAAW,MAAA,KAAW,iBAAA,CAAkB,aAAA,EAAe;AACrD,IAAA,SAAA,GAAY,EAAE,wBAAwB,CAAA;AAAA,EACxC,CAAA,MAAA,IAAW,MAAA,KAAW,iBAAA,CAAkB,QAAA,EAAU;AAChD,IAAA,SAAA,GAAY,EAAE,oBAAoB,CAAA;AAAA,EACpC,CAAA,MAAO;AACL,IAAA,SAAA,GAAY,MAAA;AAAA,EACd;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,OAAO,CAAA,CAAA;AAAA,QAC5C,YAAA,EAAY,SAAA;AAAA,QAEZ,8BAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAK,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EAAE;AAAA;AAAA,KACvC;AAAA,EAEJ;AAEA,EAAA,IAAI,MAAA,KAAW,kBAAkB,aAAA,EAAe;AAC9C,IAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,+CAA+C,CAAA,EAC/D,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,YAAY,CAAA,CAAA;AAAA,QACjD,YAAA,EAAY,SAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,WAAW,MAAA,CAAO,IAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B;AAAA;AAAA,KACF,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,MAAA,KAAW,kBAAkB,QAAA,EAAU;AACzC,IAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,0CAA0C,CAAA,EAC1D,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AAAA,QAC7C,YAAA,EAAY,SAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,WAAW,MAAA,CAAO,IAAA,EAC5B,QAAA,EAAA,CAAA,CAAE,oBAAoB,CAAA,EACzB;AAAA;AAAA,KACF,EACF,CAAA;AAAA,EAEJ;AACA,EAAA,OAAO,IAAA;AACT;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".UpdatedStatusBadge-module_badge__L8lzQ {\n display: flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: 24px;\n text-align: center;\n font-size: 12px;\n}\n.UpdatedStatusBadge-module_text__1DPQ3 {\n color: var(--gray-900, #000);\n}\n\n.UpdatedStatusBadge-module_pending__9XU9w {\n background: var(--green-100);\n border: 1px solid var(--green-500);\n}\n\n.UpdatedStatusBadge-module_veryOutdated__tCijL {\n background: var(--red-200);\n border: 1px solid var(--red-400);\n}\n\n.UpdatedStatusBadge-module_outdated__5H9Uw {\n background: var(--orange-100);\n border: 1px solid var(--orange-300);\n}\n";
|
|
4
|
+
var styles = {"badge":"UpdatedStatusBadge-module_badge__L8lzQ","text":"UpdatedStatusBadge-module_text__1DPQ3","pending":"UpdatedStatusBadge-module_pending__9XU9w","veryOutdated":"UpdatedStatusBadge-module_veryOutdated__tCijL","outdated":"UpdatedStatusBadge-module_outdated__5H9Uw"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=UpdatedStatusBadge.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdatedStatusBadge.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -47,7 +47,15 @@ function RiScDialog({
|
|
|
47
47
|
onDelete
|
|
48
48
|
}) {
|
|
49
49
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
50
|
-
const {
|
|
50
|
+
const {
|
|
51
|
+
selectedRiSc,
|
|
52
|
+
riScs,
|
|
53
|
+
selectRiSc,
|
|
54
|
+
createNewRiSc,
|
|
55
|
+
deleteRiSc,
|
|
56
|
+
updateRiSc,
|
|
57
|
+
gcpCryptoKeys
|
|
58
|
+
} = useRiScs();
|
|
51
59
|
const {
|
|
52
60
|
register,
|
|
53
61
|
handleSubmit,
|
|
@@ -96,7 +104,9 @@ function RiScDialog({
|
|
|
96
104
|
if (dialogState === 1 /* Create */) {
|
|
97
105
|
createNewRiSc(data, switchOn, [selectedRiScType]);
|
|
98
106
|
} else if (dialogState === 5 /* Delete */) {
|
|
99
|
-
deleteRiSc(
|
|
107
|
+
deleteRiSc(
|
|
108
|
+
() => selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : "")
|
|
109
|
+
);
|
|
100
110
|
} else {
|
|
101
111
|
const areAgeKeysEqual = isDeeplyEqual(
|
|
102
112
|
data.sopsConfig.age?.map((age) => age.recipient).sort(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { DefaultRiScType, RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport ConfigInitialRisc from './ConfigInitialRisc';\nimport { Flex, Box, Button } from '@backstage/ui';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n SelectInitialRisc = 3,\n EditEncryption = 4,\n Delete = 5,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nfunction RiScStepper({\n children,\n activeStep,\n}: {\n children: React.ReactNode;\n activeStep: number;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [\n t('rosDialog.initialRiscTitle'),\n t('rosDialog.stepRiscDetails'),\n t('rosDialog.stepEncryption'),\n ];\n return (\n <Box style={{ width: '100%', padding: '24px' }}>\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {children}\n </Box>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { selectedRiSc, createNewRiSc, deleteRiSc, updateRiSc, gcpCryptoKeys } =\n useRiScs();\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [switchOn, setSwitchOn] = useState(false);\n\n const [selectedRiScType, setSelectedRiScType] = useState<DefaultRiScType>(\n DefaultRiScType.Standard,\n );\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n if (activeStep === 1) {\n setActiveStep(2);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n if (activeStep === 2) {\n setActiveStep(1);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, switchOn, [selectedRiScType]);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc();\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleNew')}</DialogTitle>\n <RiScStepper activeStep={activeStep}>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n paddingX: 1,\n paddingY: 0.5,\n }}\n >\n {activeStep === 0 && (\n <ConfigInitialRisc\n dialogState={dialogState}\n switchOn={switchOn}\n setSwitchOn={setSwitchOn}\n setValue={setValue}\n selectedRiScType={selectedRiScType}\n setSelectedRiScType={setSelectedRiScType}\n />\n )}\n {activeStep === 1 && (\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 2 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n </DialogContent>\n </RiScStepper>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Flex>\n <Button\n size=\"medium\"\n variant=\"secondary\"\n isDisabled={activeStep === 0}\n onClick={handleBack}\n >\n {t('dictionary.previous')}\n </Button>\n {activeStep < 2 ? (\n <Button size=\"medium\" variant=\"primary\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('deleteDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContent>{t('deleteDialog.confirmationMessage')}</DialogContent>\n </DialogContent>\n <DialogActions>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>\n <Flex direction=\"column\">{t('rosDialog.titleEdit')}</Flex>\n </DialogTitle>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n width: '100%',\n paddingX: 4,\n paddingY: 3,\n }}\n >\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={onDelete}\n style={{ color: '#d32f2f', paddingLeft: 0 }}\n >\n <i className=\"ri-delete-bin-line\" style={{ fontSize: '16px' }} />\n {t('contentHeader.deleteButton')}\n </Button>\n <Flex>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.editEncryption')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { DefaultRiScType, RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport ConfigInitialRisc from './ConfigInitialRisc';\nimport { Flex, Box, Button } from '@backstage/ui';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n SelectInitialRisc = 3,\n EditEncryption = 4,\n Delete = 5,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nfunction RiScStepper({\n children,\n activeStep,\n}: {\n children: React.ReactNode;\n activeStep: number;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [\n t('rosDialog.initialRiscTitle'),\n t('rosDialog.stepRiscDetails'),\n t('rosDialog.stepEncryption'),\n ];\n return (\n <Box style={{ width: '100%', padding: '24px' }}>\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {children}\n </Box>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n createNewRiSc,\n deleteRiSc,\n updateRiSc,\n gcpCryptoKeys,\n } = useRiScs();\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [switchOn, setSwitchOn] = useState(false);\n\n const [selectedRiScType, setSelectedRiScType] = useState<DefaultRiScType>(\n DefaultRiScType.Standard,\n );\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n if (activeStep === 1) {\n setActiveStep(2);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n if (activeStep === 2) {\n setActiveStep(1);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, switchOn, [selectedRiScType]);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc(() =>\n selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : ''),\n );\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleNew')}</DialogTitle>\n <RiScStepper activeStep={activeStep}>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n paddingX: 1,\n paddingY: 0.5,\n }}\n >\n {activeStep === 0 && (\n <ConfigInitialRisc\n dialogState={dialogState}\n switchOn={switchOn}\n setSwitchOn={setSwitchOn}\n setValue={setValue}\n selectedRiScType={selectedRiScType}\n setSelectedRiScType={setSelectedRiScType}\n />\n )}\n {activeStep === 1 && (\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 2 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n </DialogContent>\n </RiScStepper>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Flex>\n <Button\n size=\"medium\"\n variant=\"secondary\"\n isDisabled={activeStep === 0}\n onClick={handleBack}\n >\n {t('dictionary.previous')}\n </Button>\n {activeStep < 2 ? (\n <Button size=\"medium\" variant=\"primary\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('deleteDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContent>{t('deleteDialog.confirmationMessage')}</DialogContent>\n </DialogContent>\n <DialogActions>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>\n <Flex direction=\"column\">{t('rosDialog.titleEdit')}</Flex>\n </DialogTitle>\n <DialogContent\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n width: '100%',\n paddingX: 4,\n paddingY: 3,\n }}\n >\n <ConfigRiscInfo\n dialogState={dialogState}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={onDelete}\n style={{ color: '#d32f2f', paddingLeft: 0 }}\n >\n <i className=\"ri-delete-bin-line\" style={{ fontSize: '16px' }} />\n {t('contentHeader.deleteButton')}\n </Button>\n <Flex>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.editEncryption')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates"],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ function RiScSelectionCard(props) {
|
|
|
13
13
|
/* @__PURE__ */ jsx(Flex, { direction: "column", children: riScs !== null && riScs.length !== 0 && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
|
|
14
14
|
Select,
|
|
15
15
|
{
|
|
16
|
+
value: selectedRiSc?.id,
|
|
16
17
|
className: styles.selectTrigger,
|
|
17
18
|
"aria-label": t("contentHeader.multipleRiScs"),
|
|
18
19
|
options: riScs.map((riSc) => ({
|
|
@@ -22,7 +23,6 @@ function RiScSelectionCard(props) {
|
|
|
22
23
|
onSelectionChange: (key) => {
|
|
23
24
|
if (key) selectRiSc(key.toString());
|
|
24
25
|
},
|
|
25
|
-
defaultSelectedKey: selectedRiSc?.id ?? "",
|
|
26
26
|
size: "medium"
|
|
27
27
|
}
|
|
28
28
|
) }) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScSelectionCard.esm.js","sources":["../../../src/components/riScInfo/RiScSelectionCard.tsx"],"sourcesContent":["import { Markdown } from '../common/Markdown.tsx';\nimport { RiScWithMetadata } from '../../utils/types.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Card, CardBody, Text, Select, ButtonIcon, Flex } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\n\ninterface Props {\n riScWithMetadata: RiScWithMetadata;\n edit: () => void;\n onCreateNew: () => void;\n}\n\nexport function RiScSelectionCard(props: Props) {\n const { riScs, selectedRiSc, selectRiSc } = useRiScs();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex direction=\"column\" gap=\"24px\">\n <Flex direction=\"column\">\n {riScs !== null && riScs.length !== 0 && (\n <>\n <Select\n className={styles.selectTrigger}\n aria-label={t('contentHeader.multipleRiScs')}\n options={riScs.map(riSc => ({\n value: riSc.id,\n label: riSc.content.title,\n }))}\n onSelectionChange={key => {\n if (key) selectRiSc(key.toString());\n }}\n
|
|
1
|
+
{"version":3,"file":"RiScSelectionCard.esm.js","sources":["../../../src/components/riScInfo/RiScSelectionCard.tsx"],"sourcesContent":["import { Markdown } from '../common/Markdown.tsx';\nimport { RiScWithMetadata } from '../../utils/types.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Card, CardBody, Text, Select, ButtonIcon, Flex } from '@backstage/ui';\nimport styles from './RiScSelectionCard.module.css';\n\ninterface Props {\n riScWithMetadata: RiScWithMetadata;\n edit: () => void;\n onCreateNew: () => void;\n}\n\nexport function RiScSelectionCard(props: Props) {\n const { riScs, selectedRiSc, selectRiSc } = useRiScs();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex direction=\"column\" gap=\"24px\">\n <Flex direction=\"column\">\n {riScs !== null && riScs.length !== 0 && (\n <>\n <Select\n value={selectedRiSc?.id}\n className={styles.selectTrigger}\n aria-label={t('contentHeader.multipleRiScs')}\n options={riScs.map(riSc => ({\n value: riSc.id,\n label: riSc.content.title,\n }))}\n onSelectionChange={key => {\n if (key) selectRiSc(key.toString());\n }}\n size=\"medium\"\n />\n </>\n )}\n </Flex>\n <Card>\n <CardBody>\n <Flex\n justify=\"between\"\n align=\"center\"\n style={{\n marginBottom: '16px',\n marginTop: '8px',\n }}\n >\n <Text variant=\"title-x-small\" as=\"h5\" weight=\"bold\">\n {props.riScWithMetadata.content.title}\n </Text>\n <ButtonIcon\n onClick={props.edit}\n icon={\n <i className=\"ri-edit-line\" style={{ fontSize: 'large' }} />\n }\n variant=\"tertiary\"\n />\n </Flex>\n <Markdown description={props.riScWithMetadata.content.scope} />\n </CardBody>\n </Card>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAcO,SAAS,kBAAkB,KAAA,EAAc;AAC9C,EAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,UAAA,KAAe,QAAA,EAAS;AACrD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,MAAA,EAC3B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,QAAA,EACb,QAAA,EAAA,KAAA,KAAU,QAAQ,KAAA,CAAM,MAAA,KAAW,qBAClC,GAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,YAAA,EAAc,EAAA;AAAA,QACrB,WAAW,MAAA,CAAO,aAAA;AAAA,QAClB,YAAA,EAAY,EAAE,6BAA6B,CAAA;AAAA,QAC3C,OAAA,EAAS,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,UAC1B,OAAO,IAAA,CAAK,EAAA;AAAA,UACZ,KAAA,EAAO,KAAK,OAAA,CAAQ;AAAA,SACtB,CAAE,CAAA;AAAA,QACF,mBAAmB,CAAA,GAAA,KAAO;AACxB,UAAA,IAAI,GAAA,EAAK,UAAA,CAAW,GAAA,CAAI,QAAA,EAAU,CAAA;AAAA,QACpC,CAAA;AAAA,QACA,IAAA,EAAK;AAAA;AAAA,OAET,CAAA,EAEJ,CAAA;AAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,YAAA,EAAc,MAAA;AAAA,YACd,SAAA,EAAW;AAAA,WACb;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,EAAA,EAAG,IAAA,EAAK,QAAO,MAAA,EAC1C,QAAA,EAAA,KAAA,CAAM,gBAAA,CAAiB,OAAA,CAAQ,KAAA,EAClC,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,SAAS,KAAA,CAAM,IAAA;AAAA,gBACf,IAAA,sBACG,GAAA,EAAA,EAAE,SAAA,EAAU,gBAAe,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAQ,EAAG,CAAA;AAAA,gBAE5D,OAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,OACF;AAAA,0BACC,QAAA,EAAA,EAAS,WAAA,EAAa,KAAA,CAAM,gBAAA,CAAiB,QAAQ,KAAA,EAAO;AAAA,KAAA,EAC/D,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsxs,
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { useSearchParams } from 'react-router-dom';
|
|
4
4
|
import { ScenarioWizard } from '../scenarioWizard/ScenarioWizard.esm.js';
|
|
@@ -61,7 +61,7 @@ function RiScPlugin() {
|
|
|
61
61
|
resetResponse();
|
|
62
62
|
}
|
|
63
63
|
}, [resetRiScStatus, resetResponse, scenarioWizardStep]);
|
|
64
|
-
return /* @__PURE__ */ jsxs(
|
|
64
|
+
return /* @__PURE__ */ jsxs("div", { "data-root-for": "ros", children: [
|
|
65
65
|
response && !updateStatus.isLoading && /* @__PURE__ */ jsx(
|
|
66
66
|
Alert,
|
|
67
67
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport Alert from '@mui/material/Alert';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n
|
|
1
|
+
{"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport Alert from '@mui/material/Alert';\nimport Grid from '@mui/material/Grid';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { getAlertSeverity } from '../../utils/utilityfunctions';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <div data-root-for=\"ros\">\n {response && !updateStatus.isLoading && (\n <Alert\n severity={getAlertSeverity(updateStatus)}\n sx={{ marginBottom: 2 }}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </Alert>\n )}\n {updateStatus.isLoading && (\n <LinearProgress\n sx={{\n position: 'sticky',\n top: 0,\n margin: 2,\n }}\n />\n )}\n\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc && (\n <Flex\n justify=\"center\"\n align=\"center\"\n style={{\n height: '60%',\n }}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <Grid container rowSpacing={1} columnSpacing={4}>\n <Grid item xs={6}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n\n <Grid item xs={6} />\n\n <Grid item xs={6}>\n <RiScSelectionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n onCreateNew={openCreateRiScDialog}\n />\n </Grid>\n <Grid item xs={6}>\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} lg={8}>\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Grid>\n <Grid item xs={12} lg={4}>\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
-
import { ExpandLess, ExpandMore, Edit
|
|
3
|
+
import { ExpandLess, ExpandMore, Edit } from '@mui/icons-material';
|
|
4
4
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
5
5
|
import Box from '@mui/material/Box';
|
|
6
6
|
import Button from '@mui/material/Button';
|
|
@@ -14,13 +14,13 @@ import { useRiScs } from '../../../contexts/RiScContext.esm.js';
|
|
|
14
14
|
import { useScenario } from '../../../contexts/ScenarioContext.esm.js';
|
|
15
15
|
import { ActionStatusOptions } from '../../../utils/constants.esm.js';
|
|
16
16
|
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
17
|
-
import { getTranslatedActionStatus,
|
|
17
|
+
import { getTranslatedActionStatus, calculateDaysSince, calculateUpdatedStatus, getActionStatusButtonClass, actionStatusOptionsToTranslationKeys, formatDate, deleteAction } from '../../../utils/utilityfunctions.esm.js';
|
|
18
18
|
import { Markdown } from '../../common/Markdown.esm.js';
|
|
19
19
|
import { body2 } from '../../common/typography.esm.js';
|
|
20
|
+
import UpdatedStatusBadge from '../../common/UpdatedStatusBadge.esm.js';
|
|
20
21
|
import { ActionFormItem } from './ActionFormItem.esm.js';
|
|
21
22
|
import { DeleteActionConfirmation } from './DeleteConfirmation.esm.js';
|
|
22
|
-
import {
|
|
23
|
-
import { Text } from '@backstage/ui';
|
|
23
|
+
import { Flex, Text } from '@backstage/ui';
|
|
24
24
|
|
|
25
25
|
function ActionBox({
|
|
26
26
|
action,
|
|
@@ -53,6 +53,16 @@ function ActionBox({
|
|
|
53
53
|
return t("scenarioDrawer.action.notUpdated");
|
|
54
54
|
}
|
|
55
55
|
const parsedDateTime = getParsedDateTime();
|
|
56
|
+
let daysSinceLastUpdate = null;
|
|
57
|
+
if (isActionUpdated) {
|
|
58
|
+
daysSinceLastUpdate = calculateDaysSince(/* @__PURE__ */ new Date());
|
|
59
|
+
} else if (action.lastUpdated) {
|
|
60
|
+
daysSinceLastUpdate = calculateDaysSince(new Date(action.lastUpdated));
|
|
61
|
+
}
|
|
62
|
+
const computedUpdatedStatus = calculateUpdatedStatus(
|
|
63
|
+
daysSinceLastUpdate,
|
|
64
|
+
selectedRiSc?.lastPublished?.numberOfCommits || null
|
|
65
|
+
);
|
|
56
66
|
function updateActionInScenario(updates) {
|
|
57
67
|
const actionIndex = scenario.actions.findIndex((a) => a.ID === action.ID);
|
|
58
68
|
const currentStatus = formMethods.getValues()?.actions?.[actionIndex]?.status;
|
|
@@ -136,7 +146,16 @@ function ActionBox({
|
|
|
136
146
|
onClick: () => toggleActionExpanded(action.ID),
|
|
137
147
|
children: [
|
|
138
148
|
/* @__PURE__ */ jsx(IconButton, { children: isExpanded ? /* @__PURE__ */ jsx(ExpandLess, {}) : /* @__PURE__ */ jsx(ExpandMore, {}) }),
|
|
139
|
-
/* @__PURE__ */
|
|
149
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", align: "start", gap: "1", children: [
|
|
150
|
+
/* @__PURE__ */ jsx(
|
|
151
|
+
UpdatedStatusBadge,
|
|
152
|
+
{
|
|
153
|
+
status: computedUpdatedStatus,
|
|
154
|
+
isPending: isActionUpdated
|
|
155
|
+
}
|
|
156
|
+
),
|
|
157
|
+
/* @__PURE__ */ jsx(Text, { variant: "body-large", children: isActionTitlePresent ? action.title : `${t("dictionary.measure")} ${index + 1}` })
|
|
158
|
+
] })
|
|
140
159
|
]
|
|
141
160
|
}
|
|
142
161
|
),
|
|
@@ -193,13 +212,6 @@ function ActionBox({
|
|
|
193
212
|
/* @__PURE__ */ jsx(Text, { variant: "body-large", children: parsedDateTime })
|
|
194
213
|
]
|
|
195
214
|
}
|
|
196
|
-
),
|
|
197
|
-
/* @__PURE__ */ jsx(
|
|
198
|
-
Exclamations,
|
|
199
|
-
{
|
|
200
|
-
actionLastUpdated: isActionUpdated ? /* @__PURE__ */ new Date() : action.lastUpdated,
|
|
201
|
-
riScLastPublished: selectedRiSc?.lastPublished
|
|
202
|
-
}
|
|
203
215
|
)
|
|
204
216
|
]
|
|
205
217
|
}
|
|
@@ -293,41 +305,6 @@ function ActionBox({
|
|
|
293
305
|
)
|
|
294
306
|
] });
|
|
295
307
|
}
|
|
296
|
-
function Exclamations({
|
|
297
|
-
actionLastUpdated,
|
|
298
|
-
riScLastPublished
|
|
299
|
-
}) {
|
|
300
|
-
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
301
|
-
const daysSinceLastUpdate = actionLastUpdated ? calculateDaysSince(new Date(actionLastUpdated)) : null;
|
|
302
|
-
const status = calculateUpdatedStatus(
|
|
303
|
-
daysSinceLastUpdate,
|
|
304
|
-
riScLastPublished?.numberOfCommits || null
|
|
305
|
-
);
|
|
306
|
-
switch (status) {
|
|
307
|
-
case UpdatedStatusEnum.VERY_OUTDATED:
|
|
308
|
-
return /* @__PURE__ */ jsx(Tooltip, { title: t("rosStatus.updatedStatus.tooltip.VERY_OUTDATED"), children: /* @__PURE__ */ jsxs(
|
|
309
|
-
Box,
|
|
310
|
-
{
|
|
311
|
-
sx: {
|
|
312
|
-
display: "flex",
|
|
313
|
-
flexDirection: "row",
|
|
314
|
-
color: "#FF4444"
|
|
315
|
-
},
|
|
316
|
-
children: [
|
|
317
|
-
/* @__PURE__ */ jsx(PriorityHigh, { sx: { marginRight: "-6px", marginLeft: "-6px" } }),
|
|
318
|
-
/* @__PURE__ */ jsx(PriorityHigh, { sx: { marginRight: "-6px", marginLeft: "-6px" } })
|
|
319
|
-
]
|
|
320
|
-
}
|
|
321
|
-
) });
|
|
322
|
-
case UpdatedStatusEnum.OUTDATED:
|
|
323
|
-
return /* @__PURE__ */ jsx(Tooltip, { title: t("rosStatus.updatedStatus.tooltip.OUTDATED"), children: /* @__PURE__ */ jsx(Box, { sx: { color: "#FF8B38", minWidth: "24px", textAlign: "right" }, children: /* @__PURE__ */ jsx(PriorityHigh, { sx: { marginRight: "-6px", marginLeft: "-6px" } }) }) });
|
|
324
|
-
case UpdatedStatusEnum.UPDATED:
|
|
325
|
-
case UpdatedStatusEnum.LITTLE_OUTDATED:
|
|
326
|
-
return /* @__PURE__ */ jsx(Box, { sx: { minWidth: "24px" } });
|
|
327
|
-
default:
|
|
328
|
-
return null;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
308
|
|
|
332
309
|
export { ActionBox };
|
|
333
310
|
//# sourceMappingURL=ActionBox.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionBox.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionBox.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Edit,\n ExpandLess,\n ExpandMore,\n PriorityHigh,\n} from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Link from '@mui/material/Link';\nimport { DualButtonWithMenu } from '../../common/DualButtonWithMenu';\nimport { useState } from 'react';\nimport { UseFieldArrayRemove, UseFormReturn } from 'react-hook-form';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useScenario } from '../../../contexts/ScenarioContext';\nimport { ActionStatusOptions } from '../../../utils/constants';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { Action, FormScenario, LastPublished } from '../../../utils/types';\nimport {\n actionStatusOptionsToTranslationKeys,\n calculateDaysSince,\n calculateUpdatedStatus,\n deleteAction,\n formatDate,\n UpdatedStatusEnum,\n getTranslatedActionStatus,\n getActionStatusButtonClass,\n} from '../../../utils/utilityfunctions';\nimport { Markdown } from '../../common/Markdown';\nimport { body2 } from '../../common/typography';\nimport { ActionFormItem } from './ActionFormItem';\nimport { DeleteActionConfirmation } from './DeleteConfirmation';\nimport { Tooltip } from '@material-ui/core';\nimport { Text } from '@backstage/ui';\n\ninterface ActionBoxProps {\n action: Action;\n index: number;\n formMethods: UseFormReturn<FormScenario>;\n remove: UseFieldArrayRemove;\n onSubmit: () => void;\n setCurrentUpdatedActionIDs: React.Dispatch<React.SetStateAction<string[]>>;\n}\n\nexport function ActionBox({\n action,\n index,\n formMethods,\n remove,\n onSubmit,\n setCurrentUpdatedActionIDs,\n}: ActionBoxProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { isActionExpanded, toggleActionExpanded } = useScenario();\n const isExpanded = isActionExpanded(action.ID);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n const [deleteActionConfirmationIsOpen, setDeleteActionConfirmationIsOpen] =\n useState(false);\n const [isActionUpdated, setIsActionUpdated] = useState(false);\n\n const { updateStatus, selectedRiSc } = useRiScs();\n\n const { submitEditedScenarioToRiSc, mapFormScenarioToScenario, scenario } =\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 = getTranslatedActionStatus(action.status, t);\n\n function handleDeleteAction(): void {\n setDeleteActionConfirmationIsOpen(true);\n }\n\n function confirmDeleteAction(): void {\n deleteAction(remove, index, onSubmit);\n setDeleteActionConfirmationIsOpen(false);\n }\n\n function getParsedDateTime(): string {\n if (isActionUpdated) return formatDate(new Date());\n if (action.lastUpdated) return formatDate(action.lastUpdated);\n return t('scenarioDrawer.action.notUpdated');\n }\n const parsedDateTime = getParsedDateTime();\n\n function updateActionInScenario(updates: ActionStatusOptions) {\n const actionIndex = scenario.actions.findIndex(a => a.ID === action.ID);\n const currentStatus =\n formMethods.getValues()?.actions?.[actionIndex]?.status;\n\n if (updates === currentStatus) {\n return;\n }\n\n formMethods.setValue(`actions.${index}.status`, updates);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n setIsActionUpdated(true);\n }\n\n function handleStatusChange(newStatus: ActionStatusOptions) {\n updateActionInScenario(newStatus);\n }\n\n function isToday(lastUpdated: Date | null): boolean {\n const today = new Date();\n\n if (!lastUpdated) return false;\n const lastUpdatedParsed =\n typeof lastUpdated === 'string' ? new Date(lastUpdated) : lastUpdated;\n\n return (\n lastUpdatedParsed.getDate() === today.getDate() &&\n lastUpdatedParsed.getMonth() === today.getMonth() &&\n lastUpdatedParsed.getFullYear() === today.getFullYear()\n );\n }\n\n if (isEditing) {\n return (\n <>\n <ActionFormItem\n formMethods={formMethods}\n index={index}\n handleDelete={handleDeleteAction}\n showTitleNumber={false}\n remove={remove}\n />\n <Box display=\"flex\" gap={1}>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data));\n })}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 8, color: 'inherit' }}\n />\n )}\n </Button>\n\n <Button onClick={() => setIsEditing(false)}>\n {t('dictionary.cancel')}\n </Button>\n </Box>\n </>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n cursor: 'pointer',\n width: '100%',\n }}\n onClick={() => toggleActionExpanded(action.ID)}\n >\n <IconButton>\n {isExpanded ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <Text variant=\"body-large\">\n {isActionTitlePresent\n ? action.title\n : `${t('dictionary.measure')} ${index + 1}`}\n </Text>\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 2,\n alignItems: 'center',\n }}\n >\n <DualButtonWithMenu\n propsCommon={{\n className: getActionStatusButtonClass(action.status),\n }}\n propsLeft={{\n children: translatedActionStatus,\n }}\n propsRight={{\n iconEnd: <i className=\"ri-loop-left-line\" />,\n onClick: () => {\n if (isToday(action.lastUpdated ?? null)) return;\n setIsActionUpdated(true);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n },\n }}\n menuItems={Object.values(ActionStatusOptions).map(value => ({\n key: value,\n // @ts-ignore\n label: t(\n actionStatusOptionsToTranslationKeys[\n value as ActionStatusOptions\n ],\n ),\n onClick: () => handleStatusChange(value as ActionStatusOptions),\n selected: value === action.status,\n }))}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('scenarioDrawer.action.lastUpdated')}\n </Text>\n <Text variant=\"body-large\">{parsedDateTime}</Text>\n </Box>\n <Exclamations\n actionLastUpdated={\n isActionUpdated ? new Date() : action.lastUpdated\n }\n riScLastPublished={selectedRiSc?.lastPublished}\n />\n </Box>\n <IconButton onClick={handleDeleteAction}>\n <DeleteIcon />\n </IconButton>\n </Box>\n\n <Collapse in={isExpanded} sx={{ marginTop: 1 }}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n }}\n >\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {t('dictionary.description')}\n </Text>\n <IconButton\n sx={{\n marginLeft: 'auto',\n transition: 'opacity 300ms ease-in',\n }}\n onClick={() => setIsEditing(!isEditing)}\n >\n <Edit />\n </IconButton>\n </Box>\n <Markdown description={action.description} />\n\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'end',\n marginTop: '16px',\n }}\n >\n <Box>\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {' '}\n {t('dictionary.url')}\n </Text>\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 <Text as=\"p\" variant=\"body-large\" style={{ fontStyle: 'italic' }}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n </Collapse>\n\n <DeleteActionConfirmation\n isOpen={deleteActionConfirmationIsOpen}\n setIsOpen={setDeleteActionConfirmationIsOpen}\n onConfirm={confirmDeleteAction}\n />\n </Box>\n );\n}\n\nfunction Exclamations({\n actionLastUpdated,\n riScLastPublished,\n}: {\n actionLastUpdated: Date | undefined | null;\n riScLastPublished?: LastPublished;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const daysSinceLastUpdate = actionLastUpdated\n ? calculateDaysSince(new Date(actionLastUpdated))\n : null;\n const status = calculateUpdatedStatus(\n daysSinceLastUpdate,\n riScLastPublished?.numberOfCommits || null,\n );\n\n switch (status) {\n case UpdatedStatusEnum.VERY_OUTDATED:\n return (\n <Tooltip title={t('rosStatus.updatedStatus.tooltip.VERY_OUTDATED')}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n color: '#FF4444',\n }}\n >\n <PriorityHigh sx={{ marginRight: '-6px', marginLeft: '-6px' }} />\n <PriorityHigh sx={{ marginRight: '-6px', marginLeft: '-6px' }} />\n </Box>\n </Tooltip>\n );\n case UpdatedStatusEnum.OUTDATED:\n return (\n <Tooltip title={t('rosStatus.updatedStatus.tooltip.OUTDATED')}>\n <Box sx={{ color: '#FF8B38', minWidth: '24px', textAlign: 'right' }}>\n <PriorityHigh sx={{ marginRight: '-6px', marginLeft: '-6px' }} />\n </Box>\n </Tooltip>\n );\n case UpdatedStatusEnum.UPDATED:\n case UpdatedStatusEnum.LITTLE_OUTDATED:\n return <Box sx={{ minWidth: '24px' }} />;\n default:\n return null;\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 { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Edit, ExpandLess, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Link from '@mui/material/Link';\nimport { DualButtonWithMenu } from '../../common/DualButtonWithMenu';\nimport { useState } from 'react';\nimport { UseFieldArrayRemove, UseFormReturn } from 'react-hook-form';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useScenario } from '../../../contexts/ScenarioContext';\nimport { ActionStatusOptions } from '../../../utils/constants';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { Action, FormScenario } from '../../../utils/types';\nimport {\n actionStatusOptionsToTranslationKeys,\n calculateDaysSince,\n calculateUpdatedStatus,\n deleteAction,\n formatDate,\n getTranslatedActionStatus,\n getActionStatusButtonClass,\n} from '../../../utils/utilityfunctions';\nimport { Markdown } from '../../common/Markdown';\nimport { body2 } from '../../common/typography';\nimport UpdatedStatusBadge from '../../common/UpdatedStatusBadge';\nimport { ActionFormItem } from './ActionFormItem';\nimport { DeleteActionConfirmation } from './DeleteConfirmation';\nimport { Text, Flex } from '@backstage/ui';\n\ninterface ActionBoxProps {\n action: Action;\n index: number;\n formMethods: UseFormReturn<FormScenario>;\n remove: UseFieldArrayRemove;\n onSubmit: () => void;\n setCurrentUpdatedActionIDs: React.Dispatch<React.SetStateAction<string[]>>;\n}\n\nexport function ActionBox({\n action,\n index,\n formMethods,\n remove,\n onSubmit,\n setCurrentUpdatedActionIDs,\n}: ActionBoxProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { isActionExpanded, toggleActionExpanded } = useScenario();\n const isExpanded = isActionExpanded(action.ID);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n const [deleteActionConfirmationIsOpen, setDeleteActionConfirmationIsOpen] =\n useState(false);\n const [isActionUpdated, setIsActionUpdated] = useState(false);\n\n const { updateStatus, selectedRiSc } = useRiScs();\n\n const { submitEditedScenarioToRiSc, mapFormScenarioToScenario, scenario } =\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 = getTranslatedActionStatus(action.status, t);\n\n function handleDeleteAction(): void {\n setDeleteActionConfirmationIsOpen(true);\n }\n\n function confirmDeleteAction(): void {\n deleteAction(remove, index, onSubmit);\n setDeleteActionConfirmationIsOpen(false);\n }\n\n function getParsedDateTime(): string {\n if (isActionUpdated) return formatDate(new Date());\n if (action.lastUpdated) return formatDate(action.lastUpdated);\n return t('scenarioDrawer.action.notUpdated');\n }\n const parsedDateTime = getParsedDateTime();\n\n let daysSinceLastUpdate: number | null = null;\n if (isActionUpdated) {\n daysSinceLastUpdate = calculateDaysSince(new Date());\n } else if (action.lastUpdated) {\n daysSinceLastUpdate = calculateDaysSince(new Date(action.lastUpdated));\n }\n\n const computedUpdatedStatus = calculateUpdatedStatus(\n daysSinceLastUpdate,\n selectedRiSc?.lastPublished?.numberOfCommits || null,\n );\n\n function updateActionInScenario(updates: ActionStatusOptions) {\n const actionIndex = scenario.actions.findIndex(a => a.ID === action.ID);\n const currentStatus =\n formMethods.getValues()?.actions?.[actionIndex]?.status;\n\n if (updates === currentStatus) {\n return;\n }\n\n formMethods.setValue(`actions.${index}.status`, updates);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n setIsActionUpdated(true);\n }\n\n function handleStatusChange(newStatus: ActionStatusOptions) {\n updateActionInScenario(newStatus);\n }\n\n function isToday(lastUpdated: Date | null): boolean {\n const today = new Date();\n\n if (!lastUpdated) return false;\n const lastUpdatedParsed =\n typeof lastUpdated === 'string' ? new Date(lastUpdated) : lastUpdated;\n\n return (\n lastUpdatedParsed.getDate() === today.getDate() &&\n lastUpdatedParsed.getMonth() === today.getMonth() &&\n lastUpdatedParsed.getFullYear() === today.getFullYear()\n );\n }\n\n if (isEditing) {\n return (\n <>\n <ActionFormItem\n formMethods={formMethods}\n index={index}\n handleDelete={handleDeleteAction}\n showTitleNumber={false}\n remove={remove}\n />\n <Box display=\"flex\" gap={1}>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data));\n })}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 8, color: 'inherit' }}\n />\n )}\n </Button>\n\n <Button onClick={() => setIsEditing(false)}>\n {t('dictionary.cancel')}\n </Button>\n </Box>\n </>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n cursor: 'pointer',\n width: '100%',\n }}\n onClick={() => toggleActionExpanded(action.ID)}\n >\n <IconButton>\n {isExpanded ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <Flex direction=\"column\" align=\"start\" gap=\"1\">\n <UpdatedStatusBadge\n status={computedUpdatedStatus}\n isPending={isActionUpdated}\n />\n <Text variant=\"body-large\">\n {isActionTitlePresent\n ? action.title\n : `${t('dictionary.measure')} ${index + 1}`}\n </Text>\n </Flex>\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 2,\n alignItems: 'center',\n }}\n >\n <DualButtonWithMenu\n propsCommon={{\n className: getActionStatusButtonClass(action.status),\n }}\n propsLeft={{\n children: translatedActionStatus,\n }}\n propsRight={{\n iconEnd: <i className=\"ri-loop-left-line\" />,\n onClick: () => {\n if (isToday(action.lastUpdated ?? null)) return;\n setIsActionUpdated(true);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n },\n }}\n menuItems={Object.values(ActionStatusOptions).map(value => ({\n key: value,\n // @ts-ignore\n label: t(\n actionStatusOptionsToTranslationKeys[\n value as ActionStatusOptions\n ],\n ),\n onClick: () => handleStatusChange(value as ActionStatusOptions),\n selected: value === action.status,\n }))}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('scenarioDrawer.action.lastUpdated')}\n </Text>\n <Text variant=\"body-large\">{parsedDateTime}</Text>\n </Box>\n </Box>\n <IconButton onClick={handleDeleteAction}>\n <DeleteIcon />\n </IconButton>\n </Box>\n\n <Collapse in={isExpanded} sx={{ marginTop: 1 }}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n }}\n >\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {t('dictionary.description')}\n </Text>\n <IconButton\n sx={{\n marginLeft: 'auto',\n transition: 'opacity 300ms ease-in',\n }}\n onClick={() => setIsEditing(!isEditing)}\n >\n <Edit />\n </IconButton>\n </Box>\n <Markdown description={action.description} />\n\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'end',\n marginTop: '16px',\n }}\n >\n <Box>\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {' '}\n {t('dictionary.url')}\n </Text>\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 <Text as=\"p\" variant=\"body-large\" style={{ fontStyle: 'italic' }}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n </Collapse>\n\n <DeleteActionConfirmation\n isOpen={deleteActionConfirmationIsOpen}\n setIsOpen={setDeleteActionConfirmationIsOpen}\n onConfirm={confirmDeleteAction}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -11,9 +11,10 @@ import { useScenario } from '../../contexts/ScenarioContext.esm.js';
|
|
|
11
11
|
import { ActionStatusOptions } from '../../utils/constants.esm.js';
|
|
12
12
|
import { useDebounce } from '../../utils/hooks.esm.js';
|
|
13
13
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
14
|
-
import {
|
|
14
|
+
import { getActionStatusButtonClass, actionStatusOptionsToTranslationKeys, formatDate } from '../../utils/utilityfunctions.esm.js';
|
|
15
15
|
import { Markdown } from '../common/Markdown.esm.js';
|
|
16
16
|
import { body2 } from '../common/typography.esm.js';
|
|
17
|
+
import UpdatedStatusBadge from '../common/UpdatedStatusBadge.esm.js';
|
|
17
18
|
|
|
18
19
|
function ActionsCard(props) {
|
|
19
20
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
@@ -50,32 +51,6 @@ function ActionsCard(props) {
|
|
|
50
51
|
(prev) => prev.includes(actionID) ? prev : [...prev, actionID]
|
|
51
52
|
);
|
|
52
53
|
}
|
|
53
|
-
function getUpdatedStatusStyle(status) {
|
|
54
|
-
const base = {
|
|
55
|
-
padding: "4px 0",
|
|
56
|
-
borderRadius: "24px"
|
|
57
|
-
};
|
|
58
|
-
if (status === UpdatedStatusEnum.VERY_OUTDATED) {
|
|
59
|
-
return {
|
|
60
|
-
...base,
|
|
61
|
-
backgroundColor: "var(--red-200)",
|
|
62
|
-
border: "1px solid var(--red-500)"
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
if (status === UpdatedStatusEnum.OUTDATED) {
|
|
66
|
-
return {
|
|
67
|
-
...base,
|
|
68
|
-
backgroundColor: "var(--orange-100)",
|
|
69
|
-
border: "1px solid var(--orange-300)"
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
return base;
|
|
73
|
-
}
|
|
74
|
-
const statusBadgeStyle = {
|
|
75
|
-
padding: "0 8px",
|
|
76
|
-
fontSize: "12px",
|
|
77
|
-
color: "var(--bui-black)"
|
|
78
|
-
};
|
|
79
54
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
80
55
|
/* @__PURE__ */ jsx(Divider, { sx: { marginBottom: "16px" } }),
|
|
81
56
|
filteredData.map((action, idx) => {
|
|
@@ -115,27 +90,18 @@ function ActionsCard(props) {
|
|
|
115
90
|
}
|
|
116
91
|
),
|
|
117
92
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", align: "start", gap: "1", children: [
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
showUpdatedBadge && isPending && /* @__PURE__ */ jsx(
|
|
128
|
-
"span",
|
|
129
|
-
{
|
|
130
|
-
style: {
|
|
131
|
-
padding: "4px 0",
|
|
132
|
-
backgroundColor: "#D0ECD6",
|
|
133
|
-
border: "1px solid #156630",
|
|
134
|
-
borderRadius: "24px"
|
|
135
|
-
},
|
|
136
|
-
children: /* @__PURE__ */ jsx(Text, { style: statusBadgeStyle, children: t("rosStatus.updated") })
|
|
93
|
+
(() => {
|
|
94
|
+
if (isPending) {
|
|
95
|
+
return showUpdatedBadge ? /* @__PURE__ */ jsx(
|
|
96
|
+
UpdatedStatusBadge,
|
|
97
|
+
{
|
|
98
|
+
status: action.updatedStatus,
|
|
99
|
+
isPending: true
|
|
100
|
+
}
|
|
101
|
+
) : null;
|
|
137
102
|
}
|
|
138
|
-
|
|
103
|
+
return /* @__PURE__ */ jsx(UpdatedStatusBadge, { status: action.updatedStatus });
|
|
104
|
+
})(),
|
|
139
105
|
/* @__PURE__ */ jsx(Text, { as: "p", variant: "body-large", children: action.title })
|
|
140
106
|
] })
|
|
141
107
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionsCard.esm.js","sources":["../../../src/components/scenarioTable/ActionsCard.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, Flex, Text } from '@backstage/ui';\nimport { Divider } from '@mui/material';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Link from '@mui/material/Link';\nimport {\n useCallback,\n useEffect,\n useState,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport { DualButtonWithMenu } from '../../components/common/DualButtonWithMenu';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { useDebounce } from '../../utils/hooks';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { Action, Scenario } from '../../utils/types';\nimport {\n actionStatusOptionsToTranslationKeys,\n formatDate,\n UpdatedStatusEnum,\n getActionStatusButtonClass,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions';\nimport { Markdown } from '../common/Markdown';\nimport { body2 } from '../common/typography';\n\ntype ActionsCardProps = {\n filteredData: (Action & { updatedStatus: UpdatedStatusEnumType })[];\n scenario: Scenario;\n showUpdatedBadge?: boolean;\n};\n\nexport function ActionsCard(props: ActionsCardProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { filteredData, scenario, showUpdatedBadge } = props;\n\n const [pendingUpdatedIDs, setPendingUpdatedIDs] = useState<string[]>([]);\n const [pendingStatusById, setPendingStatusById] = useState<\n Record<string, ActionStatusOptions>\n >({});\n\n const { isActionExpanded, toggleActionExpanded, submitEditedScenarioToRiSc } =\n useScenario();\n\n const debounceCallback = useCallback(\n (updatedIDs: string[]) => {\n if (updatedIDs.length === 0) return;\n\n const updatedScenario = {\n ...scenario,\n actions: scenario.actions.map(a =>\n updatedIDs.includes(a.ID)\n ? {\n ...a,\n status: pendingStatusById[a.ID] ?? a.status,\n }\n : a,\n ),\n };\n\n submitEditedScenarioToRiSc(updatedScenario, {\n idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs,\n });\n setPendingUpdatedIDs([]);\n },\n [scenario, submitEditedScenarioToRiSc, pendingStatusById],\n );\n\n const { flush } = useDebounce(pendingUpdatedIDs, 6000, debounceCallback);\n\n useEffect(() => {\n return () => flush();\n }, [flush]);\n\n function handleStatusChange(\n actionID: string,\n newStatus: ActionStatusOptions,\n ) {\n setPendingStatusById(prev => ({ ...prev, [actionID]: newStatus }));\n setPendingUpdatedIDs(prev =>\n prev.includes(actionID) ? prev : [...prev, actionID],\n );\n }\n\n function getUpdatedStatusStyle(\n status: UpdatedStatusEnumType | null | undefined,\n ) {\n const base: React.CSSProperties = {\n padding: '4px 0',\n borderRadius: '24px',\n };\n\n if (status === UpdatedStatusEnum.VERY_OUTDATED) {\n return {\n ...base,\n backgroundColor: 'var(--red-200)',\n border: '1px solid var(--red-500)',\n };\n }\n\n if (status === UpdatedStatusEnum.OUTDATED) {\n return {\n ...base,\n backgroundColor: 'var(--orange-100)',\n border: '1px solid var(--orange-300)',\n };\n }\n return base;\n }\n\n const statusBadgeStyle = {\n padding: '0 8px',\n fontSize: '12px',\n color: 'var(--bui-black)',\n };\n\n return (\n <>\n <Divider sx={{ marginBottom: '16px' }} />\n {filteredData.map((action, idx) => {\n const isPending = pendingStatusById[action.ID] !== undefined;\n const isExpanded = isActionExpanded(action.ID);\n const isLast = idx === filteredData.length - 1;\n\n return (\n <div key={action.ID}>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={(e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n\n const target = e.target as HTMLElement | null;\n if (target && target.closest('[data-no-row-toggle]')) return;\n\n toggleActionExpanded(action.ID);\n }}\n onKeyDown={(e: KeyboardEvent<HTMLDivElement>) => {\n // Prevent keyboard event from bubbling up to parent(s)\n e.stopPropagation();\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleActionExpanded(action.ID);\n }\n }}\n style={{ cursor: 'pointer' }}\n >\n <Flex align=\"center\" justify=\"between\" gap=\"1\">\n <Flex align=\"center\">\n <IconButton\n onClick={e => {\n e.stopPropagation();\n toggleActionExpanded(action.ID);\n }}\n >\n {isExpanded ? (\n <i className=\"ri-arrow-up-s-line\" />\n ) : (\n <i className=\"ri-arrow-down-s-line\" />\n )}\n </IconButton>\n <Flex direction=\"column\" align=\"start\" gap=\"1\">\n {!isPending && (\n <span\n style={{\n ...getUpdatedStatusStyle(action.updatedStatus),\n }}\n >\n <Text as=\"p\" style={statusBadgeStyle}>\n {(action.updatedStatus ===\n UpdatedStatusEnum.VERY_OUTDATED &&\n t('rosStatus.veryOutdated')) ||\n (action.updatedStatus ===\n UpdatedStatusEnum.OUTDATED &&\n t('rosStatus.outdated')) ||\n null}\n </Text>\n </span>\n )}\n {showUpdatedBadge && isPending && (\n <span\n style={{\n padding: '4px 0',\n backgroundColor: '#D0ECD6',\n border: '1px solid #156630',\n borderRadius: '24px',\n }}\n >\n <Text style={statusBadgeStyle}>\n {t('rosStatus.updated')}\n </Text>\n </span>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {action.title}\n </Text>\n </Flex>\n </Flex>\n <Flex>\n <span\n data-no-row-toggle\n role=\"button\"\n tabIndex={0}\n style={{ display: 'inline-block' }}\n onClick={(e: MouseEvent<HTMLSpanElement>) =>\n e.stopPropagation()\n }\n onKeyDown={(e: KeyboardEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n }\n }}\n >\n <DualButtonWithMenu\n propsCommon={{\n className: getActionStatusButtonClass(\n (pendingStatusById[action.ID] ??\n action.status) as any,\n ),\n }}\n propsLeft={{\n // @ts-ignore: mapping dynamic keys for translations\n children: t(\n actionStatusOptionsToTranslationKeys[\n (pendingStatusById[action.ID] ??\n action.status) as ActionStatusOptions\n ],\n ),\n }}\n propsRight={{\n iconEnd: <i className=\"ri-loop-left-line\" />,\n onClick: () => {\n handleStatusChange(\n action.ID,\n action.status as ActionStatusOptions,\n );\n },\n }}\n menuItems={Object.values(ActionStatusOptions).map(\n value => ({\n key: value,\n // @ts-ignore: mapping dynamic keys for translations\n label: t(\n actionStatusOptionsToTranslationKeys[\n value as ActionStatusOptions\n ],\n ),\n onClick: () =>\n handleStatusChange(\n action.ID,\n value as ActionStatusOptions,\n ),\n selected:\n value ===\n (pendingStatusById[action.ID] ?? action.status),\n }),\n )}\n />\n </span>\n {t('scenarioDrawer.action.lastUpdated')}\n <br />\n {(() => {\n const last =\n action.ID in pendingStatusById ? new Date() : undefined;\n return last\n ? formatDate(last)\n : t('scenarioDrawer.action.notUpdated');\n })()}\n </Flex>\n </Flex>\n </div>\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\n <div\n data-action-collapse\n role=\"presentation\"\n onClick={(e: MouseEvent<HTMLDivElement>) => e.stopPropagation()}\n onKeyDown={(e: KeyboardEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n }\n }}\n >\n <Box ml=\"48px\" mt=\"4\" mb=\"2\">\n <Text\n as=\"p\"\n variant=\"body-large\"\n style={{ marginTop: 1, fontWeight: 700 }}\n >\n {t('dictionary.description')}\n </Text>\n <Markdown description={action.description} />\n\n <Box mt=\"16px\">\n <Text\n style={{\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: '20px',\n }}\n >\n {t('dictionary.url')}\n </Text>\n {action.url ? (\n <Link\n sx={{ ...body2, marginTop: 0 }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={\n action.url.startsWith('http')\n ? action.url\n : `//${action.url}`\n }\n >\n {action.url}\n </Link>\n ) : (\n <Text\n as=\"p\"\n variant=\"body-large\"\n style={{ fontStyle: 'italic' }}\n >\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n </div>\n </Collapse>\n {!isLast && <Divider sx={{ my: 2 }} />}\n </div>\n );\n })}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionsCard.esm.js","sources":["../../../src/components/scenarioTable/ActionsCard.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Box, Flex, Text } from '@backstage/ui';\nimport { Divider } from '@mui/material';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Link from '@mui/material/Link';\nimport {\n useCallback,\n useEffect,\n useState,\n KeyboardEvent,\n MouseEvent,\n} from 'react';\nimport { DualButtonWithMenu } from '../../components/common/DualButtonWithMenu';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { useDebounce } from '../../utils/hooks';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { Action, Scenario } from '../../utils/types';\nimport {\n actionStatusOptionsToTranslationKeys,\n formatDate,\n getActionStatusButtonClass,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions';\nimport { Markdown } from '../common/Markdown';\nimport { body2 } from '../common/typography';\nimport UpdatedStatusBadge from '../../components/common/UpdatedStatusBadge';\n\ntype ActionsCardProps = {\n filteredData: (Action & { updatedStatus: UpdatedStatusEnumType })[];\n scenario: Scenario;\n showUpdatedBadge?: boolean;\n};\n\nexport function ActionsCard(props: ActionsCardProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { filteredData, scenario, showUpdatedBadge } = props;\n\n const [pendingUpdatedIDs, setPendingUpdatedIDs] = useState<string[]>([]);\n const [pendingStatusById, setPendingStatusById] = useState<\n Record<string, ActionStatusOptions>\n >({});\n\n const { isActionExpanded, toggleActionExpanded, submitEditedScenarioToRiSc } =\n useScenario();\n\n const debounceCallback = useCallback(\n (updatedIDs: string[]) => {\n if (updatedIDs.length === 0) return;\n\n const updatedScenario = {\n ...scenario,\n actions: scenario.actions.map(a =>\n updatedIDs.includes(a.ID)\n ? {\n ...a,\n status: pendingStatusById[a.ID] ?? a.status,\n }\n : a,\n ),\n };\n\n submitEditedScenarioToRiSc(updatedScenario, {\n idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs,\n });\n setPendingUpdatedIDs([]);\n },\n [scenario, submitEditedScenarioToRiSc, pendingStatusById],\n );\n\n const { flush } = useDebounce(pendingUpdatedIDs, 6000, debounceCallback);\n\n useEffect(() => {\n return () => flush();\n }, [flush]);\n\n function handleStatusChange(\n actionID: string,\n newStatus: ActionStatusOptions,\n ) {\n setPendingStatusById(prev => ({ ...prev, [actionID]: newStatus }));\n setPendingUpdatedIDs(prev =>\n prev.includes(actionID) ? prev : [...prev, actionID],\n );\n }\n\n return (\n <>\n <Divider sx={{ marginBottom: '16px' }} />\n {filteredData.map((action, idx) => {\n const isPending = pendingStatusById[action.ID] !== undefined;\n const isExpanded = isActionExpanded(action.ID);\n const isLast = idx === filteredData.length - 1;\n\n return (\n <div key={action.ID}>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={(e: MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n\n const target = e.target as HTMLElement | null;\n if (target && target.closest('[data-no-row-toggle]')) return;\n\n toggleActionExpanded(action.ID);\n }}\n onKeyDown={(e: KeyboardEvent<HTMLDivElement>) => {\n // Prevent keyboard event from bubbling up to parent(s)\n e.stopPropagation();\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggleActionExpanded(action.ID);\n }\n }}\n style={{ cursor: 'pointer' }}\n >\n <Flex align=\"center\" justify=\"between\" gap=\"1\">\n <Flex align=\"center\">\n <IconButton\n onClick={e => {\n e.stopPropagation();\n toggleActionExpanded(action.ID);\n }}\n >\n {isExpanded ? (\n <i className=\"ri-arrow-up-s-line\" />\n ) : (\n <i className=\"ri-arrow-down-s-line\" />\n )}\n </IconButton>\n <Flex direction=\"column\" align=\"start\" gap=\"1\">\n {(() => {\n if (isPending) {\n return showUpdatedBadge ? (\n <UpdatedStatusBadge\n status={action.updatedStatus}\n isPending={true}\n />\n ) : null;\n }\n return (\n <UpdatedStatusBadge status={action.updatedStatus} />\n );\n })()}\n <Text as=\"p\" variant=\"body-large\">\n {action.title}\n </Text>\n </Flex>\n </Flex>\n <Flex>\n <span\n data-no-row-toggle\n role=\"button\"\n tabIndex={0}\n style={{ display: 'inline-block' }}\n onClick={(e: MouseEvent<HTMLSpanElement>) =>\n e.stopPropagation()\n }\n onKeyDown={(e: KeyboardEvent<HTMLSpanElement>) => {\n e.stopPropagation();\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n }\n }}\n >\n <DualButtonWithMenu\n propsCommon={{\n className: getActionStatusButtonClass(\n (pendingStatusById[action.ID] ??\n action.status) as any,\n ),\n }}\n propsLeft={{\n // @ts-ignore: mapping dynamic keys for translations\n children: t(\n actionStatusOptionsToTranslationKeys[\n (pendingStatusById[action.ID] ??\n action.status) as ActionStatusOptions\n ],\n ),\n }}\n propsRight={{\n iconEnd: <i className=\"ri-loop-left-line\" />,\n onClick: () => {\n handleStatusChange(\n action.ID,\n action.status as ActionStatusOptions,\n );\n },\n }}\n menuItems={Object.values(ActionStatusOptions).map(\n value => ({\n key: value,\n // @ts-ignore: mapping dynamic keys for translations\n label: t(\n actionStatusOptionsToTranslationKeys[\n value as ActionStatusOptions\n ],\n ),\n onClick: () =>\n handleStatusChange(\n action.ID,\n value as ActionStatusOptions,\n ),\n selected:\n value ===\n (pendingStatusById[action.ID] ?? action.status),\n }),\n )}\n />\n </span>\n {t('scenarioDrawer.action.lastUpdated')}\n <br />\n {(() => {\n const last =\n action.ID in pendingStatusById ? new Date() : undefined;\n return last\n ? formatDate(last)\n : t('scenarioDrawer.action.notUpdated');\n })()}\n </Flex>\n </Flex>\n </div>\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\n <div\n data-action-collapse\n role=\"presentation\"\n onClick={(e: MouseEvent<HTMLDivElement>) => e.stopPropagation()}\n onKeyDown={(e: KeyboardEvent<HTMLDivElement>) => {\n e.stopPropagation();\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n }\n }}\n >\n <Box ml=\"48px\" mt=\"4\" mb=\"2\">\n <Text\n as=\"p\"\n variant=\"body-large\"\n style={{ marginTop: 1, fontWeight: 700 }}\n >\n {t('dictionary.description')}\n </Text>\n <Markdown description={action.description} />\n\n <Box mt=\"16px\">\n <Text\n style={{\n fontWeight: 700,\n fontSize: '14px',\n lineHeight: '20px',\n }}\n >\n {t('dictionary.url')}\n </Text>\n {action.url ? (\n <Link\n sx={{ ...body2, marginTop: 0 }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={\n action.url.startsWith('http')\n ? action.url\n : `//${action.url}`\n }\n >\n {action.url}\n </Link>\n ) : (\n <Text\n as=\"p\"\n variant=\"body-large\"\n style={{ fontStyle: 'italic' }}\n >\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n </div>\n </Collapse>\n {!isLast && <Divider sx={{ my: 2 }} />}\n </div>\n );\n })}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -96,17 +96,19 @@ function ScenarioTableRow({
|
|
|
96
96
|
(s) => s.ID === scenario.ID
|
|
97
97
|
);
|
|
98
98
|
const highlightColor = theme.palette.mode === "dark" ? "#A2A0A0" : "#FFDD9D";
|
|
99
|
-
const isTextColorBlack = theme.palette.mode === "dark" ? isScenarioHoveredFromRiskMatrix : true;
|
|
99
|
+
const isTextColorBlack = theme.palette.mode === "dark" ? isScenarioHoveredFromRiskMatrix && !visibleType : true;
|
|
100
100
|
const textColorAsBuiVariable = isTextColorBlack ? "var(--bui-black)" : "var(--bui-white)";
|
|
101
101
|
return /* @__PURE__ */ jsxs(
|
|
102
102
|
Card,
|
|
103
103
|
{
|
|
104
104
|
onMouseEnter: () => {
|
|
105
|
+
if (visibleType) return;
|
|
105
106
|
setHoveredScenarios(
|
|
106
107
|
(prev) => prev.some((s) => s.ID === scenario.ID) ? prev : [...prev, scenario]
|
|
107
108
|
);
|
|
108
109
|
},
|
|
109
110
|
onMouseLeave: () => {
|
|
111
|
+
if (visibleType) return;
|
|
110
112
|
setHoveredScenarios((prev) => prev.filter((s) => s.ID !== scenario.ID));
|
|
111
113
|
},
|
|
112
114
|
ref,
|
|
@@ -121,7 +123,7 @@ function ScenarioTableRow({
|
|
|
121
123
|
style: {
|
|
122
124
|
opacity: isDragging ? 0.3 : 1,
|
|
123
125
|
transition: isDragging ? "none" : void 0,
|
|
124
|
-
backgroundColor: isScenarioHoveredFromRiskMatrix ? highlightColor : void 0
|
|
126
|
+
backgroundColor: isScenarioHoveredFromRiskMatrix && !visibleType ? highlightColor : void 0
|
|
125
127
|
},
|
|
126
128
|
children: [
|
|
127
129
|
/* @__PURE__ */ jsxs(Flex, { align: "center", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioTableRow.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTableRow.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { IconButton, Paper } from '@material-ui/core';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport { useState, useRef, useEffect, MouseEvent } from 'react';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { Scenario } from '../../utils/types';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport {\n deleteScenario,\n getConsequenceLevel,\n getProbabilityLevel,\n getRiskMatrixColor,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions';\nimport { ScenarioTableProgressBar } from './ScenarioTableProgressBar';\nimport { useTableStyles } from './ScenarioTableStyles';\nimport { Text, Flex, Card } from '@backstage/ui';\nimport { DeleteScenarioConfirmation } from '../scenarioDrawer/components/DeleteConfirmation.tsx';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { ActionsCard } from './ActionsCard.tsx';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { useTheme } from '@mui/material/styles';\nimport {\n getActionsWithUpdatedStatus,\n getFilteredActions,\n} from '../../utils/actions.ts';\n\ninterface ScenarioTableRowProps {\n scenario: Scenario;\n viewRow: (id: string) => void;\n id: string;\n index: number;\n moveRowFinal: (dragId: string, dropId: string) => void;\n moveRowLocal: (dragId: string, hoverId: string) => void;\n isEditing: boolean;\n visibleType: UpdatedStatusEnumType | null;\n allowDrag?: boolean;\n searchMatches?: Scenario['actions'];\n}\n\nexport function ScenarioTableRow({\n scenario,\n viewRow,\n id,\n index,\n moveRowFinal,\n moveRowLocal,\n isEditing,\n visibleType,\n allowDrag = true,\n searchMatches,\n}: ScenarioTableRowProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const theme = useTheme();\n const { tableCard, tableCardNoHover, riskColor } = useTableStyles();\n\n const { selectedRiSc: riSc, updateRiSc } = useRiScs();\n const { hoveredScenarios, setHoveredScenarios } = useScenario();\n const [isScenarioDeletionDialogOpen, setScenarioDeletionDialogOpen] =\n useState(false);\n\n const [actionIdsOfVisibleType, setActionIdsOfVisibleType] = useState<\n string[]\n >([]);\n\n const ref = useRef<HTMLDivElement>(null);\n\n const [, drop] = useDrop({\n accept: 'row',\n hover(item: { id: string; index: number }, monitor) {\n if (!ref.current) return;\n\n const dragId = item.id;\n const hoverId = id;\n\n if (dragId === hoverId) return;\n\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\n\n const buffer = hoverBoundingRect.height * 0.05;\n if (item.index < index && hoverClientY < hoverMiddleY - buffer) return;\n if (item.index > index && hoverClientY > hoverMiddleY + buffer) return;\n\n moveRowLocal(dragId, hoverId!);\n\n item.index = index;\n },\n drop() {\n return { moved: true };\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag(() => ({\n type: 'row',\n item: { id, index },\n\n end: (item, monitor) => {\n if (monitor.didDrop()) {\n const dropResult = monitor.getDropResult() as {\n moved?: boolean;\n } | null;\n if (dropResult?.moved && item.id && id) {\n moveRowFinal(item.id, id);\n }\n }\n },\n\n collect: monitor => ({\n isDragging: monitor.isDragging(),\n }),\n }));\n\n const actionsWithUpdatedStatus = getActionsWithUpdatedStatus(\n scenario.actions,\n riSc?.lastPublished?.numberOfCommits || null,\n );\n const filteredActions = getFilteredActions(\n actionsWithUpdatedStatus,\n searchMatches,\n actionIdsOfVisibleType,\n visibleType,\n );\n\n useEffect(() => {\n const actions = actionsWithUpdatedStatus.filter(\n a => a.updatedStatus === visibleType,\n );\n const actionIds = actions.map(a => a.ID);\n setActionIdsOfVisibleType(actionIds);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visibleType]);\n\n preview(drop(ref));\n\n const isScenarioHoveredFromRiskMatrix = hoveredScenarios.some(\n s => s.ID === scenario.ID,\n );\n const highlightColor = theme.palette.mode === 'dark' ? '#A2A0A0' : '#FFDD9D';\n const isTextColorBlack =\n theme.palette.mode === 'dark' ? isScenarioHoveredFromRiskMatrix : true;\n const textColorAsBuiVariable = isTextColorBlack\n ? 'var(--bui-black)'\n : 'var(--bui-white)';\n\n return (\n <Card\n onMouseEnter={() => {\n setHoveredScenarios(prev =>\n prev.some(s => s.ID === scenario.ID) ? prev : [...prev, scenario],\n );\n }}\n onMouseLeave={() => {\n setHoveredScenarios(prev => prev.filter(s => s.ID !== scenario.ID));\n }}\n ref={ref}\n onClick={(e: MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.closest('[data-action-root]') ||\n target.closest('[data-action-collapse]') ||\n target.closest('[data-no-row-toggle]'))\n ) {\n return;\n }\n viewRow(scenario.ID);\n }}\n className={`${tableCard} ${visibleType ? tableCardNoHover : ''}`}\n style={{\n opacity: isDragging ? 0.3 : 1,\n transition: isDragging ? 'none' : undefined,\n backgroundColor: isScenarioHoveredFromRiskMatrix\n ? highlightColor\n : undefined,\n }}\n >\n <Flex align=\"center\">\n {isEditing && allowDrag && (\n <IconButton size=\"small\" ref={drag}>\n <DragIndicatorIcon\n sx={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n />\n </IconButton>\n )}\n <Text\n as=\"p\"\n variant=\"body-large\"\n weight=\"bold\"\n style={{ width: '35%', color: textColorAsBuiVariable }}\n >\n {scenario.title}\n </Text>\n <Flex align=\"center\" justify=\"start\" style={{ width: '15%' }}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.risk),\n }}\n />\n <Text variant=\"body-medium\" style={{ color: textColorAsBuiVariable }}>\n {t('scenarioTable.columns.probabilityChar')}:\n {`${getProbabilityLevel(\n scenario.risk,\n )} ${t('scenarioTable.columns.consequenceChar')}:${getConsequenceLevel(scenario.risk)}`}\n </Text>\n </Flex>\n\n <Flex\n align=\"center\"\n justify=\"start\"\n style={{ width: isEditing ? '30%' : '35%' }}\n >\n {(() => {\n if (scenario.actions.length > 0) {\n return (\n <ScenarioTableProgressBar\n completedCount={\n scenario.actions.filter(\n a => a.status === ActionStatusOptions.OK,\n ).length\n }\n totalCount={\n scenario.actions.filter(\n a => a.status !== ActionStatusOptions.NotRelevant,\n ).length\n }\n textColor={textColorAsBuiVariable}\n />\n );\n }\n return (\n <Text style={{ color: textColorAsBuiVariable }}>\n {t('scenarioTable.noActions')}\n </Text>\n );\n })()}\n </Flex>\n <Flex align=\"center\" style={{ width: '15%' }}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.remainingRisk),\n }}\n />\n <Text\n variant=\"body-medium\"\n style={{ color: textColorAsBuiVariable }}\n >{`${t('scenarioTable.columns.probabilityChar')}:${getProbabilityLevel(\n scenario.remainingRisk,\n )} ${t('scenarioTable.columns.consequenceChar')}:${getConsequenceLevel(scenario.remainingRisk)}`}</Text>\n </Flex>\n\n {isEditing && (\n <Flex align=\"center\" justify=\"end\">\n <IconButton\n size=\"small\"\n onClick={event => {\n event.stopPropagation();\n setScenarioDeletionDialogOpen(true);\n }}\n >\n <DeleteIcon />\n </IconButton>\n <DeleteScenarioConfirmation\n isOpen={isScenarioDeletionDialogOpen}\n setIsOpen={setScenarioDeletionDialogOpen}\n onConfirm={() => deleteScenario(riSc, updateRiSc, scenario)}\n />\n </Flex>\n )}\n </Flex>\n {filteredActions.length > 0 && (\n <ActionsCard\n filteredData={filteredActions}\n scenario={scenario}\n showUpdatedBadge={!!visibleType}\n />\n )}\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioTableRow.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTableRow.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { IconButton, Paper } from '@material-ui/core';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport { useState, useRef, useEffect, MouseEvent } from 'react';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { Scenario } from '../../utils/types';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport {\n deleteScenario,\n getConsequenceLevel,\n getProbabilityLevel,\n getRiskMatrixColor,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions';\nimport { ScenarioTableProgressBar } from './ScenarioTableProgressBar';\nimport { useTableStyles } from './ScenarioTableStyles';\nimport { Text, Flex, Card } from '@backstage/ui';\nimport { DeleteScenarioConfirmation } from '../scenarioDrawer/components/DeleteConfirmation.tsx';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { ActionsCard } from './ActionsCard.tsx';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { useTheme } from '@mui/material/styles';\nimport {\n getActionsWithUpdatedStatus,\n getFilteredActions,\n} from '../../utils/actions.ts';\n\ninterface ScenarioTableRowProps {\n scenario: Scenario;\n viewRow: (id: string) => void;\n id: string;\n index: number;\n moveRowFinal: (dragId: string, dropId: string) => void;\n moveRowLocal: (dragId: string, hoverId: string) => void;\n isEditing: boolean;\n visibleType: UpdatedStatusEnumType | null;\n allowDrag?: boolean;\n searchMatches?: Scenario['actions'];\n}\n\nexport function ScenarioTableRow({\n scenario,\n viewRow,\n id,\n index,\n moveRowFinal,\n moveRowLocal,\n isEditing,\n visibleType,\n allowDrag = true,\n searchMatches,\n}: ScenarioTableRowProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const theme = useTheme();\n const { tableCard, tableCardNoHover, riskColor } = useTableStyles();\n\n const { selectedRiSc: riSc, updateRiSc } = useRiScs();\n const { hoveredScenarios, setHoveredScenarios } = useScenario();\n const [isScenarioDeletionDialogOpen, setScenarioDeletionDialogOpen] =\n useState(false);\n\n const [actionIdsOfVisibleType, setActionIdsOfVisibleType] = useState<\n string[]\n >([]);\n\n const ref = useRef<HTMLDivElement>(null);\n\n const [, drop] = useDrop({\n accept: 'row',\n hover(item: { id: string; index: number }, monitor) {\n if (!ref.current) return;\n\n const dragId = item.id;\n const hoverId = id;\n\n if (dragId === hoverId) return;\n\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY =\n (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset!.y - hoverBoundingRect.top;\n\n const buffer = hoverBoundingRect.height * 0.05;\n if (item.index < index && hoverClientY < hoverMiddleY - buffer) return;\n if (item.index > index && hoverClientY > hoverMiddleY + buffer) return;\n\n moveRowLocal(dragId, hoverId!);\n\n item.index = index;\n },\n drop() {\n return { moved: true };\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag(() => ({\n type: 'row',\n item: { id, index },\n\n end: (item, monitor) => {\n if (monitor.didDrop()) {\n const dropResult = monitor.getDropResult() as {\n moved?: boolean;\n } | null;\n if (dropResult?.moved && item.id && id) {\n moveRowFinal(item.id, id);\n }\n }\n },\n\n collect: monitor => ({\n isDragging: monitor.isDragging(),\n }),\n }));\n\n const actionsWithUpdatedStatus = getActionsWithUpdatedStatus(\n scenario.actions,\n riSc?.lastPublished?.numberOfCommits || null,\n );\n const filteredActions = getFilteredActions(\n actionsWithUpdatedStatus,\n searchMatches,\n actionIdsOfVisibleType,\n visibleType,\n );\n\n useEffect(() => {\n const actions = actionsWithUpdatedStatus.filter(\n a => a.updatedStatus === visibleType,\n );\n const actionIds = actions.map(a => a.ID);\n setActionIdsOfVisibleType(actionIds);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visibleType]);\n\n preview(drop(ref));\n\n const isScenarioHoveredFromRiskMatrix = hoveredScenarios.some(\n s => s.ID === scenario.ID,\n );\n const highlightColor = theme.palette.mode === 'dark' ? '#A2A0A0' : '#FFDD9D';\n const isTextColorBlack =\n theme.palette.mode === 'dark'\n ? isScenarioHoveredFromRiskMatrix && !visibleType\n : true;\n const textColorAsBuiVariable = isTextColorBlack\n ? 'var(--bui-black)'\n : 'var(--bui-white)';\n\n return (\n <Card\n onMouseEnter={() => {\n if (visibleType) return;\n setHoveredScenarios(prev =>\n prev.some(s => s.ID === scenario.ID) ? prev : [...prev, scenario],\n );\n }}\n onMouseLeave={() => {\n if (visibleType) return;\n setHoveredScenarios(prev => prev.filter(s => s.ID !== scenario.ID));\n }}\n ref={ref}\n onClick={(e: MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.closest('[data-action-root]') ||\n target.closest('[data-action-collapse]') ||\n target.closest('[data-no-row-toggle]'))\n ) {\n return;\n }\n viewRow(scenario.ID);\n }}\n className={`${tableCard} ${visibleType ? tableCardNoHover : ''}`}\n style={{\n opacity: isDragging ? 0.3 : 1,\n transition: isDragging ? 'none' : undefined,\n backgroundColor:\n isScenarioHoveredFromRiskMatrix && !visibleType\n ? highlightColor\n : undefined,\n }}\n >\n <Flex align=\"center\">\n {isEditing && allowDrag && (\n <IconButton size=\"small\" ref={drag}>\n <DragIndicatorIcon\n sx={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n />\n </IconButton>\n )}\n <Text\n as=\"p\"\n variant=\"body-large\"\n weight=\"bold\"\n style={{ width: '35%', color: textColorAsBuiVariable }}\n >\n {scenario.title}\n </Text>\n <Flex align=\"center\" justify=\"start\" style={{ width: '15%' }}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.risk),\n }}\n />\n <Text variant=\"body-medium\" style={{ color: textColorAsBuiVariable }}>\n {t('scenarioTable.columns.probabilityChar')}:\n {`${getProbabilityLevel(\n scenario.risk,\n )} ${t('scenarioTable.columns.consequenceChar')}:${getConsequenceLevel(scenario.risk)}`}\n </Text>\n </Flex>\n\n <Flex\n align=\"center\"\n justify=\"start\"\n style={{ width: isEditing ? '30%' : '35%' }}\n >\n {(() => {\n if (scenario.actions.length > 0) {\n return (\n <ScenarioTableProgressBar\n completedCount={\n scenario.actions.filter(\n a => a.status === ActionStatusOptions.OK,\n ).length\n }\n totalCount={\n scenario.actions.filter(\n a => a.status !== ActionStatusOptions.NotRelevant,\n ).length\n }\n textColor={textColorAsBuiVariable}\n />\n );\n }\n return (\n <Text style={{ color: textColorAsBuiVariable }}>\n {t('scenarioTable.noActions')}\n </Text>\n );\n })()}\n </Flex>\n <Flex align=\"center\" style={{ width: '15%' }}>\n <Paper\n className={riskColor}\n style={{\n backgroundColor: getRiskMatrixColor(scenario.remainingRisk),\n }}\n />\n <Text\n variant=\"body-medium\"\n style={{ color: textColorAsBuiVariable }}\n >{`${t('scenarioTable.columns.probabilityChar')}:${getProbabilityLevel(\n scenario.remainingRisk,\n )} ${t('scenarioTable.columns.consequenceChar')}:${getConsequenceLevel(scenario.remainingRisk)}`}</Text>\n </Flex>\n\n {isEditing && (\n <Flex align=\"center\" justify=\"end\">\n <IconButton\n size=\"small\"\n onClick={event => {\n event.stopPropagation();\n setScenarioDeletionDialogOpen(true);\n }}\n >\n <DeleteIcon />\n </IconButton>\n <DeleteScenarioConfirmation\n isOpen={isScenarioDeletionDialogOpen}\n setIsOpen={setScenarioDeletionDialogOpen}\n onConfirm={() => deleteScenario(riSc, updateRiSc, scenario)}\n />\n </Flex>\n )}\n </Flex>\n {filteredActions.length > 0 && (\n <ActionsCard\n filteredData={filteredActions}\n scenario={scenario}\n showUpdatedBadge={!!visibleType}\n />\n )}\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/theme.css.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import styleInject from './node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/*\nThis file contains custom CSS styles for the ROS plugin in Backstage, as well as our own overrides of Backstage UI styles. For colors that should vary depending on mode: declare them in both :root and [data-theme-mode='dark'] sections and then use the variables in your code.\n*/\n\n/*\nThe Text-fill-scenario-and-action and Text-border-scenario-and-action variables are here as proofs of concept for how variables can be defined for both \"default (light/:root) and dark mode and then our code can simply refer to the variable and don't are about the mode.\n*/\n
|
|
3
|
+
var css_248z = "/*\nThis file contains custom CSS styles for the ROS plugin in Backstage, as well as our own overrides of Backstage UI styles. For colors that should vary depending on mode: declare them in both :root and [data-theme-mode='dark'] sections and then use the variables in your code.\n*/\n\n/*\nThe Text-fill-scenario-and-action and Text-border-scenario-and-action variables are here as proofs of concept for how variables can be defined for both \"default (light/:root) and dark mode and then our code can simply refer to the variable and don't are about the mode.\n*/\n[data-root-for='ros'] {\n --green-50: #e9f8eb;\n --green-100: #d0ecd6;\n --green-200: #9fd2ab;\n --green-300: #66b077;\n --green-500: #156630;\n\n --light-blue-100: #cae3fe;\n --light-blue-200: #9bc9fe;\n\n --blue-600: #1f5492;\n\n --red-100: #ffe2d4;\n --red-200: #ebb095;\n --red-300: #e58869;\n --red-400: #d04a14;\n --red-500: #a32f00;\n --red-600: #862906;\n --red-700: #722609;\n --red-800: #541f0b;\n --red-900: #39170a;\n --red-bright: #d3302f;\n\n --orange-50: #fcebcd;\n --orange-100: #ffdd9d;\n --orange-200: #ebbe76;\n --orange-300: #cf914a;\n --orange-400: #bc7729;\n --orange-500: #8e5a1f;\n\n --gray-50: #f8f8f8;\n --gray-100: #eae7e7;\n --gray-200: #c8c5c5;\n --gray-300: #a2a0a0;\n --gray-400: #706f6e;\n --gray-500: #5a5858;\n --gray-600: #4a4848;\n --gray-700: #403f3f;\n --gray-800: #2e2e2e;\n --gray-900: #212121;\n --gray-medium: #808080;\n\n /* -------Button styles------- */\n .button-red {\n background-color: var(--red-bright);\n color: var(--bui-white);\n }\n\n .button-green {\n background-color: var(--green-500);\n color: var(--bui-white);\n }\n\n .button-gray {\n background-color: var(--gray-medium);\n color: var(--bui-white);\n }\n /* ---------------------------- */\n}\n\n/* Dark mode custom styles can be added here */\n/* [data-theme-mode='dark'] [data-root-for='ros'] {\n\n} */\n";
|
|
4
4
|
styleInject(css_248z);
|
|
5
5
|
|
|
6
6
|
export { css_248z as default };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kartverket/backstage-plugin-risk-scorecard",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.2",
|
|
4
4
|
"main": "dist/index.esm.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -90,7 +90,8 @@
|
|
|
90
90
|
]
|
|
91
91
|
},
|
|
92
92
|
"files": [
|
|
93
|
-
"dist"
|
|
93
|
+
"dist",
|
|
94
|
+
"css"
|
|
94
95
|
],
|
|
95
96
|
"packageManager": "yarn@4.8.1+sha512.bc946f2a022d7a1a38adfc15b36a66a3807a67629789496c3714dd1703d2e6c6b1c69ff9ec3b43141ac7a1dd853b7685638eb0074300386a59c18df351ef8ff6",
|
|
96
97
|
"typesVersions": {
|