@kartverket/backstage-plugin-risk-scorecard 6.1.6 → 6.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +46 -70
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionFormItem.esm.js +77 -116
- package/dist/components/scenarioDrawer/components/ActionFormItem.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionFormItem.module.css.esm.js +8 -0
- package/dist/components/scenarioDrawer/components/ActionFormItem.module.css.esm.js.map +1 -0
- package/dist/components/scenarioDrawer/components/ActionsSection.esm.js +8 -8
- package/dist/components/scenarioDrawer/components/ActionsSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/DeleteConfirmation.esm.js +3 -3
- package/dist/components/scenarioDrawer/components/DeleteConfirmation.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/RiskFormSection.esm.js +5 -5
- package/dist/components/scenarioDrawer/components/RiskFormSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/RiskSection.esm.js +2 -2
- package/dist/components/scenarioDrawer/components/RiskSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ScopeFormSection.esm.js +2 -2
- package/dist/components/scenarioDrawer/components/ScopeFormSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ScopeSection.esm.js +2 -2
- package/dist/components/scenarioDrawer/components/ScopeSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/scenarioDrawer.module.css.esm.js +3 -3
- package/dist/components/scenarioTable/ScenarioTable.esm.js +3 -4
- package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTable.module.css.esm.js +8 -0
- package/dist/components/scenarioTable/ScenarioTable.module.css.esm.js.map +1 -0
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js +5 -3
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js +62 -72
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js.map +1 -1
- package/dist/components/scenarioWizard/ScenarioWizard.module.css.esm.js +2 -2
- package/package.json +1 -1
- package/dist/components/scenarioDrawer/components/ScenarioDrawer.module.css.esm.js +0 -8
- package/dist/components/scenarioDrawer/components/ScenarioDrawer.module.css.esm.js.map +0 -1
- package/dist/components/scenarioTable/ScenarioTableStyles.esm.js +0 -145
- package/dist/components/scenarioTable/ScenarioTableStyles.esm.js.map +0 -1
|
@@ -19,6 +19,7 @@ import ScenarioForm from './components/RiskFormSection.esm.js';
|
|
|
19
19
|
import ScopeFormSection from './components/ScopeFormSection.esm.js';
|
|
20
20
|
import { useBackstageContext } from '../../contexts/BackstageContext.esm.js';
|
|
21
21
|
import styles from '../common/alertBar.module.css.esm.js';
|
|
22
|
+
import drawerStyles from './scenarioDrawer.module.css.esm.js';
|
|
22
23
|
import { ScopeSection } from './components/ScopeSection.esm.js';
|
|
23
24
|
import { RiskSection } from './components/RiskSection.esm.js';
|
|
24
25
|
import AlertBar from '../common/AlertBar/AlertBar.esm.js';
|
|
@@ -108,36 +109,26 @@ function ScenarioDrawer() {
|
|
|
108
109
|
open: isDrawerOpen,
|
|
109
110
|
onClose,
|
|
110
111
|
children: [
|
|
111
|
-
/* @__PURE__ */ jsxs(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
{
|
|
132
|
-
size: "medium",
|
|
133
|
-
variant: "secondary",
|
|
134
|
-
onClick: isEditing ? onCancel : onClose,
|
|
135
|
-
children: t(isEditing ? "dictionary.cancel" : "dictionary.close")
|
|
136
|
-
}
|
|
137
|
-
)
|
|
138
|
-
]
|
|
139
|
-
}
|
|
140
|
-
),
|
|
112
|
+
/* @__PURE__ */ jsxs(Box, { className: drawerStyles.topButtons, children: [
|
|
113
|
+
!isEditing && isEditingAllowed && /* @__PURE__ */ jsx(
|
|
114
|
+
Button,
|
|
115
|
+
{
|
|
116
|
+
size: "medium",
|
|
117
|
+
variant: "primary",
|
|
118
|
+
onClick: () => setIsEditing(true),
|
|
119
|
+
children: t("dictionary.edit")
|
|
120
|
+
}
|
|
121
|
+
),
|
|
122
|
+
/* @__PURE__ */ jsx(
|
|
123
|
+
Button,
|
|
124
|
+
{
|
|
125
|
+
size: "medium",
|
|
126
|
+
variant: "secondary",
|
|
127
|
+
onClick: isEditing ? onCancel : onClose,
|
|
128
|
+
children: t(isEditing ? "dictionary.cancel" : "dictionary.close")
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
] }),
|
|
141
132
|
isEditing ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
142
133
|
/* @__PURE__ */ jsx(ScopeFormSection, { formMethods }),
|
|
143
134
|
/* @__PURE__ */ jsx(
|
|
@@ -160,46 +151,31 @@ function ScenarioDrawer() {
|
|
|
160
151
|
/* @__PURE__ */ jsx(RiskSection, {})
|
|
161
152
|
] }),
|
|
162
153
|
/* @__PURE__ */ jsx(ActionsSection, { formMethods, isEditing }),
|
|
163
|
-
/* @__PURE__ */ jsxs(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
{
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
),
|
|
190
|
-
isEditingAllowed && /* @__PURE__ */ jsx("div", { ref: deleteScenarioRef, children: /* @__PURE__ */ jsx(
|
|
191
|
-
Button,
|
|
192
|
-
{
|
|
193
|
-
iconStart: /* @__PURE__ */ jsx(DeleteIcon, {}),
|
|
194
|
-
size: "medium",
|
|
195
|
-
variant: "tertiary",
|
|
196
|
-
onClick: () => setDeleteConfirmationIsOpen(true),
|
|
197
|
-
children: t("scenarioDrawer.deleteScenarioButton")
|
|
198
|
-
}
|
|
199
|
-
) })
|
|
200
|
-
]
|
|
201
|
-
}
|
|
202
|
-
),
|
|
154
|
+
/* @__PURE__ */ jsxs(Box, { className: drawerStyles.bottomButtons, children: [
|
|
155
|
+
isEditing && /* @__PURE__ */ jsxs(
|
|
156
|
+
Button,
|
|
157
|
+
{
|
|
158
|
+
size: "medium",
|
|
159
|
+
variant: "primary",
|
|
160
|
+
onClick: onSubmit,
|
|
161
|
+
isDisabled: !formMethods.formState.isDirty || updateStatus.isLoading,
|
|
162
|
+
children: [
|
|
163
|
+
t("dictionary.save"),
|
|
164
|
+
updateStatus.isLoading && /* @__PURE__ */ jsx(CircularProgress, { size: 16, className: drawerStyles.spinner })
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
),
|
|
168
|
+
isEditingAllowed && /* @__PURE__ */ jsx("div", { ref: deleteScenarioRef, children: /* @__PURE__ */ jsx(
|
|
169
|
+
Button,
|
|
170
|
+
{
|
|
171
|
+
iconStart: /* @__PURE__ */ jsx(DeleteIcon, {}),
|
|
172
|
+
size: "medium",
|
|
173
|
+
variant: "tertiary",
|
|
174
|
+
onClick: () => setDeleteConfirmationIsOpen(true),
|
|
175
|
+
children: t("scenarioDrawer.deleteScenarioButton")
|
|
176
|
+
}
|
|
177
|
+
) })
|
|
178
|
+
] }),
|
|
203
179
|
/* @__PURE__ */ jsx(
|
|
204
180
|
DeleteScenarioConfirmation,
|
|
205
181
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport { Button } from '@backstage/ui';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Drawer from '@mui/material/Drawer';\nimport { useEffect, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { FormScenario } from '../../utils/types';\nimport { deleteScenario } from '../../utils/utilityfunctions';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\nimport { ActionsSection } from './components/ActionsSection';\nimport { DeleteScenarioConfirmation } from './components/DeleteConfirmation';\nimport RiskFormSection from './components/RiskFormSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport { Flex } from '@backstage/ui';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\nimport styles from '../common/alertBar.module.css';\nimport { ScopeSection } from './components/ScopeSection.tsx';\nimport { RiskSection } from './components/RiskSection.tsx';\nimport AlertBar from '../common/AlertBar/AlertBar.tsx';\n\nexport function ScenarioDrawer() {\n const { profileInfo } = useBackstageContext();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n isEditingAllowed,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n const { selectedRiSc, updateRiSc } = useRiScs();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { updateStatus, response } = useRiScs();\n\n const [currentUpdatedActionIDs, setCurrentUpdatedActionIDs] = useState<\n string[]\n >([]);\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onChange',\n });\n\n function onCancel() {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n }\n\n function handleClose() {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n }\n\n function onClose() {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n }\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), {\n onSuccess: () => {\n setCurrentUpdatedActionIDs([]);\n setIsEditing(false);\n },\n idsOfActionsToForceUpdateLastUpdatedValue: currentUpdatedActionIDs,\n profileInfo: profileInfo,\n });\n });\n\n function onSubmitAndCloseDialog() {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scenario]);\n\n return (\n <Drawer\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n ModalProps={{ sx: { zIndex: 100 } }}\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && isEditingAllowed && (\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n size=\"medium\"\n variant=\"secondary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n <Flex className={styles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection formMethods={formMethods} isEditing={isEditing} />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={onSubmit}\n isDisabled={\n !formMethods.formState.isDirty || updateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n {isEditingAllowed && (\n <div ref={deleteScenarioRef}>\n <Button\n iconStart={<DeleteIcon />}\n size=\"medium\"\n variant=\"tertiary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n )}\n </Box>\n\n <DeleteScenarioConfirmation\n isOpen={deleteConfirmationIsOpen}\n setIsOpen={setDeleteConfirmationIsOpen}\n onConfirm={() => deleteScenario(selectedRiSc, updateRiSc, scenario)}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n}\n"],"names":["RiskFormSection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport { Button } from '@backstage/ui';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Drawer from '@mui/material/Drawer';\nimport { useEffect, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { FormScenario } from '../../utils/types';\nimport { deleteScenario } from '../../utils/utilityfunctions';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\nimport { ActionsSection } from './components/ActionsSection';\nimport { DeleteScenarioConfirmation } from './components/DeleteConfirmation';\nimport RiskFormSection from './components/RiskFormSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport { Flex } from '@backstage/ui';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\nimport alertBarStyles from '../common/alertBar.module.css';\nimport drawerStyles from './scenarioDrawer.module.css';\nimport { ScopeSection } from './components/ScopeSection.tsx';\nimport { RiskSection } from './components/RiskSection.tsx';\nimport AlertBar from '../common/AlertBar/AlertBar.tsx';\n\nexport function ScenarioDrawer() {\n const { profileInfo } = useBackstageContext();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n isEditingAllowed,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n const { selectedRiSc, updateRiSc } = useRiScs();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { updateStatus, response } = useRiScs();\n\n const [currentUpdatedActionIDs, setCurrentUpdatedActionIDs] = useState<\n string[]\n >([]);\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onChange',\n });\n\n function onCancel() {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n }\n\n function handleClose() {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n }\n\n function onClose() {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n }\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), {\n onSuccess: () => {\n setCurrentUpdatedActionIDs([]);\n setIsEditing(false);\n },\n idsOfActionsToForceUpdateLastUpdatedValue: currentUpdatedActionIDs,\n profileInfo: profileInfo,\n });\n });\n\n function onSubmitAndCloseDialog() {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scenario]);\n\n return (\n <Drawer\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n ModalProps={{ sx: { zIndex: 100 } }}\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box className={drawerStyles.topButtons}>\n {!isEditing && isEditingAllowed && (\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n size=\"medium\"\n variant=\"secondary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n <Flex className={alertBarStyles.alertBarBox}>\n <AlertBar\n updateStatus={updateStatus}\n response={response}\n statusText={response?.statusMessage}\n />\n </Flex>\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection formMethods={formMethods} isEditing={isEditing} />\n <Box className={drawerStyles.bottomButtons}>\n {isEditing && (\n <Button\n size=\"medium\"\n variant=\"primary\"\n onClick={onSubmit}\n isDisabled={\n !formMethods.formState.isDirty || updateStatus.isLoading\n }\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress size={16} className={drawerStyles.spinner} />\n )}\n </Button>\n )}\n {isEditingAllowed && (\n <div ref={deleteScenarioRef}>\n <Button\n iconStart={<DeleteIcon />}\n size=\"medium\"\n variant=\"tertiary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n )}\n </Box>\n\n <DeleteScenarioConfirmation\n isOpen={deleteConfirmationIsOpen}\n setIsOpen={setDeleteConfirmationIsOpen}\n onConfirm={() => deleteScenario(selectedRiSc, updateRiSc, scenario)}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n}\n"],"names":["RiskFormSection","alertBarStyles"],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { Select } from '../../common/Select.esm.js';
|
|
|
13
13
|
import HelpIcon from '@mui/icons-material/Help';
|
|
14
14
|
import { Tooltip } from '@material-ui/core';
|
|
15
15
|
import { Text } from '@backstage/ui';
|
|
16
|
+
import styles from './ActionFormItem.module.css.esm.js';
|
|
16
17
|
|
|
17
18
|
function addPeriodToBaseObjectPath(s) {
|
|
18
19
|
if (!s) return "";
|
|
@@ -34,131 +35,91 @@ function ActionFormItem({
|
|
|
34
35
|
renderedValue: t(actionStatusOptionsToTranslationKeys[actionStatus])
|
|
35
36
|
})
|
|
36
37
|
);
|
|
37
|
-
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
|
|
38
|
-
Box,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Box, { className: styles.formGrid, children: [
|
|
39
|
+
/* @__PURE__ */ jsxs(Box, { className: styles.formHeader, children: [
|
|
40
|
+
displayedIndex !== void 0 && displayedIndex !== null ? /* @__PURE__ */ jsxs(Text, { variant: "title-x-small", weight: "bold", children: [
|
|
41
|
+
t("dictionary.measure"),
|
|
42
|
+
" ",
|
|
43
|
+
displayedIndex + 1
|
|
44
|
+
] }) : /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("dictionary.edit") }),
|
|
45
|
+
/* @__PURE__ */ jsx(IconButton, { onClick: handleDelete, color: "primary", children: /* @__PURE__ */ jsx(DeleteIcon, { "aria-label": "Delete" }) })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx(
|
|
48
|
+
Input,
|
|
49
|
+
{
|
|
50
|
+
required: true,
|
|
51
|
+
...register(
|
|
52
|
+
`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}title`,
|
|
48
53
|
{
|
|
49
|
-
|
|
50
|
-
display: "flex",
|
|
51
|
-
justifyContent: "space-between",
|
|
52
|
-
alignItems: "center"
|
|
53
|
-
},
|
|
54
|
-
children: [
|
|
55
|
-
displayedIndex !== void 0 && displayedIndex !== null ? /* @__PURE__ */ jsxs(Text, { variant: "title-x-small", weight: "bold", children: [
|
|
56
|
-
t("dictionary.measure"),
|
|
57
|
-
" ",
|
|
58
|
-
displayedIndex + 1
|
|
59
|
-
] }) : /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("dictionary.edit") }),
|
|
60
|
-
/* @__PURE__ */ jsx(IconButton, { onClick: handleDelete, color: "primary", children: /* @__PURE__ */ jsx(DeleteIcon, { "aria-label": "Delete" }) })
|
|
61
|
-
]
|
|
54
|
+
required: true
|
|
62
55
|
}
|
|
63
56
|
),
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
error: errorObject?.title !== void 0,
|
|
58
|
+
label: t("dictionary.title"),
|
|
59
|
+
helperText: errorObject?.title && t("scenarioDrawer.measureTab.addMeasureTitleError")
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
Controller,
|
|
64
|
+
{
|
|
65
|
+
control,
|
|
66
|
+
name: `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}description`,
|
|
67
|
+
render: ({ field: { onChange, value }, fieldState: { error } }) => /* @__PURE__ */ jsx(
|
|
68
|
+
MarkdownInput,
|
|
66
69
|
{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
),
|
|
74
|
-
error: errorObject?.title !== void 0,
|
|
75
|
-
label: t("dictionary.title"),
|
|
76
|
-
helperText: errorObject?.title && t("scenarioDrawer.measureTab.addMeasureTitleError")
|
|
77
|
-
}
|
|
78
|
-
),
|
|
79
|
-
/* @__PURE__ */ jsx(
|
|
80
|
-
Controller,
|
|
81
|
-
{
|
|
82
|
-
control,
|
|
83
|
-
name: `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}description`,
|
|
84
|
-
render: ({ field: { onChange, value }, fieldState: { error } }) => /* @__PURE__ */ jsx(
|
|
85
|
-
MarkdownInput,
|
|
86
|
-
{
|
|
87
|
-
label: t("dictionary.description"),
|
|
88
|
-
value,
|
|
89
|
-
onMarkdownChange: onChange,
|
|
90
|
-
error: !!error,
|
|
91
|
-
minRows: 8
|
|
92
|
-
}
|
|
93
|
-
)
|
|
94
|
-
}
|
|
95
|
-
),
|
|
96
|
-
/* @__PURE__ */ jsxs(
|
|
97
|
-
Box,
|
|
98
|
-
{
|
|
99
|
-
sx: {
|
|
100
|
-
display: "grid",
|
|
101
|
-
gridTemplateColumns: "2fr 1fr",
|
|
102
|
-
gap: "24px"
|
|
103
|
-
},
|
|
104
|
-
children: [
|
|
105
|
-
/* @__PURE__ */ jsx(
|
|
106
|
-
Input,
|
|
107
|
-
{
|
|
108
|
-
...register(
|
|
109
|
-
`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}url`,
|
|
110
|
-
{
|
|
111
|
-
pattern: {
|
|
112
|
-
value: urlRegExpPattern,
|
|
113
|
-
message: t("scenarioDrawer.action.urlError")
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
),
|
|
117
|
-
label: /* @__PURE__ */ jsx(UrlLabel, {}),
|
|
118
|
-
helperText: errorObject?.url?.message,
|
|
119
|
-
error: errorObject?.url?.message
|
|
120
|
-
}
|
|
121
|
-
),
|
|
122
|
-
/* @__PURE__ */ jsx(
|
|
123
|
-
Select,
|
|
124
|
-
{
|
|
125
|
-
required: true,
|
|
126
|
-
control,
|
|
127
|
-
name: `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}status`,
|
|
128
|
-
label: t("dictionary.status"),
|
|
129
|
-
options: actionStatusOptions
|
|
130
|
-
}
|
|
131
|
-
)
|
|
132
|
-
]
|
|
70
|
+
label: t("dictionary.description"),
|
|
71
|
+
value,
|
|
72
|
+
onMarkdownChange: onChange,
|
|
73
|
+
error: !!error,
|
|
74
|
+
minRows: 8
|
|
133
75
|
}
|
|
134
76
|
)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
/* @__PURE__ */ jsxs(Box, { className: styles.inputGrid, children: [
|
|
80
|
+
/* @__PURE__ */ jsx(
|
|
81
|
+
Input,
|
|
82
|
+
{
|
|
83
|
+
...register(
|
|
84
|
+
`${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}url`,
|
|
85
|
+
{
|
|
86
|
+
pattern: {
|
|
87
|
+
value: urlRegExpPattern,
|
|
88
|
+
message: t("scenarioDrawer.action.urlError")
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
label: /* @__PURE__ */ jsx(UrlLabel, {}),
|
|
93
|
+
helperText: errorObject?.url?.message,
|
|
94
|
+
error: errorObject?.url?.message
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
/* @__PURE__ */ jsx(
|
|
98
|
+
Select,
|
|
99
|
+
{
|
|
100
|
+
required: true,
|
|
101
|
+
control,
|
|
102
|
+
name: `${addPeriodToBaseObjectPath(baseObjectPathToActionOfForm)}status`,
|
|
103
|
+
label: t("dictionary.status"),
|
|
104
|
+
options: actionStatusOptions
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
] })
|
|
108
|
+
] }) });
|
|
138
109
|
}
|
|
139
110
|
function UrlLabel() {
|
|
140
111
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
141
|
-
return /* @__PURE__ */ jsxs(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
Tooltip,
|
|
153
|
-
{
|
|
154
|
-
title: /* @__PURE__ */ jsx(Text, { variant: "body-large", style: { color: "white" }, children: t("scenarioDrawer.measureTab.urlDescription") }),
|
|
155
|
-
arrow: true,
|
|
156
|
-
children: /* @__PURE__ */ jsx(HelpIcon, { color: "primary" })
|
|
157
|
-
}
|
|
158
|
-
)
|
|
159
|
-
]
|
|
160
|
-
}
|
|
161
|
-
);
|
|
112
|
+
return /* @__PURE__ */ jsxs(Box, { className: styles.urlLabel, children: [
|
|
113
|
+
t("dictionary.url"),
|
|
114
|
+
/* @__PURE__ */ jsx(
|
|
115
|
+
Tooltip,
|
|
116
|
+
{
|
|
117
|
+
title: /* @__PURE__ */ jsx(Text, { variant: "body-large", className: styles.tooltipText, children: t("scenarioDrawer.measureTab.urlDescription") }),
|
|
118
|
+
arrow: true,
|
|
119
|
+
children: /* @__PURE__ */ jsx(HelpIcon, { color: "primary" })
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
] });
|
|
162
123
|
}
|
|
163
124
|
|
|
164
125
|
export { ActionFormItem, UrlLabel };
|
|
@@ -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';\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
|
|
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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".ActionFormItem_formGrid__e2b6b438eb {\n display: grid;\n gap: 24px;\n padding: 0;\n}\n\n.ActionFormItem_formHeader__e2b6b438eb {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.ActionFormItem_inputGrid__e2b6b438eb {\n display: grid;\n grid-template-columns: 2fr 1fr;\n gap: 24px;\n}\n\n.ActionFormItem_urlLabel__e2b6b438eb {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.ActionFormItem_tooltipText__e2b6b438eb {\n color: white;\n}\n";
|
|
4
|
+
var styles = {"formGrid":"ActionFormItem_formGrid__e2b6b438eb","formHeader":"ActionFormItem_formHeader__e2b6b438eb","inputGrid":"ActionFormItem_inputGrid__e2b6b438eb","urlLabel":"ActionFormItem_urlLabel__e2b6b438eb","tooltipText":"ActionFormItem_tooltipText__e2b6b438eb"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=ActionFormItem.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionFormItem.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -4,7 +4,7 @@ import Paper from '@mui/material/Paper';
|
|
|
4
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
5
|
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
6
6
|
import { useScenario, emptyAction } from '../../../contexts/ScenarioContext.esm.js';
|
|
7
|
-
import
|
|
7
|
+
import drawerStyles from '../scenarioDrawer.module.css.esm.js';
|
|
8
8
|
import { useFieldArray } from 'react-hook-form';
|
|
9
9
|
import { ActionFormItem } from './ActionFormItem.esm.js';
|
|
10
10
|
import { AddCircle } from '@mui/icons-material';
|
|
@@ -14,7 +14,7 @@ import { Flex, Text, TooltipTrigger, Button, Tooltip, Box, Card } from '@backsta
|
|
|
14
14
|
import { useSortActionsByRelevance } from '../../../hooks/UseSortActionsByRelevance.esm.js';
|
|
15
15
|
import { filterActionsByRelevance } from '../../../utils/actions.esm.js';
|
|
16
16
|
import { ActionRowList } from '../../action/ActionRowList.esm.js';
|
|
17
|
-
import styles
|
|
17
|
+
import styles from './ActionsSection.module.css.esm.js';
|
|
18
18
|
import { ActionStatusOptions } from '../../../utils/constants.esm.js';
|
|
19
19
|
|
|
20
20
|
const RelevanceToggle = ({
|
|
@@ -22,7 +22,7 @@ const RelevanceToggle = ({
|
|
|
22
22
|
onChange
|
|
23
23
|
}) => {
|
|
24
24
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
25
|
-
return /* @__PURE__ */ jsxs(Flex, { align: "center", gap: "0", className: styles
|
|
25
|
+
return /* @__PURE__ */ jsxs(Flex, { align: "center", gap: "0", className: styles.noRelevantActionToggle, children: [
|
|
26
26
|
/* @__PURE__ */ jsx(
|
|
27
27
|
Switch,
|
|
28
28
|
{
|
|
@@ -70,7 +70,7 @@ function ActionsSection({ formMethods, isEditing }) {
|
|
|
70
70
|
(action) => action.status === ActionStatusOptions.NotRelevant
|
|
71
71
|
);
|
|
72
72
|
const isActionsEmpty = currentActions.length === 0;
|
|
73
|
-
return /* @__PURE__ */ jsxs(Paper, { className:
|
|
73
|
+
return /* @__PURE__ */ jsxs(Paper, { className: drawerStyles.section, children: [
|
|
74
74
|
/* @__PURE__ */ jsxs(Flex, { justify: "between", mb: "2", children: [
|
|
75
75
|
/* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("dictionary.measures") }),
|
|
76
76
|
/* @__PURE__ */ jsxs(Flex, { align: "center", children: [
|
|
@@ -106,7 +106,7 @@ function ActionsSection({ formMethods, isEditing }) {
|
|
|
106
106
|
allowDeletion: allowActionDeletion,
|
|
107
107
|
allowEdit: true
|
|
108
108
|
}
|
|
109
|
-
) : /* @__PURE__ */ jsx(Text, { variant: "body-large", className: styles
|
|
109
|
+
) : /* @__PURE__ */ jsx(Text, { variant: "body-large", className: styles.italicText, children: !currentActions || currentActions.length === 0 ? t("dictionary.emptyField", {
|
|
110
110
|
field: t("dictionary.measures").toLowerCase()
|
|
111
111
|
}) : t("dictionary.noRelevantMeasures") })
|
|
112
112
|
] });
|
|
@@ -118,9 +118,9 @@ function ActionsSectionOnEdit(props) {
|
|
|
118
118
|
control,
|
|
119
119
|
name: "actions"
|
|
120
120
|
});
|
|
121
|
-
return /* @__PURE__ */ jsxs(Paper, { className:
|
|
121
|
+
return /* @__PURE__ */ jsxs(Paper, { className: drawerStyles.section, children: [
|
|
122
122
|
/* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("dictionary.measures") }) }),
|
|
123
|
-
fields.map((field, index) => /* @__PURE__ */ jsx(Card, { className: styles
|
|
123
|
+
fields.map((field, index) => /* @__PURE__ */ jsx(Card, { className: styles.actionFormItemCard, children: /* @__PURE__ */ jsx(
|
|
124
124
|
ActionFormItem,
|
|
125
125
|
{
|
|
126
126
|
formMethods: props.formMethods,
|
|
@@ -136,7 +136,7 @@ function ActionsSectionOnEdit(props) {
|
|
|
136
136
|
iconStart: /* @__PURE__ */ jsx(AddCircle, {}),
|
|
137
137
|
variant: "primary",
|
|
138
138
|
onClick: () => append(emptyAction()),
|
|
139
|
-
className: styles
|
|
139
|
+
className: styles.addActionButton,
|
|
140
140
|
children: t("scenarioDrawer.measureTab.addMeasureButton")
|
|
141
141
|
}
|
|
142
142
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionsSection.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionsSection.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport Paper from '@mui/material/Paper';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { emptyAction, useScenario } from '../../../contexts/ScenarioContext';\nimport sharedStyles from '../scenarioDrawer.module.css';\nimport { useFieldArray, UseFormReturn } from 'react-hook-form';\nimport { Action, FormScenario } from '../../../utils/types';\nimport { ActionFormItem } from './ActionFormItem';\nimport { AddCircle } from '@mui/icons-material';\nimport Switch from '@mui/material/Switch';\nimport { useActionFiltersStorage } from '../../../stores/ActionFiltersStore.ts';\nimport {\n Text,\n Tooltip,\n TooltipTrigger,\n Flex,\n Button,\n Card,\n Box,\n} from '@backstage/ui';\nimport { useSortActionsByRelevance } from '../../../hooks/UseSortActionsByRelevance.ts';\nimport { filterActionsByRelevance } from '../../../utils/actions.ts';\nimport { ActionRowList } from '../../action/ActionRowList.tsx';\nimport styles from './ActionsSection.module.css';\nimport { ActionStatusOptions } from '../../../utils/constants.ts';\n\nconst RelevanceToggle = ({\n checked,\n onChange,\n}: {\n checked: boolean;\n onChange: (checked: boolean) => void;\n}) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex align=\"center\" gap=\"0\" className={styles.noRelevantActionToggle}>\n <Switch\n checked={checked}\n onChange={e => onChange(e.target.checked)}\n name=\"showOnlyRelevant\"\n color=\"primary\"\n />\n <Text variant=\"body-medium\">{t('dictionary.showOnlyRelevant')}</Text>\n </Flex>\n );\n};\n\ntype ActionSectionProps = {\n formMethods: UseFormReturn<FormScenario>;\n isEditing: boolean;\n};\n\nexport function ActionsSection({ formMethods, isEditing }: ActionSectionProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { scenario } = useScenario();\n\n const [allowActionDeletion, setAllowActionDeletion] =\n useState<boolean>(false);\n const { watch } = formMethods;\n const currentActions = watch('actions');\n\n const [sortedActions, setSortedActions] = useState<Action[] | undefined>(\n undefined,\n );\n const { actionFilters, saveOnlyRelevantFilter } = useActionFiltersStorage();\n const sortActionsByRelevance = useSortActionsByRelevance();\n\n useEffect(() => {\n setSortedActions(sortedActionsState => {\n if (sortedActionsState === undefined)\n return sortActionsByRelevance([...currentActions]);\n\n // sync actions\n const updatedSortedActions: Action[] = [];\n for (const action of sortedActionsState) {\n const updatedAction = currentActions.find(a => a.ID === action.ID);\n if (updatedAction) updatedSortedActions.push(updatedAction);\n }\n // add new actions\n for (const action of currentActions) {\n if (!updatedSortedActions.some(a => a.ID === action.ID)) {\n updatedSortedActions.push(action);\n }\n }\n return updatedSortedActions;\n });\n }, [currentActions, actionFilters, sortActionsByRelevance]);\n\n if (isEditing) {\n return <ActionsSectionOnEdit formMethods={formMethods} />;\n }\n\n const doesCurrentActionsContainNotRelevantActions = currentActions.some(\n action => action.status === ActionStatusOptions.NotRelevant,\n );\n\n const isActionsEmpty = currentActions.length === 0;\n\n return (\n <Paper className={sharedStyles.section}>\n <Flex justify=\"between\" mb=\"2\">\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.measures')}\n </Text>\n <Flex align=\"center\">\n {doesCurrentActionsContainNotRelevantActions && (\n <RelevanceToggle\n checked={actionFilters.showOnlyRelevant}\n onChange={value => saveOnlyRelevantFilter(value)}\n />\n )}\n {!isActionsEmpty && (\n <TooltipTrigger>\n <Button\n iconStart={\n allowActionDeletion ? (\n <i className=\"ri-checkbox-circle-line\" />\n ) : (\n <i className=\"ri-pencil-line\" />\n )\n }\n variant=\"secondary\"\n onClick={() => setAllowActionDeletion(prev => !prev)}\n >\n {allowActionDeletion}\n </Button>\n <Tooltip>\n {allowActionDeletion\n ? t('scenarioTable.doneEditing')\n : t('scenarioTable.editButton')}\n </Tooltip>\n </TooltipTrigger>\n )}\n </Flex>\n </Flex>\n {sortedActions !== undefined && sortedActions.length > 0 ? (\n <ActionRowList\n scenarioId={scenario.ID}\n displayedActions={filterActionsByRelevance(\n sortedActions,\n actionFilters.showOnlyRelevant,\n )}\n allowDeletion={allowActionDeletion}\n allowEdit\n />\n ) : (\n <Text variant=\"body-large\" className={styles.italicText}>\n {!currentActions || currentActions.length === 0\n ? t('dictionary.emptyField', {\n field: t('dictionary.measures').toLowerCase(),\n })\n : t('dictionary.noRelevantMeasures')}\n </Text>\n )}\n </Paper>\n );\n}\n\ntype ActionsSectionOnEditProps = {\n formMethods: UseFormReturn<FormScenario>;\n};\n\nfunction ActionsSectionOnEdit(props: ActionsSectionOnEditProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { control } = props.formMethods;\n const { fields, append, remove } = useFieldArray({\n control,\n name: 'actions',\n });\n\n return (\n <Paper className={sharedStyles.section}>\n <Box>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.measures')}\n </Text>\n </Box>\n {fields.map((field, index) => (\n <Card key={field.id} className={styles.actionFormItemCard}>\n <ActionFormItem\n key={index}\n formMethods={props.formMethods}\n displayedIndex={index}\n handleDelete={() => remove(index)}\n baseObjectPathToActionOfForm={`actions.${index}`}\n />\n </Card>\n ))}\n <Button\n iconStart={<AddCircle />}\n variant=\"primary\"\n onClick={() => append(emptyAction())}\n className={styles.addActionButton}\n >\n {t('scenarioDrawer.measureTab.addMeasureButton')}\n </Button>\n </Paper>\n );\n}\n"],"names":["styles","sharedStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionsSection.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionsSection.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport Paper from '@mui/material/Paper';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { emptyAction, useScenario } from '../../../contexts/ScenarioContext';\nimport sharedStyles from '../scenarioDrawer.module.css';\nimport { useFieldArray, UseFormReturn } from 'react-hook-form';\nimport { Action, FormScenario } from '../../../utils/types';\nimport { ActionFormItem } from './ActionFormItem';\nimport { AddCircle } from '@mui/icons-material';\nimport Switch from '@mui/material/Switch';\nimport { useActionFiltersStorage } from '../../../stores/ActionFiltersStore.ts';\nimport {\n Text,\n Tooltip,\n TooltipTrigger,\n Flex,\n Button,\n Card,\n Box,\n} from '@backstage/ui';\nimport { useSortActionsByRelevance } from '../../../hooks/UseSortActionsByRelevance.ts';\nimport { filterActionsByRelevance } from '../../../utils/actions.ts';\nimport { ActionRowList } from '../../action/ActionRowList.tsx';\nimport styles from './ActionsSection.module.css';\nimport { ActionStatusOptions } from '../../../utils/constants.ts';\n\nconst RelevanceToggle = ({\n checked,\n onChange,\n}: {\n checked: boolean;\n onChange: (checked: boolean) => void;\n}) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex align=\"center\" gap=\"0\" className={styles.noRelevantActionToggle}>\n <Switch\n checked={checked}\n onChange={e => onChange(e.target.checked)}\n name=\"showOnlyRelevant\"\n color=\"primary\"\n />\n <Text variant=\"body-medium\">{t('dictionary.showOnlyRelevant')}</Text>\n </Flex>\n );\n};\n\ntype ActionSectionProps = {\n formMethods: UseFormReturn<FormScenario>;\n isEditing: boolean;\n};\n\nexport function ActionsSection({ formMethods, isEditing }: ActionSectionProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { scenario } = useScenario();\n\n const [allowActionDeletion, setAllowActionDeletion] =\n useState<boolean>(false);\n const { watch } = formMethods;\n const currentActions = watch('actions');\n\n const [sortedActions, setSortedActions] = useState<Action[] | undefined>(\n undefined,\n );\n const { actionFilters, saveOnlyRelevantFilter } = useActionFiltersStorage();\n const sortActionsByRelevance = useSortActionsByRelevance();\n\n useEffect(() => {\n setSortedActions(sortedActionsState => {\n if (sortedActionsState === undefined)\n return sortActionsByRelevance([...currentActions]);\n\n // sync actions\n const updatedSortedActions: Action[] = [];\n for (const action of sortedActionsState) {\n const updatedAction = currentActions.find(a => a.ID === action.ID);\n if (updatedAction) updatedSortedActions.push(updatedAction);\n }\n // add new actions\n for (const action of currentActions) {\n if (!updatedSortedActions.some(a => a.ID === action.ID)) {\n updatedSortedActions.push(action);\n }\n }\n return updatedSortedActions;\n });\n }, [currentActions, actionFilters, sortActionsByRelevance]);\n\n if (isEditing) {\n return <ActionsSectionOnEdit formMethods={formMethods} />;\n }\n\n const doesCurrentActionsContainNotRelevantActions = currentActions.some(\n action => action.status === ActionStatusOptions.NotRelevant,\n );\n\n const isActionsEmpty = currentActions.length === 0;\n\n return (\n <Paper className={sharedStyles.section}>\n <Flex justify=\"between\" mb=\"2\">\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.measures')}\n </Text>\n <Flex align=\"center\">\n {doesCurrentActionsContainNotRelevantActions && (\n <RelevanceToggle\n checked={actionFilters.showOnlyRelevant}\n onChange={value => saveOnlyRelevantFilter(value)}\n />\n )}\n {!isActionsEmpty && (\n <TooltipTrigger>\n <Button\n iconStart={\n allowActionDeletion ? (\n <i className=\"ri-checkbox-circle-line\" />\n ) : (\n <i className=\"ri-pencil-line\" />\n )\n }\n variant=\"secondary\"\n onClick={() => setAllowActionDeletion(prev => !prev)}\n >\n {allowActionDeletion}\n </Button>\n <Tooltip>\n {allowActionDeletion\n ? t('scenarioTable.doneEditing')\n : t('scenarioTable.editButton')}\n </Tooltip>\n </TooltipTrigger>\n )}\n </Flex>\n </Flex>\n {sortedActions !== undefined && sortedActions.length > 0 ? (\n <ActionRowList\n scenarioId={scenario.ID}\n displayedActions={filterActionsByRelevance(\n sortedActions,\n actionFilters.showOnlyRelevant,\n )}\n allowDeletion={allowActionDeletion}\n allowEdit\n />\n ) : (\n <Text variant=\"body-large\" className={styles.italicText}>\n {!currentActions || currentActions.length === 0\n ? t('dictionary.emptyField', {\n field: t('dictionary.measures').toLowerCase(),\n })\n : t('dictionary.noRelevantMeasures')}\n </Text>\n )}\n </Paper>\n );\n}\n\ntype ActionsSectionOnEditProps = {\n formMethods: UseFormReturn<FormScenario>;\n};\n\nfunction ActionsSectionOnEdit(props: ActionsSectionOnEditProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { control } = props.formMethods;\n const { fields, append, remove } = useFieldArray({\n control,\n name: 'actions',\n });\n\n return (\n <Paper className={sharedStyles.section}>\n <Box>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.measures')}\n </Text>\n </Box>\n {fields.map((field, index) => (\n <Card key={field.id} className={styles.actionFormItemCard}>\n <ActionFormItem\n key={index}\n formMethods={props.formMethods}\n displayedIndex={index}\n handleDelete={() => remove(index)}\n baseObjectPathToActionOfForm={`actions.${index}`}\n />\n </Card>\n ))}\n <Button\n iconStart={<AddCircle />}\n variant=\"primary\"\n onClick={() => append(emptyAction())}\n className={styles.addActionButton}\n >\n {t('scenarioDrawer.measureTab.addMeasureButton')}\n </Button>\n </Paper>\n );\n}\n"],"names":["sharedStyles"],"mappings":";;;;;;;;;;;;;;;;;;;AA2BA,MAAM,kBAAkB,CAAC;AAAA,EACvB,OAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAC,QAAK,KAAA,EAAM,QAAA,EAAS,KAAI,GAAA,EAAI,SAAA,EAAW,OAAO,sBAAA,EAC7C,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,QAAA,EAAU,CAAA,CAAA,KAAK,QAAA,CAAS,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,QACxC,IAAA,EAAK,kBAAA;AAAA,QACL,KAAA,EAAM;AAAA;AAAA,KACR;AAAA,wBACC,IAAA,EAAA,EAAK,OAAA,EAAQ,aAAA,EAAe,QAAA,EAAA,CAAA,CAAE,6BAA6B,CAAA,EAAE;AAAA,GAAA,EAChE,CAAA;AAEJ,CAAA;AAOO,SAAS,cAAA,CAAe,EAAE,WAAA,EAAa,SAAA,EAAU,EAAuB;AAC7E,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,EAAY;AAEjC,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAChD,SAAkB,KAAK,CAAA;AACzB,EAAA,MAAM,EAAE,OAAM,GAAI,WAAA;AAClB,EAAA,MAAM,cAAA,GAAiB,MAAM,SAAS,CAAA;AAEtC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA;AAAA,IACxC;AAAA,GACF;AACA,EAAA,MAAM,EAAE,aAAA,EAAe,sBAAA,EAAuB,GAAI,uBAAA,EAAwB;AAC1E,EAAA,MAAM,yBAAyB,yBAAA,EAA0B;AAEzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,CAAA,kBAAA,KAAsB;AACrC,MAAA,IAAI,kBAAA,KAAuB,MAAA;AACzB,QAAA,OAAO,sBAAA,CAAuB,CAAC,GAAG,cAAc,CAAC,CAAA;AAGnD,MAAA,MAAM,uBAAiC,EAAC;AACxC,MAAA,KAAA,MAAW,UAAU,kBAAA,EAAoB;AACvC,QAAA,MAAM,gBAAgB,cAAA,CAAe,IAAA,CAAK,OAAK,CAAA,CAAE,EAAA,KAAO,OAAO,EAAE,CAAA;AACjE,QAAA,IAAI,aAAA,EAAe,oBAAA,CAAqB,IAAA,CAAK,aAAa,CAAA;AAAA,MAC5D;AAEA,MAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,QAAA,IAAI,CAAC,qBAAqB,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA,EAAG;AACvD,UAAA,oBAAA,CAAqB,KAAK,MAAM,CAAA;AAAA,QAClC;AAAA,MACF;AACA,MAAA,OAAO,oBAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,cAAA,EAAgB,aAAA,EAAe,sBAAsB,CAAC,CAAA;AAE1D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAO,GAAA,CAAC,wBAAqB,WAAA,EAA0B,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,8CAA8C,cAAA,CAAe,IAAA;AAAA,IACjE,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,KAAW,mBAAA,CAAoB;AAAA,GAClD;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAe,MAAA,KAAW,CAAA;AAEjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAWA,YAAA,CAAa,OAAA,EAC7B,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAG,GAAA,EACzB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAK,OAAA,EAAQ,eAAA,EAAgB,QAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAC1B,CAAA;AAAA,sBACA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EACT,QAAA,EAAA;AAAA,QAAA,2CAAA,oBACC,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,SAAS,aAAA,CAAc,gBAAA;AAAA,YACvB,QAAA,EAAU,CAAA,KAAA,KAAS,sBAAA,CAAuB,KAAK;AAAA;AAAA,SACjD;AAAA,QAED,CAAC,cAAA,oBACA,IAAA,CAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EACE,mBAAA,mBACE,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAA0B,CAAA,mBAEvC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gBAAA,EAAiB,CAAA;AAAA,cAGlC,OAAA,EAAQ,WAAA;AAAA,cACR,OAAA,EAAS,MAAM,sBAAA,CAAuB,CAAA,IAAA,KAAQ,CAAC,IAAI,CAAA;AAAA,cAElD,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACA,GAAA,CAAC,WACE,QAAA,EAAA,mBAAA,GACG,CAAA,CAAE,2BAA2B,CAAA,GAC7B,CAAA,CAAE,0BAA0B,CAAA,EAClC;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,IACC,aAAA,KAAkB,MAAA,IAAa,aAAA,CAAc,MAAA,GAAS,CAAA,mBACrD,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,YAAY,QAAA,CAAS,EAAA;AAAA,QACrB,gBAAA,EAAkB,wBAAA;AAAA,UAChB,aAAA;AAAA,UACA,aAAA,CAAc;AAAA,SAChB;AAAA,QACA,aAAA,EAAe,mBAAA;AAAA,QACf,SAAA,EAAS;AAAA;AAAA,KACX,mBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,SAAA,EAAW,MAAA,CAAO,UAAA,EAC1C,QAAA,EAAA,CAAC,cAAA,IAAkB,cAAA,CAAe,MAAA,KAAW,CAAA,GAC1C,EAAE,uBAAA,EAAyB;AAAA,MACzB,KAAA,EAAO,CAAA,CAAE,qBAAqB,CAAA,CAAE,WAAA;AAAY,KAC7C,CAAA,GACD,CAAA,CAAE,+BAA+B,CAAA,EACvC;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAMA,SAAS,qBAAqB,KAAA,EAAkC;AAC9D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,KAAA,CAAM,WAAA;AAC1B,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,KAAW,aAAA,CAAc;AAAA,IAC/C,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACP,CAAA;AAED,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAWA,YAAA,CAAa,OAAA,EAC7B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,GAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,QAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAC1B,CAAA,EACF,CAAA;AAAA,IACC,MAAA,CAAO,IAAI,CAAC,KAAA,EAAO,0BAClB,GAAA,CAAC,IAAA,EAAA,EAAoB,SAAA,EAAW,MAAA,CAAO,kBAAA,EACrC,QAAA,kBAAA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QAEC,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,cAAA,EAAgB,KAAA;AAAA,QAChB,YAAA,EAAc,MAAM,MAAA,CAAO,KAAK,CAAA;AAAA,QAChC,4BAAA,EAA8B,WAAW,KAAK,CAAA;AAAA,OAAA;AAAA,MAJzC;AAAA,KAKP,EAAA,EAPS,KAAA,CAAM,EAQjB,CACD,CAAA;AAAA,oBACD,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,sBAAY,SAAA,EAAA,EAAU,CAAA;AAAA,QACtB,OAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,MAAM,MAAA,CAAO,WAAA,EAAa,CAAA;AAAA,QACnC,WAAW,MAAA,CAAO,eAAA;AAAA,QAEjB,YAAE,4CAA4C;AAAA;AAAA;AACjD,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
3
|
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
4
|
-
import
|
|
4
|
+
import drawerStyles from '../scenarioDrawer.module.css.esm.js';
|
|
5
5
|
import { ConfirmationDialogWithoutCheckbox } from '../../common/ConfirmationDialog.esm.js';
|
|
6
6
|
|
|
7
7
|
function DeleteScenarioConfirmation({
|
|
@@ -21,7 +21,7 @@ function DeleteScenarioConfirmation({
|
|
|
21
21
|
},
|
|
22
22
|
title: t("scenarioDrawer.deleteScenarioConfirmation"),
|
|
23
23
|
confirmButtonText: t("scenarioDrawer.deleteScenarioButton"),
|
|
24
|
-
className:
|
|
24
|
+
className: drawerStyles.deleteConfirmationDialog
|
|
25
25
|
}
|
|
26
26
|
);
|
|
27
27
|
}
|
|
@@ -42,7 +42,7 @@ function DeleteActionConfirmation({
|
|
|
42
42
|
},
|
|
43
43
|
title: t("scenarioDrawer.deleteActionConfirmation"),
|
|
44
44
|
confirmButtonText: t("scenarioDrawer.deleteActionButton"),
|
|
45
|
-
className:
|
|
45
|
+
className: drawerStyles.deleteConfirmationDialog
|
|
46
46
|
}
|
|
47
47
|
);
|
|
48
48
|
}
|