@kartverket/backstage-plugin-risk-scorecard 8.3.2 → 8.4.0

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.
@@ -6,16 +6,19 @@ import { riskMatrix } from '../../utils/constants.esm.js';
6
6
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
7
7
  import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
8
8
  import { RiskMatrixTabs } from './utils.esm.js';
9
- import { Card, CardHeader, Text, CardBody, Box } from '@backstage/ui';
9
+ import { Card, CardHeader, Text, CardBody, Box, Flex } from '@backstage/ui';
10
10
  import { RiskMatrixSquare } from './RiskMatrixSquare.esm.js';
11
11
  import { CurrentRisk } from './CurrentRisk.esm.js';
12
+ import { useShowCurrentMatrixFeatureFlag } from '../../utils/featureFlags.esm.js';
12
13
  import styles from './RiskMatrix.module.css.esm.js';
13
14
 
14
15
  function RiskMatrix({
15
16
  riScWithMetadata
16
17
  }) {
17
18
  const { t } = useTranslationRef(pluginRiScTranslationRef);
19
+ const showCurrentMatrix = useShowCurrentMatrixFeatureFlag();
18
20
  const [tab, setTab] = useState(RiskMatrixTabs.initialRisk);
21
+ const description = t("riskMatrix.currentRisk.matrixDescription");
19
22
  return /* @__PURE__ */ jsxs(Card, { className: styles.card, children: [
20
23
  /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(Text, { variant: "title-small", weight: "bold", children: t("riskMatrix.title") }) }),
21
24
  /* @__PURE__ */ jsxs(CardBody, { children: [
@@ -29,45 +32,55 @@ function RiskMatrix({
29
32
  children: /* @__PURE__ */ jsx(AggregatedCost, { riSc: riScWithMetadata.content, riskType: tab })
30
33
  }
31
34
  ),
32
- tab === RiskMatrixTabs.currentRisk ? /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(CurrentRisk, { risc: riScWithMetadata }) }) : /* @__PURE__ */ jsx(Box, { className: styles.gridWrapper, children: /* @__PURE__ */ jsxs(Box, { className: styles.grid, children: [
33
- /* @__PURE__ */ jsx(Box, { className: styles.konsekvens, children: /* @__PURE__ */ jsx(
34
- Text,
35
- {
36
- variant: "title-x-small",
37
- weight: "bold",
38
- className: styles.centered,
39
- children: t("dictionary.consequence")
40
- }
41
- ) }),
42
- riskMatrix.map((row, rowIndex) => /* @__PURE__ */ jsxs(Fragment, { children: [
43
- /* @__PURE__ */ jsx(Box, { className: styles.centered, children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: 5 - rowIndex }) }),
44
- row.map((_, colIndex) => /* @__PURE__ */ jsx(
45
- RiskMatrixSquare,
35
+ (showCurrentMatrix || tab !== RiskMatrixTabs.currentRisk) && /* @__PURE__ */ jsxs(Box, { className: styles.gridWrapper, children: [
36
+ /* @__PURE__ */ jsxs(Box, { className: styles.grid, children: [
37
+ /* @__PURE__ */ jsx(Box, { className: styles.konsekvens, children: /* @__PURE__ */ jsx(
38
+ Text,
39
+ {
40
+ variant: "title-x-small",
41
+ weight: "bold",
42
+ className: styles.centered,
43
+ children: t("dictionary.consequence")
44
+ }
45
+ ) }),
46
+ riskMatrix.map((row, rowIndex) => /* @__PURE__ */ jsxs(Fragment, { children: [
47
+ /* @__PURE__ */ jsx(Box, { className: styles.centered, children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: 5 - rowIndex }) }),
48
+ row.map((_, colIndex) => /* @__PURE__ */ jsx(
49
+ RiskMatrixSquare,
50
+ {
51
+ size: "grid",
52
+ consequence: 4 - rowIndex,
53
+ probability: colIndex,
54
+ riScCountObject: {
55
+ riskTab: tab,
56
+ riSc: riScWithMetadata
57
+ }
58
+ },
59
+ `S:${colIndex} K:${4 - rowIndex}`
60
+ ))
61
+ ] }, rowIndex)),
62
+ /* @__PURE__ */ jsx(Box, { className: styles.centered, children: null }),
63
+ /* @__PURE__ */ jsx(Box, { className: styles.centered, children: null }),
64
+ riskMatrix.map((_, col) => /* @__PURE__ */ jsx(Box, { className: styles.centered, children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: col + 1 }) }, col)),
65
+ /* @__PURE__ */ jsx(Box, { className: styles.sannsynlighet, children: /* @__PURE__ */ jsx(
66
+ Text,
46
67
  {
47
- size: "grid",
48
- consequence: 4 - rowIndex,
49
- probability: colIndex,
50
- riScCountObject: {
51
- isInitialRisk: tab === RiskMatrixTabs.initialRisk,
52
- riSc: riScWithMetadata
53
- }
54
- },
55
- `S:${colIndex} K:${4 - rowIndex}`
56
- ))
57
- ] }, rowIndex)),
58
- /* @__PURE__ */ jsx(Box, { className: styles.centered, children: null }),
59
- /* @__PURE__ */ jsx(Box, { className: styles.centered, children: null }),
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
- /* @__PURE__ */ jsx(Box, { className: styles.sannsynlighet, children: /* @__PURE__ */ jsx(
68
+ weight: "bold",
69
+ variant: "title-x-small",
70
+ className: styles.centered,
71
+ children: t("dictionary.probability")
72
+ }
73
+ ) })
74
+ ] }),
75
+ tab === RiskMatrixTabs.currentRisk && /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
62
76
  Text,
63
77
  {
64
- weight: "bold",
65
- variant: "title-x-small",
66
- className: styles.centered,
67
- children: t("dictionary.probability")
78
+ variant: "body-large",
79
+ dangerouslySetInnerHTML: { __html: description }
68
80
  }
69
81
  ) })
70
- ] }) })
82
+ ] }),
83
+ tab === RiskMatrixTabs.currentRisk && /* @__PURE__ */ jsx(Box, { className: styles.currentRiskReduction, children: /* @__PURE__ */ jsx(CurrentRisk, { risc: riScWithMetadata }) })
71
84
  ] })
72
85
  ] });
73
86
  }
@@ -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}>{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
+ {"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, Flex } from '@backstage/ui';\nimport { RiskMatrixSquare } from './RiskMatrixSquare.tsx';\nimport { CurrentRisk } from './CurrentRisk.tsx';\nimport { useShowCurrentMatrixFeatureFlag } from '../../utils/featureFlags.ts';\n\nimport styles from './RiskMatrix.module.css';\nexport function RiskMatrix({\n riScWithMetadata,\n}: {\n riScWithMetadata: RiScWithMetadata;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const showCurrentMatrix = useShowCurrentMatrixFeatureFlag();\n const [tab, setTab] = useState<RiskMatrixTabs>(RiskMatrixTabs.initialRisk);\n const description = t('riskMatrix.currentRisk.matrixDescription');\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 {(showCurrentMatrix || tab !== RiskMatrixTabs.currentRisk) && (\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 riskTab: tab,\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 {tab === RiskMatrixTabs.currentRisk && (\n <Flex>\n <Text\n variant=\"body-large\"\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </Flex>\n )}\n </Box>\n )}\n {tab === RiskMatrixTabs.currentRisk && (\n <Box className={styles.currentRiskReduction}>\n <CurrentRisk risc={riScWithMetadata} />\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 = ".RiskMatrix_gridWrapper__d569fad35a {\n display: flex;\n justify-content: center;\n padding-top: 32px;\n}\n\n.RiskMatrix_grid__d569fad35a {\n width: 100%;\n max-width: 400px;\n display: grid;\n grid-template-rows: repeat(5, 1fr) auto auto;\n grid-template-columns: 30px 30px repeat(5, 1fr);\n gap: 4px;\n}\n\n.RiskMatrix_centered__d569fad35a {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.RiskMatrix_konsekvens__d569fad35a {\n grid-row: 1 / span 5;\n writing-mode: vertical-lr;\n transform: rotate(180deg);\n}\n\n.RiskMatrix_sannsynlighet__d569fad35a {\n grid-row: 7;\n grid-column: 3 / span 5;\n}\n\n.RiskMatrix_estimatedCostContainer__d569fad35a {\n margin-top: 18px;\n}\n";
4
- var styles = {"gridWrapper":"RiskMatrix_gridWrapper__d569fad35a","grid":"RiskMatrix_grid__d569fad35a","centered":"RiskMatrix_centered__d569fad35a","konsekvens":"RiskMatrix_konsekvens__d569fad35a","sannsynlighet":"RiskMatrix_sannsynlighet__d569fad35a"};
3
+ var css_248z = ".RiskMatrix_gridWrapper__c20cc20ed1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 400px;\n margin: 0 auto;\n gap: 16px;\n padding-top: 32px;\n}\n\n.RiskMatrix_grid__c20cc20ed1 {\n width: 100%;\n display: grid;\n grid-template-rows: repeat(5, 1fr) auto auto;\n grid-template-columns: 30px 30px repeat(5, 1fr);\n gap: 4px;\n}\n\n.RiskMatrix_centered__c20cc20ed1 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.RiskMatrix_konsekvens__c20cc20ed1 {\n grid-row: 1 / span 5;\n writing-mode: vertical-lr;\n transform: rotate(180deg);\n}\n\n.RiskMatrix_sannsynlighet__c20cc20ed1 {\n grid-row: 7;\n grid-column: 3 / span 5;\n}\n\n.RiskMatrix_estimatedCostContainer__c20cc20ed1 {\n margin-top: 18px;\n}\n\n.RiskMatrix_currentRiskReduction__c20cc20ed1 {\n width: 100%;\n max-width: 400px;\n margin: 0 auto;\n}\n";
4
+ var styles = {"gridWrapper":"RiskMatrix_gridWrapper__c20cc20ed1","grid":"RiskMatrix_grid__c20cc20ed1","centered":"RiskMatrix_centered__c20cc20ed1","konsekvens":"RiskMatrix_konsekvens__c20cc20ed1","sannsynlighet":"RiskMatrix_sannsynlighet__c20cc20ed1","currentRiskReduction":"RiskMatrix_currentRiskReduction__c20cc20ed1"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -8,6 +8,7 @@ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
8
8
  import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
9
9
  import { useScenario } from '../../contexts/ScenarioContext.esm.js';
10
10
  import { findProbabilityIndex, findConsequenceIndex } from '../../utils/utilityfunctions.esm.js';
11
+ import { getScenarioRiskForMatrix } from '../../utils/risk.esm.js';
11
12
  import { Text } from '@backstage/ui';
12
13
  import styles from './RiskMatrixScenarioCount.module.css.esm.js';
13
14
 
@@ -15,7 +16,7 @@ function RiskMatrixScenarioCount({
15
16
  riScWithMetadata,
16
17
  probability,
17
18
  consequence,
18
- initialRisk
19
+ riskTab
19
20
  }) {
20
21
  const { t } = useTranslationRef(pluginRiScTranslationRef);
21
22
  const [tooltipOpen, setTooltipOpen] = useState(false);
@@ -23,7 +24,7 @@ function RiskMatrixScenarioCount({
23
24
  const { openScenarioDrawer, hoveredScenarios, setHoveredScenarios } = useScenario();
24
25
  useEffect(() => {
25
26
  setTooltipOpen(false);
26
- }, [initialRisk]);
27
+ }, [riskTab]);
27
28
  function handleScenarioClick(ID) {
28
29
  setTooltipOpen(false);
29
30
  openScenarioDrawer(
@@ -31,13 +32,10 @@ function RiskMatrixScenarioCount({
31
32
  riScWithMetadata.status !== RiScStatus.DeletionDraft && riScWithMetadata.status !== RiScStatus.DeletionSentForApproval
32
33
  );
33
34
  }
34
- const scenarios = riScWithMetadata.content.scenarios.filter(
35
- (scenario) => findProbabilityIndex(
36
- initialRisk ? scenario.risk.probability : scenario.remainingRisk.probability
37
- ) === probability && findConsequenceIndex(
38
- initialRisk ? scenario.risk.consequence : scenario.remainingRisk.consequence
39
- ) === consequence
40
- );
35
+ const scenarios = riScWithMetadata.content.scenarios.filter((scenario) => {
36
+ const matrixRisk = getScenarioRiskForMatrix(scenario, riskTab);
37
+ return findProbabilityIndex(matrixRisk.probability) === probability && findConsequenceIndex(matrixRisk.consequence) === consequence;
38
+ });
41
39
  if (scenarios.length === 0) {
42
40
  return null;
43
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RiskMatrixScenarioCount.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrixScenarioCount.tsx"],"sourcesContent":["import ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Paper from '@mui/material/Paper';\nimport Tooltip from '@mui/material/Tooltip';\nimport { useState, useEffect } from 'react';\nimport { RiScStatus, RiScWithMetadata } from '../../utils/types';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport {\n findConsequenceIndex,\n findProbabilityIndex,\n} from '../../utils/utilityfunctions';\nimport { Text } from '@backstage/ui';\nimport styles from './RiskMatrixScenarioCount.module.css';\n\ninterface ScenarioCountProps {\n riScWithMetadata: RiScWithMetadata;\n probability: number;\n consequence: number;\n initialRisk: boolean;\n}\n\nexport function RiskMatrixScenarioCount({\n riScWithMetadata,\n probability,\n consequence,\n initialRisk,\n}: ScenarioCountProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [tooltipOpen, setTooltipOpen] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const { openScenarioDrawer, hoveredScenarios, setHoveredScenarios } =\n useScenario();\n\n useEffect(() => {\n setTooltipOpen(false);\n }, [initialRisk]);\n\n function handleScenarioClick(ID: string) {\n setTooltipOpen(false);\n openScenarioDrawer(\n ID,\n riScWithMetadata.status !== RiScStatus.DeletionDraft &&\n riScWithMetadata.status !== RiScStatus.DeletionSentForApproval,\n );\n }\n\n const scenarios = riScWithMetadata.content.scenarios.filter(\n scenario =>\n findProbabilityIndex(\n initialRisk\n ? scenario.risk.probability\n : scenario.remainingRisk.probability,\n ) === probability &&\n findConsequenceIndex(\n initialRisk\n ? scenario.risk.consequence\n : scenario.remainingRisk.consequence,\n ) === consequence,\n );\n\n if (scenarios.length === 0) {\n return null;\n }\n const isHighlightedFromExternal = scenarios.some(s =>\n hoveredScenarios.some(h => h.ID === s.ID),\n );\n\n const tooltipList = (\n <div>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('riskMatrix.tooltip.title')}\n </Text>\n <ul className={styles.tooltipList}>\n {scenarios.map(scenario => (\n <li key={scenario.ID}>\n <div\n className={styles.tooltipListItem}\n role=\"button\"\n tabIndex={0}\n onClick={e => {\n e.stopPropagation();\n handleScenarioClick(scenario.ID);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleScenarioClick(scenario.ID);\n }\n }}\n >\n <Text>{scenario.title}</Text>\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n\n return (\n <ClickAwayListener onClickAway={() => setTooltipOpen(false)}>\n <Tooltip\n slotProps={{\n tooltip: { className: styles.tooltip },\n arrow: { className: styles.tooltipArrow },\n }}\n title={tooltipList}\n placement=\"right\"\n arrow\n open={tooltipOpen}\n >\n <Paper\n className={`${styles.circle} ${styles.centered} ${\n isHovered || isHighlightedFromExternal ? styles.circleHovered : ''\n }`}\n elevation={10}\n onClick={() => setTooltipOpen(!tooltipOpen)}\n onMouseEnter={() => {\n setIsHovered(true);\n // Add scenarios to hovered list using functional update and dedupe by ID\n setHoveredScenarios(prev => {\n const map = new Map<string, (typeof scenarios)[0]>();\n prev.forEach(p => map.set(p.ID, p));\n scenarios.forEach(s => map.set(s.ID, s));\n return Array.from(map.values());\n });\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n setHoveredScenarios(prev =>\n prev.filter(s => !scenarios.some(s2 => s2.ID === s.ID)),\n );\n }}\n >\n <Text variant=\"body-large\" weight=\"bold\">\n {scenarios.length}\n </Text>\n </Paper>\n </Tooltip>\n </ClickAwayListener>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RiskMatrixScenarioCount.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrixScenarioCount.tsx"],"sourcesContent":["import ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Paper from '@mui/material/Paper';\nimport Tooltip from '@mui/material/Tooltip';\nimport { useState, useEffect } from 'react';\nimport { RiScStatus, RiScWithMetadata } from '../../utils/types';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport {\n findConsequenceIndex,\n findProbabilityIndex,\n} from '../../utils/utilityfunctions';\nimport { getScenarioRiskForMatrix } from '../../utils/risk';\nimport { Text } from '@backstage/ui';\nimport { RiskMatrixTabs } from './utils.tsx';\nimport styles from './RiskMatrixScenarioCount.module.css';\n\ninterface ScenarioCountProps {\n riScWithMetadata: RiScWithMetadata;\n probability: number;\n consequence: number;\n riskTab: RiskMatrixTabs;\n}\n\nexport function RiskMatrixScenarioCount({\n riScWithMetadata,\n probability,\n consequence,\n riskTab,\n}: ScenarioCountProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [tooltipOpen, setTooltipOpen] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const { openScenarioDrawer, hoveredScenarios, setHoveredScenarios } =\n useScenario();\n\n useEffect(() => {\n setTooltipOpen(false);\n }, [riskTab]);\n\n function handleScenarioClick(ID: string) {\n setTooltipOpen(false);\n openScenarioDrawer(\n ID,\n riScWithMetadata.status !== RiScStatus.DeletionDraft &&\n riScWithMetadata.status !== RiScStatus.DeletionSentForApproval,\n );\n }\n\n const scenarios = riScWithMetadata.content.scenarios.filter(scenario => {\n const matrixRisk = getScenarioRiskForMatrix(scenario, riskTab);\n\n return (\n findProbabilityIndex(matrixRisk.probability) === probability &&\n findConsequenceIndex(matrixRisk.consequence) === consequence\n );\n });\n\n if (scenarios.length === 0) {\n return null;\n }\n const isHighlightedFromExternal = scenarios.some(s =>\n hoveredScenarios.some(h => h.ID === s.ID),\n );\n\n const tooltipList = (\n <div>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('riskMatrix.tooltip.title')}\n </Text>\n <ul className={styles.tooltipList}>\n {scenarios.map(scenario => (\n <li key={scenario.ID}>\n <div\n className={styles.tooltipListItem}\n role=\"button\"\n tabIndex={0}\n onClick={e => {\n e.stopPropagation();\n handleScenarioClick(scenario.ID);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleScenarioClick(scenario.ID);\n }\n }}\n >\n <Text>{scenario.title}</Text>\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n\n return (\n <ClickAwayListener onClickAway={() => setTooltipOpen(false)}>\n <Tooltip\n slotProps={{\n tooltip: { className: styles.tooltip },\n arrow: { className: styles.tooltipArrow },\n }}\n title={tooltipList}\n placement=\"right\"\n arrow\n open={tooltipOpen}\n >\n <Paper\n className={`${styles.circle} ${styles.centered} ${\n isHovered || isHighlightedFromExternal ? styles.circleHovered : ''\n }`}\n elevation={10}\n onClick={() => setTooltipOpen(!tooltipOpen)}\n onMouseEnter={() => {\n setIsHovered(true);\n // Add scenarios to hovered list using functional update and dedupe by ID\n setHoveredScenarios(prev => {\n const map = new Map<string, (typeof scenarios)[0]>();\n prev.forEach(p => map.set(p.ID, p));\n scenarios.forEach(s => map.set(s.ID, s));\n return Array.from(map.values());\n });\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n setHoveredScenarios(prev =>\n prev.filter(s => !scenarios.some(s2 => s2.ID === s.ID)),\n );\n }}\n >\n <Text variant=\"body-large\" weight=\"bold\">\n {scenarios.length}\n </Text>\n </Paper>\n </Tooltip>\n </ClickAwayListener>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAwBO,SAAS,uBAAA,CAAwB;AAAA,EACtC,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,EAAE,kBAAA,EAAoB,gBAAA,EAAkB,mBAAA,KAC5C,WAAA,EAAY;AAEd,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,SAAS,oBAAoB,EAAA,EAAY;AACvC,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,kBAAA;AAAA,MACE,EAAA;AAAA,MACA,iBAAiB,MAAA,KAAW,UAAA,CAAW,aAAA,IACrC,gBAAA,CAAiB,WAAW,UAAA,CAAW;AAAA,KAC3C;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,QAAA,KAAY;AACtE,IAAA,MAAM,UAAA,GAAa,wBAAA,CAAyB,QAAA,EAAU,OAAO,CAAA;AAE7D,IAAA,OACE,oBAAA,CAAqB,WAAW,WAAW,CAAA,KAAM,eACjD,oBAAA,CAAqB,UAAA,CAAW,WAAW,CAAA,KAAM,WAAA;AAAA,EAErD,CAAC,CAAA;AAED,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,4BAA4B,SAAA,CAAU,IAAA;AAAA,IAAK,OAC/C,gBAAA,CAAiB,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,EAAE,EAAE;AAAA,GAC1C;AAEA,EAAA,MAAM,WAAA,wBACH,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,OAAA,EAAQ,eAAA,EAAgB,QAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,0BAA0B,CAAA,EAC/B,CAAA;AAAA,oBACA,GAAA,CAAC,QAAG,SAAA,EAAW,MAAA,CAAO,aACnB,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAA,QAAA,qBACb,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAW,MAAA,CAAO,eAAA;AAAA,QAClB,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV,SAAS,CAAA,CAAA,KAAK;AACZ,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,mBAAA,CAAoB,SAAS,EAAE,CAAA;AAAA,QACjC,CAAA;AAAA,QACA,WAAW,CAAA,CAAA,KAAK;AACd,UAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,mBAAA,CAAoB,SAAS,EAAE,CAAA;AAAA,UACjC;AAAA,QACF,CAAA;AAAA,QAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM;AAAA;AAAA,KACxB,EAAA,EAjBO,QAAA,CAAS,EAkBlB,CACD,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,2BACG,iBAAA,EAAA,EAAkB,WAAA,EAAa,MAAM,cAAA,CAAe,KAAK,CAAA,EACxD,QAAA,kBAAA,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW;AAAA,QACT,OAAA,EAAS,EAAE,SAAA,EAAW,MAAA,CAAO,OAAA,EAAQ;AAAA,QACrC,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,CAAO,YAAA;AAAa,OAC1C;AAAA,MACA,KAAA,EAAO,WAAA;AAAA,MACP,SAAA,EAAU,OAAA;AAAA,MACV,KAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MAEN,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,CAAA,CAAA,EAC5C,SAAA,IAAa,yBAAA,GAA4B,MAAA,CAAO,aAAA,GAAgB,EAClE,CAAA,CAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,UACX,OAAA,EAAS,MAAM,cAAA,CAAe,CAAC,WAAW,CAAA;AAAA,UAC1C,cAAc,MAAM;AAClB,YAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,YAAA,mBAAA,CAAoB,CAAA,IAAA,KAAQ;AAC1B,cAAA,MAAM,GAAA,uBAAU,GAAA,EAAmC;AACnD,cAAA,IAAA,CAAK,QAAQ,CAAA,CAAA,KAAK,GAAA,CAAI,IAAI,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAA;AAClC,cAAA,SAAA,CAAU,QAAQ,CAAA,CAAA,KAAK,GAAA,CAAI,IAAI,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAA;AACvC,cAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,CAAA;AAAA,YAChC,CAAC,CAAA;AAAA,UACH,CAAA;AAAA,UACA,cAAc,MAAM;AAClB,YAAA,YAAA,CAAa,KAAK,CAAA;AAClB,YAAA,mBAAA;AAAA,cAAoB,CAAA,IAAA,KAClB,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,SAAA,CAAU,IAAA,CAAK,CAAA,EAAA,KAAM,EAAA,CAAG,EAAA,KAAO,CAAA,CAAE,EAAE,CAAC;AAAA,aACxD;AAAA,UACF,CAAA;AAAA,UAEA,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAC/B,oBAAU,MAAA,EACb;AAAA;AAAA;AACF;AAAA,GACF,EACF,CAAA;AAEJ;;;;"}
@@ -18,7 +18,7 @@ function RiskMatrixSquare(props) {
18
18
  riScWithMetadata: props.riScCountObject.riSc,
19
19
  probability: props.probability,
20
20
  consequence: props.consequence,
21
- initialRisk: props.riScCountObject.isInitialRisk
21
+ riskTab: props.riScCountObject.riskTab
22
22
  }
23
23
  )
24
24
  },
@@ -1 +1 @@
1
- {"version":3,"file":"RiskMatrixSquare.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrixSquare.tsx"],"sourcesContent":["import { RiScWithMetadata } from '../../utils/types.ts';\nimport { riskMatrix, riskMatrixStroke } from '../../utils/constants.ts';\nimport { RiskMatrixScenarioCount } from './RiskMatrixScenarioCount.tsx';\nimport styles from './RiskMatrixSquare.module.css';\n\ntype RiskMatrixSquareProps = {\n size: 'small' | 'grid';\n probability: number; // 0 - 4\n consequence: number; // 0 - 4\n riScCountObject?: {\n riSc: RiScWithMetadata;\n isInitialRisk: boolean;\n };\n};\n\nexport function RiskMatrixSquare(props: RiskMatrixSquareProps) {\n return (\n <div\n className={`${styles.squareWithRiScCount} ${props.size === 'small' ? styles.smallSquare : ''}`}\n style={{\n backgroundColor: riskMatrix[4 - props.consequence][props.probability],\n borderColor: riskMatrixStroke[4 - props.consequence][props.probability],\n }}\n key={`S:${props.probability} K:${props.consequence}`}\n >\n {props.riScCountObject && (\n <RiskMatrixScenarioCount\n riScWithMetadata={props.riScCountObject.riSc}\n probability={props.probability}\n consequence={props.consequence}\n initialRisk={props.riScCountObject.isInitialRisk}\n />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAeO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,EAAG,MAAA,CAAO,mBAAmB,CAAA,CAAA,EAAI,MAAM,IAAA,KAAS,OAAA,GAAU,MAAA,CAAO,WAAA,GAAc,EAAE,CAAA,CAAA;AAAA,MAC5F,KAAA,EAAO;AAAA,QACL,iBAAiB,UAAA,CAAW,CAAA,GAAI,MAAM,WAAW,CAAA,CAAE,MAAM,WAAW,CAAA;AAAA,QACpE,aAAa,gBAAA,CAAiB,CAAA,GAAI,MAAM,WAAW,CAAA,CAAE,MAAM,WAAW;AAAA,OACxE;AAAA,MAGC,gBAAM,eAAA,oBACL,GAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,gBAAA,EAAkB,MAAM,eAAA,CAAgB,IAAA;AAAA,UACxC,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,WAAA,EAAa,MAAM,eAAA,CAAgB;AAAA;AAAA;AACrC,KAAA;AAAA,IARG,CAAA,EAAA,EAAK,KAAA,CAAM,WAAW,CAAA,GAAA,EAAM,MAAM,WAAW,CAAA;AAAA,GAUpD;AAEJ;;;;"}
1
+ {"version":3,"file":"RiskMatrixSquare.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrixSquare.tsx"],"sourcesContent":["import { RiScWithMetadata } from '../../utils/types.ts';\nimport { riskMatrix, riskMatrixStroke } from '../../utils/constants.ts';\nimport { RiskMatrixScenarioCount } from './RiskMatrixScenarioCount.tsx';\nimport { RiskMatrixTabs } from './utils.tsx';\nimport styles from './RiskMatrixSquare.module.css';\n\ntype RiskMatrixSquareProps = {\n size: 'small' | 'grid';\n probability: number; // 0 - 4\n consequence: number; // 0 - 4\n riScCountObject?: {\n riSc: RiScWithMetadata;\n riskTab: RiskMatrixTabs;\n };\n};\n\nexport function RiskMatrixSquare(props: RiskMatrixSquareProps) {\n return (\n <div\n className={`${styles.squareWithRiScCount} ${props.size === 'small' ? styles.smallSquare : ''}`}\n style={{\n backgroundColor: riskMatrix[4 - props.consequence][props.probability],\n borderColor: riskMatrixStroke[4 - props.consequence][props.probability],\n }}\n key={`S:${props.probability} K:${props.consequence}`}\n >\n {props.riScCountObject && (\n <RiskMatrixScenarioCount\n riScWithMetadata={props.riScCountObject.riSc}\n probability={props.probability}\n consequence={props.consequence}\n riskTab={props.riScCountObject.riskTab}\n />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAgBO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAA,EAAG,MAAA,CAAO,mBAAmB,CAAA,CAAA,EAAI,MAAM,IAAA,KAAS,OAAA,GAAU,MAAA,CAAO,WAAA,GAAc,EAAE,CAAA,CAAA;AAAA,MAC5F,KAAA,EAAO;AAAA,QACL,iBAAiB,UAAA,CAAW,CAAA,GAAI,MAAM,WAAW,CAAA,CAAE,MAAM,WAAW,CAAA;AAAA,QACpE,aAAa,gBAAA,CAAiB,CAAA,GAAI,MAAM,WAAW,CAAA,CAAE,MAAM,WAAW;AAAA,OACxE;AAAA,MAGC,gBAAM,eAAA,oBACL,GAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,gBAAA,EAAkB,MAAM,eAAA,CAAgB,IAAA;AAAA,UACxC,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,OAAA,EAAS,MAAM,eAAA,CAAgB;AAAA;AAAA;AACjC,KAAA;AAAA,IARG,CAAA,EAAA,EAAK,KAAA,CAAM,WAAW,CAAA,GAAA,EAAM,MAAM,WAAW,CAAA;AAAA,GAUpD;AAEJ;;;;"}
@@ -1,10 +1,6 @@
1
1
  import { useApi, configApiRef, identityApiRef, githubAuthApiRef, fetchApiRef } from '@backstage/core-plugin-api';
2
2
  import { useQuery } from '@tanstack/react-query';
3
- import { buildNativeBackendUrls } from '../urls/backend.esm.js';
4
3
  import { URLS } from '../urls/index.esm.js';
5
- import { latestSupportedVersion } from '../utils/constants.esm.js';
6
- import { useNativeRiScBackendFeatureFlag } from '../utils/featureFlags.esm.js';
7
- import { useGithubRepositoryInformation } from '../utils/hooks.esm.js';
8
4
 
9
5
  const PREDEFINED_SCENARIOS_TEMPLATE_ID = "web-app-api";
10
6
  const PREDEFINED_SCENARIOS_SOURCE_TEST_REF = "add-scenarios";
@@ -15,24 +11,14 @@ function usePredefinedScenarios(isTestPredefinedScenariosEnabled) {
15
11
  const identityApi = useApi(identityApiRef);
16
12
  const githubApi = useApi(githubAuthApiRef);
17
13
  const { fetch } = useApi(fetchApiRef);
18
- const repoInformation = useGithubRepositoryInformation();
19
- const isNativeBackendEnabled = useNativeRiScBackendFeatureFlag();
20
14
  const backendUrl = configApi.getString("backend.baseUrl");
21
- const { uriToFetchInitRiScTemplate: uriToFetchInitRiScTemplateNative } = buildNativeBackendUrls({
22
- baseUrl: `${backendUrl}/api/risk-scorecard`,
23
- owner: repoInformation.owner,
24
- repo: repoInformation.name,
25
- version: latestSupportedVersion
26
- });
27
- function uriToFetchInitRiScTemplateProxy(id, ref) {
15
+ function uriToFetchInitRiScTemplate(id, ref) {
28
16
  const base = `${backendUrl}${URLS.backend.fetchInitRiScTemplate.replace(":id", id)}`;
29
17
  return ref ? `${base}?ref=${encodeURIComponent(ref)}` : base;
30
18
  }
31
- const uriToFetchInitRiScTemplate = isNativeBackendEnabled ? uriToFetchInitRiScTemplateNative : uriToFetchInitRiScTemplateProxy;
32
19
  return useQuery({
33
20
  queryKey: [
34
21
  PREDEFINED_SCENARIOS_QUERY_KEY,
35
- isNativeBackendEnabled ? "native" : "proxy",
36
22
  isTestPredefinedScenariosEnabled ? "test" : "main"
37
23
  ],
38
24
  retry: (count, error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"usePredefinedScenarios.esm.js","sources":["../../src/hooks/usePredefinedScenarios.ts"],"sourcesContent":["import {\n configApiRef,\n fetchApiRef,\n githubAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport { useQuery } from '@tanstack/react-query';\nimport { buildNativeBackendUrls } from '../urls/backend.ts';\nimport { URLS } from '../urls/index.ts';\nimport { latestSupportedVersion } from '../utils/constants.ts';\nimport { ScenarioDTO } from '../utils/DTOs.ts';\nimport { useNativeRiScBackendFeatureFlag } from '../utils/featureFlags.ts';\nimport { useGithubRepositoryInformation } from '../utils/hooks.ts';\n\nconst PREDEFINED_SCENARIOS_TEMPLATE_ID = 'web-app-api';\nconst PREDEFINED_SCENARIOS_SOURCE_TEST_REF = 'add-scenarios';\n\nconst PREDEFINED_SCENARIO_IDS = ['xK9mP', 'mF6xQ'];\n\nconst PREDEFINED_SCENARIOS_QUERY_KEY = ['predefined-scenarios'] as const;\n\nexport function usePredefinedScenarios(\n isTestPredefinedScenariosEnabled: boolean,\n) {\n const configApi = useApi(configApiRef);\n const identityApi = useApi(identityApiRef);\n const githubApi = useApi(githubAuthApiRef);\n const { fetch } = useApi(fetchApiRef);\n const repoInformation = useGithubRepositoryInformation();\n const isNativeBackendEnabled = useNativeRiScBackendFeatureFlag();\n\n const backendUrl = configApi.getString('backend.baseUrl');\n\n const { uriToFetchInitRiScTemplate: uriToFetchInitRiScTemplateNative } =\n buildNativeBackendUrls({\n baseUrl: `${backendUrl}/api/risk-scorecard`,\n owner: repoInformation.owner,\n repo: repoInformation.name,\n version: latestSupportedVersion,\n });\n\n function uriToFetchInitRiScTemplateProxy(id: string, ref?: string) {\n const base = `${backendUrl}${URLS.backend.fetchInitRiScTemplate.replace(':id', id)}`;\n return ref ? `${base}?ref=${encodeURIComponent(ref)}` : base;\n }\n\n const uriToFetchInitRiScTemplate = isNativeBackendEnabled\n ? uriToFetchInitRiScTemplateNative\n : uriToFetchInitRiScTemplateProxy;\n\n return useQuery({\n queryKey: [\n PREDEFINED_SCENARIOS_QUERY_KEY,\n isNativeBackendEnabled ? 'native' : 'proxy',\n isTestPredefinedScenariosEnabled ? 'test' : 'main',\n ],\n retry: (count, error) => {\n if (\n error.message === 'Unexpected status 401' ||\n error.message === 'Unexpected status 403' ||\n error.message === 'Unexpected status 404' ||\n error.message === 'Unexpected status 429'\n ) {\n return false;\n }\n return count < 2;\n },\n queryFn: async ({ signal }): Promise<ScenarioDTO[]> => {\n const [identity, githubToken] = await Promise.all([\n identityApi.getCredentials(),\n githubApi.getAccessToken(['repo']),\n ]);\n\n const response = await fetch(\n uriToFetchInitRiScTemplate(\n PREDEFINED_SCENARIOS_TEMPLATE_ID,\n isTestPredefinedScenariosEnabled\n ? PREDEFINED_SCENARIOS_SOURCE_TEST_REF\n : undefined,\n ),\n {\n signal,\n headers: {\n Authorization: `Bearer ${identity.token}`,\n 'GitHub-Access-Token': githubToken,\n },\n },\n );\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status}`);\n }\n const data: unknown = await response.json();\n const scenarios = (data as { scenarios?: ScenarioDTO[] })?.scenarios;\n if (!Array.isArray(scenarios)) {\n throw new Error('Source file has no scenarios array');\n }\n\n return scenarios.filter(dto =>\n PREDEFINED_SCENARIO_IDS.includes(dto.scenario.ID),\n );\n },\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePredefinedScenarios.esm.js","sources":["../../src/hooks/usePredefinedScenarios.ts"],"sourcesContent":["import {\n configApiRef,\n fetchApiRef,\n githubAuthApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-plugin-api';\nimport { useQuery } from '@tanstack/react-query';\nimport { URLS } from '../urls/index.ts';\nimport { ScenarioDTO } from '../utils/DTOs.ts';\n\nconst PREDEFINED_SCENARIOS_TEMPLATE_ID = 'web-app-api';\nconst PREDEFINED_SCENARIOS_SOURCE_TEST_REF = 'add-scenarios';\n\nconst PREDEFINED_SCENARIO_IDS = ['xK9mP', 'mF6xQ'];\n\nconst PREDEFINED_SCENARIOS_QUERY_KEY = ['predefined-scenarios'] as const;\n\nexport function usePredefinedScenarios(\n isTestPredefinedScenariosEnabled: boolean,\n) {\n const configApi = useApi(configApiRef);\n const identityApi = useApi(identityApiRef);\n const githubApi = useApi(githubAuthApiRef);\n const { fetch } = useApi(fetchApiRef);\n\n const backendUrl = configApi.getString('backend.baseUrl');\n\n function uriToFetchInitRiScTemplate(id: string, ref?: string) {\n const base = `${backendUrl}${URLS.backend.fetchInitRiScTemplate.replace(':id', id)}`;\n return ref ? `${base}?ref=${encodeURIComponent(ref)}` : base;\n }\n\n return useQuery({\n queryKey: [\n PREDEFINED_SCENARIOS_QUERY_KEY,\n isTestPredefinedScenariosEnabled ? 'test' : 'main',\n ],\n retry: (count, error) => {\n if (\n error.message === 'Unexpected status 401' ||\n error.message === 'Unexpected status 403' ||\n error.message === 'Unexpected status 404' ||\n error.message === 'Unexpected status 429'\n ) {\n return false;\n }\n return count < 2;\n },\n queryFn: async ({ signal }): Promise<ScenarioDTO[]> => {\n const [identity, githubToken] = await Promise.all([\n identityApi.getCredentials(),\n githubApi.getAccessToken(['repo']),\n ]);\n\n const response = await fetch(\n uriToFetchInitRiScTemplate(\n PREDEFINED_SCENARIOS_TEMPLATE_ID,\n isTestPredefinedScenariosEnabled\n ? PREDEFINED_SCENARIOS_SOURCE_TEST_REF\n : undefined,\n ),\n {\n signal,\n headers: {\n Authorization: `Bearer ${identity.token}`,\n 'GitHub-Access-Token': githubToken,\n },\n },\n );\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status}`);\n }\n const data: unknown = await response.json();\n const scenarios = (data as { scenarios?: ScenarioDTO[] })?.scenarios;\n if (!Array.isArray(scenarios)) {\n throw new Error('Source file has no scenarios array');\n }\n\n return scenarios.filter(dto =>\n PREDEFINED_SCENARIO_IDS.includes(dto.scenario.ID),\n );\n },\n });\n}\n"],"names":[],"mappings":";;;;AAWA,MAAM,gCAAA,GAAmC,aAAA;AACzC,MAAM,oCAAA,GAAuC,eAAA;AAE7C,MAAM,uBAAA,GAA0B,CAAC,OAAA,EAAS,OAAO,CAAA;AAEjD,MAAM,8BAAA,GAAiC,CAAC,sBAAsB,CAAA;AAEvD,SAAS,uBACd,gCAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,OAAO,gBAAgB,CAAA;AACzC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAA,CAAO,WAAW,CAAA;AAEpC,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,SAAA,CAAU,iBAAiB,CAAA;AAExD,EAAA,SAAS,0BAAA,CAA2B,IAAY,GAAA,EAAc;AAC5D,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,UAAU,CAAA,EAAG,IAAA,CAAK,QAAQ,qBAAA,CAAsB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA;AAClF,IAAA,OAAO,MAAM,CAAA,EAAG,IAAI,QAAQ,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA,GAAK,IAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU;AAAA,MACR,8BAAA;AAAA,MACA,mCAAmC,MAAA,GAAS;AAAA,KAC9C;AAAA,IACA,KAAA,EAAO,CAAC,KAAA,EAAO,KAAA,KAAU;AACvB,MAAA,IACE,KAAA,CAAM,OAAA,KAAY,uBAAA,IAClB,KAAA,CAAM,OAAA,KAAY,uBAAA,IAClB,KAAA,CAAM,OAAA,KAAY,uBAAA,IAClB,KAAA,CAAM,OAAA,KAAY,uBAAA,EAClB;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA,GAAQ,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAA8B;AACrD,MAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChD,YAAY,cAAA,EAAe;AAAA,QAC3B,SAAA,CAAU,cAAA,CAAe,CAAC,MAAM,CAAC;AAAA,OAClC,CAAA;AAED,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,0BAAA;AAAA,UACE,gCAAA;AAAA,UACA,mCACI,oCAAA,GACA;AAAA,SACN;AAAA,QACA;AAAA,UACE,MAAA;AAAA,UACA,OAAA,EAAS;AAAA,YACP,aAAA,EAAe,CAAA,OAAA,EAAU,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,YACvC,qBAAA,EAAuB;AAAA;AACzB;AACF,OACF;AACA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MACxD;AACA,MAAA,MAAM,IAAA,GAAgB,MAAM,QAAA,CAAS,IAAA,EAAK;AAC1C,MAAA,MAAM,YAAa,IAAA,EAAwC,SAAA;AAC3D,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7B,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,MACtD;AAEA,MAAA,OAAO,SAAA,CAAU,MAAA;AAAA,QAAO,CAAA,GAAA,KACtB,uBAAA,CAAwB,QAAA,CAAS,GAAA,CAAI,SAAS,EAAE;AAAA,OAClD;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"}
@@ -19,25 +19,6 @@ const BACKEND_URLS = {
19
19
  fetchDefaultRiScTypeDescriptors: "/api/proxy/risc-proxy/api/initrisc",
20
20
  fetchInitRiScTemplate: "/api/proxy/risc-proxy/api/initrisc/:id"
21
21
  };
22
- function buildNativeBackendUrls({
23
- baseUrl,
24
- owner,
25
- repo,
26
- version
27
- }) {
28
- const riScUri = `${baseUrl}/risc/${owner}/${repo}`;
29
- return {
30
- riScUri,
31
- uriToFetchAllRiScs: `${riScUri}/${version}/all`,
32
- uriToFetchDifference: (id) => `${riScUri}/${id}/difference`,
33
- uriToFetchRiSc: (id) => `${riScUri}/${id}`,
34
- uriToDeleteRiSc: (id) => `${riScUri}/${id}`,
35
- uriToPublishRiSc: (id) => `${riScUri}/publish/${id}`,
36
- uriToFetchGcpCryptoKeys: `${baseUrl}/google/gcpCryptoKeys`,
37
- uriToFetchDefaultRiScDescriptors: `${baseUrl}/initrisc`,
38
- uriToFetchInitRiScTemplate: (id, ref) => `${baseUrl}/initrisc/${id}${ref ? `?ref=${encodeURIComponent(ref)}` : ""}`
39
- };
40
- }
41
22
 
42
- export { BACKEND_URLS, buildNativeBackendUrls };
23
+ export { BACKEND_URLS };
43
24
  //# sourceMappingURL=backend.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backend.esm.js","sources":["../../src/urls/backend.ts"],"sourcesContent":["// prettier-ignore\n\n// (1) Requires a method to inject tokens. Not yet implemented.\n// (2) Temporary primitive url until method (1) is implemented.\n\nexport const BACKEND_URLS = {\n\tgoogle_gcpCryptoKeys: '/api/proxy/risc-proxy/api/google/gcpCryptoKeys',\n\triScUri: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName', // (1)\n\triScUri_temp: '/api/proxy/risc-proxy/api/risc', // (2)\n\topen_pr: '/api/proxy/risc-proxy/api/sops/:repoOwner/:repoName/openPullRequest/:branch', // (1)\n\tfetchAllRiScs: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:version/all', // (1)\n\tfetchDifference: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id/difference', // (1)\n\tfetchRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n deleteRiSc: 'api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n\tpublishRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/publish/:id', // (1)\n fetchDefaultRiScTypeDescriptors: '/api/proxy/risc-proxy/api/initrisc',\n fetchInitRiScTemplate: '/api/proxy/risc-proxy/api/initrisc/:id',\n};\n\nexport type RiScBackendUrls = {\n riScUri: string;\n uriToFetchAllRiScs: string;\n uriToFetchDifference: (id: string) => string;\n uriToFetchRiSc: (id: string) => string;\n uriToDeleteRiSc: (id: string) => string;\n uriToPublishRiSc: (id: string) => string;\n uriToFetchGcpCryptoKeys: string;\n uriToFetchDefaultRiScDescriptors: string;\n uriToFetchInitRiScTemplate: (id: string, ref?: string) => string;\n};\n\ntype BuildRiScBackendUrlsOptions = {\n baseUrl: string;\n owner: string;\n repo: string;\n version: string;\n};\n\n/** Native mode routes directly to the ros backend plugin. */\nexport function buildNativeBackendUrls({\n baseUrl,\n owner,\n repo,\n version,\n}: BuildRiScBackendUrlsOptions): RiScBackendUrls {\n const riScUri = `${baseUrl}/risc/${owner}/${repo}`;\n\n return {\n riScUri,\n uriToFetchAllRiScs: `${riScUri}/${version}/all`,\n uriToFetchDifference: (id: string) => `${riScUri}/${id}/difference`,\n uriToFetchRiSc: (id: string) => `${riScUri}/${id}`,\n uriToDeleteRiSc: (id: string) => `${riScUri}/${id}`,\n uriToPublishRiSc: (id: string) => `${riScUri}/publish/${id}`,\n uriToFetchGcpCryptoKeys: `${baseUrl}/google/gcpCryptoKeys`,\n uriToFetchDefaultRiScDescriptors: `${baseUrl}/initrisc`,\n uriToFetchInitRiScTemplate: (id: string, ref?: string) =>\n `${baseUrl}/initrisc/${id}${ref ? `?ref=${encodeURIComponent(ref)}` : ''}`,\n };\n}\n"],"names":[],"mappings":"AAKO,MAAM,YAAA,GAAe;AAAA,EAC3B,oBAAA,EAAsB,gDAAA;AAAA,EACtB,OAAA,EAAS,qDAAA;AAAA;AAAA,EACT,YAAA,EAAc,gCAAA;AAAA;AAAA,EACd,OAAA,EAAS,6EAAA;AAAA;AAAA,EACT,aAAA,EAAe,kEAAA;AAAA;AAAA,EACf,eAAA,EAAiB,oEAAA;AAAA;AAAA,EACjB,SAAA,EAAW,yDAAA;AAAA;AAAA,EACV,UAAA,EAAY,wDAAA;AAAA;AAAA,EACb,WAAA,EAAa,iEAAA;AAAA;AAAA,EACZ,+BAAA,EAAiC,oCAAA;AAAA,EACjC,qBAAA,EAAuB;AACzB;AAsBO,SAAS,sBAAA,CAAuB;AAAA,EACrC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAiD;AAC/C,EAAA,MAAM,UAAU,CAAA,EAAG,OAAO,CAAA,MAAA,EAAS,KAAK,IAAI,IAAI,CAAA,CAAA;AAEhD,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,kBAAA,EAAoB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,IAAA,CAAA;AAAA,IACzC,sBAAsB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,IAAI,EAAE,CAAA,WAAA,CAAA;AAAA,IACtD,gBAAgB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,IAAI,EAAE,CAAA,CAAA;AAAA,IAChD,iBAAiB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,IAAI,EAAE,CAAA,CAAA;AAAA,IACjD,kBAAkB,CAAC,EAAA,KAAe,CAAA,EAAG,OAAO,YAAY,EAAE,CAAA,CAAA;AAAA,IAC1D,uBAAA,EAAyB,GAAG,OAAO,CAAA,qBAAA,CAAA;AAAA,IACnC,gCAAA,EAAkC,GAAG,OAAO,CAAA,SAAA,CAAA;AAAA,IAC5C,0BAAA,EAA4B,CAAC,EAAA,EAAY,GAAA,KACvC,GAAG,OAAO,CAAA,UAAA,EAAa,EAAE,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,kBAAA,CAAmB,GAAG,CAAC,KAAK,EAAE,CAAA;AAAA,GAC5E;AACF;;;;"}
1
+ {"version":3,"file":"backend.esm.js","sources":["../../src/urls/backend.ts"],"sourcesContent":["// prettier-ignore\n\n// (1) Requires a method to inject tokens. Not yet implemented.\n// (2) Temporary primitive url until method (1) is implemented.\n\nexport const BACKEND_URLS = {\n\tgoogle_gcpCryptoKeys: '/api/proxy/risc-proxy/api/google/gcpCryptoKeys',\n\triScUri: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName', // (1)\n\triScUri_temp: '/api/proxy/risc-proxy/api/risc', // (2)\n\topen_pr: '/api/proxy/risc-proxy/api/sops/:repoOwner/:repoName/openPullRequest/:branch', // (1)\n\tfetchAllRiScs: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:version/all', // (1)\n\tfetchDifference: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id/difference', // (1)\n\tfetchRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n deleteRiSc: 'api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/:id', // (1)\n\tpublishRiSc: '/api/proxy/risc-proxy/api/risc/:repoOwner/:repoName/publish/:id', // (1)\n fetchDefaultRiScTypeDescriptors: '/api/proxy/risc-proxy/api/initrisc',\n fetchInitRiScTemplate: '/api/proxy/risc-proxy/api/initrisc/:id',\n};\n"],"names":[],"mappings":"AAKO,MAAM,YAAA,GAAe;AAAA,EAC3B,oBAAA,EAAsB,gDAAA;AAAA,EACtB,OAAA,EAAS,qDAAA;AAAA;AAAA,EACT,YAAA,EAAc,gCAAA;AAAA;AAAA,EACd,OAAA,EAAS,6EAAA;AAAA;AAAA,EACT,aAAA,EAAe,kEAAA;AAAA;AAAA,EACf,eAAA,EAAiB,oEAAA;AAAA;AAAA,EACjB,SAAA,EAAW,yDAAA;AAAA;AAAA,EACV,UAAA,EAAY,wDAAA;AAAA;AAAA,EACb,WAAA,EAAa,iEAAA;AAAA;AAAA,EACZ,+BAAA,EAAiC,oCAAA;AAAA,EACjC,qBAAA,EAAuB;AACzB;;;;"}
@@ -1,35 +1,35 @@
1
1
  import { useApi, featureFlagsApiRef } from '@backstage/core-plugin-api';
2
2
 
3
3
  const systemRiScsFeatureFlag = "system-riscs";
4
- const nativeRiScBackendFeatureFlag = "native-risc-backend";
5
4
  const predefinedScenariosFeatureFlag = "test-predefined-scenarios";
5
+ const showCurrentMatrixFeatureFlag = "show-current-matrix";
6
6
  const riScFeatureFlags = [
7
7
  // {
8
8
  // name: systemRiScsFeatureFlag,
9
9
  // description:
10
10
  // 'Testing av system-RoS for Team SKVIS. Bruk på eget ansvar. UNNGÅ lagring av System-RoSer i åpne repoer.',
11
11
  // },
12
- // {
13
- // name: nativeRiScBackendFeatureFlag,
14
- // description: 'Testing av ny backend for RoS skrevet i typescript.',
15
- // },
16
12
  {
17
13
  name: predefinedScenariosFeatureFlag,
18
14
  description: "Testing av forh\xE5ndsdefinerte scenarioer fra initial-riscs-collection repoet. Skru p\xE5 for \xE5 hente fra PR-branch, skru av for \xE5 hente fra main."
15
+ },
16
+ {
17
+ name: showCurrentMatrixFeatureFlag,
18
+ description: "Viser risikomatrisen for N\xE5risiko fanen."
19
19
  }
20
20
  ];
21
21
  function useSystemRiScsFeatureFlag() {
22
22
  const featureFlagsApi = useApi(featureFlagsApiRef);
23
23
  return featureFlagsApi.isActive(systemRiScsFeatureFlag);
24
24
  }
25
- function useNativeRiScBackendFeatureFlag() {
26
- const featureFlagsApi = useApi(featureFlagsApiRef);
27
- return featureFlagsApi.isActive(nativeRiScBackendFeatureFlag);
28
- }
29
25
  function usePredefinedScenariosFeatureFlag() {
30
26
  const featureFlagsApi = useApi(featureFlagsApiRef);
31
27
  return featureFlagsApi.isActive(predefinedScenariosFeatureFlag);
32
28
  }
29
+ function useShowCurrentMatrixFeatureFlag() {
30
+ const featureFlagsApi = useApi(featureFlagsApiRef);
31
+ return featureFlagsApi.isActive(showCurrentMatrixFeatureFlag);
32
+ }
33
33
 
34
- export { nativeRiScBackendFeatureFlag, predefinedScenariosFeatureFlag, riScFeatureFlags, systemRiScsFeatureFlag, useNativeRiScBackendFeatureFlag, usePredefinedScenariosFeatureFlag, useSystemRiScsFeatureFlag };
34
+ export { predefinedScenariosFeatureFlag, riScFeatureFlags, showCurrentMatrixFeatureFlag, systemRiScsFeatureFlag, usePredefinedScenariosFeatureFlag, useShowCurrentMatrixFeatureFlag, useSystemRiScsFeatureFlag };
35
35
  //# sourceMappingURL=featureFlags.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureFlags.esm.js","sources":["../../src/utils/featureFlags.ts"],"sourcesContent":["import {\n featureFlagsApiRef,\n type PluginFeatureFlagConfig,\n useApi,\n} from '@backstage/core-plugin-api';\n\nexport const systemRiScsFeatureFlag = 'system-riscs';\nexport const nativeRiScBackendFeatureFlag = 'native-risc-backend';\nexport const predefinedScenariosFeatureFlag = 'test-predefined-scenarios';\n\nexport const riScFeatureFlags: PluginFeatureFlagConfig[] = [\n // {\n // name: systemRiScsFeatureFlag,\n // description:\n // 'Testing av system-RoS for Team SKVIS. Bruk på eget ansvar. UNNGÅ lagring av System-RoSer i åpne repoer.',\n // },\n // {\n // name: nativeRiScBackendFeatureFlag,\n // description: 'Testing av ny backend for RoS skrevet i typescript.',\n // },\n {\n name: predefinedScenariosFeatureFlag,\n description:\n 'Testing av forhåndsdefinerte scenarioer fra initial-riscs-collection repoet. Skru på for å hente fra PR-branch, skru av for å hente fra main.',\n },\n];\n\nexport function useSystemRiScsFeatureFlag(): boolean {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n return featureFlagsApi.isActive(systemRiScsFeatureFlag);\n}\n\nexport function useNativeRiScBackendFeatureFlag(): boolean {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n return featureFlagsApi.isActive(nativeRiScBackendFeatureFlag);\n}\n\nexport function usePredefinedScenariosFeatureFlag(): boolean {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n return featureFlagsApi.isActive(predefinedScenariosFeatureFlag);\n}\n"],"names":[],"mappings":";;AAMO,MAAM,sBAAA,GAAyB;AAC/B,MAAM,4BAAA,GAA+B;AACrC,MAAM,8BAAA,GAAiC;AAEvC,MAAM,gBAAA,GAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUzD;AAAA,IACE,IAAA,EAAM,8BAAA;AAAA,IACN,WAAA,EACE;AAAA;AAEN;AAEO,SAAS,yBAAA,GAAqC;AACnD,EAAA,MAAM,eAAA,GAAkB,OAAO,kBAAkB,CAAA;AACjD,EAAA,OAAO,eAAA,CAAgB,SAAS,sBAAsB,CAAA;AACxD;AAEO,SAAS,+BAAA,GAA2C;AACzD,EAAA,MAAM,eAAA,GAAkB,OAAO,kBAAkB,CAAA;AACjD,EAAA,OAAO,eAAA,CAAgB,SAAS,4BAA4B,CAAA;AAC9D;AAEO,SAAS,iCAAA,GAA6C;AAC3D,EAAA,MAAM,eAAA,GAAkB,OAAO,kBAAkB,CAAA;AACjD,EAAA,OAAO,eAAA,CAAgB,SAAS,8BAA8B,CAAA;AAChE;;;;"}
1
+ {"version":3,"file":"featureFlags.esm.js","sources":["../../src/utils/featureFlags.ts"],"sourcesContent":["import {\n featureFlagsApiRef,\n type PluginFeatureFlagConfig,\n useApi,\n} from '@backstage/core-plugin-api';\n\nexport const systemRiScsFeatureFlag = 'system-riscs';\nexport const predefinedScenariosFeatureFlag = 'test-predefined-scenarios';\nexport const showCurrentMatrixFeatureFlag = 'show-current-matrix';\n\nexport const riScFeatureFlags: PluginFeatureFlagConfig[] = [\n // {\n // name: systemRiScsFeatureFlag,\n // description:\n // 'Testing av system-RoS for Team SKVIS. Bruk på eget ansvar. UNNGÅ lagring av System-RoSer i åpne repoer.',\n // },\n {\n name: predefinedScenariosFeatureFlag,\n description:\n 'Testing av forhåndsdefinerte scenarioer fra initial-riscs-collection repoet. Skru på for å hente fra PR-branch, skru av for å hente fra main.',\n },\n {\n name: showCurrentMatrixFeatureFlag,\n description: 'Viser risikomatrisen for Nårisiko fanen.',\n },\n];\n\nexport function useSystemRiScsFeatureFlag(): boolean {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n return featureFlagsApi.isActive(systemRiScsFeatureFlag);\n}\n\nexport function usePredefinedScenariosFeatureFlag(): boolean {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n return featureFlagsApi.isActive(predefinedScenariosFeatureFlag);\n}\n\nexport function useShowCurrentMatrixFeatureFlag(): boolean {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n return featureFlagsApi.isActive(showCurrentMatrixFeatureFlag);\n}\n"],"names":[],"mappings":";;AAMO,MAAM,sBAAA,GAAyB;AAC/B,MAAM,8BAAA,GAAiC;AACvC,MAAM,4BAAA,GAA+B;AAErC,MAAM,gBAAA,GAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD;AAAA,IACE,IAAA,EAAM,8BAAA;AAAA,IACN,WAAA,EACE;AAAA,GACJ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,4BAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAEjB;AAEO,SAAS,yBAAA,GAAqC;AACnD,EAAA,MAAM,eAAA,GAAkB,OAAO,kBAAkB,CAAA;AACjD,EAAA,OAAO,eAAA,CAAgB,SAAS,sBAAsB,CAAA;AACxD;AAEO,SAAS,iCAAA,GAA6C;AAC3D,EAAA,MAAM,eAAA,GAAkB,OAAO,kBAAkB,CAAA;AACjD,EAAA,OAAO,eAAA,CAAgB,SAAS,8BAA8B,CAAA;AAChE;AAEO,SAAS,+BAAA,GAA2C;AACzD,EAAA,MAAM,eAAA,GAAkB,OAAO,kBAAkB,CAAA;AACjD,EAAA,OAAO,eAAA,CAAgB,SAAS,4BAA4B,CAAA;AAC9D;;;;"}
@@ -2,12 +2,11 @@ import { useApi, identityApiRef, fetchApiRef, configApiRef, googleAuthApiRef, gi
2
2
  import { useEntity } from '@backstage/plugin-catalog-react';
3
3
  import { useState, useEffect, useRef, useCallback } from 'react';
4
4
  import { URLS } from '../urls/index.esm.js';
5
- import { buildNativeBackendUrls } from '../urls/backend.esm.js';
6
5
  import { riScToDTOString, profileInfoToDTOString } from './DTOs.esm.js';
7
6
  import { latestSupportedVersion } from './constants.esm.js';
8
7
  import { ProcessingStatus } from './types.esm.js';
9
8
  import { stringifyEntityRef } from '@backstage/catalog-model';
10
- import { useSystemRiScsFeatureFlag, useNativeRiScBackendFeatureFlag } from './featureFlags.esm.js';
9
+ import { useSystemRiScsFeatureFlag } from './featureFlags.esm.js';
11
10
 
12
11
  function useGithubRepositoryInformation() {
13
12
  const [, org, repo] = useEntity().entity.metadata.annotations?.["backstage.io/view-url"].match(
@@ -56,7 +55,6 @@ function useAuthenticatedFetch() {
56
55
  const identityApi = useApi(identityApiRef);
57
56
  const { fetch } = useApi(fetchApiRef);
58
57
  const backendUrl = configApi.getString("backend.baseUrl");
59
- const isNativeBackendEnabled = useNativeRiScBackendFeatureFlag();
60
58
  const riScUri = `${backendUrl}${URLS.backend.riScUri_temp}/${repoInformation.owner}/${repoInformation.name}`;
61
59
  const uriToFetchAllRiScs = `${riScUri}/${latestSupportedVersion}/all`;
62
60
  const uriToFetchDefaultRiScDescriptors = `${backendUrl}${URLS.backend.fetchDefaultRiScTypeDescriptors}`;
@@ -72,12 +70,6 @@ function useAuthenticatedFetch() {
72
70
  function uriToPublishRiSc(id) {
73
71
  return `${riScUri}/publish/${id}`;
74
72
  }
75
- const nativeBackendUrls = buildNativeBackendUrls({
76
- baseUrl: `${backendUrl}/api/risk-scorecard`,
77
- owner: repoInformation.owner,
78
- repo: repoInformation.name,
79
- version: latestSupportedVersion
80
- });
81
73
  function isDevelopment() {
82
74
  return configApi.getString("auth.environment") === "development";
83
75
  }
@@ -165,7 +157,7 @@ function useAuthenticatedFetch() {
165
157
  function fetchDifference(selectedRiSc, onSuccess, onError) {
166
158
  return identityApi.getProfileInfo().then((profile) => {
167
159
  fullyAuthenticatedFetch(
168
- isNativeBackendEnabled ? nativeBackendUrls.uriToFetchDifference(selectedRiSc.id) : uriToFetchDifference(selectedRiSc.id),
160
+ uriToFetchDifference(selectedRiSc.id),
169
161
  "POST",
170
162
  onSuccess,
171
163
  (_, rejectedLogin) => {
@@ -183,7 +175,7 @@ function useAuthenticatedFetch() {
183
175
  function fetchRiScs(onSuccess, onError) {
184
176
  if (isDevelopment()) {
185
177
  fullyAuthenticatedFetch(
186
- isNativeBackendEnabled ? nativeBackendUrls.uriToFetchAllRiScs : uriToFetchAllRiScs,
178
+ uriToFetchAllRiScs,
187
179
  "GET",
188
180
  onSuccess,
189
181
  (error, rejectedLogin) => {
@@ -192,7 +184,7 @@ function useAuthenticatedFetch() {
192
184
  );
193
185
  } else {
194
186
  googleAuthenticatedFetch(
195
- isNativeBackendEnabled ? nativeBackendUrls.uriToFetchAllRiScs : uriToFetchAllRiScs,
187
+ uriToFetchAllRiScs,
196
188
  "GET",
197
189
  onSuccess,
198
190
  (error, rejectedLogin) => {
@@ -204,7 +196,7 @@ function useAuthenticatedFetch() {
204
196
  function postFeedback(feedback) {
205
197
  return new Promise((resolve, reject) => {
206
198
  fullyAuthenticatedFetch(
207
- isNativeBackendEnabled ? `${nativeBackendUrls.riScUri}/feedback` : `${riScUri}/feedback`,
199
+ `${riScUri}/feedback`,
208
200
  "POST",
209
201
  () => resolve(),
210
202
  (error) => reject(error),
@@ -214,7 +206,7 @@ function useAuthenticatedFetch() {
214
206
  }
215
207
  function fetchGcpCryptoKeys(onSuccess, onError) {
216
208
  googleAuthenticatedFetch(
217
- isNativeBackendEnabled ? nativeBackendUrls.uriToFetchGcpCryptoKeys : `${backendUrl}/api/proxy/risc-proxy/api/google/gcpCryptoKeys`,
209
+ `${backendUrl}/api/proxy/risc-proxy/api/google/gcpCryptoKeys`,
218
210
  // URL
219
211
  "GET",
220
212
  (res) => onSuccess(res),
@@ -226,7 +218,7 @@ function useAuthenticatedFetch() {
226
218
  function publishRiScs(riScId, onSuccess, onError) {
227
219
  return identityApi.getProfileInfo().then(
228
220
  (profile) => fullyAuthenticatedFetch(
229
- isNativeBackendEnabled ? nativeBackendUrls.uriToPublishRiSc(riScId) : uriToPublishRiSc(riScId),
221
+ uriToPublishRiSc(riScId),
230
222
  "POST",
231
223
  (res) => {
232
224
  if (onSuccess) onSuccess(res);
@@ -241,7 +233,7 @@ function useAuthenticatedFetch() {
241
233
  function postRiScs(riSc, generateDefault, sopsConfig, defaultRiScId, onSuccess, onError) {
242
234
  return identityApi.getProfileInfo().then(
243
235
  (profile) => fullyAuthenticatedFetch(
244
- isNativeBackendEnabled ? `${nativeBackendUrls.riScUri}?generateDefault=${generateDefault}` : `${riScUri}?generateDefault=${generateDefault}`,
236
+ `${riScUri}?generateDefault=${generateDefault}`,
245
237
  "POST",
246
238
  (res) => {
247
239
  if (onSuccess) onSuccess(res);
@@ -256,7 +248,7 @@ function useAuthenticatedFetch() {
256
248
  function putRiScs(riSc, onSuccess, onError) {
257
249
  return identityApi.getProfileInfo().then(
258
250
  (profile) => fullyAuthenticatedFetch(
259
- isNativeBackendEnabled ? nativeBackendUrls.uriToFetchRiSc(riSc.id) : uriToFetchRiSc(riSc.id),
251
+ uriToFetchRiSc(riSc.id),
260
252
  "PUT",
261
253
  (res) => {
262
254
  if (onSuccess) onSuccess(res);
@@ -275,7 +267,7 @@ function useAuthenticatedFetch() {
275
267
  }
276
268
  function deleteRiScs(riScId, onSuccess, onError) {
277
269
  fullyAuthenticatedFetch(
278
- isNativeBackendEnabled ? nativeBackendUrls.uriToDeleteRiSc(riScId) : uriToDeleteRiSc(riScId),
270
+ uriToDeleteRiSc(riScId),
279
271
  "DELETE",
280
272
  (res) => {
281
273
  if (onSuccess) onSuccess(res);
@@ -287,7 +279,7 @@ function useAuthenticatedFetch() {
287
279
  }
288
280
  function fetchDefaultRiScTypeDescriptors(onSuccess) {
289
281
  fullyAuthenticatedFetch(
290
- isNativeBackendEnabled ? nativeBackendUrls.uriToFetchDefaultRiScDescriptors : uriToFetchDefaultRiScDescriptors,
282
+ uriToFetchDefaultRiScDescriptors,
291
283
  "GET",
292
284
  (res) => onSuccess(res),
293
285
  () => {