@kartverket/backstage-plugin-risk-scorecard 6.1.10 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,8 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Routes, Route } from 'react-router-dom';
3
3
  import { CacheProvider } from '@emotion/react';
4
4
  import createCache from '@emotion/cache';
5
+ import { useMemo } from 'react';
6
+ import { createTheme, ThemeProvider } from '@mui/material/styles';
5
7
  import { RiScPlugin } from './components/riScPlugin/RiScPlugin.esm.js';
6
8
  import { ScenarioProvider } from './contexts/ScenarioContext.esm.js';
7
9
  import { riScRouteRef, scenarioRouteRef } from './routes.esm.js';
@@ -9,6 +11,7 @@ import { RiScProvider } from './contexts/RiScContext.esm.js';
9
11
  import 'remixicon/fonts/remixicon.css';
10
12
  import { DefaultRiScTypesProvider } from './contexts/DefaultRiScTypesContext.esm.js';
11
13
  import { BackstageContextProvider } from './contexts/BackstageContext.esm.js';
14
+ import { useBackstageThemeMode } from './hooks/useBackstageThemeMode.esm.js';
12
15
 
13
16
  const emotionInsertionPoint = document.createElement("meta");
14
17
  emotionInsertionPoint.setAttribute("name", "emotion-insertion-point");
@@ -17,8 +20,13 @@ const cache = createCache({
17
20
  key: "css",
18
21
  insertionPoint: emotionInsertionPoint
19
22
  });
23
+ function MuiThemeBridge({ children }) {
24
+ const mode = useBackstageThemeMode();
25
+ const theme = useMemo(() => createTheme({ palette: { mode } }), [mode]);
26
+ return /* @__PURE__ */ jsx(ThemeProvider, { theme, children });
27
+ }
20
28
  function ProvidedPlugin() {
21
- return /* @__PURE__ */ jsx(CacheProvider, { value: cache, children: /* @__PURE__ */ jsx(BackstageContextProvider, { children: /* @__PURE__ */ jsx(RiScProvider, { children: /* @__PURE__ */ jsx(DefaultRiScTypesProvider, { children: /* @__PURE__ */ jsx(ScenarioProvider, { children: /* @__PURE__ */ jsx(RiScPlugin, {}) }) }) }) }) });
29
+ return /* @__PURE__ */ jsx(CacheProvider, { value: cache, children: /* @__PURE__ */ jsx(MuiThemeBridge, { children: /* @__PURE__ */ jsx(BackstageContextProvider, { children: /* @__PURE__ */ jsx(RiScProvider, { children: /* @__PURE__ */ jsx(DefaultRiScTypesProvider, { children: /* @__PURE__ */ jsx(ScenarioProvider, { children: /* @__PURE__ */ jsx(RiScPlugin, {}) }) }) }) }) }) });
22
30
  }
23
31
  function PluginRoot() {
24
32
  return /* @__PURE__ */ jsxs(Routes, { children: [
@@ -1 +1 @@
1
- {"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\nimport 'remixicon/fonts/remixicon.css';\nimport { DefaultRiScTypesProvider } from './contexts/DefaultRiScTypesContext.tsx';\nimport { BackstageContextProvider } from './contexts/BackstageContext.tsx';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nfunction ProvidedPlugin() {\n return (\n <CacheProvider value={cache}>\n <BackstageContextProvider>\n <RiScProvider>\n <DefaultRiScTypesProvider>\n <ScenarioProvider>\n <RiScPlugin />\n </ScenarioProvider>\n </DefaultRiScTypesProvider>\n </RiScProvider>\n </BackstageContextProvider>\n </CacheProvider>\n );\n}\n\nexport function PluginRoot() {\n return (\n <Routes>\n <Route path=\"/\" element={<ProvidedPlugin />} />\n <Route path={riScRouteRef.path} element={<ProvidedPlugin />} />\n <Route path={scenarioRouteRef.path} element={<ProvidedPlugin />} />\n </Routes>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAWA,MAAM,qBAAA,GAAwB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC3D,qBAAA,CAAsB,YAAA,CAAa,QAAQ,yBAAyB,CAAA;AACpE,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,EAAG,WAAA,CAAY,qBAAqB,CAAA;AAEjE,MAAM,QAAQ,WAAA,CAAY;AAAA,EACxB,GAAA,EAAK,KAAA;AAAA,EACL,cAAA,EAAgB;AAClB,CAAC,CAAA;AAED,SAAS,cAAA,GAAiB;AACxB,EAAA,2BACG,aAAA,EAAA,EAAc,KAAA,EAAO,OACpB,QAAA,kBAAA,GAAA,CAAC,wBAAA,EAAA,EACC,8BAAC,YAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,wBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,oBACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,GACd,CAAA,EACF,CAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAM,IAAA,EAAK,GAAA,EAAI,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI,CAAA;AAAA,oBAC7C,GAAA,CAAC,SAAM,IAAA,EAAM,YAAA,CAAa,MAAM,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI,CAAA;AAAA,oBAC7D,GAAA,CAAC,SAAM,IAAA,EAAM,gBAAA,CAAiB,MAAM,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI;AAAA,GAAA,EACnE,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { useMemo } from 'react';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\nimport 'remixicon/fonts/remixicon.css';\nimport { DefaultRiScTypesProvider } from './contexts/DefaultRiScTypesContext.tsx';\nimport { BackstageContextProvider } from './contexts/BackstageContext.tsx';\nimport { useBackstageThemeMode } from './hooks/useBackstageThemeMode.ts';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nfunction MuiThemeBridge({ children }: { children: React.ReactNode }) {\n const mode = useBackstageThemeMode();\n const theme = useMemo(() => createTheme({ palette: { mode } }), [mode]);\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n\nfunction ProvidedPlugin() {\n return (\n <CacheProvider value={cache}>\n <MuiThemeBridge>\n <BackstageContextProvider>\n <RiScProvider>\n <DefaultRiScTypesProvider>\n <ScenarioProvider>\n <RiScPlugin />\n </ScenarioProvider>\n </DefaultRiScTypesProvider>\n </RiScProvider>\n </BackstageContextProvider>\n </MuiThemeBridge>\n </CacheProvider>\n );\n}\n\nexport function PluginRoot() {\n return (\n <Routes>\n <Route path=\"/\" element={<ProvidedPlugin />} />\n <Route path={riScRouteRef.path} element={<ProvidedPlugin />} />\n <Route path={scenarioRouteRef.path} element={<ProvidedPlugin />} />\n </Routes>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,qBAAA,GAAwB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC3D,qBAAA,CAAsB,YAAA,CAAa,QAAQ,yBAAyB,CAAA;AACpE,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,EAAG,WAAA,CAAY,qBAAqB,CAAA;AAEjE,MAAM,QAAQ,WAAA,CAAY;AAAA,EACxB,GAAA,EAAK,KAAA;AAAA,EACL,cAAA,EAAgB;AAClB,CAAC,CAAA;AAED,SAAS,cAAA,CAAe,EAAE,QAAA,EAAS,EAAkC;AACnE,EAAA,MAAM,OAAO,qBAAA,EAAsB;AACnC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAM,WAAA,CAAY,EAAE,OAAA,EAAS,EAAE,IAAA,EAAK,EAAG,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AACtE,EAAA,uBAAO,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAe,QAAA,EAAS,CAAA;AAChD;AAEA,SAAS,cAAA,GAAiB;AACxB,EAAA,uBACE,GAAA,CAAC,iBAAc,KAAA,EAAO,KAAA,EACpB,8BAAC,cAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,4BACC,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EACC,8BAAC,wBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,oBACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,GACd,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAM,IAAA,EAAK,GAAA,EAAI,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI,CAAA;AAAA,oBAC7C,GAAA,CAAC,SAAM,IAAA,EAAM,YAAA,CAAa,MAAM,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI,CAAA;AAAA,oBAC7D,GAAA,CAAC,SAAM,IAAA,EAAM,gBAAA,CAAiB,MAAM,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI;AAAA,GAAA,EACnE,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownInput.esm.js","sources":["../../../../src/components/common/MarkdownInput/MarkdownInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect, useRef } from 'react';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport MDEditor from '@uiw/react-md-editor';\nimport { TextFieldProps } from '@material-ui/core';\nimport classNames from 'classnames';\nimport { getActiveTheme } from '../../../utils/utilityfunctions';\nimport formStyles from '../formStyles.module.css';\nimport styles from './MarkdownInput.module.css';\n\ntype Props = TextFieldProps & {\n sublabel?: string;\n value?: string;\n onMarkdownChange?: (markdown: string) => void;\n minRows?: number;\n};\n\nexport const MarkdownInput = forwardRef<HTMLDivElement, Props>(\n (\n {\n label,\n sublabel,\n error,\n helperText,\n minRows,\n value,\n onMarkdownChange,\n disabled = false,\n },\n ref,\n ) => {\n const [markdownContent, setMarkdownContent] = useState<string | undefined>(\n value,\n );\n\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n setMarkdownContent(value);\n }, [value]);\n\n useEffect(() => {\n const root = wrapperRef.current;\n if (!root) return () => {};\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const active = document.activeElement as HTMLElement | null;\n if (!active || !root.contains(active)) return;\n e.preventDefault();\n e.stopPropagation();\n\n const focusable = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter(el => !el.hasAttribute('disabled'));\n\n const index = focusable.indexOf(active);\n const direction = e.shiftKey ? -1 : 1;\n const nextIndex = index + direction;\n const next =\n focusable[nextIndex] ??\n (direction === 1 ? focusable[0] : focusable[focusable.length - 1]);\n next?.focus();\n };\n\n root.addEventListener('keydown', handleKeyDown, true);\n\n return () => {\n root.removeEventListener('keydown', handleKeyDown, true);\n };\n }, [wrapperRef]);\n\n const handleMarkdownChange = (newValue: string | undefined) => {\n setMarkdownContent(newValue || '');\n onMarkdownChange?.(newValue || '');\n };\n\n const onFocusCapture = (event: React.FocusEvent<HTMLDivElement>) => {\n if (event.relatedTarget) {\n const root = event.currentTarget as HTMLDivElement;\n const target = root.querySelector(\n 'textarea, [contenteditable=\"true\"]',\n ) as HTMLElement | null;\n if (target) {\n setTimeout(() => target.focus());\n }\n }\n };\n const editorClassName = classNames(styles.MarkDownInput, {\n [styles['MarkDownInput--disabled']]: disabled,\n });\n\n return (\n <FormControl className={styles.MarkDownInputFormControl} error={error}>\n {label && (\n <FormLabel className={formStyles.formLabel}>{label}</FormLabel>\n )}\n {sublabel && (\n <FormHelperText className={formStyles.formHelperText}>\n {sublabel}\n </FormHelperText>\n )}\n <div\n ref={wrapperRef}\n onFocusCapture={onFocusCapture}\n data-color-mode={getActiveTheme()}\n className={styles.MarkDownInputWrapper}\n >\n <MDEditor\n ref={ref}\n value={markdownContent}\n onChange={handleMarkdownChange}\n preview=\"edit\"\n height={minRows ? minRows * 24 : 64}\n className={editorClassName}\n />\n </div>\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownInput.esm.js","sources":["../../../../src/components/common/MarkdownInput/MarkdownInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect, useRef } from 'react';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport MDEditor from '@uiw/react-md-editor';\nimport { TextFieldProps } from '@mui/material/TextField';\nimport classNames from 'classnames';\nimport { getActiveTheme } from '../../../utils/utilityfunctions';\nimport formStyles from '../formStyles.module.css';\nimport styles from './MarkdownInput.module.css';\n\ntype Props = TextFieldProps & {\n sublabel?: string;\n value?: string;\n onMarkdownChange?: (markdown: string) => void;\n minRows?: number;\n};\n\nexport const MarkdownInput = forwardRef<HTMLDivElement, Props>(\n (\n {\n label,\n sublabel,\n error,\n helperText,\n minRows,\n value,\n onMarkdownChange,\n disabled = false,\n },\n ref,\n ) => {\n const [markdownContent, setMarkdownContent] = useState<string | undefined>(\n value,\n );\n\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n setMarkdownContent(value);\n }, [value]);\n\n useEffect(() => {\n const root = wrapperRef.current;\n if (!root) return () => {};\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const active = document.activeElement as HTMLElement | null;\n if (!active || !root.contains(active)) return;\n e.preventDefault();\n e.stopPropagation();\n\n const focusable = Array.from(\n document.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter(el => !el.hasAttribute('disabled'));\n\n const index = focusable.indexOf(active);\n const direction = e.shiftKey ? -1 : 1;\n const nextIndex = index + direction;\n const next =\n focusable[nextIndex] ??\n (direction === 1 ? focusable[0] : focusable[focusable.length - 1]);\n next?.focus();\n };\n\n root.addEventListener('keydown', handleKeyDown, true);\n\n return () => {\n root.removeEventListener('keydown', handleKeyDown, true);\n };\n }, [wrapperRef]);\n\n const handleMarkdownChange = (newValue: string | undefined) => {\n setMarkdownContent(newValue || '');\n onMarkdownChange?.(newValue || '');\n };\n\n const onFocusCapture = (event: React.FocusEvent<HTMLDivElement>) => {\n if (event.relatedTarget) {\n const root = event.currentTarget as HTMLDivElement;\n const target = root.querySelector(\n 'textarea, [contenteditable=\"true\"]',\n ) as HTMLElement | null;\n if (target) {\n setTimeout(() => target.focus());\n }\n }\n };\n const editorClassName = classNames(styles.MarkDownInput, {\n [styles['MarkDownInput--disabled']]: disabled,\n });\n\n return (\n <FormControl className={styles.MarkDownInputFormControl} error={error}>\n {label && (\n <FormLabel className={formStyles.formLabel}>{label}</FormLabel>\n )}\n {sublabel && (\n <FormHelperText className={formStyles.formHelperText}>\n {sublabel}\n </FormHelperText>\n )}\n <div\n ref={wrapperRef}\n onFocusCapture={onFocusCapture}\n data-color-mode={getActiveTheme()}\n className={styles.MarkDownInputWrapper}\n >\n <MDEditor\n ref={ref}\n value={markdownContent}\n onChange={handleMarkdownChange}\n preview=\"edit\"\n height={minRows ? minRows * 24 : 64}\n className={editorClassName}\n />\n </div>\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\n"],"names":[],"mappings":"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"}
@@ -104,7 +104,7 @@ function RiScStatusComponent({
104
104
  setStatus(RiScStatusEnum.PUBLISHED);
105
105
  }
106
106
  }, [selectedRiSc.status, selectedRiSc.content.scenarios]);
107
- const migration = selectedRiSc.migrationStatus?.migrationChanges;
107
+ const migration = selectedRiSc.migrationStatus?.migrationChanges && selectedRiSc.status !== RiScStatus.DeletionDraft && selectedRiSc.status !== RiScStatus.DeletionSentForApproval;
108
108
  const lastPublishedDateTime = selectedRiSc.lastPublished?.dateTime;
109
109
  const daysSinceLastModified = lastPublishedDateTime ? calculateDaysSince(new Date(lastPublishedDateTime)) : null;
110
110
  const numOfCommitsBehind = selectedRiSc.lastPublished?.numberOfCommits ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"RiScStatusComponent.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/RiScStatusComponent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n DifferenceFetchState,\n DifferenceStatus,\n RiScStatus,\n RiScWithMetadata,\n} from '../../../utils/types';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useAuthenticatedFetch } from '../../../utils/hooks';\nimport { RiScMigrationDialog } from '../MigrationDialog';\nimport { RiScPublishDialog } from '../PublishDialog';\nimport { calculateDaysSince } from '../../../utils/utilityfunctions';\nimport { RiScStatusEnum, RiScStatusEnumType } from './utils';\nimport {\n Text,\n Button,\n Box,\n Flex,\n Card,\n CardBody,\n ButtonLink,\n CardHeader,\n} from '@backstage/ui';\nimport { StatusBanner } from './StatusBanner.tsx';\nimport { StatusBadge } from './StatusBadge.tsx';\n\nconst emptyDifferenceFetchState: DifferenceFetchState = {\n differenceState: {\n type: '4.*',\n migrationChanges: {\n migrationChanges: false,\n migrationRequiresNewApproval: false,\n migrationVersions: undefined,\n migrationChanges40: undefined,\n migrationChanges41: undefined,\n },\n valuations: [],\n scenarios: [],\n },\n status: null,\n isLoading: false,\n errorMessage: '',\n currentDifferenceId: '',\n defaultLastModifiedDateString: '',\n};\n\ninterface RiScStatusProps {\n selectedRiSc: RiScWithMetadata;\n publishRiScFn: () => void;\n}\n\nexport function RiScStatusComponent({\n selectedRiSc,\n publishRiScFn,\n}: RiScStatusProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { fetchDifference } = useAuthenticatedFetch();\n\n const [publishRiScDialogIsOpen, setPublishRiScDialogIsOpen] =\n useState<boolean>(false);\n\n const [migrationDialogIsOpen, setMigrationDialogIsOpen] =\n useState<boolean>(false);\n\n const [differenceFetchState, setDifferenceFetchState] =\n useState<DifferenceFetchState>(emptyDifferenceFetchState);\n\n const { updateRiSc } = useRiScs();\n\n function handleApproveAndPublish() {\n publishRiScFn();\n setPublishRiScDialogIsOpen(false);\n }\n\n function getDifferences() {\n if (\n !selectedRiSc ||\n differenceFetchState.isLoading ||\n differenceFetchState.currentDifferenceId === selectedRiSc.id\n )\n return;\n\n setDifferenceFetchState({ ...differenceFetchState, isLoading: true });\n fetchDifference(\n selectedRiSc,\n response => {\n setDifferenceFetchState({\n differenceState: response.differenceState,\n isLoading: false,\n currentDifferenceId: selectedRiSc.id,\n status: response.status,\n errorMessage: response.errorMessage,\n defaultLastModifiedDateString: response.defaultLastModifiedDateString,\n });\n },\n () => {\n setDifferenceFetchState({\n ...emptyDifferenceFetchState,\n errorMessage: t('rosStatus.difference.error'),\n status: DifferenceStatus.FrontendFallback, // Fallback when the backend does not deliver a response with status\n });\n },\n );\n }\n\n function handleUpdate() {\n updateRiSc(selectedRiSc);\n setMigrationDialogIsOpen(false);\n }\n\n function handleOpenPublishRiScDialog() {\n setPublishRiScDialogIsOpen(true);\n getDifferences();\n }\n\n function handleClosePublishRiScDialog() {\n setPublishRiScDialogIsOpen(false);\n }\n\n useEffect(() => {\n setDifferenceFetchState(emptyDifferenceFetchState);\n }, [selectedRiSc]);\n\n const [status, setStatus] = useState<RiScStatusEnumType>(\n RiScStatusEnum.CREATED,\n );\n\n useEffect(() => {\n if (selectedRiSc.status === RiScStatus.DeletionDraft) {\n setStatus(RiScStatusEnum.DELETION_DRAFT);\n } else if (selectedRiSc.status === RiScStatus.DeletionSentForApproval) {\n setStatus(RiScStatusEnum.DELETION_WAITING);\n } else if (selectedRiSc.content.scenarios.length === 0) {\n setStatus(RiScStatusEnum.CREATED);\n } else if (selectedRiSc.status === RiScStatus.Draft) {\n setStatus(RiScStatusEnum.DRAFT);\n } else if (selectedRiSc.status === RiScStatus.SentForApproval) {\n setStatus(RiScStatusEnum.WAITING);\n } else if (selectedRiSc.status === RiScStatus.Published) {\n setStatus(RiScStatusEnum.PUBLISHED);\n }\n }, [selectedRiSc.status, selectedRiSc.content.scenarios]);\n\n const migration = selectedRiSc.migrationStatus?.migrationChanges;\n\n const lastPublishedDateTime = selectedRiSc.lastPublished?.dateTime;\n const daysSinceLastModified = lastPublishedDateTime\n ? calculateDaysSince(new Date(lastPublishedDateTime))\n : null;\n\n const numOfCommitsBehind =\n selectedRiSc.lastPublished?.numberOfCommits ?? null;\n\n return (\n <Card style={{ height: 'fit-content' }}>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\" as=\"h5\">\n Status\n </Text>\n <StatusBanner\n numOfCommitsBehind={numOfCommitsBehind}\n daysSinceLastModified={daysSinceLastModified}\n differenceFetchState={differenceFetchState}\n />\n </CardHeader>\n <CardBody>\n {!migration && (\n <>\n <Flex\n direction=\"column\"\n justify=\"between\"\n align=\"start\"\n gap=\"1\"\n mt=\"4\"\n >\n <StatusBadge riScStatus={status} />\n <Flex direction=\"row\" mb=\"4\" pl=\"7\" style={{ width: '100%' }}>\n {status === RiScStatusEnum.CREATED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.editing')}\n </Text>\n )}\n {status === RiScStatusEnum.DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.missing')}\n </Text>\n )}\n {status === RiScStatusEnum.DELETION_DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.deletionApproval')}\n </Text>\n )}\n {(status === RiScStatusEnum.WAITING ||\n status === RiScStatusEnum.DELETION_WAITING) && (\n <Flex\n justify=\"between\"\n align=\"baseline\"\n style={{ width: '100%' }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.prStatus')}\n {status === RiScStatusEnum.WAITING &&\n t('rosStatus.prStatus2Update')}\n {status === RiScStatusEnum.DELETION_WAITING &&\n t('rosStatus.prStatus2Delete')}\n </Text>\n <ButtonLink\n target=\"_blank\"\n href={selectedRiSc.pullRequestUrl}\n variant=\"secondary\"\n >\n <i className=\"ri-external-link-line\" />\n {t('rosStatus.githubLink')}\n </ButtonLink>\n </Flex>\n )}\n {status === RiScStatusEnum.PUBLISHED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.approved')}\n </Text>\n )}\n {(status === RiScStatusEnum.DRAFT ||\n status === RiScStatusEnum.DELETION_DRAFT) && (\n <>\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={handleOpenPublishRiScDialog}\n style={{\n display: 'block',\n marginLeft: 'auto',\n fontSize: '14px',\n }}\n >\n {status === RiScStatusEnum.DRAFT &&\n t('rosStatus.approveButtonUpdate')}\n {status === RiScStatusEnum.DELETION_DRAFT &&\n t('rosStatus.approveButtonDelete')}\n </Button>\n <RiScPublishDialog\n openDialog={publishRiScDialogIsOpen}\n isDeletion={status === RiScStatusEnum.DELETION_DRAFT}\n handlePublish={handleApproveAndPublish}\n handleCancel={handleClosePublishRiScDialog}\n differenceFetchState={differenceFetchState}\n />\n </>\n )}\n </Flex>\n </Flex>\n </>\n )}\n {/* Need to include the undefined check here, as TypeScript does not pick up that this check is part of `migration` */}\n {migration && selectedRiSc.migrationStatus && (\n <Box>\n <Box mt=\"2\" mb=\"2\">\n <Text as=\"p\" variant=\"body-large\" weight=\"bold\">\n <i className=\"ri-error-warning-line\" />{' '}\n {t('rosStatus.statusBadge.migration.title')}\n </Text>\n </Box>\n\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.migration.description')}\n </Text>\n\n <Flex direction=\"column\" mt=\"4\" align=\"end\">\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={() => setMigrationDialogIsOpen(!migrationDialogIsOpen)}\n >\n {t('rosStatus.moreInformationButton')}\n </Button>\n </Flex>\n <RiScMigrationDialog\n openDialog={migrationDialogIsOpen}\n handleUpdate={handleUpdate}\n handleCancel={() => setMigrationDialogIsOpen(false)}\n migrationStatus={selectedRiSc.migrationStatus}\n />\n </Box>\n )}\n {/* Error */}\n {!selectedRiSc && (\n <Text as=\"span\">{t('rosStatus.statusBadge.error')}</Text>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RiScStatusComponent.esm.js","sources":["../../../../src/components/riScInfo/riScStatus/RiScStatusComponent.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n DifferenceFetchState,\n DifferenceStatus,\n RiScStatus,\n RiScWithMetadata,\n} from '../../../utils/types';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useAuthenticatedFetch } from '../../../utils/hooks';\nimport { RiScMigrationDialog } from '../MigrationDialog';\nimport { RiScPublishDialog } from '../PublishDialog';\nimport { calculateDaysSince } from '../../../utils/utilityfunctions';\nimport { RiScStatusEnum, RiScStatusEnumType } from './utils';\nimport {\n Text,\n Button,\n Box,\n Flex,\n Card,\n CardBody,\n ButtonLink,\n CardHeader,\n} from '@backstage/ui';\nimport { StatusBanner } from './StatusBanner.tsx';\nimport { StatusBadge } from './StatusBadge.tsx';\n\nconst emptyDifferenceFetchState: DifferenceFetchState = {\n differenceState: {\n type: '4.*',\n migrationChanges: {\n migrationChanges: false,\n migrationRequiresNewApproval: false,\n migrationVersions: undefined,\n migrationChanges40: undefined,\n migrationChanges41: undefined,\n },\n valuations: [],\n scenarios: [],\n },\n status: null,\n isLoading: false,\n errorMessage: '',\n currentDifferenceId: '',\n defaultLastModifiedDateString: '',\n};\n\ninterface RiScStatusProps {\n selectedRiSc: RiScWithMetadata;\n publishRiScFn: () => void;\n}\n\nexport function RiScStatusComponent({\n selectedRiSc,\n publishRiScFn,\n}: RiScStatusProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { fetchDifference } = useAuthenticatedFetch();\n\n const [publishRiScDialogIsOpen, setPublishRiScDialogIsOpen] =\n useState<boolean>(false);\n\n const [migrationDialogIsOpen, setMigrationDialogIsOpen] =\n useState<boolean>(false);\n\n const [differenceFetchState, setDifferenceFetchState] =\n useState<DifferenceFetchState>(emptyDifferenceFetchState);\n\n const { updateRiSc } = useRiScs();\n\n function handleApproveAndPublish() {\n publishRiScFn();\n setPublishRiScDialogIsOpen(false);\n }\n\n function getDifferences() {\n if (\n !selectedRiSc ||\n differenceFetchState.isLoading ||\n differenceFetchState.currentDifferenceId === selectedRiSc.id\n )\n return;\n\n setDifferenceFetchState({ ...differenceFetchState, isLoading: true });\n fetchDifference(\n selectedRiSc,\n response => {\n setDifferenceFetchState({\n differenceState: response.differenceState,\n isLoading: false,\n currentDifferenceId: selectedRiSc.id,\n status: response.status,\n errorMessage: response.errorMessage,\n defaultLastModifiedDateString: response.defaultLastModifiedDateString,\n });\n },\n () => {\n setDifferenceFetchState({\n ...emptyDifferenceFetchState,\n errorMessage: t('rosStatus.difference.error'),\n status: DifferenceStatus.FrontendFallback, // Fallback when the backend does not deliver a response with status\n });\n },\n );\n }\n\n function handleUpdate() {\n updateRiSc(selectedRiSc);\n setMigrationDialogIsOpen(false);\n }\n\n function handleOpenPublishRiScDialog() {\n setPublishRiScDialogIsOpen(true);\n getDifferences();\n }\n\n function handleClosePublishRiScDialog() {\n setPublishRiScDialogIsOpen(false);\n }\n\n useEffect(() => {\n setDifferenceFetchState(emptyDifferenceFetchState);\n }, [selectedRiSc]);\n\n const [status, setStatus] = useState<RiScStatusEnumType>(\n RiScStatusEnum.CREATED,\n );\n\n useEffect(() => {\n if (selectedRiSc.status === RiScStatus.DeletionDraft) {\n setStatus(RiScStatusEnum.DELETION_DRAFT);\n } else if (selectedRiSc.status === RiScStatus.DeletionSentForApproval) {\n setStatus(RiScStatusEnum.DELETION_WAITING);\n } else if (selectedRiSc.content.scenarios.length === 0) {\n setStatus(RiScStatusEnum.CREATED);\n } else if (selectedRiSc.status === RiScStatus.Draft) {\n setStatus(RiScStatusEnum.DRAFT);\n } else if (selectedRiSc.status === RiScStatus.SentForApproval) {\n setStatus(RiScStatusEnum.WAITING);\n } else if (selectedRiSc.status === RiScStatus.Published) {\n setStatus(RiScStatusEnum.PUBLISHED);\n }\n }, [selectedRiSc.status, selectedRiSc.content.scenarios]);\n\n const migration =\n selectedRiSc.migrationStatus?.migrationChanges &&\n selectedRiSc.status !== RiScStatus.DeletionDraft &&\n selectedRiSc.status !== RiScStatus.DeletionSentForApproval;\n\n const lastPublishedDateTime = selectedRiSc.lastPublished?.dateTime;\n const daysSinceLastModified = lastPublishedDateTime\n ? calculateDaysSince(new Date(lastPublishedDateTime))\n : null;\n\n const numOfCommitsBehind =\n selectedRiSc.lastPublished?.numberOfCommits ?? null;\n\n return (\n <Card style={{ height: 'fit-content' }}>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\" as=\"h5\">\n Status\n </Text>\n <StatusBanner\n numOfCommitsBehind={numOfCommitsBehind}\n daysSinceLastModified={daysSinceLastModified}\n differenceFetchState={differenceFetchState}\n />\n </CardHeader>\n <CardBody>\n {!migration && (\n <>\n <Flex\n direction=\"column\"\n justify=\"between\"\n align=\"start\"\n gap=\"1\"\n mt=\"4\"\n >\n <StatusBadge riScStatus={status} />\n <Flex direction=\"row\" mb=\"4\" pl=\"7\" style={{ width: '100%' }}>\n {status === RiScStatusEnum.CREATED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.editing')}\n </Text>\n )}\n {status === RiScStatusEnum.DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.missing')}\n </Text>\n )}\n {status === RiScStatusEnum.DELETION_DRAFT && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.deletionApproval')}\n </Text>\n )}\n {(status === RiScStatusEnum.WAITING ||\n status === RiScStatusEnum.DELETION_WAITING) && (\n <Flex\n justify=\"between\"\n align=\"baseline\"\n style={{ width: '100%' }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.prStatus')}\n {status === RiScStatusEnum.WAITING &&\n t('rosStatus.prStatus2Update')}\n {status === RiScStatusEnum.DELETION_WAITING &&\n t('rosStatus.prStatus2Delete')}\n </Text>\n <ButtonLink\n target=\"_blank\"\n href={selectedRiSc.pullRequestUrl}\n variant=\"secondary\"\n >\n <i className=\"ri-external-link-line\" />\n {t('rosStatus.githubLink')}\n </ButtonLink>\n </Flex>\n )}\n {status === RiScStatusEnum.PUBLISHED && (\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.approved')}\n </Text>\n )}\n {(status === RiScStatusEnum.DRAFT ||\n status === RiScStatusEnum.DELETION_DRAFT) && (\n <>\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={handleOpenPublishRiScDialog}\n style={{\n display: 'block',\n marginLeft: 'auto',\n fontSize: '14px',\n }}\n >\n {status === RiScStatusEnum.DRAFT &&\n t('rosStatus.approveButtonUpdate')}\n {status === RiScStatusEnum.DELETION_DRAFT &&\n t('rosStatus.approveButtonDelete')}\n </Button>\n <RiScPublishDialog\n openDialog={publishRiScDialogIsOpen}\n isDeletion={status === RiScStatusEnum.DELETION_DRAFT}\n handlePublish={handleApproveAndPublish}\n handleCancel={handleClosePublishRiScDialog}\n differenceFetchState={differenceFetchState}\n />\n </>\n )}\n </Flex>\n </Flex>\n </>\n )}\n {/* Need to include the undefined check here, as TypeScript does not pick up that this check is part of `migration` */}\n {migration && selectedRiSc.migrationStatus && (\n <Box>\n <Box mt=\"2\" mb=\"2\">\n <Text as=\"p\" variant=\"body-large\" weight=\"bold\">\n <i className=\"ri-error-warning-line\" />{' '}\n {t('rosStatus.statusBadge.migration.title')}\n </Text>\n </Box>\n\n <Text as=\"p\" variant=\"body-large\">\n {t('rosStatus.statusBadge.migration.description')}\n </Text>\n\n <Flex direction=\"column\" mt=\"4\" align=\"end\">\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={() => setMigrationDialogIsOpen(!migrationDialogIsOpen)}\n >\n {t('rosStatus.moreInformationButton')}\n </Button>\n </Flex>\n <RiScMigrationDialog\n openDialog={migrationDialogIsOpen}\n handleUpdate={handleUpdate}\n handleCancel={() => setMigrationDialogIsOpen(false)}\n migrationStatus={selectedRiSc.migrationStatus}\n />\n </Box>\n )}\n {/* Error */}\n {!selectedRiSc && (\n <Text as=\"span\">{t('rosStatus.statusBadge.error')}</Text>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -96,8 +96,8 @@ function RiScPlugin() {
96
96
  }
97
97
  ),
98
98
  isFetching && /* @__PURE__ */ jsx(Spinner, { size: 80 }),
99
- /* @__PURE__ */ jsx(Grid, { container: true, spacing: 4, children: selectedRiSc && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs(Grid, { container: true, rowSpacing: 3, columnSpacing: 4, children: [
100
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 8, children: /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "between", children: [
99
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 4, children: selectedRiSc && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Grid, { size: 12, children: /* @__PURE__ */ jsxs(Grid, { container: true, rowSpacing: 3, columnSpacing: 4, children: [
100
+ /* @__PURE__ */ jsx(Grid, { size: 8, children: /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "between", children: [
101
101
  /* @__PURE__ */ jsx(Text, { as: "h3", variant: "body-large", weight: "bold", children: t("contentHeader.multipleRiScs") }),
102
102
  /* @__PURE__ */ jsx(
103
103
  CreateNewRiScButton,
@@ -106,9 +106,9 @@ function RiScPlugin() {
106
106
  }
107
107
  )
108
108
  ] }) }),
109
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 8, children: /* @__PURE__ */ jsx(RiScSelectionCard, {}) }),
110
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 4 }),
111
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 8, children: /* @__PURE__ */ jsxs(Flex, { gap: "24px", direction: "column", children: [
109
+ /* @__PURE__ */ jsx(Grid, { size: 8, children: /* @__PURE__ */ jsx(RiScSelectionCard, {}) }),
110
+ /* @__PURE__ */ jsx(Grid, { size: 4 }),
111
+ /* @__PURE__ */ jsx(Grid, { size: 8, children: /* @__PURE__ */ jsxs(Flex, { gap: "24px", direction: "column", children: [
112
112
  /* @__PURE__ */ jsx(
113
113
  RiScDescriptionCard,
114
114
  {
@@ -118,7 +118,7 @@ function RiScPlugin() {
118
118
  ),
119
119
  /* @__PURE__ */ jsx(ScenarioTableWrapper, { riScWithMetadata: selectedRiSc })
120
120
  ] }) }),
121
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 4, children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "24px", children: [
121
+ /* @__PURE__ */ jsx(Grid, { size: 4, children: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "24px", children: [
122
122
  /* @__PURE__ */ jsx(
123
123
  RiScStatusComponent,
124
124
  {
@@ -1 +1 @@
1
- {"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.tsx';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\nimport { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.tsx';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n failedToFetchGcpCryptoKeys,\n allRiScsFailedDecryption,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc &&\n !allRiScsFailedDecryption && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {!isFetching &&\n (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid item xs={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid item xs={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid item xs={8}>\n <RiScSelectionCard />\n </Grid>\n <Grid item xs={4} />\n\n <Grid item xs={8}>\n <Flex gap=\"24px\" direction=\"column\">\n <RiScDescriptionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n />\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Flex>\n </Grid>\n\n <Grid item xs={4}>\n <Flex direction=\"column\" gap=\"24px\">\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n <ThreatActorsAndVulnerabilitiesCard\n scenarios={selectedRiSc.content.scenarios}\n />\n </Flex>\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,QAAA;AAAA,IAC5C,gBAAA,CAAiB;AAAA,GACnB;AAEA,EAAA,SAAS,oBAAA,GAAuB;AAC9B,IAAA,OAAO,kBAAA,CAAmB,iBAAiB,MAAM,CAAA;AAAA,EACnD;AAEA,EAAA,SAAS,oBAAA,GAAuB;AAC9B,IAAA,OAAO,kBAAA,CAAmB,iBAAiB,MAAM,CAAA;AAAA,EACnD;AAEA,EAAA,SAAS,kBAAA,GAAqB;AAC5B,IAAA,OAAO,kBAAA,CAAmB,iBAAiB,YAAY,CAAA;AAAA,EACzD;AAEA,EAAA,SAAS,wBAAA,GAA2B;AAClC,IAAA,OAAO,kBAAA,CAAmB,iBAAiB,cAAc,CAAA;AAAA,EAC3D;AAEA,EAAA,SAAS,eAAA,GAAkB;AACzB,IAAA,OAAO,kBAAA,CAAmB,iBAAiB,MAAM,CAAA;AAAA,EACnD;AAEA,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,0BAAA;AAAA,IACA;AAAA,MACE,QAAA,EAAS;AAEb,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,YAAY,CAAA,GAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,qBAAqB,YAAA,CAAa,GAAA;AAAA,IACtC;AAAA,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,uBAAuB,IAAA,EAAM;AAC/B,MAAA,eAAA,EAAgB;AAChB,MAAA,aAAA,EAAc;AAAA,IAChB;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,aAAA,EAAe,kBAAkB,CAAC,CAAA;AAEvD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAA,EACtB,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,YAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAY,QAAA,EAAU;AAAA;AAAA,KACxB,EACF,CAAA;AAAA,IACC,uBAAuB,IAAA,mBACtB,GAAA,CAAC,kBAAe,IAAA,EAAM,kBAAA,EAAoB,oBAE1C,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,kBAAkB,wBAAA,EAA0B,CAAA;AAAA,MACvD,CAAC,UAAA,IACA,KAAA,KAAU,IAAA,IACV,KAAA,CAAM,WAAW,CAAA,IACjB,CAAC,YAAA,IACD,CAAC,wBAAA,oBACC,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,QAAA;AAAA,UACR,KAAA,EAAM,QAAA;AAAA,UACN,WAAW,UAAA,CAAW,eAAA;AAAA,UAEtB,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,oBAAA,EAAsB;AAAA;AAAA,OACpD;AAAA,MAEH,CAAC,UAAA,KACC,0BAAA,IAA8B,wBAAA,CAAA,oBAC7B,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAQ,QAAA;AAAA,UACR,WAAW,UAAA,CAAW,eAAA;AAAA,UAEtB,8BAAC,UAAA,EAAA,EAAW;AAAA;AAAA,OACd;AAAA,MAEH,UAAA,oBAAc,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,sBAElC,GAAA,CAAC,QAAK,SAAA,EAAS,IAAA,EAAC,SAAS,CAAA,EACtB,QAAA,EAAA,YAAA,oCAEG,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAI,IAAA,EAAC,EAAA,EAAI,IACb,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,WAAS,IAAA,EAAC,UAAA,EAAY,CAAA,EAAG,aAAA,EAAe,CAAA,EAC5C,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,CAAA,EACb,+BAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,SAAA,EAC3B,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAG,IAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EACvC,QAAA,EAAA,CAAA,CAAE,6BAA6B,CAAA,EAClC,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,mBAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAa;AAAA;AAAA;AACf,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,QAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,kBAAA,GAAA,CAAC,qBAAkB,CAAA,EACrB,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EAAG,CAAA;AAAA,wBAElB,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,CAAA,EACb,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAI,MAAA,EAAO,SAAA,EAAU,QAAA,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,mBAAA;AAAA,YAAA;AAAA,cACC,gBAAA,EAAkB,YAAA;AAAA,cAClB,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACA,GAAA,CAAC,oBAAA,EAAA,EAAqB,gBAAA,EAAkB,YAAA,EAAc;AAAA,SAAA,EACxD,CAAA,EACF,CAAA;AAAA,wBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,CAAA,EACb,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,MAAA,EAC3B,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,mBAAA;AAAA,YAAA;AAAA,cACC,YAAA;AAAA,cACA,aAAA,EAAe;AAAA;AAAA,WACjB;AAAA,0BACA,GAAA,CAAC,UAAA,EAAA,EAAW,gBAAA,EAAkB,YAAA,EAAc,CAAA;AAAA,0BAC5C,GAAA;AAAA,YAAC,kCAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,aAAa,OAAA,CAAQ;AAAA;AAAA;AAClC,SAAA,EACF,CAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF,GACF,CAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,IAGD,eAAA,KAAoB,iBAAiB,MAAA,oBACpC,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,eAAA;AAAA,QACT,WAAA,EAAa,eAAA;AAAA,QACb,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IAGD,CAAC,kBAAA,oBAAsB,GAAA,CAAC,cAAA,EAAA,EAAe;AAAA,GAAA,EAC1C,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RiScPlugin.esm.js","sources":["../../../src/components/riScPlugin/RiScPlugin.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ScenarioWizard } from '../scenarioWizard/ScenarioWizard';\nimport { ScenarioDrawer } from '../scenarioDrawer/ScenarioDrawer';\nimport { RiskMatrix } from '../riskMatrix/RiskMatrix';\nimport AlertBar from '../common/AlertBar/AlertBar';\nimport Grid from '@mui/material/Grid';\nimport { RiScDialog, RiScDialogStates } from '../riScDialog/RiScDialog';\nimport { Spinner } from '../common/Spinner';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { ScenarioWizardSteps } from '../../contexts/ScenarioContext';\nimport { RiScHeader } from '../riScHeader/RiScHeader.tsx';\nimport { ScenarioTableWrapper } from '../scenarioTable/ScenarioTableWrapper.tsx';\nimport { FirstRiScDialog } from '../riScInfo/FirstRiScDialog.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport { CreateNewRiScButton } from '../riScInfo/CreateNewRiScButton.tsx';\nimport { RiScSelectionCard } from '../riScInfo/RiScSelectionCard.tsx';\nimport { RiScStatusComponent } from '../riScInfo/riScStatus/RiScStatusComponent.tsx';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport styles from '../common/alertBar.module.css';\nimport { RiScDescriptionCard } from '../riScInfo/RiScDescriptionCard.tsx';\nimport riscStyles from '../riScInfo/RiScSelectionCard.module.css';\nimport { ErrorState } from '../riScInfo/ErrorState.tsx';\nimport { ThreatActorsAndVulnerabilitiesCard } from '../threatActorsAndVulnerabilities/ThreatActorsAndVulnerabilitiesCard.tsx';\n\nexport function RiScPlugin() {\n const [riScDialogState, setRiScDialogState] = useState<RiScDialogStates>(\n RiScDialogStates.Closed,\n );\n\n function openCreateRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Create);\n }\n\n function openDeleteRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Delete);\n }\n\n function openEditRiScDialog() {\n return setRiScDialogState(RiScDialogStates.EditRiscInfo);\n }\n\n function openEditEncryptionDialog() {\n return setRiScDialogState(RiScDialogStates.EditEncryption);\n }\n\n function closeRiScDialog() {\n return setRiScDialogState(RiScDialogStates.Closed);\n }\n\n const {\n approveRiSc,\n selectedRiSc,\n isFetching,\n resetResponse,\n resetRiScStatus,\n response,\n updateStatus,\n riScs,\n failedToFetchGcpCryptoKeys,\n allRiScsFailedDecryption,\n } = useRiScs();\n\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [searchParams] = useSearchParams();\n const scenarioWizardStep = searchParams.get(\n 'step',\n ) as ScenarioWizardSteps | null;\n\n useEffect(() => {\n if (scenarioWizardStep !== null) {\n resetRiScStatus();\n resetResponse();\n }\n }, [resetRiScStatus, resetResponse, scenarioWizardStep]);\n\n return (\n <>\n <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n {scenarioWizardStep !== null ? (\n <ScenarioWizard step={scenarioWizardStep} />\n ) : (\n <>\n <RiScHeader onEditEncryption={openEditEncryptionDialog} />\n {!isFetching &&\n riScs !== null &&\n riScs.length === 0 &&\n !selectedRiSc &&\n !allRiScsFailedDecryption && (\n <Flex\n justify=\"center\"\n align=\"center\"\n className={riscStyles.componentLayout}\n >\n <FirstRiScDialog onNewRiSc={openCreateRiScDialog} />\n </Flex>\n )}\n {!isFetching &&\n (failedToFetchGcpCryptoKeys || allRiScsFailedDecryption) && (\n <Flex\n align=\"center\"\n justify=\"center\"\n className={riscStyles.componentLayout}\n >\n <ErrorState />\n </Flex>\n )}\n {isFetching && <Spinner size={80} />}\n\n <Grid container spacing={4}>\n {selectedRiSc && (\n <>\n <Grid size={12}>\n <Grid container rowSpacing={3} columnSpacing={4}>\n <Grid size={8}>\n <Flex align=\"center\" justify=\"between\">\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('contentHeader.multipleRiScs')}\n </Text>\n <CreateNewRiScButton\n onCreateNew={openCreateRiScDialog}\n />\n </Flex>\n </Grid>\n <Grid size={8}>\n <RiScSelectionCard />\n </Grid>\n <Grid size={4} />\n\n <Grid size={8}>\n <Flex gap=\"24px\" direction=\"column\">\n <RiScDescriptionCard\n riScWithMetadata={selectedRiSc}\n edit={openEditRiScDialog}\n />\n <ScenarioTableWrapper riScWithMetadata={selectedRiSc} />\n </Flex>\n </Grid>\n\n <Grid size={4}>\n <Flex direction=\"column\" gap=\"24px\">\n <RiScStatusComponent\n selectedRiSc={selectedRiSc}\n publishRiScFn={approveRiSc}\n />\n <RiskMatrix riScWithMetadata={selectedRiSc} />\n <ThreatActorsAndVulnerabilitiesCard\n scenarios={selectedRiSc.content.scenarios}\n />\n </Flex>\n </Grid>\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </>\n )}\n\n {riScDialogState !== RiScDialogStates.Closed && (\n <RiScDialog\n onClose={closeRiScDialog}\n dialogState={riScDialogState}\n onDelete={openDeleteRiScDialog}\n />\n )}\n\n {!scenarioWizardStep && <ScenarioDrawer />}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { ClickAwayListener, Tooltip, Paper } from '@material-ui/core';
2
+ import ClickAwayListener from '@mui/material/ClickAwayListener';
3
+ import Paper from '@mui/material/Paper';
4
+ import Tooltip from '@mui/material/Tooltip';
3
5
  import { useState, useEffect } from 'react';
4
6
  import { RiScStatus } from '../../utils/types.esm.js';
5
7
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
@@ -67,10 +69,9 @@ function RiskMatrixScenarioCount({
67
69
  return /* @__PURE__ */ jsx(ClickAwayListener, { onClickAway: () => setTooltipOpen(false), children: /* @__PURE__ */ jsx(
68
70
  Tooltip,
69
71
  {
70
- interactive: true,
71
- classes: {
72
- tooltip: styles.tooltip,
73
- arrow: styles.tooltipArrow
72
+ slotProps: {
73
+ tooltip: { className: styles.tooltip },
74
+ arrow: { className: styles.tooltipArrow }
74
75
  },
75
76
  title: tooltipList,
76
77
  placement: "right",
@@ -1 +1 @@
1
- {"version":3,"file":"RiskMatrixScenarioCount.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrixScenarioCount.tsx"],"sourcesContent":["import { ClickAwayListener, Paper, Tooltip } from '@material-ui/core';\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 interactive\n classes={{\n tooltip: styles.tooltip,\n arrow: 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 { 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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"}
@@ -11,7 +11,7 @@ import { Input } from '../../common/Input.esm.js';
11
11
  import { MarkdownInput } from '../../common/MarkdownInput/MarkdownInput.esm.js';
12
12
  import { Select } from '../../common/Select.esm.js';
13
13
  import HelpIcon from '@mui/icons-material/Help';
14
- import { Tooltip } from '@material-ui/core';
14
+ import Tooltip from '@mui/material/Tooltip';
15
15
  import { Text } from '@backstage/ui';
16
16
  import styles from './ActionFormItem.module.css.esm.js';
17
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"ActionFormItem.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionFormItem.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport { Controller, UseFormReturn } from 'react-hook-form';\nimport {\n ActionStatusOptions,\n urlRegExpPattern,\n} from '../../../utils/constants';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport {\n actionStatusOptionsToTranslationKeys,\n getValue,\n} from '../../../utils/utilityfunctions';\nimport { Input } from '../../common/Input';\nimport { MarkdownInput } from '../../common/MarkdownInput';\nimport { Select } from '../../common/Select';\nimport HelpIcon from '@mui/icons-material/Help';\nimport { Tooltip } from '@material-ui/core';\nimport { Text } from '@backstage/ui';\nimport styles from './ActionFormItem.module.css';\n\nfunction addPeriodToBaseObjectPath(s: string) {\n if (!s) return '';\n return `${s}.`;\n}\n\ntype ActionFormItemProps = {\n formMethods: UseFormReturn<any>;\n handleDelete: () => void;\n displayedIndex?: number;\n // Specify baseObjectPathToActionOfForm where in the form of formMethods the action object is (use if nested)\n // Example value: \"actions.1\"\n baseObjectPathToActionOfForm?: string;\n};\n\nexport function ActionFormItem({\n formMethods,\n handleDelete,\n displayedIndex,\n baseObjectPathToActionOfForm = '',\n}: ActionFormItemProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { control, register, formState } = formMethods;\n const errorObject = getValue(formState.errors, baseObjectPathToActionOfForm);\n\n const actionStatusOptions = Object.values(ActionStatusOptions).map(\n actionStatus => ({\n value: actionStatus,\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n renderedValue: t(actionStatusOptionsToTranslationKeys[actionStatus]),\n }),\n );\n\n return (\n <>\n <Box className={styles.formGrid}>\n <Box className={styles.formHeader}>\n {displayedIndex !== undefined && displayedIndex !== null ? (\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.measure')} {displayedIndex + 1}\n </Text>\n ) : (\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.edit')}\n </Text>\n )}\n <IconButton onClick={handleDelete} color=\"primary\">\n <DeleteIcon aria-label=\"Delete\" />\n </IconButton>\n </Box>\n <Input\n required\n {...register(\n `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}title`,\n {\n required: true,\n },\n )}\n error={errorObject?.title !== undefined}\n label={t('dictionary.title')}\n helperText={\n errorObject?.title &&\n t('scenarioDrawer.measureTab.addMeasureTitleError')\n }\n />\n <Controller\n control={control}\n name={`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}description`}\n render={({ field: { onChange, value }, fieldState: { error } }) => (\n <MarkdownInput\n label={t('dictionary.description')}\n value={value}\n onMarkdownChange={onChange}\n error={!!error}\n minRows={8}\n />\n )}\n />\n <Box className={styles.inputGrid}>\n <Input\n {...register(\n `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}url`,\n {\n pattern: {\n value: urlRegExpPattern,\n message: t('scenarioDrawer.action.urlError'),\n },\n },\n )}\n label={<UrlLabel />}\n helperText={errorObject?.url?.message}\n error={errorObject?.url?.message}\n />\n <Select\n required\n control={control}\n name={`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}status`}\n label={t('dictionary.status')}\n options={actionStatusOptions}\n />\n </Box>\n </Box>\n </>\n );\n}\n\nexport function UrlLabel(): JSX.Element {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <Box className={styles.urlLabel}>\n {t('dictionary.url')}\n <Tooltip\n title={\n <Text variant=\"body-large\" className={styles.tooltipText}>\n {t('scenarioDrawer.measureTab.urlDescription')}\n </Text>\n }\n arrow\n >\n <HelpIcon color=\"primary\" />\n </Tooltip>\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionFormItem.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionFormItem.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport { Controller, UseFormReturn } from 'react-hook-form';\nimport {\n ActionStatusOptions,\n urlRegExpPattern,\n} from '../../../utils/constants';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport {\n actionStatusOptionsToTranslationKeys,\n getValue,\n} from '../../../utils/utilityfunctions';\nimport { Input } from '../../common/Input';\nimport { MarkdownInput } from '../../common/MarkdownInput';\nimport { Select } from '../../common/Select';\nimport HelpIcon from '@mui/icons-material/Help';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Text } from '@backstage/ui';\nimport styles from './ActionFormItem.module.css';\n\nfunction addPeriodToBaseObjectPath(s: string) {\n if (!s) return '';\n return `${s}.`;\n}\n\ntype ActionFormItemProps = {\n formMethods: UseFormReturn<any>;\n handleDelete: () => void;\n displayedIndex?: number;\n // Specify baseObjectPathToActionOfForm where in the form of formMethods the action object is (use if nested)\n // Example value: \"actions.1\"\n baseObjectPathToActionOfForm?: string;\n};\n\nexport function ActionFormItem({\n formMethods,\n handleDelete,\n displayedIndex,\n baseObjectPathToActionOfForm = '',\n}: ActionFormItemProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { control, register, formState } = formMethods;\n const errorObject = getValue(formState.errors, baseObjectPathToActionOfForm);\n\n const actionStatusOptions = Object.values(ActionStatusOptions).map(\n actionStatus => ({\n value: actionStatus,\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n renderedValue: t(actionStatusOptionsToTranslationKeys[actionStatus]),\n }),\n );\n\n return (\n <>\n <Box className={styles.formGrid}>\n <Box className={styles.formHeader}>\n {displayedIndex !== undefined && displayedIndex !== null ? (\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.measure')} {displayedIndex + 1}\n </Text>\n ) : (\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.edit')}\n </Text>\n )}\n <IconButton onClick={handleDelete} color=\"primary\">\n <DeleteIcon aria-label=\"Delete\" />\n </IconButton>\n </Box>\n <Input\n required\n {...register(\n `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}title`,\n {\n required: true,\n },\n )}\n error={errorObject?.title !== undefined}\n label={t('dictionary.title')}\n helperText={\n errorObject?.title &&\n t('scenarioDrawer.measureTab.addMeasureTitleError')\n }\n />\n <Controller\n control={control}\n name={`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}description`}\n render={({ field: { onChange, value }, fieldState: { error } }) => (\n <MarkdownInput\n label={t('dictionary.description')}\n value={value}\n onMarkdownChange={onChange}\n error={!!error}\n minRows={8}\n />\n )}\n />\n <Box className={styles.inputGrid}>\n <Input\n {...register(\n `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}url`,\n {\n pattern: {\n value: urlRegExpPattern,\n message: t('scenarioDrawer.action.urlError'),\n },\n },\n )}\n label={<UrlLabel />}\n helperText={errorObject?.url?.message}\n error={errorObject?.url?.message}\n />\n <Select\n required\n control={control}\n name={`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}status`}\n label={t('dictionary.status')}\n options={actionStatusOptions}\n />\n </Box>\n </Box>\n </>\n );\n}\n\nexport function UrlLabel(): JSX.Element {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <Box className={styles.urlLabel}>\n {t('dictionary.url')}\n <Tooltip\n title={\n <Text variant=\"body-large\" className={styles.tooltipText}>\n {t('scenarioDrawer.measureTab.urlDescription')}\n </Text>\n }\n arrow\n >\n <HelpIcon color=\"primary\" />\n </Tooltip>\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
3
- import { IconButton, Collapse } from '@material-ui/core';
3
+ import Collapse from '@mui/material/Collapse';
4
+ import IconButton from '@mui/material/IconButton';
4
5
  import DeleteIcon from '@mui/icons-material/Delete';
5
6
  import DragIndicatorIcon from '@mui/icons-material/DragIndicator';
6
7
  import { useState, useRef, useEffect } from 'react';
@@ -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, IconButton } from '@material-ui/core';\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 =\n theme.palette.mode === 'dark'\n ? 'var(--ros-gray-300)'\n : 'var(--ros-gray-100)';\n\n // Necessary because the darkmode card color in theme.css overwrites the color defined in ScenarioTableStyles.ts\n const cardBgColor =\n theme.palette.mode === 'dark' ? 'var(--ros-gray-500)' : undefined;\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 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 =\n theme.palette.mode === 'dark'\n ? 'var(--ros-gray-300)'\n : 'var(--ros-gray-100)';\n\n // Necessary because the darkmode card color in theme.css overwrites the color defined in ScenarioTableStyles.ts\n const cardBgColor =\n theme.palette.mode === 'dark' ? 'var(--ros-gray-500)' : undefined;\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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"}
@@ -0,0 +1,18 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ function useBackstageThemeMode() {
4
+ const read = () => document.body.getAttribute("data-theme-mode") === "dark" ? "dark" : "light";
5
+ const [mode, setMode] = useState(read);
6
+ useEffect(() => {
7
+ const observer = new MutationObserver(() => setMode(read()));
8
+ observer.observe(document.body, {
9
+ attributes: true,
10
+ attributeFilter: ["data-theme-mode"]
11
+ });
12
+ return () => observer.disconnect();
13
+ }, []);
14
+ return mode;
15
+ }
16
+
17
+ export { useBackstageThemeMode };
18
+ //# sourceMappingURL=useBackstageThemeMode.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBackstageThemeMode.esm.js","sources":["../../src/hooks/useBackstageThemeMode.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\n/**\n * Reads Backstage's theme mode from the `data-theme-mode` attribute on `document.body`.\n * Observes mutations so the returned value stays in sync when Backstage toggles the mode.\n */\nexport function useBackstageThemeMode(): 'light' | 'dark' {\n const read = () =>\n document.body.getAttribute('data-theme-mode') === 'dark' ? 'dark' : 'light';\n\n const [mode, setMode] = useState<'light' | 'dark'>(read);\n\n useEffect(() => {\n const observer = new MutationObserver(() => setMode(read()));\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: ['data-theme-mode'],\n });\n return () => observer.disconnect();\n }, []);\n\n return mode;\n}\n"],"names":[],"mappings":";;AAMO,SAAS,qBAAA,GAA0C;AACxD,EAAA,MAAM,IAAA,GAAO,MACX,QAAA,CAAS,IAAA,CAAK,aAAa,iBAAiB,CAAA,KAAM,SAAS,MAAA,GAAS,OAAA;AAEtE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAA2B,IAAI,CAAA;AAEvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAW,IAAI,gBAAA,CAAiB,MAAM,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA;AAC3D,IAAA,QAAA,CAAS,OAAA,CAAQ,SAAS,IAAA,EAAM;AAAA,MAC9B,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,CAAC,iBAAiB;AAAA,KACpC,CAAA;AACD,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,IAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kartverket/backstage-plugin-risk-scorecard",
3
- "version": "6.1.10",
3
+ "version": "6.2.1",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -47,11 +47,8 @@
47
47
  "@emotion/cache": "^11.14.0",
48
48
  "@emotion/react": "^11.14.0",
49
49
  "@emotion/styled": "^11.14.0",
50
- "@material-ui/core": "^4.12.4",
51
- "@material-ui/icons": "^4.11.3",
52
- "@material-ui/lab": "4.0.0-alpha.61",
53
- "@mui/icons-material": "^5.17.1",
54
- "@mui/material": "^5.17.1",
50
+ "@mui/icons-material": "^7.3.9",
51
+ "@mui/material": "^7.3.9",
55
52
  "@uiw/react-md-editor": "^4.0.5",
56
53
  "classnames": "^2.5.1",
57
54
  "github-markdown-css": "^5.8.1",