@kartverket/backstage-plugin-risk-scorecard 3.3.10 → 3.5.3

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.
Files changed (33) hide show
  1. package/dist/PluginRoot.esm.js +2 -0
  2. package/dist/PluginRoot.esm.js.map +1 -1
  3. package/dist/components/riScDialog/EditEncryptionButton.esm.js +27 -0
  4. package/dist/components/riScDialog/EditEncryptionButton.esm.js.map +1 -0
  5. package/dist/components/riScDialog/RiScDialog.esm.js +21 -2
  6. package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
  7. package/dist/components/riScDialog/SupportDialog.esm.js +116 -0
  8. package/dist/components/riScDialog/SupportDialog.esm.js.map +1 -0
  9. package/dist/components/riScHeader/RiScHeader.esm.js +22 -0
  10. package/dist/components/riScHeader/RiScHeader.esm.js.map +1 -0
  11. package/dist/components/riScInfo/RiScInfo.esm.js +38 -6
  12. package/dist/components/riScInfo/RiScInfo.esm.js.map +1 -1
  13. package/dist/components/riScPlugin/FeedbackDialog.esm.js +8 -9
  14. package/dist/components/riScPlugin/FeedbackDialog.esm.js.map +1 -1
  15. package/dist/components/riScPlugin/RiScPlugin.esm.js +22 -73
  16. package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
  17. package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +33 -2
  18. package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
  19. package/dist/components/scenarioDrawer/components/ActionBox.esm.js +11 -8
  20. package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
  21. package/dist/components/scenarioDrawer/components/ActionsSection.esm.js +74 -26
  22. package/dist/components/scenarioDrawer/components/ActionsSection.esm.js.map +1 -1
  23. package/dist/components/scenarioTable/ScenarioTable.esm.js +51 -1
  24. package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
  25. package/dist/components/scenarioTable/ScenarioTableStyles.esm.js +48 -0
  26. package/dist/components/scenarioTable/ScenarioTableStyles.esm.js.map +1 -1
  27. package/dist/utils/hooks.esm.js +23 -2
  28. package/dist/utils/hooks.esm.js.map +1 -1
  29. package/dist/utils/translations.esm.js +50 -6
  30. package/dist/utils/translations.esm.js.map +1 -1
  31. package/dist/utils/utilityfunctions.esm.js +27 -1
  32. package/dist/utils/utilityfunctions.esm.js.map +1 -1
  33. package/package.json +4 -2
@@ -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":";;;;;;;;;AAQA,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;;;;"}
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({ onClose, dialogState }) {
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":"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"}
@@ -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({ riScWithMetadata, edit }) {
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__ */ jsx(
29
- Typography,
34
+ /* @__PURE__ */ jsxs(
35
+ Box,
30
36
  {
31
- variant: "h6",
32
- style: { fontSize: 16, marginBottom: 1 },
33
- children: t("contentHeader.multipleRiScs")
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(
@@ -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({ riScWithMetadata, edit }: 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 <Typography\n variant=\"h6\"\n style={{ fontSize: 16, marginBottom: 1 }}\n >\n {t('contentHeader.multipleRiScs')}\n </Typography>\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
+ {"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 { Button, Dialog, DialogTitle, DialogContent, TextField, DialogActions } from '@mui/material/';
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: "text",
29
- startIcon: /* @__PURE__ */ jsx(AddComment, {}),
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: "outlined", children: t("dictionary.close") }) : /* @__PURE__ */ jsxs(Fragment, { children: [
55
- /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "outlined", children: t("dictionary.cancel") }),
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
- disabled: !feedbackText.trim(),
68
- variant: "contained",
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 Button,\n} from '@mui/material/';\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 { AddComment } from '@material-ui/icons';\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=\"text\"\n startIcon={<AddComment />}\n color=\"primary\"\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=\"outlined\">\n {t('dictionary.close')}\n </Button>\n ) : (\n <>\n <Button onClick={onClose} variant=\"outlined\">\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 disabled={!feedbackText.trim()}\n variant=\"contained\"\n >\n {t('feedbackDialog.sendButton')}\n </Button>\n </>\n )}\n </DialogActions>\n </Dialog>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
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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"}