@kartverket/backstage-plugin-risk-scorecard 3.3.4 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PluginRoot.esm.js +2 -0
- package/dist/PluginRoot.esm.js.map +1 -1
- package/dist/components/riScDialog/EditEncryptionButton.esm.js +27 -0
- package/dist/components/riScDialog/EditEncryptionButton.esm.js.map +1 -0
- package/dist/components/riScDialog/RiScDialog.esm.js +21 -2
- package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
- package/dist/components/riScDialog/SupportDialog.esm.js +116 -0
- package/dist/components/riScDialog/SupportDialog.esm.js.map +1 -0
- package/dist/components/riScHeader/RiScHeader.esm.js +22 -0
- package/dist/components/riScHeader/RiScHeader.esm.js.map +1 -0
- package/dist/components/riScInfo/RiScInfo.esm.js +39 -6
- package/dist/components/riScInfo/RiScInfo.esm.js.map +1 -1
- package/dist/components/riScPlugin/FeedbackDialog.esm.js +8 -9
- package/dist/components/riScPlugin/FeedbackDialog.esm.js.map +1 -1
- package/dist/components/riScPlugin/RiScPlugin.esm.js +22 -73
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +33 -2
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js +29 -29
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionsSection.esm.js +87 -9
- package/dist/components/scenarioDrawer/components/ActionsSection.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTable.esm.js +51 -1
- package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableStyles.esm.js +48 -0
- package/dist/components/scenarioTable/ScenarioTableStyles.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js +38 -1
- package/dist/utils/hooks.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +50 -6
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/utilityfunctions.esm.js +73 -12
- package/dist/utils/utilityfunctions.esm.js.map +1 -1
- package/package.json +4 -2
package/dist/PluginRoot.esm.js
CHANGED
|
@@ -6,6 +6,8 @@ import { RiScPlugin } from './components/riScPlugin/RiScPlugin.esm.js';
|
|
|
6
6
|
import { ScenarioProvider } from './contexts/ScenarioContext.esm.js';
|
|
7
7
|
import { riScRouteRef, scenarioRouteRef } from './routes.esm.js';
|
|
8
8
|
import { RiScProvider } from './contexts/RiScContext.esm.js';
|
|
9
|
+
import '@backstage/ui/css/styles.css';
|
|
10
|
+
import 'remixicon/fonts/remixicon.css';
|
|
9
11
|
|
|
10
12
|
const emotionInsertionPoint = document.createElement("meta");
|
|
11
13
|
emotionInsertionPoint.setAttribute("name", "emotion-insertion-point");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nfunction ProvidedPlugin() {\n return (\n <CacheProvider value={cache}>\n <RiScProvider>\n <ScenarioProvider>\n <RiScPlugin />\n </ScenarioProvider>\n </RiScProvider>\n </CacheProvider>\n );\n}\n\nexport function PluginRoot() {\n return (\n <Routes>\n <Route path=\"/\" element={<ProvidedPlugin />} />\n <Route path={riScRouteRef.path} element={<ProvidedPlugin />} />\n <Route path={scenarioRouteRef.path} element={<ProvidedPlugin />} />\n </Routes>\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\nimport '@backstage/ui/css/styles.css';\nimport 'remixicon/fonts/remixicon.css';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nfunction ProvidedPlugin() {\n return (\n <CacheProvider value={cache}>\n <RiScProvider>\n <ScenarioProvider>\n <RiScPlugin />\n </ScenarioProvider>\n </RiScProvider>\n </CacheProvider>\n );\n}\n\nexport function PluginRoot() {\n return (\n <Routes>\n <Route path=\"/\" element={<ProvidedPlugin />} />\n <Route path={riScRouteRef.path} element={<ProvidedPlugin />} />\n <Route path={scenarioRouteRef.path} element={<ProvidedPlugin />} />\n </Routes>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAUA,MAAM,qBAAA,GAAwB,QAAS,CAAA,aAAA,CAAc,MAAM,CAAA;AAC3D,qBAAsB,CAAA,YAAA,CAAa,QAAQ,yBAAyB,CAAA;AACpE,QAAA,CAAS,aAAc,CAAA,MAAM,CAAG,EAAA,WAAA,CAAY,qBAAqB,CAAA;AAEjE,MAAM,QAAQ,WAAY,CAAA;AAAA,EACxB,GAAK,EAAA,KAAA;AAAA,EACL,cAAgB,EAAA;AAClB,CAAC,CAAA;AAED,SAAS,cAAiB,GAAA;AACxB,EAAA,uBACG,GAAA,CAAA,aAAA,EAAA,EAAc,KAAO,EAAA,KAAA,EACpB,QAAC,kBAAA,GAAA,CAAA,YAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,gBAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,CACd,EAAA,CAAA,EACF,CACF,EAAA,CAAA;AAEJ;AAEO,SAAS,UAAa,GAAA;AAC3B,EAAA,4BACG,MACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,GAAA,CAAC,kBAAe,CAAI,EAAA,CAAA;AAAA,oBAC7C,GAAA,CAAC,SAAM,IAAM,EAAA,YAAA,CAAa,MAAM,OAAS,kBAAA,GAAA,CAAC,kBAAe,CAAI,EAAA,CAAA;AAAA,oBAC7D,GAAA,CAAC,SAAM,IAAM,EAAA,gBAAA,CAAiB,MAAM,OAAS,kBAAA,GAAA,CAAC,kBAAe,CAAI,EAAA;AAAA,GACnE,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Button } from '@backstage/ui';
|
|
3
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
5
|
+
import { useRiScs } from '../../contexts/RiScContext.esm.js';
|
|
6
|
+
|
|
7
|
+
function EditEncryptionButton({
|
|
8
|
+
onEditEncryption
|
|
9
|
+
}) {
|
|
10
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
11
|
+
const { selectedRiSc } = useRiScs();
|
|
12
|
+
if (!selectedRiSc) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
Button,
|
|
17
|
+
{
|
|
18
|
+
variant: "secondary",
|
|
19
|
+
iconStart: /* @__PURE__ */ jsx("i", { className: "ri-settings-2-line" }),
|
|
20
|
+
onClick: onEditEncryption,
|
|
21
|
+
children: t("contentHeader.editEncryption")
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { EditEncryptionButton };
|
|
27
|
+
//# sourceMappingURL=EditEncryptionButton.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditEncryptionButton.esm.js","sources":["../../../src/components/riScDialog/EditEncryptionButton.tsx"],"sourcesContent":["import { Button } from '@backstage/ui';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\n\nexport function EditEncryptionButton({\n onEditEncryption,\n}: {\n onEditEncryption: () => void;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc } = useRiScs();\n\n if (!selectedRiSc) {\n return null;\n }\n\n return (\n <Button\n variant=\"secondary\"\n iconStart={<i className=\"ri-settings-2-line\" />}\n onClick={onEditEncryption}\n >\n {t('contentHeader.editEncryption')}\n </Button>\n );\n}\n"],"names":[],"mappings":";;;;;;AAKO,SAAS,oBAAqB,CAAA;AAAA,EACnC;AACF,CAEG,EAAA;AACD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAM,MAAA,EAAE,YAAa,EAAA,GAAI,QAAS,EAAA;AAElC,EAAA,IAAI,CAAC,YAAc,EAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,WAAA;AAAA,MACR,SAAW,kBAAA,GAAA,CAAC,GAAE,EAAA,EAAA,SAAA,EAAU,oBAAqB,EAAA,CAAA;AAAA,MAC7C,OAAS,EAAA,gBAAA;AAAA,MAER,YAAE,8BAA8B;AAAA;AAAA,GACnC;AAEJ;;;;"}
|
|
@@ -15,6 +15,7 @@ import Box from '@mui/material/Box';
|
|
|
15
15
|
import { Stepper, Step, StepLabel } from '@mui/material';
|
|
16
16
|
import ConfigEncryptionDialog from './ConfigEncryptionDialog.esm.js';
|
|
17
17
|
import ConfigRiscInfo from './ConfigRiscInfo.esm.js';
|
|
18
|
+
import { Delete } from '@material-ui/icons';
|
|
18
19
|
|
|
19
20
|
var RiScDialogStates = /* @__PURE__ */ ((RiScDialogStates2) => {
|
|
20
21
|
RiScDialogStates2[RiScDialogStates2["Closed"] = 0] = "Closed";
|
|
@@ -40,7 +41,11 @@ function RiScStepper({
|
|
|
40
41
|
children
|
|
41
42
|
] });
|
|
42
43
|
}
|
|
43
|
-
function RiScDialog({
|
|
44
|
+
function RiScDialog({
|
|
45
|
+
onClose,
|
|
46
|
+
dialogState,
|
|
47
|
+
onDelete
|
|
48
|
+
}) {
|
|
44
49
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
45
50
|
const { selectedRiSc, createNewRiSc, deleteRiSc, updateRiSc, gcpCryptoKeys } = useRiScs();
|
|
46
51
|
const {
|
|
@@ -169,7 +174,7 @@ function RiScDialog({ onClose, dialogState }) {
|
|
|
169
174
|
}
|
|
170
175
|
if (dialogState === 2 /* EditRiscInfo */) {
|
|
171
176
|
return /* @__PURE__ */ jsxs(Dialog, { open: true, onClose, children: [
|
|
172
|
-
/* @__PURE__ */ jsx(DialogTitle, { children: t("rosDialog.titleEdit") }),
|
|
177
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: /* @__PURE__ */ jsx(Box, { sx: { display: "flex", flexDirection: "column" }, children: t("rosDialog.titleEdit") }) }),
|
|
173
178
|
/* @__PURE__ */ jsx(
|
|
174
179
|
DialogContent,
|
|
175
180
|
{
|
|
@@ -189,6 +194,20 @@ function RiScDialog({ onClose, dialogState }) {
|
|
|
189
194
|
}
|
|
190
195
|
),
|
|
191
196
|
/* @__PURE__ */ jsxs(DialogActions, { sx: dialogActions, children: [
|
|
197
|
+
/* @__PURE__ */ jsx(
|
|
198
|
+
Button,
|
|
199
|
+
{
|
|
200
|
+
startIcon: /* @__PURE__ */ jsx(Delete, {}),
|
|
201
|
+
variant: "text",
|
|
202
|
+
color: "error",
|
|
203
|
+
onClick: onDelete,
|
|
204
|
+
sx: {
|
|
205
|
+
position: "absolute",
|
|
206
|
+
left: 16
|
|
207
|
+
},
|
|
208
|
+
children: t("contentHeader.deleteButton")
|
|
209
|
+
}
|
|
210
|
+
),
|
|
192
211
|
/* @__PURE__ */ jsx(Button, { variant: "outlined", onClick: onClose, children: t("dictionary.cancel") }),
|
|
193
212
|
/* @__PURE__ */ jsx(Button, { variant: "contained", onClick: handleFinish, children: t("dictionary.save") })
|
|
194
213
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport Box from '@mui/material/Box';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n EditEncryption = 3,\n Delete = 4,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n}\n\nexport enum CreateRiScFrom {\n Scratch = 0,\n Default = 1,\n}\n\nfunction RiScStepper({\n children,\n activeStep,\n}: {\n children: React.ReactNode;\n activeStep: number;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [t('rosDialog.stepRiscDetails'), t('rosDialog.stepEncryption')];\n return (\n <Box sx={{ width: '100%', p: 2 }}>\n <Stepper activeStep={activeStep}>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {children}\n </Box>\n );\n}\n\nexport function RiScDialog({ onClose, dialogState }: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc, createNewRiSc, deleteRiSc, updateRiSc, gcpCryptoKeys } =\n useRiScs();\n\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [createRiScFrom, setCreateRiScFrom] = useState<CreateRiScFrom>(\n CreateRiScFrom.Scratch,\n );\n const handleChangeCreateRiScFrom = () => {\n if (createRiScFrom === CreateRiScFrom.Scratch) {\n setCreateRiScFrom(CreateRiScFrom.Default);\n } else {\n setCreateRiScFrom(CreateRiScFrom.Scratch);\n }\n };\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, createRiScFrom === CreateRiScFrom.Default);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc();\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleNew')}</DialogTitle>\n <RiScStepper activeStep={activeStep}>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n {activeStep === 0 && (\n <ConfigRiscInfo\n dialogState={dialogState}\n createRiScFrom={createRiScFrom}\n handleChangeCreateRiScFrom={handleChangeCreateRiScFrom}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 1 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n </DialogContent>\n </RiScStepper>\n <DialogActions sx={dialogActions}>\n {activeStep > 0 && (\n <Button variant=\"outlined\" onClick={handleBack}>\n {t('dictionary.previous')}\n </Button>\n )}\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n {activeStep < 1 ? (\n <Button variant=\"contained\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('deleteDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContent>{t('deleteDialog.confirmationMessage')}</DialogContent>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleEdit')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigRiscInfo\n dialogState={dialogState}\n createRiScFrom={createRiScFrom}\n handleChangeCreateRiScFrom={handleChangeCreateRiScFrom}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.editEncryption')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates","CreateRiScFrom"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport { dialogActions } from '../common/mixins';\nimport Box from '@mui/material/Box';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport { Delete as DeleteIcon } from '@material-ui/icons';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n EditEncryption = 3,\n Delete = 4,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nexport enum CreateRiScFrom {\n Scratch = 0,\n Default = 1,\n}\n\nfunction RiScStepper({\n children,\n activeStep,\n}: {\n children: React.ReactNode;\n activeStep: number;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [t('rosDialog.stepRiscDetails'), t('rosDialog.stepEncryption')];\n return (\n <Box sx={{ width: '100%', p: 2 }}>\n <Stepper activeStep={activeStep}>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {children}\n </Box>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { selectedRiSc, createNewRiSc, deleteRiSc, updateRiSc, gcpCryptoKeys } =\n useRiScs();\n\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [createRiScFrom, setCreateRiScFrom] = useState<CreateRiScFrom>(\n CreateRiScFrom.Scratch,\n );\n const handleChangeCreateRiScFrom = () => {\n if (createRiScFrom === CreateRiScFrom.Scratch) {\n setCreateRiScFrom(CreateRiScFrom.Default);\n } else {\n setCreateRiScFrom(CreateRiScFrom.Scratch);\n }\n };\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, createRiScFrom === CreateRiScFrom.Default);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc();\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.titleNew')}</DialogTitle>\n <RiScStepper activeStep={activeStep}>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n {activeStep === 0 && (\n <ConfigRiscInfo\n dialogState={dialogState}\n createRiScFrom={createRiScFrom}\n handleChangeCreateRiScFrom={handleChangeCreateRiScFrom}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 1 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n </DialogContent>\n </RiScStepper>\n <DialogActions sx={dialogActions}>\n {activeStep > 0 && (\n <Button variant=\"outlined\" onClick={handleBack}>\n {t('dictionary.previous')}\n </Button>\n )}\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n {activeStep < 1 ? (\n <Button variant=\"contained\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('deleteDialog.title')}</DialogTitle>\n <DialogContent>\n <DialogContent>{t('deleteDialog.confirmationMessage')}</DialogContent>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n {t('rosDialog.titleEdit')}\n </Box>\n </DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigRiscInfo\n dialogState={dialogState}\n createRiScFrom={createRiScFrom}\n handleChangeCreateRiScFrom={handleChangeCreateRiScFrom}\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"error\"\n onClick={onDelete}\n sx={{\n position: 'absolute',\n left: 16,\n }}\n >\n {t('contentHeader.deleteButton')}\n </Button>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <Dialog open={true} onClose={onClose}>\n <DialogTitle>{t('rosDialog.editEncryption')}</DialogTitle>\n <DialogContent\n sx={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n </DialogContent>\n <DialogActions sx={dialogActions}>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates","CreateRiScFrom","DeleteIcon"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBY,IAAA,gBAAA,qBAAAA,iBAAL,KAAA;AACL,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,YAAS,CAAT,CAAA,GAAA,QAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,YAAS,CAAT,CAAA,GAAA,QAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,kBAAe,CAAf,CAAA,GAAA,cAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,oBAAiB,CAAjB,CAAA,GAAA,gBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,YAAS,CAAT,CAAA,GAAA,QAAA;AALU,EAAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAcA,IAAA,cAAA,qBAAAC,eAAL,KAAA;AACL,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,aAAU,CAAV,CAAA,GAAA,SAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,aAAU,CAAV,CAAA,GAAA,SAAA;AAFU,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAKZ,SAAS,WAAY,CAAA;AAAA,EACnB,QAAA;AAAA,EACA;AACF,CAGG,EAAA;AACD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,QAAQ,CAAC,CAAA,CAAE,2BAA2B,CAAG,EAAA,CAAA,CAAE,0BAA0B,CAAC,CAAA;AAC5E,EACE,uBAAA,IAAA,CAAC,OAAI,EAAI,EAAA,EAAE,OAAO,MAAQ,EAAA,CAAA,EAAG,GAC3B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAQ,EAAA,EAAA,UAAA,EACN,QAAM,EAAA,KAAA,CAAA,GAAA,CAAI,CACT,KAAA,qBAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,SAAW,EAAA,EAAA,QAAA,EAAA,KAAA,EAAM,CADT,EAAA,EAAA,KAEX,CACD,CACH,EAAA,CAAA;AAAA,IACC;AAAA,GACH,EAAA,CAAA;AAEJ;AAEO,SAAS,UAAW,CAAA;AAAA,EACzB,OAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAoB,EAAA;AAClB,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,EAAE,YAAc,EAAA,aAAA,EAAe,YAAY,UAAY,EAAA,aAAA,KAC3D,QAAS,EAAA;AAEX,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAO,EAAA;AAAA,IACpB;AAAA,MACE,OAA0B,CAAA;AAAA,IAC5B,aACE,EAAA,WAAA,KAAgB,CAChB,uBAAA,WAAA,KAAgB,yBACZ,YACA,GAAA;AAAA,MACE,SAAS,SAAU,EAAA;AAAA,MACnB,UAAY,EAAA;AAAA,QACV,gBAAkB,EAAA;AAAA;AACpB,KACF;AAAA,IACN,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,CAAC,CAAA;AAE9C,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAA,QAAA;AAAA,IAC1C,CAAA;AAAA,GACF;AACA,EAAA,MAAM,6BAA6B,MAAM;AACvC,IAAA,IAAI,mBAAmB,CAAwB,gBAAA;AAC7C,MAAA,iBAAA,CAAkB,CAAsB,eAAA;AAAA,KACnC,MAAA;AACL,MAAA,iBAAA,CAAkB,CAAsB,eAAA;AAAA;AAC1C,GACF;AAEA,EAAA,MAAM,UAAa,GAAA,YAAA;AAAA,IACjB,MAAM;AACJ,MAAA,IAAI,eAAe,CAAG,EAAA;AACpB,QAAA,aAAA,CAAc,CAAC,CAAA;AAAA;AACjB,KACF;AAAA;AAAA,IAEA,CAAoB,gBAAA,KAAA;AAClB,MAAA,IAAI,UAAe,KAAA,CAAA,IAAK,gBAAiB,CAAA,OAAA,KAAY,MAAW,EAAA;AAC9D,QAAA,aAAA,CAAc,CAAC,CAAA;AAAA;AACjB;AACF,GACF;AAEA,EAAA,SAAS,UAAa,GAAA;AACpB,IAAA,IAAI,eAAe,CAAG,EAAA;AACpB,MAAA,aAAA,CAAc,CAAC,CAAA;AAAA;AACjB;AAGF,EAAM,MAAA,YAAA,GAAe,YAAa,CAAA,CAAC,IAA2B,KAAA;AAC5D,IAAA,IAAI,gBAAgB,CAAyB,eAAA;AAC3C,MAAc,aAAA,CAAA,IAAA,EAAM,mBAAmB,CAAsB,eAAA;AAAA,KAC/D,MAAA,IAAW,gBAAgB,CAAyB,eAAA;AAClD,MAAW,UAAA,EAAA;AAAA,KACN,MAAA;AAIL,MAAA,MAAM,eAAkB,GAAA,aAAA;AAAA,QACtB,IAAA,CAAK,WAAW,GAAK,EAAA,GAAA,CAAI,SAAO,GAAI,CAAA,SAAS,EAAE,IAAK,EAAA;AAAA,QACpD,YAAA,EAAc,WAAW,GAAK,EAAA,GAAA,CAAI,SAAO,GAAI,CAAA,SAAS,EAAE,IAAK;AAAA,OAC/D;AAIA,MAAA,MAAM,eAAkB,GAAA,aAAA;AAAA,QACtB,MAAO,CAAA,WAAA;AAAA,UACL,IAAK,CAAA,UAAA,CAAW,OAAS,EAAA,GAAA,CAAI,CAAO,GAAA,KAAA;AAAA,YAClC,GAAI,CAAA,WAAA;AAAA,YACJ,GAAI,CAAA;AAAA,WACL,KAAK;AAAC,SACT;AAAA,QACA,MAAO,CAAA,WAAA;AAAA,UACL,YAAc,EAAA,UAAA,CAAW,OAAS,EAAA,GAAA,CAAI,CAAO,GAAA,KAAA;AAAA,YAC3C,GAAI,CAAA,WAAA;AAAA,YACJ,GAAI,CAAA;AAAA,WACL,KAAK;AAAC;AACT,OACF;AAGA,MACE,IAAA,CAAC,aAAc,CAAA,IAAA,EAAM,YAAc,EAAA,CAAC,YAAY,CAAC,CACjD,IAAA,CAAC,eACD,IAAA,CAAC,eACD,EAAA;AACA,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA;AACjB;AAEF,IAAQ,OAAA,EAAA;AAAA,GACT,CAAA;AAED,EAAA,IAAI,gBAAgB,CAAyB,eAAA;AAC3C,IAAA,uBACG,IAAA,CAAA,MAAA,EAAA,EAAO,IAAM,EAAA,IAAA,EAAM,OAClB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,WAAA,EAAA,EAAa,QAAE,EAAA,CAAA,CAAA,oBAAoB,CAAE,EAAA,CAAA;AAAA,sBACtC,GAAA,CAAC,eAAY,UACX,EAAA,QAAA,kBAAA,IAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,IAAI,EAAE,OAAA,EAAS,QAAQ,aAAe,EAAA,QAAA,EAAU,KAAK,MAAO,EAAA;AAAA,UAE3D,QAAA,EAAA;AAAA,YAAA,UAAA,KAAe,CACd,oBAAA,GAAA;AAAA,cAAC,cAAA;AAAA,cAAA;AAAA,gBACC,WAAA;AAAA,gBACA,cAAA;AAAA,gBACA,0BAAA;AAAA,gBACA,QAAA;AAAA,gBACA,MAAA;AAAA,gBACA,QAAA;AAAA,gBACA;AAAA;AAAA,aACF;AAAA,YAED,eAAe,CACd,oBAAA,GAAA;AAAA,cAAC,sBAAA;AAAA,cAAA;AAAA,gBACC,aAAA;AAAA,gBACA,QAAA;AAAA,gBACA,KAAO,EAAA,WAAA;AAAA,gBACP,QAAA;AAAA,gBACA;AAAA;AAAA;AACF;AAAA;AAAA,OAGN,EAAA,CAAA;AAAA,sBACA,IAAA,CAAC,aAAc,EAAA,EAAA,EAAA,EAAI,aAChB,EAAA,QAAA,EAAA;AAAA,QAAa,UAAA,GAAA,CAAA,wBACX,MAAO,EAAA,EAAA,OAAA,EAAQ,YAAW,OAAS,EAAA,UAAA,EACjC,QAAE,EAAA,CAAA,CAAA,qBAAqB,CAC1B,EAAA,CAAA;AAAA,wBAEF,GAAA,CAAC,UAAO,OAAQ,EAAA,UAAA,EAAW,SAAS,OACjC,EAAA,QAAA,EAAA,CAAA,CAAE,mBAAmB,CACxB,EAAA,CAAA;AAAA,QACC,UAAA,GAAa,oBACX,GAAA,CAAA,MAAA,EAAA,EAAO,SAAQ,WAAY,EAAA,OAAA,EAAS,YAClC,QAAE,EAAA,CAAA,CAAA,iBAAiB,GACtB,CAEA,mBAAA,GAAA,CAAC,UAAO,OAAQ,EAAA,WAAA,EAAY,SAAS,YAClC,EAAA,QAAA,EAAA,CAAA,CAAE,iBAAiB,CACtB,EAAA;AAAA,OAEJ,EAAA;AAAA,KACF,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,gBAAgB,CAAyB,eAAA;AAC3C,IAAA,uBACG,IAAA,CAAA,MAAA,EAAA,EAAO,IAAM,EAAA,IAAA,EAAM,OAClB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,WAAA,EAAA,EAAa,QAAE,EAAA,CAAA,CAAA,oBAAoB,CAAE,EAAA,CAAA;AAAA,0BACrC,aACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,iBAAe,QAAE,EAAA,CAAA,CAAA,kCAAkC,GAAE,CACxD,EAAA,CAAA;AAAA,2BACC,aACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAO,OAAQ,EAAA,UAAA,EAAW,SAAS,OACjC,EAAA,QAAA,EAAA,CAAA,CAAE,mBAAmB,CACxB,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAO,OAAQ,EAAA,WAAA,EAAY,SAAS,YAClC,EAAA,QAAA,EAAA,CAAA,CAAE,mBAAmB,CACxB,EAAA;AAAA,OACF,EAAA;AAAA,KACF,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,gBAAgB,CAA+B,qBAAA;AACjD,IAAA,uBACG,IAAA,CAAA,MAAA,EAAA,EAAO,IAAM,EAAA,IAAA,EAAM,OAClB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,EAAA,EAAI,EAAE,OAAA,EAAS,MAAQ,EAAA,aAAA,EAAe,QAAS,EAAA,EACjD,QAAE,EAAA,CAAA,CAAA,qBAAqB,GAC1B,CACF,EAAA,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,IAAI,EAAE,OAAA,EAAS,QAAQ,aAAe,EAAA,QAAA,EAAU,KAAK,MAAO,EAAA;AAAA,UAE5D,QAAA,kBAAA,GAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACC,WAAA;AAAA,cACA,cAAA;AAAA,cACA,0BAAA;AAAA,cACA,QAAA;AAAA,cACA,MAAA;AAAA,cACA,QAAA;AAAA,cACA;AAAA;AAAA;AACF;AAAA,OACF;AAAA,sBACA,IAAA,CAAC,aAAc,EAAA,EAAA,EAAA,EAAI,aACjB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,sBAAYC,MAAW,EAAA,EAAA,CAAA;AAAA,YACvB,OAAQ,EAAA,MAAA;AAAA,YACR,KAAM,EAAA,OAAA;AAAA,YACN,OAAS,EAAA,QAAA;AAAA,YACT,EAAI,EAAA;AAAA,cACF,QAAU,EAAA,UAAA;AAAA,cACV,IAAM,EAAA;AAAA,aACR;AAAA,YAEC,YAAE,4BAA4B;AAAA;AAAA,SACjC;AAAA,wBACA,GAAA,CAAC,UAAO,OAAQ,EAAA,UAAA,EAAW,SAAS,OACjC,EAAA,QAAA,EAAA,CAAA,CAAE,mBAAmB,CACxB,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAO,OAAQ,EAAA,WAAA,EAAY,SAAS,YAClC,EAAA,QAAA,EAAA,CAAA,CAAE,iBAAiB,CACtB,EAAA;AAAA,OACF,EAAA;AAAA,KACF,EAAA,CAAA;AAAA;AAIJ,EAAA,IAAI,gBAAgB,CAAiC,uBAAA;AACnD,IAAA,uBACG,IAAA,CAAA,MAAA,EAAA,EAAO,IAAM,EAAA,IAAA,EAAM,OAClB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,WAAA,EAAA,EAAa,QAAE,EAAA,CAAA,CAAA,0BAA0B,CAAE,EAAA,CAAA;AAAA,sBAC5C,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,IAAI,EAAE,OAAA,EAAS,QAAQ,aAAe,EAAA,QAAA,EAAU,KAAK,MAAO,EAAA;AAAA,UAE5D,QAAA,kBAAA,GAAA;AAAA,YAAC,sBAAA;AAAA,YAAA;AAAA,cACC,aAAA;AAAA,cACA,UAAU,YAAc,EAAA,UAAA;AAAA,cACxB,QAAA;AAAA,cACA,KAAO,EAAA,WAAA;AAAA,cACP,QAAA;AAAA,cACA;AAAA;AAAA;AACF;AAAA,OACF;AAAA,sBACA,IAAA,CAAC,aAAc,EAAA,EAAA,EAAA,EAAI,aACjB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAO,OAAQ,EAAA,UAAA,EAAW,SAAS,OACjC,EAAA,QAAA,EAAA,CAAA,CAAE,mBAAmB,CACxB,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAO,OAAQ,EAAA,WAAA,EAAY,SAAS,YAClC,EAAA,QAAA,EAAA,CAAA,CAAE,iBAAiB,CACtB,EAAA;AAAA,OACF,EAAA;AAAA,KACF,EAAA,CAAA;AAAA;AAIJ,EAAO,OAAA,IAAA;AACT;;;;"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Button, Card, CardHeader, Flex, Text } from '@backstage/ui';
|
|
4
|
+
import { Dialog, DialogTitle, DialogContent } from '@material-ui/core';
|
|
5
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
7
|
+
import { Link } from '@mui/material';
|
|
8
|
+
|
|
9
|
+
function SupportDialog() {
|
|
10
|
+
const [open, setOpen] = useState(false);
|
|
11
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
12
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13
|
+
/* @__PURE__ */ jsx(
|
|
14
|
+
Button,
|
|
15
|
+
{
|
|
16
|
+
onClick: () => setOpen(true),
|
|
17
|
+
variant: "secondary",
|
|
18
|
+
iconStart: /* @__PURE__ */ jsx("i", { className: "ri-question-line" }),
|
|
19
|
+
children: t("supportDialog.title")
|
|
20
|
+
}
|
|
21
|
+
),
|
|
22
|
+
/* @__PURE__ */ jsxs(Dialog, { open, onClose: () => setOpen(false), fullWidth: true, children: [
|
|
23
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: t("supportDialog.title") }),
|
|
24
|
+
/* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsxs(
|
|
25
|
+
"div",
|
|
26
|
+
{
|
|
27
|
+
style: {
|
|
28
|
+
display: "flex",
|
|
29
|
+
flexDirection: "column",
|
|
30
|
+
gap: "8px",
|
|
31
|
+
marginBottom: "8px"
|
|
32
|
+
},
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx(
|
|
35
|
+
SupportEntry,
|
|
36
|
+
{
|
|
37
|
+
label: t("supportDialog.entries.documentation.title"),
|
|
38
|
+
url: "https://skip.kartverket.no/docs",
|
|
39
|
+
icon: /* @__PURE__ */ jsx(
|
|
40
|
+
"i",
|
|
41
|
+
{
|
|
42
|
+
className: "ri-article-line",
|
|
43
|
+
style: { fontSize: "x-large" }
|
|
44
|
+
}
|
|
45
|
+
),
|
|
46
|
+
description: t("supportDialog.entries.documentation.description")
|
|
47
|
+
}
|
|
48
|
+
),
|
|
49
|
+
/* @__PURE__ */ jsx(
|
|
50
|
+
SupportEntry,
|
|
51
|
+
{
|
|
52
|
+
label: t("supportDialog.entries.slackChannel.title"),
|
|
53
|
+
url: "https://kartverketgroup.slack.com/archives/C028ZEED280",
|
|
54
|
+
icon: /* @__PURE__ */ jsx("i", { className: "ri-slack-fill", style: { fontSize: "x-large" } }),
|
|
55
|
+
description: t("supportDialog.entries.slackChannel.description")
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
SupportEntry,
|
|
60
|
+
{
|
|
61
|
+
label: t("supportDialog.entries.riscFeedbackChannel.title"),
|
|
62
|
+
url: "https://kartverketgroup.slack.com/archives/C075KCPTURY",
|
|
63
|
+
icon: /* @__PURE__ */ jsx("i", { className: "ri-slack-fill", style: { fontSize: "x-large" } }),
|
|
64
|
+
description: t(
|
|
65
|
+
"supportDialog.entries.riscFeedbackChannel.description"
|
|
66
|
+
)
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsx(
|
|
70
|
+
SupportEntry,
|
|
71
|
+
{
|
|
72
|
+
label: t("supportDialog.entries.riscDocumentation.title"),
|
|
73
|
+
url: "https://kartverket.atlassian.net/wiki/spaces/SIK/pages/1176142023/Koden+r+RoS",
|
|
74
|
+
icon: /* @__PURE__ */ jsx(
|
|
75
|
+
"i",
|
|
76
|
+
{
|
|
77
|
+
className: "ri-article-line",
|
|
78
|
+
style: { fontSize: "x-large" }
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
description: t(
|
|
82
|
+
"supportDialog.entries.riscDocumentation.description"
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
/* @__PURE__ */ jsx(
|
|
87
|
+
SupportEntry,
|
|
88
|
+
{
|
|
89
|
+
label: t(
|
|
90
|
+
"supportDialog.entries.securityMetricsFeedbackChannel.title"
|
|
91
|
+
),
|
|
92
|
+
url: "https://kartverketgroup.slack.com/archives/C07RNB2LPUZ",
|
|
93
|
+
icon: /* @__PURE__ */ jsx("i", { className: "ri-slack-fill", style: { fontSize: "x-large" } }),
|
|
94
|
+
description: t(
|
|
95
|
+
"supportDialog.entries.securityMetricsFeedbackChannel.description"
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
) })
|
|
102
|
+
] })
|
|
103
|
+
] });
|
|
104
|
+
}
|
|
105
|
+
function SupportEntry(props) {
|
|
106
|
+
return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(Flex, { align: "center", children: [
|
|
107
|
+
props.icon,
|
|
108
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "0", children: [
|
|
109
|
+
/* @__PURE__ */ jsx(Text, { weight: "bold", children: props.label }),
|
|
110
|
+
/* @__PURE__ */ jsx(Link, { href: props.url, target: "_blank", children: props.description })
|
|
111
|
+
] })
|
|
112
|
+
] }) }) });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export { SupportDialog };
|
|
116
|
+
//# sourceMappingURL=SupportDialog.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupportDialog.esm.js","sources":["../../../src/components/riScDialog/SupportDialog.tsx"],"sourcesContent":["import { ReactElement, useState } from 'react';\nimport { Button, Card, CardHeader, Flex, Text } from '@backstage/ui';\nimport { Dialog, DialogContent, DialogTitle } from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Link } from '@mui/material';\n\nexport function SupportDialog() {\n const [open, setOpen] = useState(false);\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <>\n <Button\n onClick={() => setOpen(true)}\n variant=\"secondary\"\n iconStart={<i className=\"ri-question-line\" />}\n >\n {t('supportDialog.title')}\n </Button>\n <Dialog open={open} onClose={() => setOpen(false)} fullWidth>\n <DialogTitle>{t('supportDialog.title')}</DialogTitle>\n <DialogContent>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginBottom: '8px',\n }}\n >\n <SupportEntry\n label={t('supportDialog.entries.documentation.title')}\n url=\"https://skip.kartverket.no/docs\"\n icon={\n <i\n className=\"ri-article-line\"\n style={{ fontSize: 'x-large' }}\n />\n }\n description={t('supportDialog.entries.documentation.description')}\n />\n <SupportEntry\n label={t('supportDialog.entries.slackChannel.title')}\n url=\"https://kartverketgroup.slack.com/archives/C028ZEED280\"\n icon={\n <i className=\"ri-slack-fill\" style={{ fontSize: 'x-large' }} />\n }\n description={t('supportDialog.entries.slackChannel.description')}\n />\n <SupportEntry\n label={t('supportDialog.entries.riscFeedbackChannel.title')}\n url=\"https://kartverketgroup.slack.com/archives/C075KCPTURY\"\n icon={\n <i className=\"ri-slack-fill\" style={{ fontSize: 'x-large' }} />\n }\n description={t(\n 'supportDialog.entries.riscFeedbackChannel.description',\n )}\n />\n <SupportEntry\n label={t('supportDialog.entries.riscDocumentation.title')}\n url=\"https://kartverket.atlassian.net/wiki/spaces/SIK/pages/1176142023/Koden+r+RoS\"\n icon={\n <i\n className=\"ri-article-line\"\n style={{ fontSize: 'x-large' }}\n />\n }\n description={t(\n 'supportDialog.entries.riscDocumentation.description',\n )}\n />\n <SupportEntry\n label={t(\n 'supportDialog.entries.securityMetricsFeedbackChannel.title',\n )}\n url=\"https://kartverketgroup.slack.com/archives/C07RNB2LPUZ\"\n icon={\n <i className=\"ri-slack-fill\" style={{ fontSize: 'x-large' }} />\n }\n description={t(\n 'supportDialog.entries.securityMetricsFeedbackChannel.description',\n )}\n />\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\ntype SupportEntryProps = {\n label: string;\n url: string;\n description: string;\n icon: ReactElement;\n};\n\nfunction SupportEntry(props: SupportEntryProps) {\n return (\n <Card>\n <CardHeader>\n <Flex align=\"center\">\n {props.icon}\n <Flex direction=\"column\" gap=\"0\">\n <Text weight=\"bold\">{props.label}</Text>\n <Link href={props.url} target=\"_blank\">\n {props.description}\n </Link>\n </Flex>\n </Flex>\n </CardHeader>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Flex, Text } from '@backstage/ui';
|
|
3
|
+
import { EditEncryptionButton } from '../riScDialog/EditEncryptionButton.esm.js';
|
|
4
|
+
import { SupportDialog } from '../riScDialog/SupportDialog.esm.js';
|
|
5
|
+
import { FeedbackDialog } from '../riScPlugin/FeedbackDialog.esm.js';
|
|
6
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
7
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
8
|
+
|
|
9
|
+
function RiScHeader(props) {
|
|
10
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
11
|
+
return /* @__PURE__ */ jsx("header", { style: { position: "relative" }, children: /* @__PURE__ */ jsxs(Flex, { justify: "between", align: "center", style: { marginBottom: "16px" }, children: [
|
|
12
|
+
/* @__PURE__ */ jsx(Text, { variant: "title-medium", weight: "bold", children: t("contentHeader.title") }),
|
|
13
|
+
/* @__PURE__ */ jsxs(Flex, { children: [
|
|
14
|
+
/* @__PURE__ */ jsx(EditEncryptionButton, { onEditEncryption: props.onEditEncryption }),
|
|
15
|
+
/* @__PURE__ */ jsx(SupportDialog, {}),
|
|
16
|
+
/* @__PURE__ */ jsx(FeedbackDialog, {})
|
|
17
|
+
] })
|
|
18
|
+
] }) });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { RiScHeader };
|
|
22
|
+
//# sourceMappingURL=RiScHeader.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiScHeader.esm.js","sources":["../../../src/components/riScHeader/RiScHeader.tsx"],"sourcesContent":["import { Flex, Text } from '@backstage/ui';\nimport { EditEncryptionButton } from '../riScDialog/EditEncryptionButton.tsx';\nimport { SupportDialog } from '../riScDialog/SupportDialog.tsx';\nimport { FeedbackDialog } from '../riScPlugin/FeedbackDialog.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\n\ntype RiScHeaderProps = {\n onEditEncryption: () => void;\n};\n\nexport function RiScHeader(props: RiScHeaderProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <header style={{ position: 'relative' }}>\n <Flex justify=\"between\" align=\"center\" style={{ marginBottom: '16px' }}>\n <Text variant=\"title-medium\" weight=\"bold\">\n {t('contentHeader.title')}\n </Text>\n <Flex>\n <EditEncryptionButton onEditEncryption={props.onEditEncryption} />\n <SupportDialog />\n <FeedbackDialog />\n </Flex>\n </Flex>\n </header>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAWO,SAAS,WAAW,KAAwB,EAAA;AACjD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,2BACG,QAAO,EAAA,EAAA,KAAA,EAAO,EAAE,QAAA,EAAU,YACzB,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,WAAU,KAAM,EAAA,QAAA,EAAS,OAAO,EAAE,YAAA,EAAc,QAC5D,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,OAAQ,EAAA,cAAA,EAAe,QAAO,MACjC,EAAA,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAC1B,EAAA,CAAA;AAAA,yBACC,IACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,oBAAA,EAAA,EAAqB,gBAAkB,EAAA,KAAA,CAAM,gBAAkB,EAAA,CAAA;AAAA,0BAC/D,aAAc,EAAA,EAAA,CAAA;AAAA,0BACd,cAAe,EAAA,EAAA;AAAA,KAClB,EAAA;AAAA,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -7,8 +7,14 @@ import { InfoCard } from '@backstage/core-components';
|
|
|
7
7
|
import EditButton from '../common/EditButton.esm.js';
|
|
8
8
|
import { useRiScs } from '../../contexts/RiScContext.esm.js';
|
|
9
9
|
import { Markdown } from '../common/Markdown.esm.js';
|
|
10
|
+
import AddCircle from '@mui/icons-material/AddCircle';
|
|
11
|
+
import Button from '@mui/material/Button';
|
|
10
12
|
|
|
11
|
-
function RiScInfo({
|
|
13
|
+
function RiScInfo({
|
|
14
|
+
riScWithMetadata,
|
|
15
|
+
edit,
|
|
16
|
+
onCreateNew
|
|
17
|
+
}) {
|
|
12
18
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
13
19
|
const { approveRiSc, riScs, selectedRiSc, selectRiSc } = useRiScs();
|
|
14
20
|
return /* @__PURE__ */ jsxs(Grid, { container: true, children: [
|
|
@@ -25,12 +31,38 @@ function RiScInfo({ riScWithMetadata, edit }) {
|
|
|
25
31
|
},
|
|
26
32
|
children: /* @__PURE__ */ jsxs(InfoCard, { children: [
|
|
27
33
|
/* @__PURE__ */ jsx(Box, { sx: { mb: 2 }, children: riScs !== null && riScs.length !== 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
|
|
34
|
+
/* @__PURE__ */ jsxs(
|
|
35
|
+
Box,
|
|
30
36
|
{
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
sx: {
|
|
38
|
+
display: "flex",
|
|
39
|
+
justifyContent: "space-between",
|
|
40
|
+
alignItems: "center",
|
|
41
|
+
mb: 1
|
|
42
|
+
},
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
Typography,
|
|
46
|
+
{
|
|
47
|
+
variant: "h6",
|
|
48
|
+
style: { fontSize: 16, marginBottom: 1 },
|
|
49
|
+
children: t("contentHeader.multipleRiScs")
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
/* @__PURE__ */ jsx(
|
|
53
|
+
Button,
|
|
54
|
+
{
|
|
55
|
+
startIcon: /* @__PURE__ */ jsx(AddCircle, {}),
|
|
56
|
+
variant: "text",
|
|
57
|
+
color: "success",
|
|
58
|
+
onClick: onCreateNew,
|
|
59
|
+
sx: {
|
|
60
|
+
alignItems: "right"
|
|
61
|
+
},
|
|
62
|
+
children: t("contentHeader.createNewButton")
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
]
|
|
34
66
|
}
|
|
35
67
|
),
|
|
36
68
|
/* @__PURE__ */ jsx(
|
|
@@ -39,6 +71,7 @@ function RiScInfo({ riScWithMetadata, edit }) {
|
|
|
39
71
|
variant: "standard",
|
|
40
72
|
value: selectedRiSc?.id ?? "",
|
|
41
73
|
onChange: (e) => selectRiSc(e.target.value),
|
|
74
|
+
style: { width: "100%" },
|
|
42
75
|
children: riScs.map((riSc) => /* @__PURE__ */ jsx(MenuItem, { value: riSc.id, children: /* @__PURE__ */ jsx(ListItemText, { primary: riSc.content.title }) }, riSc.id)) ?? []
|
|
43
76
|
}
|
|
44
77
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScInfo.esm.js","sources":["../../../src/components/riScInfo/RiScInfo.tsx"],"sourcesContent":["import { RiScWithMetadata } from '../../utils/types';\nimport {\n Box,\n Grid,\n Typography,\n Select,\n MenuItem,\n ListItemText,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { RiScStatusComponent } from './riScStatus/RiScStatusComponent';\nimport { InfoCard } from '@backstage/core-components';\nimport EditButton from '../common/EditButton';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { Markdown } from '../common/Markdown';\n\ninterface RiScInfoProps {\n riScWithMetadata: RiScWithMetadata;\n edit: () => void;\n}\n\nexport function RiScInfo({
|
|
1
|
+
{"version":3,"file":"RiScInfo.esm.js","sources":["../../../src/components/riScInfo/RiScInfo.tsx"],"sourcesContent":["import { RiScWithMetadata } from '../../utils/types';\nimport {\n Box,\n Grid,\n Typography,\n Select,\n MenuItem,\n ListItemText,\n} from '@material-ui/core';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { RiScStatusComponent } from './riScStatus/RiScStatusComponent';\nimport { InfoCard } from '@backstage/core-components';\nimport EditButton from '../common/EditButton';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { Markdown } from '../common/Markdown';\nimport AddCircle from '@mui/icons-material/AddCircle';\nimport Button from '@mui/material/Button';\n\ninterface RiScInfoProps {\n riScWithMetadata: RiScWithMetadata;\n edit: () => void;\n onCreateNew: () => void;\n}\n\nexport function RiScInfo({\n riScWithMetadata,\n edit,\n onCreateNew,\n}: RiScInfoProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { approveRiSc, riScs, selectedRiSc, selectRiSc } = useRiScs();\n\n return (\n <Grid container>\n <Grid\n item\n xs={12}\n sm={6}\n md={6}\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <InfoCard>\n <Box sx={{ mb: 2 }}>\n {riScs !== null && riScs.length !== 0 && (\n <>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n mb: 1,\n }}\n >\n <Typography\n variant=\"h6\"\n style={{ fontSize: 16, marginBottom: 1 }}\n >\n {t('contentHeader.multipleRiScs')}\n </Typography>\n <Button\n startIcon={<AddCircle />}\n variant=\"text\"\n color=\"success\"\n onClick={onCreateNew}\n sx={{\n alignItems: 'right',\n }}\n >\n {t('contentHeader.createNewButton')}\n </Button>\n </Box>\n <Select\n variant=\"standard\"\n value={selectedRiSc?.id ?? ''}\n onChange={e => selectRiSc(e.target.value as string)}\n style={{ width: '100%' }}\n >\n {riScs.map(riSc => (\n <MenuItem key={riSc.id} value={riSc.id}>\n <ListItemText primary={riSc.content.title} />\n </MenuItem>\n )) ?? []}\n </Select>\n </>\n )}\n </Box>\n <Box\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <Typography variant=\"h5\">\n {riScWithMetadata.content.title}\n </Typography>\n <EditButton onClick={edit} />\n </Box>\n <Markdown description={riScWithMetadata.content.scope} />\n </InfoCard>\n </Grid>\n <Grid item xs={12} sm={6} md={6}>\n <RiScStatusComponent\n selectedRiSc={riScWithMetadata}\n publishRiScFn={approveRiSc}\n />\n </Grid>\n </Grid>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import { Dialog, DialogTitle, DialogContent, TextField, DialogActions } from '@mui/material/';
|
|
3
|
+
import { Button } from '@backstage/ui';
|
|
3
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
5
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
5
6
|
import { useState } from 'react';
|
|
6
7
|
import { dialogActions } from '../common/mixins.esm.js';
|
|
7
|
-
import { AddComment } from '@material-ui/icons';
|
|
8
8
|
import { useAuthenticatedFetch } from '../../utils/hooks.esm.js';
|
|
9
9
|
import Alert from '@mui/material/Alert';
|
|
10
10
|
|
|
@@ -25,9 +25,8 @@ function FeedbackDialog() {
|
|
|
25
25
|
/* @__PURE__ */ jsx(
|
|
26
26
|
Button,
|
|
27
27
|
{
|
|
28
|
-
variant: "
|
|
29
|
-
|
|
30
|
-
color: "primary",
|
|
28
|
+
variant: "secondary",
|
|
29
|
+
iconStart: /* @__PURE__ */ jsx("i", { className: "ri-feedback-line" }),
|
|
31
30
|
onClick: () => setOpen(true),
|
|
32
31
|
children: t("feedbackDialog.feedbackButton")
|
|
33
32
|
}
|
|
@@ -51,8 +50,8 @@ function FeedbackDialog() {
|
|
|
51
50
|
feedbackError && /* @__PURE__ */ jsx(Alert, { severity: "error", sx: { mt: 2 }, children: feedbackError }),
|
|
52
51
|
feedbackSent && /* @__PURE__ */ jsx(Alert, { severity: "success", sx: { mt: 2 }, children: t("feedbackDialog.confirmationMessage") })
|
|
53
52
|
] }) }),
|
|
54
|
-
/* @__PURE__ */ jsx(DialogActions, { sx: dialogActions, children: feedbackSent ? /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "
|
|
55
|
-
/* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "
|
|
53
|
+
/* @__PURE__ */ jsx(DialogActions, { sx: dialogActions, children: feedbackSent ? /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "secondary", children: t("dictionary.close") }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
|
+
/* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "secondary", children: t("dictionary.cancel") }),
|
|
56
55
|
/* @__PURE__ */ jsx(
|
|
57
56
|
Button,
|
|
58
57
|
{
|
|
@@ -64,8 +63,8 @@ function FeedbackDialog() {
|
|
|
64
63
|
setFeedbackError(t("feedbackDialog.errorMessage"));
|
|
65
64
|
}
|
|
66
65
|
},
|
|
67
|
-
|
|
68
|
-
variant: "
|
|
66
|
+
isDisabled: !feedbackText.trim(),
|
|
67
|
+
variant: "primary",
|
|
69
68
|
children: t("feedbackDialog.sendButton")
|
|
70
69
|
}
|
|
71
70
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackDialog.esm.js","sources":["../../../src/components/riScPlugin/FeedbackDialog.tsx"],"sourcesContent":["import {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n TextField,\n
|
|
1
|
+
{"version":3,"file":"FeedbackDialog.esm.js","sources":["../../../src/components/riScPlugin/FeedbackDialog.tsx"],"sourcesContent":["import {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n TextField,\n} from '@mui/material/';\n\nimport { Button } from '@backstage/ui';\n\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useState } from 'react';\nimport { dialogActions } from '../common/mixins.ts';\nimport { useAuthenticatedFetch } from '../../utils/hooks.ts';\nimport Alert from '@mui/material/Alert';\n\nexport function FeedbackDialog() {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { postFeedback } = useAuthenticatedFetch();\n\n const [open, setOpen] = useState(false);\n const [feedbackText, setFeedbackText] = useState('');\n const [feedbackSent, setFeedbackSent] = useState(false);\n const [feedbackError, setFeedbackError] = useState<string | null>(null);\n\n const onClose = () => {\n setOpen(false);\n setFeedbackText('');\n setFeedbackSent(false);\n setFeedbackError(null);\n };\n\n return (\n <>\n <Button\n variant=\"secondary\"\n iconStart={<i className=\"ri-feedback-line\" />}\n onClick={() => setOpen(true)}\n >\n {t('feedbackDialog.feedbackButton')}\n </Button>\n\n <Dialog open={open} onClose={onClose} fullWidth>\n <DialogTitle>{t('feedbackDialog.title')}</DialogTitle>\n <DialogContent>\n <>\n <TextField\n margin=\"dense\"\n label={t('feedbackDialog.description')}\n fullWidth\n multiline\n minRows={4}\n value={feedbackText}\n onChange={e => setFeedbackText(e.target.value)}\n disabled={feedbackSent}\n />\n {feedbackError && (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {feedbackError}\n </Alert>\n )}\n {feedbackSent && (\n <Alert severity=\"success\" sx={{ mt: 2 }}>\n {t('feedbackDialog.confirmationMessage')}\n </Alert>\n )}\n </>\n </DialogContent>\n <DialogActions sx={dialogActions}>\n {feedbackSent ? (\n <Button onClick={onClose} variant=\"secondary\">\n {t('dictionary.close')}\n </Button>\n ) : (\n <>\n <Button onClick={onClose} variant=\"secondary\">\n {t('dictionary.cancel')}\n </Button>\n <Button\n onClick={async () => {\n try {\n await postFeedback(feedbackText);\n setFeedbackSent(true);\n } catch (error: any) {\n setFeedbackError(t('feedbackDialog.errorMessage'));\n }\n }}\n isDisabled={!feedbackText.trim()}\n variant=\"primary\"\n >\n {t('feedbackDialog.sendButton')}\n </Button>\n </>\n )}\n </DialogActions>\n </Dialog>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|