@kartverket/backstage-plugin-risk-scorecard 6.7.0 → 6.7.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/dialog/DialogComponent.esm.js +12 -4
- package/dist/components/dialog/DialogComponent.esm.js.map +1 -1
- package/dist/components/dialog/DialogComponent.module.css.esm.js +2 -2
- package/dist/components/riScInfo/RiScSelectionCard.module.css.esm.js +2 -2
- package/dist/components/riskMatrix/CurrentRisk.esm.js +4 -2
- package/dist/components/riskMatrix/CurrentRisk.esm.js.map +1 -1
- package/dist/components/riskMatrix/RiskMatrix.esm.js +2 -2
- package/dist/components/riskMatrix/RiskMatrix.esm.js.map +1 -1
- package/dist/components/riskMatrix/RiskMatrixScenarioCount.module.css.esm.js +2 -2
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js +163 -144
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
- package/dist/components/scenarioWizard/components/RiskTableBase.esm.js +2 -2
- package/dist/components/scenarioWizard/components/RiskTableBase.esm.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,10 +9,18 @@ function DialogComponent({
|
|
|
9
9
|
children,
|
|
10
10
|
className
|
|
11
11
|
}) {
|
|
12
|
-
return /* @__PURE__ */ jsxs(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
return /* @__PURE__ */ jsxs(
|
|
13
|
+
Dialog,
|
|
14
|
+
{
|
|
15
|
+
isOpen,
|
|
16
|
+
onOpenChange: onClick,
|
|
17
|
+
className: `${styles.dialog} ${className ?? ""}`,
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ jsx(DialogHeader, { className: styles.DialogHeader, children: /* @__PURE__ */ jsx(Text, { variant: "title-small", weight: "bold", children: header }) }),
|
|
20
|
+
/* @__PURE__ */ jsx(DialogBody, { children })
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
);
|
|
16
24
|
}
|
|
17
25
|
|
|
18
26
|
export { DialogComponent as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogComponent.esm.js","sources":["../../../src/components/dialog/DialogComponent.tsx"],"sourcesContent":["import { Dialog, DialogHeader, DialogBody, Text } from '@backstage/ui';\nimport styles from './DialogComponent.module.css';\n\ntype DialogComponentProps = {\n isOpen: boolean;\n onClick: () => void;\n header?: string;\n footer?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction DialogComponent({\n isOpen,\n onClick,\n header,\n children,\n className,\n}: DialogComponentProps) {\n return (\n <Dialog
|
|
1
|
+
{"version":3,"file":"DialogComponent.esm.js","sources":["../../../src/components/dialog/DialogComponent.tsx"],"sourcesContent":["import { Dialog, DialogHeader, DialogBody, Text } from '@backstage/ui';\nimport styles from './DialogComponent.module.css';\n\ntype DialogComponentProps = {\n isOpen: boolean;\n onClick: () => void;\n header?: string;\n footer?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n};\n\nfunction DialogComponent({\n isOpen,\n onClick,\n header,\n children,\n className,\n}: DialogComponentProps) {\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClick}\n className={`${styles.dialog} ${className ?? ''}`}\n >\n <DialogHeader className={styles.DialogHeader}>\n <Text variant=\"title-small\" weight=\"bold\">\n {header}\n </Text>\n </DialogHeader>\n <DialogBody>{children}</DialogBody>\n </Dialog>\n );\n}\n\nexport default DialogComponent;\n"],"names":[],"mappings":";;;;AAYA,SAAS,eAAA,CAAgB;AAAA,EACvB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,YAAA,EAAc,OAAA;AAAA,MACd,WAAW,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,CAAA,EAAI,aAAa,EAAE,CAAA,CAAA;AAAA,MAE9C,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAW,MAAA,CAAO,YAAA,EAC9B,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,aAAA,EAAc,MAAA,EAAO,MAAA,EAChC,QAAA,EAAA,MAAA,EACH,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,cAAY,QAAA,EAAS;AAAA;AAAA;AAAA,GACxB;AAEJ;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".
|
|
4
|
-
var styles = {"DialogHeader":"
|
|
3
|
+
var css_248z = ".DialogComponent_dialog__7317f9d305 {\n --bui-bg-neutral-1: var(--bui-bg-app);\n}\n\n.DialogComponent_DialogHeader__7317f9d305 {\n padding-bottom: 12px;\n}\n";
|
|
4
|
+
var styles = {"dialog":"DialogComponent_dialog__7317f9d305","DialogHeader":"DialogComponent_DialogHeader__7317f9d305"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { styles as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".
|
|
4
|
-
var riscStyles = {"selectTrigger":"
|
|
3
|
+
var css_248z = ".RiScSelectionCard_selectTrigger__29231cdb76 button {\n background-color: transparent;\n border: 1px solid var(--bui-border-2);\n}\n\n[role='listbox'] {\n max-height: 400px;\n overflow-y: auto;\n}\n\n.RiScSelectionCard_riScInfoDialog__29231cdb76 {\n padding: 24px;\n border-radius: 4px;\n width: 800px;\n}\n\n.RiScSelectionCard_riscSelectionDialogHeader__29231cdb76 {\n padding: 0 0 16px 0;\n}\n\n.RiScSelectionCard_riscSelectionDialogBody__29231cdb76 {\n gap: 16px;\n padding: 16px 0 0 0;\n}\n\n.RiScSelectionCard_riscDescriptionComponent__29231cdb76 {\n padding-bottom: 10px;\n}\n.RiScSelectionCard_componentLayout__29231cdb76 {\n height: 60%;\n}\n\n.RiScSelectionCard_riscDescriptionContainer__29231cdb76 {\n margin-bottom: 16px;\n}\n\n.RiScSelectionCard_riScInfoDialog__29231cdb76 {\n background-color: var(--bui-bg-app);\n}\n";
|
|
4
|
+
var riscStyles = {"selectTrigger":"RiScSelectionCard_selectTrigger__29231cdb76","riScInfoDialog":"RiScSelectionCard_riScInfoDialog__29231cdb76","riscDescriptionComponent":"RiScSelectionCard_riscDescriptionComponent__29231cdb76","componentLayout":"RiScSelectionCard_componentLayout__29231cdb76","riscDescriptionContainer":"RiScSelectionCard_riscDescriptionContainer__29231cdb76"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { riscStyles as default };
|
|
@@ -87,7 +87,8 @@ function CurrentRisk({ risc }) {
|
|
|
87
87
|
className: styles.currentRiskBarFill,
|
|
88
88
|
style: {
|
|
89
89
|
background: getRiskGradient()
|
|
90
|
-
}
|
|
90
|
+
},
|
|
91
|
+
children: null
|
|
91
92
|
}
|
|
92
93
|
),
|
|
93
94
|
/* @__PURE__ */ jsx(
|
|
@@ -96,7 +97,8 @@ function CurrentRisk({ risc }) {
|
|
|
96
97
|
className: styles.currentRiskMarker,
|
|
97
98
|
style: {
|
|
98
99
|
left: `${clampedPercentage}%`
|
|
99
|
-
}
|
|
100
|
+
},
|
|
101
|
+
children: null
|
|
100
102
|
}
|
|
101
103
|
)
|
|
102
104
|
] }) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentRisk.esm.js","sources":["../../../src/components/riskMatrix/CurrentRisk.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { Box, Button, Text, Flex } from '@backstage/ui';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { calcRiskCostOfRiSc, getRiskGradient } from '../../utils/risk';\nimport { RiskMatrixTabs } from './utils';\nimport styles from './CurrentRisk.module.css';\nimport { formatNumber } from '../../utils/utilityfunctions';\nimport { useState } from 'react';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\nimport { ScenarioReductionTable } from './ScenarioReductionTable.tsx';\n\ntype CurrentRiskProps = {\n risc: RiScWithMetadata;\n};\n\nexport function CurrentRisk({ risc }: CurrentRiskProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false);\n\n const actionsOk = risc.content.scenarios.reduce(\n (total, scenario) =>\n total +\n scenario.actions.filter(\n action => action.status === ActionStatusOptions.OK,\n ).length,\n 0,\n );\n\n const initialRiskCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.initialRisk,\n );\n const remainingRiskCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.remainingRisk,\n );\n const estimatedCurrentCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.currentRisk,\n );\n\n const costReduction = initialRiskCost - remainingRiskCost;\n\n const costReductionPercentage =\n costReduction > 0\n ? ((initialRiskCost - estimatedCurrentCost) / costReduction) * 100\n : 0;\n\n const clampedPercentage = Math.max(\n 0,\n Math.min(100, Number(costReductionPercentage.toFixed(2))),\n );\n\n let labelTransform = 'translateX(-50%)';\n if (clampedPercentage <= 5) {\n labelTransform = 'translateX(0%)';\n } else if (clampedPercentage >= 95) {\n labelTransform = 'translateX(-100%)';\n }\n\n const reduction = formatNumber(initialRiskCost - estimatedCurrentCost, t);\n\n const description = t('riskMatrix.currentRisk.description', {\n actionsOk: String(actionsOk),\n reduction,\n });\n\n return (\n <Flex direction=\"column\" pt=\"30px\">\n <Flex direction=\"column\" pb=\"16px\">\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('riskMatrix.currentRisk.title')}\n </Text>\n <Flex direction=\"column\" gap=\"0\">\n <Flex justify=\"between\" px=\"4px\" align=\"end\" pb=\"4px\">\n <Flex direction=\"column\" align=\"start\" gap=\"0\">\n <Text variant=\"body-small\" weight=\"bold\">\n {formatNumber(initialRiskCost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <Text variant=\"body-medium\">← {t('dictionary.initialRisk')}</Text>\n </Flex>\n <Flex direction=\"column\" align=\"end\" gap=\"0\">\n <Text variant=\"body-small\" weight=\"bold\">\n {formatNumber(remainingRiskCost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <Text variant=\"body-medium\">{t('dictionary.restRisk')} →</Text>\n </Flex>\n </Flex>\n <Box className={styles.currentRiskBarWrapper}>\n <Box className={styles.currentRiskBarContainer}>\n {initialRiskCost > 0 && (\n <>\n <Flex\n align=\"center\"\n justify=\"end\"\n className={styles.currentRiskBarFill}\n style={{\n background: getRiskGradient(),\n }}\n
|
|
1
|
+
{"version":3,"file":"CurrentRisk.esm.js","sources":["../../../src/components/riskMatrix/CurrentRisk.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { Box, Button, Text, Flex } from '@backstage/ui';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { calcRiskCostOfRiSc, getRiskGradient } from '../../utils/risk';\nimport { RiskMatrixTabs } from './utils';\nimport styles from './CurrentRisk.module.css';\nimport { formatNumber } from '../../utils/utilityfunctions';\nimport { useState } from 'react';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\nimport { ScenarioReductionTable } from './ScenarioReductionTable.tsx';\n\ntype CurrentRiskProps = {\n risc: RiScWithMetadata;\n};\n\nexport function CurrentRisk({ risc }: CurrentRiskProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false);\n\n const actionsOk = risc.content.scenarios.reduce(\n (total, scenario) =>\n total +\n scenario.actions.filter(\n action => action.status === ActionStatusOptions.OK,\n ).length,\n 0,\n );\n\n const initialRiskCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.initialRisk,\n );\n const remainingRiskCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.remainingRisk,\n );\n const estimatedCurrentCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.currentRisk,\n );\n\n const costReduction = initialRiskCost - remainingRiskCost;\n\n const costReductionPercentage =\n costReduction > 0\n ? ((initialRiskCost - estimatedCurrentCost) / costReduction) * 100\n : 0;\n\n const clampedPercentage = Math.max(\n 0,\n Math.min(100, Number(costReductionPercentage.toFixed(2))),\n );\n\n let labelTransform = 'translateX(-50%)';\n if (clampedPercentage <= 5) {\n labelTransform = 'translateX(0%)';\n } else if (clampedPercentage >= 95) {\n labelTransform = 'translateX(-100%)';\n }\n\n const reduction = formatNumber(initialRiskCost - estimatedCurrentCost, t);\n\n const description = t('riskMatrix.currentRisk.description', {\n actionsOk: String(actionsOk),\n reduction,\n });\n\n return (\n <Flex direction=\"column\" pt=\"30px\">\n <Flex direction=\"column\" pb=\"16px\">\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('riskMatrix.currentRisk.title')}\n </Text>\n <Flex direction=\"column\" gap=\"0\">\n <Flex justify=\"between\" px=\"4px\" align=\"end\" pb=\"4px\">\n <Flex direction=\"column\" align=\"start\" gap=\"0\">\n <Text variant=\"body-small\" weight=\"bold\">\n {formatNumber(initialRiskCost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <Text variant=\"body-medium\">← {t('dictionary.initialRisk')}</Text>\n </Flex>\n <Flex direction=\"column\" align=\"end\" gap=\"0\">\n <Text variant=\"body-small\" weight=\"bold\">\n {formatNumber(remainingRiskCost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <Text variant=\"body-medium\">{t('dictionary.restRisk')} →</Text>\n </Flex>\n </Flex>\n <Box className={styles.currentRiskBarWrapper}>\n <Box className={styles.currentRiskBarContainer}>\n {initialRiskCost > 0 && (\n <>\n <Flex\n align=\"center\"\n justify=\"end\"\n className={styles.currentRiskBarFill}\n style={{\n background: getRiskGradient(),\n }}\n >\n {null}\n </Flex>\n <Box\n className={styles.currentRiskMarker}\n style={{\n left: `${clampedPercentage}%`,\n }}\n >\n {null}\n </Box>\n </>\n )}\n </Box>\n <Flex\n className={styles.currentRiskPercentageLabel}\n style={{\n left: `${clampedPercentage}%`,\n transform: labelTransform,\n }}\n >\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('dictionary.currentRisk')}\n </Text>\n </Flex>\n </Box>\n </Flex>\n </Flex>\n\n <Flex>\n <Text\n variant=\"body-large\"\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </Flex>\n\n <div>\n <Button onClick={() => setIsDialogOpen(true)}>\n {t('riskMatrix.currentRisk.showMoreInfo')}\n </Button>\n </div>\n <DialogComponent\n header={t('riskMatrix.currentRisk.dialogHeader')}\n isOpen={isDialogOpen}\n onClick={() => setIsDialogOpen(false)}\n className={styles.reductionDialog}\n >\n <ScenarioReductionTable\n riScWithMetadata={risc}\n onNavigate={() => setIsDialogOpen(false)}\n />\n </DialogComponent>\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -55,8 +55,8 @@ function RiskMatrix({
|
|
|
55
55
|
`S:${colIndex} K:${4 - rowIndex}`
|
|
56
56
|
))
|
|
57
57
|
] }, rowIndex)),
|
|
58
|
-
/* @__PURE__ */ jsx(Box, { className: styles.centered }),
|
|
59
|
-
/* @__PURE__ */ jsx(Box, { className: styles.centered }),
|
|
58
|
+
/* @__PURE__ */ jsx(Box, { className: styles.centered, children: null }),
|
|
59
|
+
/* @__PURE__ */ jsx(Box, { className: styles.centered, children: null }),
|
|
60
60
|
riskMatrix.map((_, col) => /* @__PURE__ */ jsx(Box, { className: styles.centered, children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: col + 1 }) }, col)),
|
|
61
61
|
/* @__PURE__ */ jsx(Box, { className: styles.sannsynlighet, children: /* @__PURE__ */ jsx(
|
|
62
62
|
Text,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiskMatrix.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrix.tsx"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport { AggregatedCost } from './AggregatedCost';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { MatrixTabs } from './Tabs';\nimport { riskMatrix } from '../../utils/constants';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiskMatrixTabs } from './utils';\nimport { Card, CardBody, CardHeader, Text, Box } from '@backstage/ui';\nimport { RiskMatrixSquare } from './RiskMatrixSquare.tsx';\nimport { CurrentRisk } from './CurrentRisk.tsx';\n\nimport styles from './RiskMatrix.module.css';\nexport function RiskMatrix({\n riScWithMetadata,\n}: {\n riScWithMetadata: RiScWithMetadata;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [tab, setTab] = useState<RiskMatrixTabs>(RiskMatrixTabs.initialRisk);\n\n return (\n <Card className={styles.card}>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\">\n {t('riskMatrix.title')}\n </Text>\n </CardHeader>\n <CardBody>\n <MatrixTabs setTab={setTab} currentTab={tab} />\n {riScWithMetadata.content.scenarios.length > 0 && (\n <Box\n style={{\n marginTop: '18px',\n }}\n >\n <AggregatedCost riSc={riScWithMetadata.content} riskType={tab} />\n </Box>\n )}\n\n {tab === RiskMatrixTabs.currentRisk ? (\n <Box>\n <CurrentRisk risc={riScWithMetadata} />\n </Box>\n ) : (\n <Box className={styles.gridWrapper}>\n <Box className={styles.grid}>\n <Box className={styles.konsekvens}>\n <Text\n variant=\"title-x-small\"\n weight=\"bold\"\n className={styles.centered}\n >\n {t('dictionary.consequence')}\n </Text>\n </Box>\n {riskMatrix.map((row, rowIndex) => (\n <Fragment key={rowIndex}>\n <Box className={styles.centered}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {5 - rowIndex}\n </Text>\n </Box>\n {row.map((_, colIndex) => (\n <RiskMatrixSquare\n key={`S:${colIndex} K:${4 - rowIndex}`}\n size=\"grid\"\n consequence={4 - rowIndex}\n probability={colIndex}\n riScCountObject={{\n isInitialRisk: tab === RiskMatrixTabs.initialRisk,\n riSc: riScWithMetadata,\n }}\n />\n ))}\n </Fragment>\n ))}\n <Box className={styles.centered}
|
|
1
|
+
{"version":3,"file":"RiskMatrix.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrix.tsx"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport { AggregatedCost } from './AggregatedCost';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { MatrixTabs } from './Tabs';\nimport { riskMatrix } from '../../utils/constants';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiskMatrixTabs } from './utils';\nimport { Card, CardBody, CardHeader, Text, Box } from '@backstage/ui';\nimport { RiskMatrixSquare } from './RiskMatrixSquare.tsx';\nimport { CurrentRisk } from './CurrentRisk.tsx';\n\nimport styles from './RiskMatrix.module.css';\nexport function RiskMatrix({\n riScWithMetadata,\n}: {\n riScWithMetadata: RiScWithMetadata;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [tab, setTab] = useState<RiskMatrixTabs>(RiskMatrixTabs.initialRisk);\n\n return (\n <Card className={styles.card}>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\">\n {t('riskMatrix.title')}\n </Text>\n </CardHeader>\n <CardBody>\n <MatrixTabs setTab={setTab} currentTab={tab} />\n {riScWithMetadata.content.scenarios.length > 0 && (\n <Box\n style={{\n marginTop: '18px',\n }}\n >\n <AggregatedCost riSc={riScWithMetadata.content} riskType={tab} />\n </Box>\n )}\n\n {tab === RiskMatrixTabs.currentRisk ? (\n <Box>\n <CurrentRisk risc={riScWithMetadata} />\n </Box>\n ) : (\n <Box className={styles.gridWrapper}>\n <Box className={styles.grid}>\n <Box className={styles.konsekvens}>\n <Text\n variant=\"title-x-small\"\n weight=\"bold\"\n className={styles.centered}\n >\n {t('dictionary.consequence')}\n </Text>\n </Box>\n {riskMatrix.map((row, rowIndex) => (\n <Fragment key={rowIndex}>\n <Box className={styles.centered}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {5 - rowIndex}\n </Text>\n </Box>\n {row.map((_, colIndex) => (\n <RiskMatrixSquare\n key={`S:${colIndex} K:${4 - rowIndex}`}\n size=\"grid\"\n consequence={4 - rowIndex}\n probability={colIndex}\n riScCountObject={{\n isInitialRisk: tab === RiskMatrixTabs.initialRisk,\n riSc: riScWithMetadata,\n }}\n />\n ))}\n </Fragment>\n ))}\n <Box className={styles.centered}>{null}</Box>\n <Box className={styles.centered}>{null}</Box>\n {riskMatrix.map((_, col) => (\n <Box className={styles.centered} key={col}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {col + 1}\n </Text>\n </Box>\n ))}\n <Box className={styles.sannsynlighet}>\n <Text\n weight=\"bold\"\n variant=\"title-x-small\"\n className={styles.centered}\n >\n {t('dictionary.probability')}\n </Text>\n </Box>\n </Box>\n </Box>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".
|
|
4
|
-
var styles = {"circle":"
|
|
3
|
+
var css_248z = ".RiskMatrixScenarioCount_circle__060e331171.RiskMatrixScenarioCount_circle__060e331171 {\n height: 60%;\n aspect-ratio: 1 / 1;\n border-radius: 50%;\n cursor: pointer;\n min-height: 20px;\n}\n\n.RiskMatrixScenarioCount_circleHovered__060e331171.RiskMatrixScenarioCount_circleHovered__060e331171 {\n background-color: var(--ros-gray-300);\n}\n\n.RiskMatrixScenarioCount_tooltip__060e331171.RiskMatrixScenarioCount_tooltip__060e331171 {\n background-color: var(--bui-white);\n padding: 16px;\n max-width: 500px;\n}\n[data-theme-mode='dark'] .RiskMatrixScenarioCount_tooltip__060e331171.RiskMatrixScenarioCount_tooltip__060e331171 {\n background-color: var(--bui-bg-app);\n}\n\n.RiskMatrixScenarioCount_tooltipArrow__060e331171.RiskMatrixScenarioCount_tooltipArrow__060e331171 {\n color: var(--bui-white);\n}\n[data-theme-mode='dark'] .RiskMatrixScenarioCount_tooltipArrow__060e331171.RiskMatrixScenarioCount_tooltipArrow__060e331171 {\n color: var(--bui-bg-app);\n}\n\n.RiskMatrixScenarioCount_tooltipList__060e331171 {\n padding-left: 16px;\n font-size: 16px;\n color: var(--bui-black);\n}\n[data-theme-mode='dark'] .RiskMatrixScenarioCount_tooltipList__060e331171 {\n color: var(--bui-white);\n}\n\n.RiskMatrixScenarioCount_tooltipListItem__060e331171 {\n margin-bottom: 16px;\n\n &:hover {\n cursor: pointer;\n background-color: var(--ros-gray-50);\n }\n}\n[data-theme-mode='dark'] .RiskMatrixScenarioCount_tooltipListItem__060e331171 {\n &:hover {\n background-color: var(--ros-gray-600);\n }\n}\n\n.RiskMatrixScenarioCount_centered__060e331171 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n";
|
|
4
|
+
var styles = {"circle":"RiskMatrixScenarioCount_circle__060e331171","circleHovered":"RiskMatrixScenarioCount_circleHovered__060e331171","tooltip":"RiskMatrixScenarioCount_tooltip__060e331171","tooltipArrow":"RiskMatrixScenarioCount_tooltipArrow__060e331171","tooltipList":"RiskMatrixScenarioCount_tooltipList__060e331171","tooltipListItem":"RiskMatrixScenarioCount_tooltipListItem__060e331171","centered":"RiskMatrixScenarioCount_centered__060e331171"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { styles as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
3
|
import Collapse from '@mui/material/Collapse';
|
|
4
4
|
import IconButton from '@mui/material/IconButton';
|
|
@@ -66,20 +66,11 @@ function ScenarioTableRow({
|
|
|
66
66
|
const cardBgColor = "var(--ros-scenario-card-bg)";
|
|
67
67
|
const isTextColorBlack = theme.palette.mode === "dark" ? isScenarioHoveredFromRiskMatrix : true;
|
|
68
68
|
const textColorAsBuiVariable = isTextColorBlack ? "var(--bui-black)" : "var(--bui-white)";
|
|
69
|
-
return /* @__PURE__ */
|
|
70
|
-
|
|
69
|
+
return /* @__PURE__ */ jsx(
|
|
70
|
+
"div",
|
|
71
71
|
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
setHoveredScenarios(
|
|
75
|
-
(prev) => prev.some((s) => s.ID === scenario.ID) ? prev : [...prev, scenario]
|
|
76
|
-
);
|
|
77
|
-
},
|
|
78
|
-
onMouseLeave: () => {
|
|
79
|
-
if (isExpanded) return;
|
|
80
|
-
setHoveredScenarios((prev) => prev.filter((s) => s.ID !== scenario.ID));
|
|
81
|
-
},
|
|
82
|
-
ref,
|
|
72
|
+
role: "button",
|
|
73
|
+
tabIndex: 0,
|
|
83
74
|
onClick: (e) => {
|
|
84
75
|
const target = e.target;
|
|
85
76
|
if (target && (target.closest("[data-action-root]") || target.closest("[data-action-collapse]") || target.closest("[data-no-row-toggle]"))) {
|
|
@@ -87,143 +78,171 @@ function ScenarioTableRow({
|
|
|
87
78
|
}
|
|
88
79
|
viewRow(scenario.ID);
|
|
89
80
|
},
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
opacity: isDragging ? 0.3 : 1,
|
|
95
|
-
transition: isDragging ? "none" : void 0,
|
|
96
|
-
backgroundColor: isScenarioHoveredFromRiskMatrix ? highlightColor : cardBgColor
|
|
81
|
+
onKeyDown: (e) => {
|
|
82
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
83
|
+
viewRow(scenario.ID);
|
|
84
|
+
}
|
|
97
85
|
},
|
|
98
|
-
children:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
{
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
86
|
+
children: /* @__PURE__ */ jsxs(
|
|
87
|
+
Card,
|
|
88
|
+
{
|
|
89
|
+
onMouseEnter: () => {
|
|
90
|
+
if (isExpanded) return;
|
|
91
|
+
setHoveredScenarios(
|
|
92
|
+
(prev) => prev.some((s) => s.ID === scenario.ID) ? prev : [...prev, scenario]
|
|
93
|
+
);
|
|
94
|
+
},
|
|
95
|
+
onMouseLeave: () => {
|
|
96
|
+
if (isExpanded) return;
|
|
97
|
+
setHoveredScenarios((prev) => prev.filter((s) => s.ID !== scenario.ID));
|
|
98
|
+
},
|
|
99
|
+
ref,
|
|
100
|
+
className: classNames(styles.tableCard, {
|
|
101
|
+
[styles.tableCardNoHover]: isExpanded
|
|
102
|
+
}),
|
|
103
|
+
style: {
|
|
104
|
+
opacity: isDragging ? 0.3 : 1,
|
|
105
|
+
transition: isDragging ? "none" : void 0,
|
|
106
|
+
backgroundColor: isScenarioHoveredFromRiskMatrix ? highlightColor : cardBgColor
|
|
107
|
+
},
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ jsxs(Flex, { align: "center", children: [
|
|
110
|
+
isEditing && isDnDAllowed && /* @__PURE__ */ jsx(IconButton, { size: "small", ref: drag, children: /* @__PURE__ */ jsx(
|
|
111
|
+
DragIndicatorIcon,
|
|
112
|
+
{
|
|
113
|
+
sx: { cursor: isDragging ? "grabbing" : "grab" }
|
|
114
|
+
}
|
|
115
|
+
) }),
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
IconButton,
|
|
118
|
+
{
|
|
119
|
+
size: "medium",
|
|
120
|
+
"data-action-root": true,
|
|
121
|
+
onClick: (e) => {
|
|
122
|
+
e.stopPropagation();
|
|
123
|
+
setIsExpanded((prev) => !prev);
|
|
124
|
+
},
|
|
125
|
+
style: { padding: 0 },
|
|
126
|
+
children: isExpanded ? /* @__PURE__ */ jsx("i", { className: "ri-arrow-down-s-line" }) : /* @__PURE__ */ jsx("i", { className: "ri-arrow-right-s-line" })
|
|
127
|
+
}
|
|
128
|
+
),
|
|
129
|
+
/* @__PURE__ */ jsx(
|
|
130
|
+
Text,
|
|
131
|
+
{
|
|
132
|
+
as: "p",
|
|
133
|
+
variant: "body-large",
|
|
134
|
+
weight: "bold",
|
|
135
|
+
style: { width: "35%", color: textColorAsBuiVariable },
|
|
136
|
+
children: scenario.title
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
/* @__PURE__ */ jsxs(Flex, { align: "center", justify: "start", style: { width: "15%" }, children: [
|
|
140
|
+
/* @__PURE__ */ jsx(
|
|
141
|
+
RiskMatrixSquare,
|
|
142
|
+
{
|
|
143
|
+
size: "small",
|
|
144
|
+
probability: findProbabilityIndex(scenario.risk.probability),
|
|
145
|
+
consequence: findConsequenceIndex(scenario.risk.consequence)
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
/* @__PURE__ */ jsxs(
|
|
149
|
+
Text,
|
|
150
|
+
{
|
|
151
|
+
variant: "body-medium",
|
|
152
|
+
style: { color: textColorAsBuiVariable },
|
|
153
|
+
children: [
|
|
154
|
+
t("scenarioTable.columns.probabilityChar"),
|
|
155
|
+
":",
|
|
156
|
+
`${getProbabilityLevel(
|
|
157
|
+
scenario.risk
|
|
158
|
+
)} ${t("scenarioTable.columns.consequenceChar")}:${getConsequenceLevel(scenario.risk)}`
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
] }),
|
|
163
|
+
/* @__PURE__ */ jsx(
|
|
164
|
+
Flex,
|
|
165
|
+
{
|
|
166
|
+
align: "center",
|
|
167
|
+
justify: "start",
|
|
168
|
+
style: { width: isEditing ? "30%" : "35%" },
|
|
169
|
+
children: (() => {
|
|
170
|
+
if (scenario.actions.length > 0) {
|
|
171
|
+
return /* @__PURE__ */ jsx(
|
|
172
|
+
ScenarioTableProgressBar,
|
|
173
|
+
{
|
|
174
|
+
completedCount: scenario.actions.filter(
|
|
175
|
+
(a) => a.status === ActionStatusOptions.OK
|
|
176
|
+
).length,
|
|
177
|
+
totalCount: scenario.actions.filter(
|
|
178
|
+
(a) => a.status !== ActionStatusOptions.NotRelevant
|
|
179
|
+
).length,
|
|
180
|
+
textColor: textColorAsBuiVariable
|
|
181
|
+
}
|
|
182
|
+
);
|
|
164
183
|
}
|
|
165
|
-
|
|
184
|
+
return /* @__PURE__ */ jsx(Text, { style: { color: textColorAsBuiVariable }, children: t("scenarioTable.noActions") });
|
|
185
|
+
})()
|
|
166
186
|
}
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
187
|
+
),
|
|
188
|
+
/* @__PURE__ */ jsxs(Flex, { align: "center", style: { width: "15%" }, children: [
|
|
189
|
+
/* @__PURE__ */ jsx(
|
|
190
|
+
RiskMatrixSquare,
|
|
191
|
+
{
|
|
192
|
+
size: "small",
|
|
193
|
+
probability: findProbabilityIndex(
|
|
194
|
+
scenario.remainingRisk.probability
|
|
195
|
+
),
|
|
196
|
+
consequence: findConsequenceIndex(
|
|
197
|
+
scenario.remainingRisk.consequence
|
|
198
|
+
)
|
|
199
|
+
}
|
|
178
200
|
),
|
|
179
|
-
|
|
180
|
-
|
|
201
|
+
/* @__PURE__ */ jsx(
|
|
202
|
+
Text,
|
|
203
|
+
{
|
|
204
|
+
variant: "body-medium",
|
|
205
|
+
style: { color: textColorAsBuiVariable },
|
|
206
|
+
children: `${t("scenarioTable.columns.probabilityChar")}:${getProbabilityLevel(
|
|
207
|
+
scenario.remainingRisk
|
|
208
|
+
)} ${t("scenarioTable.columns.consequenceChar")}:${getConsequenceLevel(scenario.remainingRisk)}`
|
|
209
|
+
}
|
|
181
210
|
)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
/* @__PURE__ */ jsx(
|
|
208
|
-
DeleteScenarioConfirmation,
|
|
211
|
+
] }),
|
|
212
|
+
isEditing && /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "end", children: [
|
|
213
|
+
/* @__PURE__ */ jsx(
|
|
214
|
+
IconButton,
|
|
215
|
+
{
|
|
216
|
+
size: "small",
|
|
217
|
+
onClick: (event) => {
|
|
218
|
+
event.stopPropagation();
|
|
219
|
+
setScenarioDeletionDialogOpen(true);
|
|
220
|
+
},
|
|
221
|
+
children: /* @__PURE__ */ jsx(DeleteIcon, {})
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ jsx(
|
|
225
|
+
DeleteScenarioConfirmation,
|
|
226
|
+
{
|
|
227
|
+
isOpen: isScenarioDeletionDialogOpen,
|
|
228
|
+
setIsOpen: setScenarioDeletionDialogOpen,
|
|
229
|
+
onConfirm: () => deleteScenario(riSc, updateRiSc, scenario)
|
|
230
|
+
}
|
|
231
|
+
)
|
|
232
|
+
] })
|
|
233
|
+
] }),
|
|
234
|
+
isExpanded && /* @__PURE__ */ jsx(Collapse, { in: isExpanded, timeout: "auto", unmountOnExit: true, children: /* @__PURE__ */ jsx("div", { "data-action-root": true, children: /* @__PURE__ */ jsx(
|
|
235
|
+
ActionRowList,
|
|
209
236
|
{
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
237
|
+
scenarioId: scenario.ID,
|
|
238
|
+
displayedActions: scenario.actions.filter(
|
|
239
|
+
(action) => isAnyFilterEnabled && filteredActionIds ? filteredActionIds.includes(action.ID) : true
|
|
240
|
+
)
|
|
213
241
|
}
|
|
214
|
-
)
|
|
215
|
-
]
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
ActionRowList,
|
|
219
|
-
{
|
|
220
|
-
scenarioId: scenario.ID,
|
|
221
|
-
displayedActions: scenario.actions.filter(
|
|
222
|
-
(action) => isAnyFilterEnabled && filteredActionIds ? filteredActionIds.includes(action.ID) : true
|
|
223
|
-
)
|
|
224
|
-
}
|
|
225
|
-
) }) })
|
|
226
|
-
]
|
|
242
|
+
) }) })
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
)
|
|
227
246
|
}
|
|
228
247
|
);
|
|
229
248
|
}
|
|
@@ -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 Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport {\n useState,\n useRef,\n useEffect,\n MouseEvent,\n SetStateAction,\n Dispatch,\n} from 'react';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScWithMetadata, Scenario } from '../../utils/types';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport {\n deleteScenario,\n findConsequenceIndex,\n findProbabilityIndex,\n getConsequenceLevel,\n getProbabilityLevel,\n} from '../../utils/utilityfunctions';\nimport { ScenarioTableProgressBar } from './ScenarioTableProgressBar';\nimport classnames from 'classnames';\nimport styles from './ScenarioTable.module.css';\nimport { Text, Flex, Card } from '@backstage/ui';\nimport { DeleteScenarioConfirmation } from '../scenarioDrawer/components/DeleteConfirmation.tsx';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { useTheme } from '@mui/material/styles';\nimport { ActionRowList } from '../action/ActionRowList.tsx';\nimport { RiskMatrixSquare } from '../riskMatrix/RiskMatrixSquare.tsx';\nimport {\n useScenarioTableDrag,\n useScenarioTableDrop,\n} from '../../hooks/UseScenarioTableDnD.ts';\n\ninterface ScenarioTableRowProps {\n scenario: Scenario;\n filteredActionIds?: string[];\n isAnyFilterEnabled: boolean;\n isDnDAllowed?: boolean;\n viewRow: (id: string) => void;\n listIndex: number;\n isEditing: boolean;\n setTempScenarios: Dispatch<SetStateAction<Scenario[]>>;\n riScWithMetadata: RiScWithMetadata;\n}\n\nexport function ScenarioTableRow({\n scenario,\n filteredActionIds,\n isAnyFilterEnabled,\n isDnDAllowed,\n viewRow,\n listIndex,\n isEditing,\n setTempScenarios,\n riScWithMetadata,\n}: ScenarioTableRowProps) {\n // Getting global state\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc: riSc, updateRiSc } = useRiScs();\n const { hoveredScenarios, setHoveredScenarios } = useScenario();\n\n // Initializing local state\n const [isScenarioDeletionDialogOpen, setScenarioDeletionDialogOpen] =\n useState(false);\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Drag n Drop functionality definitions\n const ref = useRef<HTMLDivElement>(null);\n\n const [, drop] = useScenarioTableDrop(\n listIndex,\n scenario.ID,\n setTempScenarios,\n ref,\n );\n\n useEffect(() => {\n setIsExpanded(!!filteredActionIds);\n }, [filteredActionIds]);\n\n const [{ isDragging }, drag, preview] = useScenarioTableDrag(\n listIndex,\n scenario.ID,\n setTempScenarios,\n riScWithMetadata,\n );\n\n preview(drop(ref));\n\n // Styling\n useEffect(() => {\n if (isExpanded) {\n setHoveredScenarios(prev => prev.filter(s => s.ID !== scenario.ID));\n }\n // Only run when visibleType or expansion changes for this scenario\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isExpanded]);\n\n const theme = useTheme();\n const isScenarioHoveredFromRiskMatrix = hoveredScenarios.some(\n s => s.ID === scenario.ID,\n );\n\n const highlightColor = 'var(--ros-scenario-highlight)';\n\n const cardBgColor = 'var(--ros-scenario-card-bg)';\n\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 if (isExpanded) return;\n setHoveredScenarios(prev =>\n prev.some(s => s.ID === scenario.ID) ? prev : [...prev, scenario],\n );\n }}\n onMouseLeave={() => {\n if (isExpanded) 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={classnames(styles.tableCard, {\n [styles.tableCardNoHover]: isExpanded,\n })}\n style={{\n opacity: isDragging ? 0.3 : 1,\n transition: isDragging ? 'none' : undefined,\n backgroundColor: isScenarioHoveredFromRiskMatrix\n ? highlightColor\n : cardBgColor,\n }}\n >\n <Flex align=\"center\">\n {isEditing && isDnDAllowed && (\n <IconButton size=\"small\" ref={drag}>\n <DragIndicatorIcon\n sx={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n />\n </IconButton>\n )}\n <IconButton\n size=\"medium\"\n data-action-root\n onClick={e => {\n e.stopPropagation();\n setIsExpanded(prev => !prev);\n }}\n style={{ padding: 0 }}\n >\n {isExpanded ? (\n <i className=\"ri-arrow-down-s-line\" />\n ) : (\n <i className=\"ri-arrow-right-s-line\" />\n )}\n </IconButton>\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 <RiskMatrixSquare\n size=\"small\"\n probability={findProbabilityIndex(scenario.risk.probability)}\n consequence={findConsequenceIndex(scenario.risk.consequence)}\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 <RiskMatrixSquare\n size=\"small\"\n probability={findProbabilityIndex(\n scenario.remainingRisk.probability,\n )}\n consequence={findConsequenceIndex(\n scenario.remainingRisk.consequence,\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 {isExpanded && (\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\n <div data-action-root>\n <ActionRowList\n scenarioId={scenario.ID}\n displayedActions={scenario.actions.filter(action =>\n isAnyFilterEnabled && filteredActionIds\n ? filteredActionIds.includes(action.ID)\n : true,\n )}\n />\n </div>\n </Collapse>\n )}\n </Card>\n );\n}\n"],"names":["classnames"],"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 Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator';\nimport {\n useState,\n useRef,\n useEffect,\n MouseEvent,\n KeyboardEvent,\n SetStateAction,\n Dispatch,\n} from 'react';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScWithMetadata, Scenario } from '../../utils/types';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport {\n deleteScenario,\n findConsequenceIndex,\n findProbabilityIndex,\n getConsequenceLevel,\n getProbabilityLevel,\n} from '../../utils/utilityfunctions';\nimport { ScenarioTableProgressBar } from './ScenarioTableProgressBar';\nimport classnames from 'classnames';\nimport styles from './ScenarioTable.module.css';\nimport { Text, Flex, Card } from '@backstage/ui';\nimport { DeleteScenarioConfirmation } from '../scenarioDrawer/components/DeleteConfirmation.tsx';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { useTheme } from '@mui/material/styles';\nimport { ActionRowList } from '../action/ActionRowList.tsx';\nimport { RiskMatrixSquare } from '../riskMatrix/RiskMatrixSquare.tsx';\nimport {\n useScenarioTableDrag,\n useScenarioTableDrop,\n} from '../../hooks/UseScenarioTableDnD.ts';\n\ninterface ScenarioTableRowProps {\n scenario: Scenario;\n filteredActionIds?: string[];\n isAnyFilterEnabled: boolean;\n isDnDAllowed?: boolean;\n viewRow: (id: string) => void;\n listIndex: number;\n isEditing: boolean;\n setTempScenarios: Dispatch<SetStateAction<Scenario[]>>;\n riScWithMetadata: RiScWithMetadata;\n}\n\nexport function ScenarioTableRow({\n scenario,\n filteredActionIds,\n isAnyFilterEnabled,\n isDnDAllowed,\n viewRow,\n listIndex,\n isEditing,\n setTempScenarios,\n riScWithMetadata,\n}: ScenarioTableRowProps) {\n // Getting global state\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc: riSc, updateRiSc } = useRiScs();\n const { hoveredScenarios, setHoveredScenarios } = useScenario();\n\n // Initializing local state\n const [isScenarioDeletionDialogOpen, setScenarioDeletionDialogOpen] =\n useState(false);\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Drag n Drop functionality definitions\n const ref = useRef<HTMLDivElement>(null);\n\n const [, drop] = useScenarioTableDrop(\n listIndex,\n scenario.ID,\n setTempScenarios,\n ref,\n );\n\n useEffect(() => {\n setIsExpanded(!!filteredActionIds);\n }, [filteredActionIds]);\n\n const [{ isDragging }, drag, preview] = useScenarioTableDrag(\n listIndex,\n scenario.ID,\n setTempScenarios,\n riScWithMetadata,\n );\n\n preview(drop(ref));\n\n // Styling\n useEffect(() => {\n if (isExpanded) {\n setHoveredScenarios(prev => prev.filter(s => s.ID !== scenario.ID));\n }\n // Only run when visibleType or expansion changes for this scenario\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isExpanded]);\n\n const theme = useTheme();\n const isScenarioHoveredFromRiskMatrix = hoveredScenarios.some(\n s => s.ID === scenario.ID,\n );\n\n const highlightColor = 'var(--ros-scenario-highlight)';\n\n const cardBgColor = 'var(--ros-scenario-card-bg)';\n\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 <div\n role=\"button\"\n tabIndex={0}\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 onKeyDown={(e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n viewRow(scenario.ID);\n }\n }}\n >\n <Card\n onMouseEnter={() => {\n if (isExpanded) return;\n setHoveredScenarios(prev =>\n prev.some(s => s.ID === scenario.ID) ? prev : [...prev, scenario],\n );\n }}\n onMouseLeave={() => {\n if (isExpanded) return;\n setHoveredScenarios(prev => prev.filter(s => s.ID !== scenario.ID));\n }}\n ref={ref}\n className={classnames(styles.tableCard, {\n [styles.tableCardNoHover]: isExpanded,\n })}\n style={{\n opacity: isDragging ? 0.3 : 1,\n transition: isDragging ? 'none' : undefined,\n backgroundColor: isScenarioHoveredFromRiskMatrix\n ? highlightColor\n : cardBgColor,\n }}\n >\n <Flex align=\"center\">\n {isEditing && isDnDAllowed && (\n <IconButton size=\"small\" ref={drag}>\n <DragIndicatorIcon\n sx={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n />\n </IconButton>\n )}\n <IconButton\n size=\"medium\"\n data-action-root\n onClick={e => {\n e.stopPropagation();\n setIsExpanded(prev => !prev);\n }}\n style={{ padding: 0 }}\n >\n {isExpanded ? (\n <i className=\"ri-arrow-down-s-line\" />\n ) : (\n <i className=\"ri-arrow-right-s-line\" />\n )}\n </IconButton>\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 <RiskMatrixSquare\n size=\"small\"\n probability={findProbabilityIndex(scenario.risk.probability)}\n consequence={findConsequenceIndex(scenario.risk.consequence)}\n />\n <Text\n variant=\"body-medium\"\n style={{ color: textColorAsBuiVariable }}\n >\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 <RiskMatrixSquare\n size=\"small\"\n probability={findProbabilityIndex(\n scenario.remainingRisk.probability,\n )}\n consequence={findConsequenceIndex(\n scenario.remainingRisk.consequence,\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 {isExpanded && (\n <Collapse in={isExpanded} timeout=\"auto\" unmountOnExit>\n <div data-action-root>\n <ActionRowList\n scenarioId={scenario.ID}\n displayedActions={scenario.actions.filter(action =>\n isAnyFilterEnabled && filteredActionIds\n ? filteredActionIds.includes(action.ID)\n : true,\n )}\n />\n </div>\n </Collapse>\n )}\n </Card>\n </div>\n );\n}\n"],"names":["classnames"],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ function RiskTableBase({
|
|
|
37
37
|
const radioGroupClassName = additionalClassName ? `${styles.riskRow} ${additionalClassName}` : styles.riskRow;
|
|
38
38
|
return /* @__PURE__ */ jsxs(Box, { className: styles.riskTable, children: [
|
|
39
39
|
/* @__PURE__ */ jsxs(RadioGroup, { ...field, className: radioGroupClassName, children: [
|
|
40
|
-
fieldName === "consequence" && /* @__PURE__ */ jsx(Box, { className: styles.riskLabelCell }),
|
|
40
|
+
fieldName === "consequence" && /* @__PURE__ */ jsx(Box, { className: styles.riskLabelCell, children: null }),
|
|
41
41
|
Array.from({ length: 5 }, (_, i) => getRadioCell(i))
|
|
42
42
|
] }),
|
|
43
43
|
/* @__PURE__ */ jsx(InfoComponent, {})
|
|
@@ -51,7 +51,7 @@ function createInfoWithHeadersComponent(translationPrefix, InfoComponent, includ
|
|
|
51
51
|
}
|
|
52
52
|
return /* @__PURE__ */ jsxs(Box, { className: styles.riskTable, children: [
|
|
53
53
|
/* @__PURE__ */ jsxs(Box, { className: includeLabel ? styles.consequenceGrid : styles.riskRow, children: [
|
|
54
|
-
includeLabel && /* @__PURE__ */ jsx(Box, { className: styles.riskLabelCell }),
|
|
54
|
+
includeLabel && /* @__PURE__ */ jsx(Box, { className: styles.riskLabelCell, children: null }),
|
|
55
55
|
Array.from({ length: 5 }, (_, i) => getRadioLabel(i + 1))
|
|
56
56
|
] }),
|
|
57
57
|
/* @__PURE__ */ jsx(InfoComponent, {})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiskTableBase.esm.js","sources":["../../../../src/components/scenarioWizard/components/RiskTableBase.tsx"],"sourcesContent":["import { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useController, UseFormReturn } from 'react-hook-form';\nimport { FormScenario } from '../../../utils/types';\nimport { RiskRadioButton } from './RiskRadioButton';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport { Text, Box } from '@backstage/ui';\nimport styles from '../ScenarioWizardTable.module.css';\nimport React from 'react';\n\ntype RiskTableBaseProps = {\n formMethods: UseFormReturn<FormScenario>;\n riskType: keyof Pick<FormScenario, 'risk' | 'remainingRisk'>;\n fieldName: 'probability' | 'consequence';\n translationPrefix: 'probabilityTable' | 'consequenceTable';\n options: readonly number[];\n additionalClassName?: string;\n InfoComponent: React.ComponentType;\n};\n\nexport function RiskTableBase({\n formMethods,\n riskType,\n fieldName,\n options,\n additionalClassName = '',\n translationPrefix,\n InfoComponent,\n}: RiskTableBaseProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { field } = useController({\n name: `${riskType}.${fieldName}`,\n control: formMethods.control,\n });\n\n function getRadioLabel(row: number) {\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n return `${row}: ${t(`${translationPrefix}.rows.${row}`)}`;\n }\n\n function getRadioCell(row: number) {\n return (\n <RiskRadioButton\n value={options[row]}\n ref={field.ref}\n label={getRadioLabel(row + 1)}\n />\n );\n }\n\n const radioGroupClassName = additionalClassName\n ? `${styles.riskRow} ${additionalClassName}`\n : styles.riskRow;\n\n return (\n <Box className={styles.riskTable}>\n <RadioGroup {...field} className={radioGroupClassName}>\n {fieldName === 'consequence' && (\n <Box className={styles.riskLabelCell}
|
|
1
|
+
{"version":3,"file":"RiskTableBase.esm.js","sources":["../../../../src/components/scenarioWizard/components/RiskTableBase.tsx"],"sourcesContent":["import { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useController, UseFormReturn } from 'react-hook-form';\nimport { FormScenario } from '../../../utils/types';\nimport { RiskRadioButton } from './RiskRadioButton';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport { Text, Box } from '@backstage/ui';\nimport styles from '../ScenarioWizardTable.module.css';\nimport React from 'react';\n\ntype RiskTableBaseProps = {\n formMethods: UseFormReturn<FormScenario>;\n riskType: keyof Pick<FormScenario, 'risk' | 'remainingRisk'>;\n fieldName: 'probability' | 'consequence';\n translationPrefix: 'probabilityTable' | 'consequenceTable';\n options: readonly number[];\n additionalClassName?: string;\n InfoComponent: React.ComponentType;\n};\n\nexport function RiskTableBase({\n formMethods,\n riskType,\n fieldName,\n options,\n additionalClassName = '',\n translationPrefix,\n InfoComponent,\n}: RiskTableBaseProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { field } = useController({\n name: `${riskType}.${fieldName}`,\n control: formMethods.control,\n });\n\n function getRadioLabel(row: number) {\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n return `${row}: ${t(`${translationPrefix}.rows.${row}`)}`;\n }\n\n function getRadioCell(row: number) {\n return (\n <RiskRadioButton\n value={options[row]}\n ref={field.ref}\n label={getRadioLabel(row + 1)}\n />\n );\n }\n\n const radioGroupClassName = additionalClassName\n ? `${styles.riskRow} ${additionalClassName}`\n : styles.riskRow;\n\n return (\n <Box className={styles.riskTable}>\n <RadioGroup {...field} className={radioGroupClassName}>\n {fieldName === 'consequence' && (\n <Box className={styles.riskLabelCell}>{null}</Box>\n )}\n {Array.from({ length: 5 }, (_, i) => getRadioCell(i))}\n </RadioGroup>\n <InfoComponent />\n </Box>\n );\n}\n\nexport function createInfoWithHeadersComponent(\n translationPrefix: 'probabilityTable' | 'consequenceTable',\n InfoComponent: React.ComponentType,\n includeLabel: boolean = false,\n) {\n return function InfoWithHeaders() {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n function getRadioLabel(row: number) {\n return (\n <Text as=\"p\" variant=\"body-large\">\n {/* @ts-ignore Because ts can't typecheck strings against our keys */}\n {`${row}: ${t(`${translationPrefix}.rows.${row}`)}`}\n </Text>\n );\n }\n return (\n <Box className={styles.riskTable}>\n <Box className={includeLabel ? styles.consequenceGrid : styles.riskRow}>\n {includeLabel && <Box className={styles.riskLabelCell}>{null}</Box>}\n {Array.from({ length: 5 }, (_, i) => getRadioLabel(i + 1))}\n </Box>\n <InfoComponent />\n </Box>\n );\n };\n}\n"],"names":[],"mappings":"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"}
|