@kartverket/backstage-plugin-risk-scorecard 3.10.5 → 3.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/theme.css +43 -3
- package/dist/components/action/ActionEdit.esm.js +4 -4
- package/dist/components/action/ActionEdit.esm.js.map +1 -1
- package/dist/components/action/ActionRowList.esm.js +11 -1
- package/dist/components/action/ActionRowList.esm.js.map +1 -1
- package/dist/components/action/ActionRowList.module.css.esm.js +8 -0
- package/dist/components/action/ActionRowList.module.css.esm.js.map +1 -0
- package/dist/components/riskMatrix/RiskMatrix.esm.js +12 -25
- package/dist/components/riskMatrix/RiskMatrix.esm.js.map +1 -1
- package/dist/components/riskMatrix/RiskMatrixSquare.esm.js +31 -0
- package/dist/components/riskMatrix/RiskMatrixSquare.esm.js.map +1 -0
- package/dist/components/riskMatrix/RiskMatrixSquare.module.css.esm.js +8 -0
- package/dist/components/riskMatrix/RiskMatrixSquare.module.css.esm.js.map +1 -0
- package/dist/components/scenarioDrawer/components/DeleteConfirmation.esm.js +3 -3
- package/dist/components/scenarioDrawer/components/DeleteConfirmation.esm.js.map +1 -1
- package/dist/components/scenarioTable/OutdatedActionsCounts.esm.js +10 -1
- package/dist/components/scenarioTable/OutdatedActionsCounts.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTable.esm.js +10 -1
- package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableCard.esm.js +2 -1
- package/dist/components/scenarioTable/ScenarioTableCard.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableFilter.esm.js +1 -0
- package/dist/components/scenarioTable/ScenarioTableFilter.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js +42 -28
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
- package/dist/components/scenarioTable/components/OutdatedActionsCountButton/OutdatedActionsCountButton.esm.js +20 -16
- package/dist/components/scenarioTable/components/OutdatedActionsCountButton/OutdatedActionsCountButton.esm.js.map +1 -1
- package/dist/components/scenarioTable/components/OutdatedActionsCountButton/OutdatedActionsCountButton.module.css.esm.js +2 -2
- package/dist/utils/constants.esm.js +21 -6
- package/dist/utils/constants.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +8 -4
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/utilityfunctions.esm.js +5 -2
- package/dist/utils/utilityfunctions.esm.js.map +1 -1
- package/package.json +1 -1
package/css/theme.css
CHANGED
|
@@ -18,6 +18,7 @@ Remember to prefix custom styles with 'ros-' to avoid conflicts with other plugi
|
|
|
18
18
|
|
|
19
19
|
--ros-blue-600: #1f5492;
|
|
20
20
|
|
|
21
|
+
--ros-red-50: #fcf1e8;
|
|
21
22
|
--ros-red-100: #ffe2d4;
|
|
22
23
|
--ros-red-200: #ebb095;
|
|
23
24
|
--ros-red-300: #e58869;
|
|
@@ -55,6 +56,27 @@ Remember to prefix custom styles with 'ros-' to avoid conflicts with other plugi
|
|
|
55
56
|
--ros-risc-status-not-published: var(--ros-orange-400);
|
|
56
57
|
--ros-risc-status-error: var(--ros-red-700);
|
|
57
58
|
|
|
59
|
+
/*--------Custom updated/outdated styles---------*/
|
|
60
|
+
--ros-very-outdated: var(--ros-red-600);
|
|
61
|
+
--ros-very-outdated-hover: var(--ros-red-50);
|
|
62
|
+
--ros-very-outdated-hover-text: var(--ros-red-600);
|
|
63
|
+
--ros-very-outdated-selected-text: var(--bui-white);
|
|
64
|
+
--ros-very-outdated-selected-bg: var(--ros-red-600);
|
|
65
|
+
|
|
66
|
+
--ros-outdated: var(--ros-orange-400);
|
|
67
|
+
--ros-outdated-hover-bg: var(--ros-orange-50);
|
|
68
|
+
--ros-outdated-hover-text: var(--ros-orange-400);
|
|
69
|
+
--ros-outdated-selected-bg: var(--ros-orange-300);
|
|
70
|
+
--ros-outdated-selected-border: transparent;
|
|
71
|
+
--ros-outdated-selected-text: var(--bui-white);
|
|
72
|
+
|
|
73
|
+
--ros-updated: var(--ros-green-500);
|
|
74
|
+
--ros-updated-hover: var(--ros-green-500);
|
|
75
|
+
--ros-updated-hover-bg: var(--ros-green-100);
|
|
76
|
+
--ros-updated-selected-text: var(--bui-white);
|
|
77
|
+
--ros-updated-selected-bg: var(--ros-green-500);
|
|
78
|
+
--ros-updated-selected-border: var(--ros-green-500);
|
|
79
|
+
|
|
58
80
|
--ros-input-text-color: #757575;
|
|
59
81
|
--ros-input-disabledBackground: rgba(0, 0, 0, 0.12);
|
|
60
82
|
|
|
@@ -79,11 +101,29 @@ Remember to prefix custom styles with 'ros-' to avoid conflicts with other plugi
|
|
|
79
101
|
/* Dark mode custom styles can be added here */
|
|
80
102
|
[data-theme-mode='dark'] {
|
|
81
103
|
--ros-risc-status-updated: var(--ros-green-200);
|
|
82
|
-
--ros-risc-status-little-outdated: var(--ros-orange-400);
|
|
83
|
-
--ros-risc-status-outdated: var(--ros-red-700);
|
|
84
104
|
--ros-risc-status-very-outdated: var(--ros-red-300);
|
|
85
105
|
--ros-risc-status-not-published: var(--ros-orange-100);
|
|
86
|
-
|
|
106
|
+
|
|
107
|
+
/* Dark mode custom styles for outdate/updated badges */
|
|
108
|
+
--ros-very-outdated: var(--ros-red-200);
|
|
109
|
+
--ros-very-outdated-hover: transparent;
|
|
110
|
+
--ros-very-outdated-hover-text: var(--ros-red-300);
|
|
111
|
+
--ros-very-outdated-selected-bg: var(--ros-red-200);
|
|
112
|
+
--ros-very-outdated-selected-text: var(--ros-gray-700);
|
|
113
|
+
|
|
114
|
+
--ros-outdated: var(--ros-orange-100);
|
|
115
|
+
--ros-outdated-hover-bg: transparent;
|
|
116
|
+
--ros-outdated-hover: var(--ros-orange-200);
|
|
117
|
+
--ros-outdated-selected: var(--ros-orange-100);
|
|
118
|
+
--ros-outdated-selected-text: var(--ros-gray-700);
|
|
119
|
+
--ros-outdated-selected-border: var(--ros-gray-700);
|
|
120
|
+
|
|
121
|
+
--ros-updated: var(--ros-green-200);
|
|
122
|
+
--ros-updated-hover: var(--ros-green-300);
|
|
123
|
+
--ros-updated-hover-bg: transparent;
|
|
124
|
+
--ros-updated-selected-text: var(--ros-gray-700);
|
|
125
|
+
--ros-updated-selected-bg: var(--ros-green-200);
|
|
126
|
+
--ros-updated-selected-border: var(--ros-green-200);
|
|
87
127
|
|
|
88
128
|
--ros-input-text-color: #ffffff80;
|
|
89
129
|
--ros-input-disabledBackground: rgba(255, 255, 255, 0.12);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsxs,
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import Button from '@mui/material/Button';
|
|
3
3
|
import { useForm } from 'react-hook-form';
|
|
4
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
5
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
6
|
-
import Box from '@mui/material/Box';
|
|
7
6
|
import CircularProgress from '@mui/material/CircularProgress';
|
|
8
7
|
import { useRiScs } from '../../contexts/RiScContext.esm.js';
|
|
9
8
|
import { ActionFormItem } from '../scenarioDrawer/components/ActionFormItem.esm.js';
|
|
9
|
+
import { Flex } from '@backstage/ui';
|
|
10
10
|
|
|
11
11
|
function ActionEdit(props) {
|
|
12
12
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
@@ -26,7 +26,7 @@ function ActionEdit(props) {
|
|
|
26
26
|
};
|
|
27
27
|
props.onSaveAction(newAction);
|
|
28
28
|
};
|
|
29
|
-
return /* @__PURE__ */ jsxs(
|
|
29
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "24px", children: [
|
|
30
30
|
/* @__PURE__ */ jsx(
|
|
31
31
|
ActionFormItem,
|
|
32
32
|
{
|
|
@@ -34,7 +34,7 @@ function ActionEdit(props) {
|
|
|
34
34
|
handleDelete: props.onDeleteAction
|
|
35
35
|
}
|
|
36
36
|
),
|
|
37
|
-
/* @__PURE__ */ jsxs(
|
|
37
|
+
/* @__PURE__ */ jsxs(Flex, { gap: "8px", children: [
|
|
38
38
|
/* @__PURE__ */ jsxs(
|
|
39
39
|
Button,
|
|
40
40
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionEdit.esm.js","sources":["../../../src/components/action/ActionEdit.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport { Action } from '../../utils/types.ts';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport
|
|
1
|
+
{"version":3,"file":"ActionEdit.esm.js","sources":["../../../src/components/action/ActionEdit.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport { Action } from '../../utils/types.ts';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { ActionFormItem } from '../scenarioDrawer/components/ActionFormItem.tsx';\nimport { Flex } from '@backstage/ui';\n\ntype ActionEditProps = {\n action: Action;\n onCancelEdit: () => void;\n onSaveAction: (newAction: Action) => void;\n onDeleteAction: () => void;\n onFormSubmitted?: () => void;\n};\n\ntype ActionEditForm = {\n title: string;\n description: string;\n status: string;\n url: string;\n};\n\nexport function ActionEdit(props: ActionEditProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const formMethods = useForm<ActionEditForm>({\n defaultValues: {\n title: props.action.title,\n description: props.action.description,\n status: props.action.status,\n url: props.action.url,\n },\n });\n const { updateStatus } = useRiScs();\n\n const onSubmit: SubmitHandler<ActionEditForm> = data => {\n const newAction = {\n ...props.action,\n ...data,\n };\n props.onSaveAction(newAction);\n };\n\n return (\n <Flex direction=\"column\" gap=\"24px\">\n <ActionFormItem\n formMethods={formMethods}\n handleDelete={props.onDeleteAction}\n />\n <Flex gap=\"8px\">\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit(onSubmit)}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 8, color: 'inherit' }}\n />\n )}\n </Button>\n <Button onClick={props.onCancelEdit}>{t('dictionary.cancel')}</Button>\n </Flex>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAyBO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,cAAc,OAAA,CAAwB;AAAA,IAC1C,aAAA,EAAe;AAAA,MACb,KAAA,EAAO,MAAM,MAAA,CAAO,KAAA;AAAA,MACpB,WAAA,EAAa,MAAM,MAAA,CAAO,WAAA;AAAA,MAC1B,MAAA,EAAQ,MAAM,MAAA,CAAO,MAAA;AAAA,MACrB,GAAA,EAAK,MAAM,MAAA,CAAO;AAAA;AACpB,GACD,CAAA;AACD,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,QAAA,EAAS;AAElC,EAAA,MAAM,WAA0C,CAAA,IAAA,KAAQ;AACtD,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAG,KAAA,CAAM,MAAA;AAAA,MACT,GAAG;AAAA,KACL;AACA,IAAA,KAAA,CAAM,aAAa,SAAS,CAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,MAAA,EAC3B,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,cAAc,KAAA,CAAM;AAAA;AAAA,KACtB;AAAA,oBACA,IAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAI,KAAA,EACR,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,WAAA,CAAY,YAAA,CAAa,QAAQ,CAAA;AAAA,UAC1C,QAAA,EAAU,CAAC,WAAA,CAAY,SAAA,CAAU,WAAW,YAAA,CAAa,SAAA;AAAA,UAExD,QAAA,EAAA;AAAA,YAAA,CAAA,CAAE,iBAAiB,CAAA;AAAA,YACnB,aAAa,SAAA,oBACZ,GAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAM,EAAA;AAAA,gBACN,EAAA,EAAI,EAAE,UAAA,EAAY,CAAA,EAAG,OAAO,SAAA;AAAU;AAAA;AACxC;AAAA;AAAA,OAEJ;AAAA,0BACC,MAAA,EAAA,EAAO,OAAA,EAAS,MAAM,YAAA,EAAe,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EAAE;AAAA,KAAA,EAC/D;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -3,15 +3,19 @@ import { ActionRow } from './ActionRow.esm.js';
|
|
|
3
3
|
import { useState, useCallback, useEffect, Fragment } from 'react';
|
|
4
4
|
import { isToday } from '../../utils/date.esm.js';
|
|
5
5
|
import { useScenario } from '../../contexts/ScenarioContext.esm.js';
|
|
6
|
-
import { Flex } from '@backstage/ui';
|
|
6
|
+
import { Flex, Text } from '@backstage/ui';
|
|
7
7
|
import Divider from '@mui/material/Divider';
|
|
8
8
|
import { useDebounce } from '../../utils/hooks.esm.js';
|
|
9
9
|
import { useBackstageContext } from '../../contexts/BackstageContext.esm.js';
|
|
10
10
|
import { UpdatedStatusEnum } from '../../utils/utilityfunctions.esm.js';
|
|
11
11
|
import { useRiScs } from '../../contexts/RiScContext.esm.js';
|
|
12
12
|
import { getScenarioOfIdFromRiSc } from '../../utils/scenario.esm.js';
|
|
13
|
+
import styles from './ActionRowList.module.css.esm.js';
|
|
14
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
15
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
13
16
|
|
|
14
17
|
function ActionRowList(props) {
|
|
18
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
15
19
|
const { selectedRiSc } = useRiScs();
|
|
16
20
|
const { submitEditedScenarioToRiSc } = useScenario();
|
|
17
21
|
const { profileInfo } = useBackstageContext();
|
|
@@ -110,6 +114,12 @@ function ActionRowList(props) {
|
|
|
110
114
|
flush();
|
|
111
115
|
};
|
|
112
116
|
}, [flush]);
|
|
117
|
+
if (actions.length === 0) {
|
|
118
|
+
return /* @__PURE__ */ jsxs(Flex, { align: "center", direction: "column", children: [
|
|
119
|
+
/* @__PURE__ */ jsx(Divider, { flexItem: true }),
|
|
120
|
+
/* @__PURE__ */ jsx(Text, { className: styles.noActionsText, children: t("scenarioTable.noActionsLong") })
|
|
121
|
+
] });
|
|
122
|
+
}
|
|
113
123
|
return /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
|
|
114
124
|
/* @__PURE__ */ jsx(Divider, {}),
|
|
115
125
|
actions.map((action, index) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionRowList.esm.js","sources":["../../../src/components/action/ActionRowList.tsx"],"sourcesContent":["import { Action } from '../../utils/types.ts';\nimport { ActionRow } from './ActionRow.tsx';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { isToday } from '../../utils/date.ts';\nimport { ActionStatusOptions } from '../../utils/constants.ts';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { Flex } from '@backstage/ui';\nimport Divider from '@mui/material/Divider';\nimport { useDebounce } from '../../utils/hooks.ts';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\nimport { UpdatedStatusEnum } from '../../utils/utilityfunctions.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { getScenarioOfIdFromRiSc } from '../../utils/scenario.ts';\n\ntype ActionRowListProps = {\n scenarioId: string;\n displayedActions?: Action[]; // Specify if not every action of scenario is to be displayed\n allowDeletion?: boolean;\n allowEdit?: boolean;\n};\n\nexport function ActionRowList(props: ActionRowListProps) {\n const { selectedRiSc } = useRiScs();\n const { submitEditedScenarioToRiSc } = useScenario();\n const { profileInfo } = useBackstageContext();\n const [pendingActionStatusUpdates, setPendingActionStatusUpdates] = useState<\n Record<string, Record<string, ActionStatusOptions>>\n >({});\n const [pendingActionUpdatesHistory, setPendingActionUpdatesHistory] =\n useState<string[]>([]);\n\n const onRefreshActionStatus = (action: Action) => {\n if (isToday(action.lastUpdated ?? null)) return;\n\n setPendingActionStatusUpdates(prev => ({\n ...prev,\n [props.scenarioId]: {\n ...prev[props.scenarioId],\n [action.ID]: action.status as ActionStatusOptions,\n },\n }));\n setPendingActionUpdatesHistory(prev => [...prev, action.ID]);\n };\n\n const onNewActionStatus = (\n actionId: string,\n newStatus: ActionStatusOptions,\n ) => {\n setPendingActionStatusUpdates(prev => ({\n ...prev,\n [props.scenarioId]: {\n ...prev[props.scenarioId],\n [actionId]: newStatus,\n },\n }));\n setPendingActionUpdatesHistory(prev => [...prev, actionId]);\n };\n\n const onDeleteAction = (actionId: string) => {\n const oldScenario = getScenarioOfIdFromRiSc(props.scenarioId, selectedRiSc);\n if (!oldScenario) return;\n const newScenario = {\n ...oldScenario,\n actions: oldScenario.actions.filter(a => a.ID !== actionId),\n };\n submitEditedScenarioToRiSc(newScenario);\n };\n\n const onSaveAction = (newAction: Action) => {\n const oldScenario = getScenarioOfIdFromRiSc(props.scenarioId, selectedRiSc);\n if (!oldScenario) return;\n submitEditedScenarioToRiSc(\n {\n ...oldScenario,\n actions: oldScenario.actions.map(a =>\n a.ID === newAction.ID ? newAction : a,\n ),\n },\n {\n profileInfo: profileInfo,\n },\n );\n };\n\n const debounceCallback = useCallback(\n (updates: Record<string, Record<string, ActionStatusOptions>>) => {\n if (Object.keys(updates).length === 0) return;\n\n Object.keys(updates).forEach(scenarioId => {\n const oldScenario = getScenarioOfIdFromRiSc(scenarioId, selectedRiSc);\n if (!oldScenario) return;\n const newActionArray = oldScenario.actions.map(a =>\n a.ID in updates[scenarioId]\n ? {\n ...a,\n status: updates[scenarioId][a.ID] ?? a.status,\n }\n : a,\n );\n\n const updatedScenario = {\n ...oldScenario,\n actions: newActionArray,\n };\n\n submitEditedScenarioToRiSc(updatedScenario, {\n idsOfActionsToForceUpdateLastUpdatedValue: Object.keys(\n updates[scenarioId],\n ),\n profileInfo: profileInfo,\n onSuccess: () => {\n setPendingActionStatusUpdates({});\n },\n onError: () => {\n // TODO: Should probably retry once before canceling updates\n setPendingActionStatusUpdates(prevStatusUpdates => {\n setPendingActionUpdatesHistory(prevHistory =>\n prevHistory.filter(actionId =>\n Object.keys(prevStatusUpdates[scenarioId] ?? {}).includes(\n actionId,\n ),\n ),\n );\n return {};\n });\n },\n });\n });\n },\n [submitEditedScenarioToRiSc, profileInfo, selectedRiSc],\n );\n\n const { flush } = useDebounce<\n Record<string, Record<string, ActionStatusOptions>>\n >(pendingActionStatusUpdates, 6000, debounceCallback);\n\n const actions =\n props.displayedActions ??\n getScenarioOfIdFromRiSc(props.scenarioId, selectedRiSc)?.actions ??\n [];\n\n useEffect(() => {\n return () => {\n // flush on unmount. makes sure changes are saved\n flush();\n };\n }, [flush]);\n\n return (\n <Flex direction=\"column\">\n <Divider />\n {actions.map((action, index) => (\n <Fragment key={`Action-${action.ID}-${index}`}>\n <ActionRow\n action={action}\n index={index}\n onRefreshActionStatus={onRefreshActionStatus}\n onNewActionStatus={onNewActionStatus}\n onDeleteAction={onDeleteAction}\n onSaveAction={onSaveAction}\n optimisticUpdatedStatus={\n pendingActionUpdatesHistory.includes(action.ID)\n ? UpdatedStatusEnum.UPDATED\n : undefined\n }\n optimisticStatus={\n pendingActionStatusUpdates[props.scenarioId]?.[action.ID]\n }\n allowDeletion={props.allowDeletion}\n allowEdit={props.allowEdit}\n />\n <Divider />\n </Fragment>\n ))}\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionRowList.esm.js","sources":["../../../src/components/action/ActionRowList.tsx"],"sourcesContent":["import { Action } from '../../utils/types.ts';\nimport { ActionRow } from './ActionRow.tsx';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { isToday } from '../../utils/date.ts';\nimport { ActionStatusOptions } from '../../utils/constants.ts';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { Flex, Text } from '@backstage/ui';\nimport Divider from '@mui/material/Divider';\nimport { useDebounce } from '../../utils/hooks.ts';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\nimport { UpdatedStatusEnum } from '../../utils/utilityfunctions.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { getScenarioOfIdFromRiSc } from '../../utils/scenario.ts';\nimport styles from './ActionRowList.module.css';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\n\ntype ActionRowListProps = {\n scenarioId: string;\n displayedActions?: Action[]; // Specify if not every action of scenario is to be displayed\n allowDeletion?: boolean;\n allowEdit?: boolean;\n};\n\nexport function ActionRowList(props: ActionRowListProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc } = useRiScs();\n const { submitEditedScenarioToRiSc } = useScenario();\n const { profileInfo } = useBackstageContext();\n const [pendingActionStatusUpdates, setPendingActionStatusUpdates] = useState<\n Record<string, Record<string, ActionStatusOptions>>\n >({});\n const [pendingActionUpdatesHistory, setPendingActionUpdatesHistory] =\n useState<string[]>([]);\n\n const onRefreshActionStatus = (action: Action) => {\n if (isToday(action.lastUpdated ?? null)) return;\n\n setPendingActionStatusUpdates(prev => ({\n ...prev,\n [props.scenarioId]: {\n ...prev[props.scenarioId],\n [action.ID]: action.status as ActionStatusOptions,\n },\n }));\n setPendingActionUpdatesHistory(prev => [...prev, action.ID]);\n };\n\n const onNewActionStatus = (\n actionId: string,\n newStatus: ActionStatusOptions,\n ) => {\n setPendingActionStatusUpdates(prev => ({\n ...prev,\n [props.scenarioId]: {\n ...prev[props.scenarioId],\n [actionId]: newStatus,\n },\n }));\n setPendingActionUpdatesHistory(prev => [...prev, actionId]);\n };\n\n const onDeleteAction = (actionId: string) => {\n const oldScenario = getScenarioOfIdFromRiSc(props.scenarioId, selectedRiSc);\n if (!oldScenario) return;\n const newScenario = {\n ...oldScenario,\n actions: oldScenario.actions.filter(a => a.ID !== actionId),\n };\n submitEditedScenarioToRiSc(newScenario);\n };\n\n const onSaveAction = (newAction: Action) => {\n const oldScenario = getScenarioOfIdFromRiSc(props.scenarioId, selectedRiSc);\n if (!oldScenario) return;\n submitEditedScenarioToRiSc(\n {\n ...oldScenario,\n actions: oldScenario.actions.map(a =>\n a.ID === newAction.ID ? newAction : a,\n ),\n },\n {\n profileInfo: profileInfo,\n },\n );\n };\n\n const debounceCallback = useCallback(\n (updates: Record<string, Record<string, ActionStatusOptions>>) => {\n if (Object.keys(updates).length === 0) return;\n\n Object.keys(updates).forEach(scenarioId => {\n const oldScenario = getScenarioOfIdFromRiSc(scenarioId, selectedRiSc);\n if (!oldScenario) return;\n const newActionArray = oldScenario.actions.map(a =>\n a.ID in updates[scenarioId]\n ? {\n ...a,\n status: updates[scenarioId][a.ID] ?? a.status,\n }\n : a,\n );\n\n const updatedScenario = {\n ...oldScenario,\n actions: newActionArray,\n };\n\n submitEditedScenarioToRiSc(updatedScenario, {\n idsOfActionsToForceUpdateLastUpdatedValue: Object.keys(\n updates[scenarioId],\n ),\n profileInfo: profileInfo,\n onSuccess: () => {\n setPendingActionStatusUpdates({});\n },\n onError: () => {\n // TODO: Should probably retry once before canceling updates\n setPendingActionStatusUpdates(prevStatusUpdates => {\n setPendingActionUpdatesHistory(prevHistory =>\n prevHistory.filter(actionId =>\n Object.keys(prevStatusUpdates[scenarioId] ?? {}).includes(\n actionId,\n ),\n ),\n );\n return {};\n });\n },\n });\n });\n },\n [submitEditedScenarioToRiSc, profileInfo, selectedRiSc],\n );\n\n const { flush } = useDebounce<\n Record<string, Record<string, ActionStatusOptions>>\n >(pendingActionStatusUpdates, 6000, debounceCallback);\n\n const actions =\n props.displayedActions ??\n getScenarioOfIdFromRiSc(props.scenarioId, selectedRiSc)?.actions ??\n [];\n\n useEffect(() => {\n return () => {\n // flush on unmount. makes sure changes are saved\n flush();\n };\n }, [flush]);\n\n if (actions.length === 0) {\n return (\n <Flex align=\"center\" direction=\"column\">\n <Divider flexItem />\n <Text className={styles.noActionsText}>\n {t('scenarioTable.noActionsLong')}\n </Text>\n </Flex>\n );\n }\n\n return (\n <Flex direction=\"column\">\n <Divider />\n {actions.map((action, index) => (\n <Fragment key={`Action-${action.ID}-${index}`}>\n <ActionRow\n action={action}\n index={index}\n onRefreshActionStatus={onRefreshActionStatus}\n onNewActionStatus={onNewActionStatus}\n onDeleteAction={onDeleteAction}\n onSaveAction={onSaveAction}\n optimisticUpdatedStatus={\n pendingActionUpdatesHistory.includes(action.ID)\n ? UpdatedStatusEnum.UPDATED\n : undefined\n }\n optimisticStatus={\n pendingActionStatusUpdates[props.scenarioId]?.[action.ID]\n }\n allowDeletion={props.allowDeletion}\n allowEdit={props.allowEdit}\n />\n <Divider />\n </Fragment>\n ))}\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".ActionRowList-module_noActionsText__2jBWU {\n font-style: italic;\n}\n";
|
|
4
|
+
var styles = {"noActionsText":"ActionRowList-module_noActionsText__2jBWU"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=ActionRowList.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionRowList.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, Fragment } from 'react';
|
|
3
3
|
import Box from '@mui/material/Box';
|
|
4
|
-
import { RiskMatrixScenarioCount } from './RiskMatrixScenarioCount.esm.js';
|
|
5
4
|
import { AggregatedCost } from './AggregatedCost.esm.js';
|
|
6
5
|
import { MatrixTabs } from './Tabs.esm.js';
|
|
7
6
|
import { riskMatrix } from '../../utils/constants.esm.js';
|
|
@@ -11,21 +10,14 @@ import { useFontStyles } from '../../utils/style.esm.js';
|
|
|
11
10
|
import { useRiskMatrixStyles } from './riskMatrixStyle.esm.js';
|
|
12
11
|
import { RiskMatrixTabs } from './utils.esm.js';
|
|
13
12
|
import { Card, CardHeader, Text, CardBody } from '@backstage/ui';
|
|
13
|
+
import { RiskMatrixSquare } from './RiskMatrixSquare.esm.js';
|
|
14
14
|
|
|
15
15
|
function RiskMatrix({
|
|
16
16
|
riScWithMetadata
|
|
17
17
|
}) {
|
|
18
18
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
19
19
|
const { label2 } = useFontStyles();
|
|
20
|
-
const {
|
|
21
|
-
grid,
|
|
22
|
-
gridWrapper,
|
|
23
|
-
konsekvens,
|
|
24
|
-
sannsynlighet,
|
|
25
|
-
square,
|
|
26
|
-
text,
|
|
27
|
-
centered
|
|
28
|
-
} = useRiskMatrixStyles();
|
|
20
|
+
const { grid, gridWrapper, konsekvens, sannsynlighet, text, centered } = useRiskMatrixStyles();
|
|
29
21
|
const [tab, setTab] = useState(RiskMatrixTabs.initialRisk);
|
|
30
22
|
return /* @__PURE__ */ jsxs(Card, { children: [
|
|
31
23
|
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(Text, { variant: "title-small", weight: "bold", children: t("riskMatrix.title") }) }),
|
|
@@ -58,22 +50,17 @@ function RiskMatrix({
|
|
|
58
50
|
) }),
|
|
59
51
|
riskMatrix.map((row, rowIndex) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
60
52
|
/* @__PURE__ */ jsx(Box, { className: centered, children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", className: text, children: 5 - rowIndex }) }),
|
|
61
|
-
row.map((
|
|
62
|
-
|
|
53
|
+
row.map((_, colIndex) => /* @__PURE__ */ jsx(
|
|
54
|
+
RiskMatrixSquare,
|
|
63
55
|
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
initialRisk: tab === RiskMatrixTabs.initialRisk
|
|
73
|
-
}
|
|
74
|
-
)
|
|
75
|
-
},
|
|
76
|
-
colIndex
|
|
56
|
+
size: "grid",
|
|
57
|
+
consequence: 4 - rowIndex,
|
|
58
|
+
probability: colIndex,
|
|
59
|
+
riScCountObject: {
|
|
60
|
+
isInitialRisk: tab === RiskMatrixTabs.initialRisk,
|
|
61
|
+
riSc: riScWithMetadata
|
|
62
|
+
}
|
|
63
|
+
}
|
|
77
64
|
))
|
|
78
65
|
] }, rowIndex)),
|
|
79
66
|
/* @__PURE__ */ jsx(Box, { className: centered }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiskMatrix.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrix.tsx"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport {
|
|
1
|
+
{"version":3,"file":"RiskMatrix.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrix.tsx"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport Box from '@mui/material/Box';\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 { useFontStyles } from '../../utils/style';\nimport { useRiskMatrixStyles } from './riskMatrixStyle';\nimport { RiskMatrixTabs } from './utils';\nimport { Card, CardBody, CardHeader, Text } from '@backstage/ui';\nimport { RiskMatrixSquare } from './RiskMatrixSquare.tsx';\n\nexport function RiskMatrix({\n riScWithMetadata,\n}: {\n riScWithMetadata: RiScWithMetadata;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { label2 } = useFontStyles();\n const { grid, gridWrapper, konsekvens, sannsynlighet, text, centered } =\n useRiskMatrixStyles();\n\n const [tab, setTab] = useState<RiskMatrixTabs>(RiskMatrixTabs.initialRisk);\n\n return (\n <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\n riSc={riScWithMetadata.content}\n initialRisk={tab === RiskMatrixTabs.initialRisk}\n />\n </Box>\n )}\n <Box className={gridWrapper}>\n <Box className={grid}>\n <Box className={konsekvens}>\n <Text\n variant=\"body-large\"\n weight=\"bold\"\n className={`${centered} ${label2}`}\n >\n {t('dictionary.consequence')}\n </Text>\n </Box>\n {riskMatrix.map((row, rowIndex) => (\n <Fragment key={rowIndex}>\n <Box className={centered}>\n <Text variant=\"title-x-small\" weight=\"bold\" className={text}>\n {5 - rowIndex}\n </Text>\n </Box>\n {row.map((_, colIndex) => (\n <RiskMatrixSquare\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={centered} />\n <Box className={centered} />\n {riskMatrix.map((_, col) => (\n <Box className={centered} key={col}>\n <Text variant=\"title-x-small\" weight=\"bold\" className={text}>\n {col + 1}\n </Text>\n </Box>\n ))}\n <Box className={sannsynlighet}>\n <Text\n weight=\"bold\"\n variant=\"body-large\"\n className={`${centered} ${label2}`}\n >\n {t('dictionary.probability')}\n </Text>\n </Box>\n </Box>\n </Box>\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import Box from '@mui/material/Box';
|
|
3
|
+
import { riskMatrixStroke, riskMatrix } from '../../utils/constants.esm.js';
|
|
4
|
+
import { RiskMatrixScenarioCount } from './RiskMatrixScenarioCount.esm.js';
|
|
5
|
+
import styles from './RiskMatrixSquare.module.css.esm.js';
|
|
6
|
+
|
|
7
|
+
function RiskMatrixSquare(props) {
|
|
8
|
+
return /* @__PURE__ */ jsx(
|
|
9
|
+
Box,
|
|
10
|
+
{
|
|
11
|
+
className: `${styles.squareWithRiScCount} ${props.size === "small" ? styles.smallSquare : ""}`,
|
|
12
|
+
style: {
|
|
13
|
+
backgroundColor: riskMatrix[4 - props.consequence][props.probability],
|
|
14
|
+
borderColor: riskMatrixStroke[4 - props.consequence][props.probability]
|
|
15
|
+
},
|
|
16
|
+
children: props.riScCountObject && /* @__PURE__ */ jsx(
|
|
17
|
+
RiskMatrixScenarioCount,
|
|
18
|
+
{
|
|
19
|
+
riScWithMetadata: props.riScCountObject.riSc,
|
|
20
|
+
probability: props.probability,
|
|
21
|
+
consequence: props.consequence,
|
|
22
|
+
initialRisk: props.riScCountObject.isInitialRisk
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
},
|
|
26
|
+
`S:${props.probability} K:${props.consequence}`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { RiskMatrixSquare };
|
|
31
|
+
//# sourceMappingURL=RiskMatrixSquare.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiskMatrixSquare.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrixSquare.tsx"],"sourcesContent":["import { RiScWithMetadata } from '../../utils/types.ts';\nimport Box from '@mui/material/Box';\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 <Box\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 </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;AAgBO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;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;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".RiskMatrixSquare-module_squareWithRiScCount__NW-Vi {\n display: flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n border-style: solid;\n border-width: 1px;\n border-radius: 10%;\n}\n\n.RiskMatrixSquare-module_smallSquare__iZdIf {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n}\n";
|
|
4
|
+
var styles = {"squareWithRiScCount":"RiskMatrixSquare-module_squareWithRiScCount__NW-Vi","smallSquare":"RiskMatrixSquare-module_smallSquare__iZdIf"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=RiskMatrixSquare.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiskMatrixSquare.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import Button from '@mui/material/Button';
|
|
3
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
4
|
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
5
|
-
import {
|
|
5
|
+
import { Dialog, DialogHeader, Text, DialogBody } from '@backstage/ui';
|
|
6
6
|
import styles from './ScenarioDrawer.module.css.esm.js';
|
|
7
7
|
|
|
8
8
|
function DeleteScenarioConfirmation({
|
|
@@ -53,7 +53,7 @@ function ConfirmationDialog({
|
|
|
53
53
|
confirmButtonText
|
|
54
54
|
}) {
|
|
55
55
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
56
|
-
return /* @__PURE__ */
|
|
56
|
+
return /* @__PURE__ */ jsxs(
|
|
57
57
|
Dialog,
|
|
58
58
|
{
|
|
59
59
|
isOpen,
|
|
@@ -87,7 +87,7 @@ function ConfirmationDialog({
|
|
|
87
87
|
] })
|
|
88
88
|
]
|
|
89
89
|
}
|
|
90
|
-
)
|
|
90
|
+
);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
export { DeleteActionConfirmation, DeleteScenarioConfirmation };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteConfirmation.esm.js","sources":["../../../../src/components/scenarioDrawer/components/DeleteConfirmation.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport type { SetState } from '../../../utils/types';\nimport {
|
|
1
|
+
{"version":3,"file":"DeleteConfirmation.esm.js","sources":["../../../../src/components/scenarioDrawer/components/DeleteConfirmation.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport type { SetState } from '../../../utils/types';\nimport { Text, Dialog, DialogHeader, DialogBody } from '@backstage/ui';\nimport styles from '../components/ScenarioDrawer.module.css';\n\ntype DeleteScenarioConfirmationProps = {\n isOpen: ConfirmationDialogProps['isOpen'];\n setIsOpen: SetState<ConfirmationDialogProps['isOpen']>;\n onConfirm?: ConfirmationDialogProps['onConfirm'];\n};\n\nexport function DeleteScenarioConfirmation({\n isOpen,\n setIsOpen,\n onConfirm,\n}: DeleteScenarioConfirmationProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <ConfirmationDialog\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onConfirm={() => {\n setIsOpen(false);\n onConfirm?.();\n }}\n title={t('scenarioDrawer.deleteScenarioConfirmation')}\n confirmButtonText={t('scenarioDrawer.deleteScenarioButton')}\n />\n );\n}\n\n// #####################################################\n\ntype DeleteActionConfirmationProps = {\n isOpen: ConfirmationDialogProps['isOpen'];\n setIsOpen: SetState<ConfirmationDialogProps['isOpen']>;\n onConfirm?: ConfirmationDialogProps['onConfirm'];\n};\n\nexport function DeleteActionConfirmation({\n isOpen,\n setIsOpen,\n onConfirm,\n}: DeleteActionConfirmationProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <ConfirmationDialog\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onConfirm={() => {\n setIsOpen(false);\n onConfirm?.();\n }}\n title={t('scenarioDrawer.deleteActionConfirmation')}\n confirmButtonText={t('scenarioDrawer.deleteActionButton')}\n />\n );\n}\n\n// #####################################################\n\ntype ConfirmationDialogProps = {\n isOpen: boolean;\n onClose?: () => void;\n onConfirm?: () => void;\n title: string;\n confirmButtonText: string;\n};\n\n/**\n * Helper component.\n */\nfunction ConfirmationDialog({\n isOpen,\n onClose,\n onConfirm,\n title,\n confirmButtonText,\n}: ConfirmationDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n className={styles.deleteConfirmationDialog}\n >\n <DialogHeader>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {title}\n </Text>\n </DialogHeader>\n <DialogBody className={styles.deleteConfirmationDialogBody}>\n <Button\n variant=\"outlined\"\n onClick={event => {\n event.stopPropagation();\n onClose?.();\n }}\n >\n {t('dictionary.cancel')}\n </Button>\n <Button\n onClick={event => {\n event.stopPropagation();\n onConfirm?.();\n }}\n variant=\"contained\"\n >\n {confirmButtonText}\n </Button>\n </DialogBody>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAaO,SAAS,0BAAA,CAA2B;AAAA,EACzC,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MAC9B,WAAW,MAAM;AACf,QAAA,SAAA,CAAU,KAAK,CAAA;AACf,QAAA,SAAA,IAAY;AAAA,MACd,CAAA;AAAA,MACA,KAAA,EAAO,EAAE,2CAA2C,CAAA;AAAA,MACpD,iBAAA,EAAmB,EAAE,qCAAqC;AAAA;AAAA,GAC5D;AAEJ;AAUO,SAAS,wBAAA,CAAyB;AAAA,EACvC,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK,CAAA;AAAA,MAC9B,WAAW,MAAM;AACf,QAAA,SAAA,CAAU,KAAK,CAAA;AACf,QAAA,SAAA,IAAY;AAAA,MACd,CAAA;AAAA,MACA,KAAA,EAAO,EAAE,yCAAyC,CAAA;AAAA,MAClD,iBAAA,EAAmB,EAAE,mCAAmC;AAAA;AAAA,GAC1D;AAEJ;AAeA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,YAAA,EAAc,OAAA;AAAA,MACd,WAAW,MAAA,CAAO,wBAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,iBAAgB,MAAA,EAAO,MAAA,EAClC,iBACH,CAAA,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,MAAA,CAAO,4BAAA,EAC5B,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,UAAA;AAAA,cACR,SAAS,CAAA,KAAA,KAAS;AAChB,gBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,gBAAA,OAAA,IAAU;AAAA,cACZ,CAAA;AAAA,cAEC,YAAE,mBAAmB;AAAA;AAAA,WACxB;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAS,CAAA,KAAA,KAAS;AAChB,gBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,gBAAA,SAAA,IAAY;AAAA,cACd,CAAA;AAAA,cACA,OAAA,EAAQ,WAAA;AAAA,cAEP,QAAA,EAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -4,7 +4,7 @@ import { UpdatedStatusEnum } from '../../utils/utilityfunctions.esm.js';
|
|
|
4
4
|
import { OutdatedActionsCountButton } from './components/OutdatedActionsCountButton/OutdatedActionsCountButton.esm.js';
|
|
5
5
|
|
|
6
6
|
function OutdatedActionsCounts(props) {
|
|
7
|
-
return /* @__PURE__ */ jsxs(Flex, { mb: "24px", children: [
|
|
7
|
+
return /* @__PURE__ */ jsxs(Flex, { mb: "24px", style: { flexWrap: "wrap" }, children: [
|
|
8
8
|
props.veryOutdatedCount > 0 && /* @__PURE__ */ jsx(
|
|
9
9
|
OutdatedActionsCountButton,
|
|
10
10
|
{
|
|
@@ -22,6 +22,15 @@ function OutdatedActionsCounts(props) {
|
|
|
22
22
|
onToggle: props.onToggle,
|
|
23
23
|
isSelected: props.visibleType === UpdatedStatusEnum.OUTDATED
|
|
24
24
|
}
|
|
25
|
+
),
|
|
26
|
+
props.updatedCount > 0 && /* @__PURE__ */ jsx(
|
|
27
|
+
OutdatedActionsCountButton,
|
|
28
|
+
{
|
|
29
|
+
type: UpdatedStatusEnum.UPDATED,
|
|
30
|
+
count: props.updatedCount,
|
|
31
|
+
onToggle: props.onToggle,
|
|
32
|
+
isSelected: props.visibleType === UpdatedStatusEnum.UPDATED
|
|
33
|
+
}
|
|
25
34
|
)
|
|
26
35
|
] });
|
|
27
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutdatedActionsCounts.esm.js","sources":["../../../src/components/scenarioTable/OutdatedActionsCounts.tsx"],"sourcesContent":["import { Flex } from '@backstage/ui';\nimport {\n UpdatedStatusEnum,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions.ts';\nimport { OutdatedActionsCountButton } from './components/OutdatedActionsCountButton';\n\ntype OutdatedActionsCountsProps = {\n veryOutdatedCount: number;\n outdatedCount: number;\n onToggle: (type: UpdatedStatusEnumType) => void;\n visibleType: UpdatedStatusEnumType | null;\n};\nexport function OutdatedActionsCounts(props: OutdatedActionsCountsProps) {\n return (\n <Flex mb=\"24px\">\n {props.veryOutdatedCount > 0 && (\n <OutdatedActionsCountButton\n type={UpdatedStatusEnum.VERY_OUTDATED}\n count={props.veryOutdatedCount}\n onToggle={props.onToggle}\n isSelected={props.visibleType === UpdatedStatusEnum.VERY_OUTDATED}\n />\n )}\n {props.outdatedCount > 0 && (\n <OutdatedActionsCountButton\n type={UpdatedStatusEnum.OUTDATED}\n count={props.outdatedCount}\n onToggle={props.onToggle}\n isSelected={props.visibleType === UpdatedStatusEnum.OUTDATED}\n />\n )}\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"OutdatedActionsCounts.esm.js","sources":["../../../src/components/scenarioTable/OutdatedActionsCounts.tsx"],"sourcesContent":["import { Flex } from '@backstage/ui';\nimport {\n UpdatedStatusEnum,\n UpdatedStatusEnumType,\n} from '../../utils/utilityfunctions.ts';\nimport { OutdatedActionsCountButton } from './components/OutdatedActionsCountButton';\n\ntype OutdatedActionsCountsProps = {\n veryOutdatedCount: number;\n outdatedCount: number;\n updatedCount: number;\n onToggle: (type: UpdatedStatusEnumType) => void;\n visibleType: UpdatedStatusEnumType | null;\n};\nexport function OutdatedActionsCounts(props: OutdatedActionsCountsProps) {\n return (\n <Flex mb=\"24px\" style={{ flexWrap: 'wrap' }}>\n {props.veryOutdatedCount > 0 && (\n <OutdatedActionsCountButton\n type={UpdatedStatusEnum.VERY_OUTDATED}\n count={props.veryOutdatedCount}\n onToggle={props.onToggle}\n isSelected={props.visibleType === UpdatedStatusEnum.VERY_OUTDATED}\n />\n )}\n {props.outdatedCount > 0 && (\n <OutdatedActionsCountButton\n type={UpdatedStatusEnum.OUTDATED}\n count={props.outdatedCount}\n onToggle={props.onToggle}\n isSelected={props.visibleType === UpdatedStatusEnum.OUTDATED}\n />\n )}\n {props.updatedCount > 0 && (\n <OutdatedActionsCountButton\n type={UpdatedStatusEnum.UPDATED}\n count={props.updatedCount}\n onToggle={props.onToggle}\n isSelected={props.visibleType === UpdatedStatusEnum.UPDATED}\n />\n )}\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;AAcO,SAAS,sBAAsB,KAAA,EAAmC;AACvE,EAAA,uBACE,IAAA,CAAC,QAAK,EAAA,EAAG,MAAA,EAAO,OAAO,EAAE,QAAA,EAAU,QAAO,EACvC,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,oBAAoB,CAAA,oBACzB,GAAA;AAAA,MAAC,0BAAA;AAAA,MAAA;AAAA,QACC,MAAM,iBAAA,CAAkB,aAAA;AAAA,QACxB,OAAO,KAAA,CAAM,iBAAA;AAAA,QACb,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,UAAA,EAAY,KAAA,CAAM,WAAA,KAAgB,iBAAA,CAAkB;AAAA;AAAA,KACtD;AAAA,IAED,KAAA,CAAM,gBAAgB,CAAA,oBACrB,GAAA;AAAA,MAAC,0BAAA;AAAA,MAAA;AAAA,QACC,MAAM,iBAAA,CAAkB,QAAA;AAAA,QACxB,OAAO,KAAA,CAAM,aAAA;AAAA,QACb,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,UAAA,EAAY,KAAA,CAAM,WAAA,KAAgB,iBAAA,CAAkB;AAAA;AAAA,KACtD;AAAA,IAED,KAAA,CAAM,eAAe,CAAA,oBACpB,GAAA;AAAA,MAAC,0BAAA;AAAA,MAAA;AAAA,QACC,MAAM,iBAAA,CAAkB,OAAA;AAAA,QACxB,OAAO,KAAA,CAAM,YAAA;AAAA,QACb,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,UAAA,EAAY,KAAA,CAAM,WAAA,KAAgB,iBAAA,CAAkB;AAAA;AAAA;AACtD,GAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -78,7 +78,16 @@ function ScenarioTable(props) {
|
|
|
78
78
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
79
79
|
/* @__PURE__ */ jsxs(Flex, { p: "24px 24px 18px 24px", children: [
|
|
80
80
|
props.isEditing && allowDrag && /* @__PURE__ */ jsx("div", { className: tableCellDragIcon }),
|
|
81
|
-
/* @__PURE__ */ jsx(
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
Box,
|
|
83
|
+
{
|
|
84
|
+
style: {
|
|
85
|
+
width: props.isEditing && allowDrag ? "33%" : "40%",
|
|
86
|
+
paddingLeft: "5%"
|
|
87
|
+
},
|
|
88
|
+
children: /* @__PURE__ */ jsx(Text, { weight: "bold", variant: "body-large", children: t("dictionary.title") })
|
|
89
|
+
}
|
|
90
|
+
),
|
|
82
91
|
/* @__PURE__ */ jsx(Box, { style: { width: "15%" }, children: /* @__PURE__ */ jsx(Text, { weight: "bold", variant: "body-large", children: t("dictionary.initialRisk") }) }),
|
|
83
92
|
/* @__PURE__ */ jsx(Box, { style: { width: props.isEditing ? "25%" : "35%" }, children: /* @__PURE__ */ jsx(Text, { weight: "bold", variant: "body-large", children: t("dictionary.actionsWithStatus") }) }),
|
|
84
93
|
/* @__PURE__ */ jsx(Box, { style: { width: "15%" }, children: /* @__PURE__ */ jsx(Text, { weight: "bold", variant: "body-large", children: t("dictionary.restRisk") }) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioTable.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTable.tsx"],"sourcesContent":["import { useTableStyles } from './ScenarioTableStyles.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { RiSc, RiScWithMetadata } from '../../utils/types.ts';\nimport { useEffect, useState } from 'react';\nimport { useDisplayScenarios, useSearchActions } from '../../utils/hooks.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { Text, Flex, Box, Card } from '@backstage/ui';\nimport { ScenarioTableRow } from './ScenarioTableRow.tsx';\nimport { UpdatedStatusEnumType } from '../../utils/utilityfunctions.ts';\n\ntype ScenarioTableProps = {\n sortOrder?: string | null;\n isEditing: boolean;\n isEditingAllowed: boolean;\n riScWithMetadata: RiScWithMetadata;\n visibleType: UpdatedStatusEnumType | null;\n searchQuery: string;\n};\n\nexport function ScenarioTable(props: ScenarioTableProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { tableCellDragIcon, tableCard } = useTableStyles();\n const riSc = props.riScWithMetadata.content;\n const [tempScenarios, setTempScenarios] = useState(riSc.scenarios);\n const { updateRiSc, updateStatus } = useRiScs();\n const visibleType = props.visibleType;\n const sortOrder = props.sortOrder;\n\n const { openScenarioDrawer } = useScenario();\n\n useEffect(() => {\n if (!updateStatus.isSuccess) {\n return;\n }\n const updatedScenarios = tempScenarios\n .map(scenario => {\n const ordered = riSc.scenarios.find(s => s.ID === scenario.ID);\n return ordered ? ordered : null;\n })\n .filter(scenario => scenario !== null) as RiSc['scenarios'];\n\n const scenariosNotInTemp = riSc.scenarios.filter(\n scenario => !updatedScenarios.find(s => s.ID === scenario.ID),\n );\n\n setTempScenarios([...updatedScenarios, ...scenariosNotInTemp]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [riSc.scenarios, updateStatus.isSuccess]);\n\n function moveRowLocal(dragId: string, hoverId: string) {\n setTempScenarios(prev => {\n const dragIndex = prev.findIndex(s => s.ID === dragId);\n const hoverIndex = prev.findIndex(s => s.ID === hoverId);\n\n if (dragIndex === -1 || hoverIndex === -1) return prev;\n\n const updated = [...prev];\n const [removed] = updated.splice(dragIndex, 1);\n\n updated.splice(hoverIndex, 0, removed);\n return updated;\n });\n }\n\n function moveRowFinal(dragId: string, dropId: string) {\n setTempScenarios(prev => {\n const dragIndex = prev.findIndex(item => item.ID === dragId);\n const dropIndex = prev.findIndex(item => item.ID === dropId);\n\n if (dragIndex === -1 || dropIndex === -1) return prev;\n\n const updatedScenarios = [...prev];\n const [removed] = updatedScenarios.splice(dragIndex, 1);\n updatedScenarios.splice(dropIndex, 0, removed);\n\n const updatedRiSc = {\n ...props.riScWithMetadata,\n content: {\n ...riSc,\n scenarios: updatedScenarios,\n },\n };\n updateRiSc(updatedRiSc, () => {});\n return updatedScenarios;\n });\n }\n\n const lastPublishedCommits =\n props.riScWithMetadata.lastPublished?.numberOfCommits ?? null;\n\n const displayScenarios: RiSc['scenarios'] = useDisplayScenarios(\n tempScenarios,\n visibleType,\n lastPublishedCommits,\n sortOrder ?? undefined,\n );\n\n const { matches: searchedActions } = useSearchActions(\n riSc.scenarios,\n props.searchQuery,\n );\n const scenariosToRender =\n (props.searchQuery ?? '')\n ? displayScenarios.filter(search => Boolean(searchedActions[search.ID]))\n : displayScenarios;\n\n const allowDrag = (sortOrder ?? '') === '';\n\n return (\n <>\n <Flex p=\"24px 24px 18px 24px\">\n {props.isEditing && allowDrag && <div className={tableCellDragIcon} />}\n <Box style={{ width: props.isEditing && allowDrag ? '30%' : '35%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.title')}\n </Text>\n </Box>\n <Box style={{ width: '15%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.initialRisk')}\n </Text>\n </Box>\n <Box style={{ width: props.isEditing ? '25%' : '35%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.actionsWithStatus')}\n </Text>\n </Box>\n <Box style={{ width: '15%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.restRisk')}\n </Text>\n </Box>\n </Flex>\n {scenariosToRender.map((scenario, idx) => (\n <ScenarioTableRow\n key={scenario.ID}\n scenario={scenario}\n id={scenario.ID}\n index={idx}\n visibleType={visibleType}\n viewRow={(id: string) =>\n openScenarioDrawer(id, props.isEditingAllowed)\n }\n moveRowFinal={moveRowFinal}\n moveRowLocal={moveRowLocal}\n isEditing={props.isEditing}\n allowDrag={allowDrag}\n searchMatches={searchedActions[scenario.ID]}\n />\n ))}\n {props.searchQuery && scenariosToRender.length === 0 && (\n <Card className={tableCard}>\n <Flex align=\"center\" justify=\"center\">\n {t('dictionary.searchQuery')} \"{props.searchQuery}\"\n </Flex>\n </Card>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioTable.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTable.tsx"],"sourcesContent":["import { useTableStyles } from './ScenarioTableStyles.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { RiSc, RiScWithMetadata } from '../../utils/types.ts';\nimport { useEffect, useState } from 'react';\nimport { useDisplayScenarios, useSearchActions } from '../../utils/hooks.ts';\nimport { useRiScs } from '../../contexts/RiScContext.tsx';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { Text, Flex, Box, Card } from '@backstage/ui';\nimport { ScenarioTableRow } from './ScenarioTableRow.tsx';\nimport { UpdatedStatusEnumType } from '../../utils/utilityfunctions.ts';\n\ntype ScenarioTableProps = {\n sortOrder?: string | null;\n isEditing: boolean;\n isEditingAllowed: boolean;\n riScWithMetadata: RiScWithMetadata;\n visibleType: UpdatedStatusEnumType | null;\n searchQuery: string;\n};\n\nexport function ScenarioTable(props: ScenarioTableProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { tableCellDragIcon, tableCard } = useTableStyles();\n const riSc = props.riScWithMetadata.content;\n const [tempScenarios, setTempScenarios] = useState(riSc.scenarios);\n const { updateRiSc, updateStatus } = useRiScs();\n const visibleType = props.visibleType;\n const sortOrder = props.sortOrder;\n\n const { openScenarioDrawer } = useScenario();\n\n useEffect(() => {\n if (!updateStatus.isSuccess) {\n return;\n }\n const updatedScenarios = tempScenarios\n .map(scenario => {\n const ordered = riSc.scenarios.find(s => s.ID === scenario.ID);\n return ordered ? ordered : null;\n })\n .filter(scenario => scenario !== null) as RiSc['scenarios'];\n\n const scenariosNotInTemp = riSc.scenarios.filter(\n scenario => !updatedScenarios.find(s => s.ID === scenario.ID),\n );\n\n setTempScenarios([...updatedScenarios, ...scenariosNotInTemp]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [riSc.scenarios, updateStatus.isSuccess]);\n\n function moveRowLocal(dragId: string, hoverId: string) {\n setTempScenarios(prev => {\n const dragIndex = prev.findIndex(s => s.ID === dragId);\n const hoverIndex = prev.findIndex(s => s.ID === hoverId);\n\n if (dragIndex === -1 || hoverIndex === -1) return prev;\n\n const updated = [...prev];\n const [removed] = updated.splice(dragIndex, 1);\n\n updated.splice(hoverIndex, 0, removed);\n return updated;\n });\n }\n\n function moveRowFinal(dragId: string, dropId: string) {\n setTempScenarios(prev => {\n const dragIndex = prev.findIndex(item => item.ID === dragId);\n const dropIndex = prev.findIndex(item => item.ID === dropId);\n\n if (dragIndex === -1 || dropIndex === -1) return prev;\n\n const updatedScenarios = [...prev];\n const [removed] = updatedScenarios.splice(dragIndex, 1);\n updatedScenarios.splice(dropIndex, 0, removed);\n\n const updatedRiSc = {\n ...props.riScWithMetadata,\n content: {\n ...riSc,\n scenarios: updatedScenarios,\n },\n };\n updateRiSc(updatedRiSc, () => {});\n return updatedScenarios;\n });\n }\n\n const lastPublishedCommits =\n props.riScWithMetadata.lastPublished?.numberOfCommits ?? null;\n\n const displayScenarios: RiSc['scenarios'] = useDisplayScenarios(\n tempScenarios,\n visibleType,\n lastPublishedCommits,\n sortOrder ?? undefined,\n );\n\n const { matches: searchedActions } = useSearchActions(\n riSc.scenarios,\n props.searchQuery,\n );\n const scenariosToRender =\n (props.searchQuery ?? '')\n ? displayScenarios.filter(search => Boolean(searchedActions[search.ID]))\n : displayScenarios;\n\n const allowDrag = (sortOrder ?? '') === '';\n\n return (\n <>\n <Flex p=\"24px 24px 18px 24px\">\n {props.isEditing && allowDrag && <div className={tableCellDragIcon} />}\n <Box\n style={{\n width: props.isEditing && allowDrag ? '33%' : '40%',\n paddingLeft: '5%',\n }}\n >\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.title')}\n </Text>\n </Box>\n <Box style={{ width: '15%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.initialRisk')}\n </Text>\n </Box>\n <Box style={{ width: props.isEditing ? '25%' : '35%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.actionsWithStatus')}\n </Text>\n </Box>\n <Box style={{ width: '15%' }}>\n <Text weight=\"bold\" variant=\"body-large\">\n {t('dictionary.restRisk')}\n </Text>\n </Box>\n </Flex>\n {scenariosToRender.map((scenario, idx) => (\n <ScenarioTableRow\n key={scenario.ID}\n scenario={scenario}\n id={scenario.ID}\n index={idx}\n visibleType={visibleType}\n viewRow={(id: string) =>\n openScenarioDrawer(id, props.isEditingAllowed)\n }\n moveRowFinal={moveRowFinal}\n moveRowLocal={moveRowLocal}\n isEditing={props.isEditing}\n allowDrag={allowDrag}\n searchMatches={searchedActions[scenario.ID]}\n />\n ))}\n {props.searchQuery && scenariosToRender.length === 0 && (\n <Card className={tableCard}>\n <Flex align=\"center\" justify=\"center\">\n {t('dictionary.searchQuery')} \"{props.searchQuery}\"\n </Flex>\n </Card>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ function ScenarioTableCard({
|
|
|
15
15
|
}) {
|
|
16
16
|
const riSc = riScWithMetadata.content;
|
|
17
17
|
const { openNewScenarioWizard } = useScenario();
|
|
18
|
-
const { veryOutdatedCount, outdatedCount } = computeStatusCount(riScWithMetadata);
|
|
18
|
+
const { veryOutdatedCount, outdatedCount, updatedCount } = computeStatusCount(riScWithMetadata);
|
|
19
19
|
const [isEditing, setIsEditing] = useState(false);
|
|
20
20
|
const [visibleType, setVisibleType] = useState(
|
|
21
21
|
null
|
|
@@ -41,6 +41,7 @@ function ScenarioTableCard({
|
|
|
41
41
|
{
|
|
42
42
|
veryOutdatedCount,
|
|
43
43
|
outdatedCount,
|
|
44
|
+
updatedCount,
|
|
44
45
|
onToggle: handleToggle,
|
|
45
46
|
visibleType
|
|
46
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioTableCard.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTableCard.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport {\n computeStatusCount,\n UpdatedStatusEnumType,\n UpdatedStatusEnum,\n} from '../../utils/utilityfunctions';\nimport { Card, CardBody, CardHeader, Flex } from '@backstage/ui';\nimport { ScenarioTableCardHeader } from './ScenarioTableCardHeader.tsx';\nimport { OutdatedActionsCounts } from './OutdatedActionsCounts.tsx';\nimport { AddScenarioButton } from './AddScenarioButton.tsx';\nimport { ScenarioTable } from './ScenarioTable.tsx';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { ScenarioTableFilter } from './ScenarioTableFilter.tsx';\n\ninterface ScenarioTableProps {\n riScWithMetadata: RiScWithMetadata;\n editingAllowed: boolean;\n}\n\nexport function ScenarioTableCard({\n riScWithMetadata,\n editingAllowed,\n}: ScenarioTableProps) {\n const riSc = riScWithMetadata.content;\n const { openNewScenarioWizard } = useScenario();\n const { veryOutdatedCount, outdatedCount } =\n computeStatusCount(riScWithMetadata);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n\n const [visibleType, setVisibleType] = useState<UpdatedStatusEnumType | null>(\n null,\n );\n\n useEffect(() => {\n if (\n visibleType === UpdatedStatusEnum.VERY_OUTDATED &&\n veryOutdatedCount === 0\n ) {\n setVisibleType(null);\n }\n if (visibleType === UpdatedStatusEnum.OUTDATED && outdatedCount === 0) {\n setVisibleType(null);\n }\n }, [visibleType, veryOutdatedCount, outdatedCount]);\n\n function handleToggle(type: UpdatedStatusEnumType) {\n setVisibleType(prev => (prev === type ? null : type));\n }\n const [sortOrder, setSortOrder] = useState<string | null>(null);\n\n const [searchQuery, setSearchQuery] = useState<string>('');\n\n return (\n <Card>\n <CardHeader>\n <ScenarioTableCardHeader />\n </CardHeader>\n <CardBody style={{ paddingTop: '12px' }}>\n {(veryOutdatedCount > 0 || outdatedCount > 0) && (\n <OutdatedActionsCounts\n veryOutdatedCount={veryOutdatedCount}\n outdatedCount={outdatedCount}\n onToggle={handleToggle}\n visibleType={visibleType}\n />\n )}\n {riSc.scenarios.length === 0 && editingAllowed ? (\n <Flex justify=\"center\">\n <AddScenarioButton onNewScenario={openNewScenarioWizard} />\n </Flex>\n ) : (\n <>\n <ScenarioTableFilter\n value={sortOrder}\n onChange={setSortOrder}\n isEditing={isEditing}\n isEditingAllowed={riSc.scenarios.length > 0 && editingAllowed}\n onNewScenario={openNewScenarioWizard}\n onToggleEdit={() =>\n isEditing ? setIsEditing(false) : setIsEditing(true)\n }\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n />\n\n <ScenarioTable\n sortOrder={sortOrder}\n isEditingAllowed={editingAllowed}\n isEditing={isEditing}\n riScWithMetadata={riScWithMetadata}\n visibleType={visibleType}\n searchQuery={searchQuery}\n />\n </>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBO,SAAS,iBAAA,CAAkB;AAAA,EAChC,gBAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,OAAO,gBAAA,CAAiB,OAAA;AAC9B,EAAA,MAAM,EAAE,qBAAA,EAAsB,GAAI,WAAA,EAAY;AAC9C,EAAA,MAAM,EAAE,iBAAA,EAAmB,aAAA,
|
|
1
|
+
{"version":3,"file":"ScenarioTableCard.esm.js","sources":["../../../src/components/scenarioTable/ScenarioTableCard.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport {\n computeStatusCount,\n UpdatedStatusEnumType,\n UpdatedStatusEnum,\n} from '../../utils/utilityfunctions';\nimport { Card, CardBody, CardHeader, Flex } from '@backstage/ui';\nimport { ScenarioTableCardHeader } from './ScenarioTableCardHeader.tsx';\nimport { OutdatedActionsCounts } from './OutdatedActionsCounts.tsx';\nimport { AddScenarioButton } from './AddScenarioButton.tsx';\nimport { ScenarioTable } from './ScenarioTable.tsx';\nimport { useScenario } from '../../contexts/ScenarioContext.tsx';\nimport { ScenarioTableFilter } from './ScenarioTableFilter.tsx';\n\ninterface ScenarioTableProps {\n riScWithMetadata: RiScWithMetadata;\n editingAllowed: boolean;\n}\n\nexport function ScenarioTableCard({\n riScWithMetadata,\n editingAllowed,\n}: ScenarioTableProps) {\n const riSc = riScWithMetadata.content;\n const { openNewScenarioWizard } = useScenario();\n const { veryOutdatedCount, outdatedCount, updatedCount } =\n computeStatusCount(riScWithMetadata);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n\n const [visibleType, setVisibleType] = useState<UpdatedStatusEnumType | null>(\n null,\n );\n\n useEffect(() => {\n if (\n visibleType === UpdatedStatusEnum.VERY_OUTDATED &&\n veryOutdatedCount === 0\n ) {\n setVisibleType(null);\n }\n if (visibleType === UpdatedStatusEnum.OUTDATED && outdatedCount === 0) {\n setVisibleType(null);\n }\n }, [visibleType, veryOutdatedCount, outdatedCount]);\n\n function handleToggle(type: UpdatedStatusEnumType) {\n setVisibleType(prev => (prev === type ? null : type));\n }\n const [sortOrder, setSortOrder] = useState<string | null>(null);\n\n const [searchQuery, setSearchQuery] = useState<string>('');\n\n return (\n <Card>\n <CardHeader>\n <ScenarioTableCardHeader />\n </CardHeader>\n <CardBody style={{ paddingTop: '12px' }}>\n {(veryOutdatedCount > 0 || outdatedCount > 0) && (\n <OutdatedActionsCounts\n veryOutdatedCount={veryOutdatedCount}\n outdatedCount={outdatedCount}\n updatedCount={updatedCount}\n onToggle={handleToggle}\n visibleType={visibleType}\n />\n )}\n {riSc.scenarios.length === 0 && editingAllowed ? (\n <Flex justify=\"center\">\n <AddScenarioButton onNewScenario={openNewScenarioWizard} />\n </Flex>\n ) : (\n <>\n <ScenarioTableFilter\n value={sortOrder}\n onChange={setSortOrder}\n isEditing={isEditing}\n isEditingAllowed={riSc.scenarios.length > 0 && editingAllowed}\n onNewScenario={openNewScenarioWizard}\n onToggleEdit={() =>\n isEditing ? setIsEditing(false) : setIsEditing(true)\n }\n searchQuery={searchQuery}\n onSearchQueryChange={setSearchQuery}\n />\n\n <ScenarioTable\n sortOrder={sortOrder}\n isEditingAllowed={editingAllowed}\n isEditing={isEditing}\n riScWithMetadata={riScWithMetadata}\n visibleType={visibleType}\n searchQuery={searchQuery}\n />\n </>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|