@kartverket/backstage-plugin-risk-scorecard 3.9.4 → 3.9.5
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 -1
- package/dist/PluginRoot.esm.js.map +1 -1
- package/dist/components/riScInfo/changeset/RiScActionChange.esm.js +7 -0
- package/dist/components/riScInfo/changeset/RiScActionChange.esm.js.map +1 -1
- package/dist/components/riScInfo/changeset/RiScActionChangeSet.esm.js +7 -0
- package/dist/components/riScInfo/changeset/RiScActionChangeSet.esm.js.map +1 -1
- package/dist/components/riScInfo/migrations/RiScMigrationChanges.esm.js +3 -1
- package/dist/components/riScInfo/migrations/RiScMigrationChanges.esm.js.map +1 -1
- package/dist/components/riScInfo/migrations/RiScMigrationChanges51.esm.js +42 -0
- package/dist/components/riScInfo/migrations/RiScMigrationChanges51.esm.js.map +1 -0
- package/dist/components/scenario/ScenarioLastUpdatedLabel.esm.js +26 -0
- package/dist/components/scenario/ScenarioLastUpdatedLabel.esm.js.map +1 -0
- package/dist/components/scenario/ScenarioLastUpdatedLabel.module.css.esm.js +8 -0
- package/dist/components/scenario/ScenarioLastUpdatedLabel.module.css.esm.js.map +1 -0
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +7 -3
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js +11 -19
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
- package/dist/components/scenarioTable/ActionsCard.esm.js +15 -10
- package/dist/components/scenarioTable/ActionsCard.esm.js.map +1 -1
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js +3 -1
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js.map +1 -1
- package/dist/contexts/BackstageContext.esm.js +29 -0
- package/dist/contexts/BackstageContext.esm.js.map +1 -0
- package/dist/contexts/ScenarioContext.esm.js +9 -3
- package/dist/contexts/ScenarioContext.esm.js.map +1 -1
- package/dist/utils/DTOs.esm.js +2 -1
- package/dist/utils/DTOs.esm.js.map +1 -1
- package/dist/utils/actions.esm.js +12 -3
- package/dist/utils/actions.esm.js.map +1 -1
- package/dist/utils/constants.esm.js +1 -1
- package/dist/utils/constants.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +14 -2
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js.map +1 -1
- package/dist/utils/utilityfunctions.esm.js +27 -2
- package/dist/utils/utilityfunctions.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/PluginRoot.esm.js
CHANGED
|
@@ -9,6 +9,7 @@ import { RiScProvider } from './contexts/RiScContext.esm.js';
|
|
|
9
9
|
import 'remixicon/fonts/remixicon.css';
|
|
10
10
|
import './plugins/ros/css/theme.css.esm.js';
|
|
11
11
|
import { DefaultRiScTypesProvider } from './contexts/DefaultRiScTypesContext.esm.js';
|
|
12
|
+
import { BackstageContextProvider } from './contexts/BackstageContext.esm.js';
|
|
12
13
|
|
|
13
14
|
const emotionInsertionPoint = document.createElement("meta");
|
|
14
15
|
emotionInsertionPoint.setAttribute("name", "emotion-insertion-point");
|
|
@@ -18,7 +19,7 @@ const cache = createCache({
|
|
|
18
19
|
insertionPoint: emotionInsertionPoint
|
|
19
20
|
});
|
|
20
21
|
function ProvidedPlugin() {
|
|
21
|
-
return /* @__PURE__ */ jsx(CacheProvider, { value: cache, children: /* @__PURE__ */ jsx(RiScProvider, { children: /* @__PURE__ */ jsx(DefaultRiScTypesProvider, { children: /* @__PURE__ */ jsx(ScenarioProvider, { children: /* @__PURE__ */ jsx(RiScPlugin, {}) }) }) }) });
|
|
22
|
+
return /* @__PURE__ */ jsx(CacheProvider, { value: cache, children: /* @__PURE__ */ jsx(BackstageContextProvider, { children: /* @__PURE__ */ jsx(RiScProvider, { children: /* @__PURE__ */ jsx(DefaultRiScTypesProvider, { children: /* @__PURE__ */ jsx(ScenarioProvider, { children: /* @__PURE__ */ jsx(RiScPlugin, {}) }) }) }) }) });
|
|
22
23
|
}
|
|
23
24
|
function PluginRoot() {
|
|
24
25
|
return /* @__PURE__ */ jsxs(Routes, { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\nimport 'remixicon/fonts/remixicon.css';\nimport '../css/theme.css';\nimport { DefaultRiScTypesProvider } from './contexts/DefaultRiScTypesContext.tsx';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nfunction ProvidedPlugin() {\n return (\n <CacheProvider value={cache}>\n <
|
|
1
|
+
{"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\nimport 'remixicon/fonts/remixicon.css';\nimport '../css/theme.css';\nimport { DefaultRiScTypesProvider } from './contexts/DefaultRiScTypesContext.tsx';\nimport { BackstageContextProvider } from './contexts/BackstageContext.tsx';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nfunction ProvidedPlugin() {\n return (\n <CacheProvider value={cache}>\n <BackstageContextProvider>\n <RiScProvider>\n <DefaultRiScTypesProvider>\n <ScenarioProvider>\n <RiScPlugin />\n </ScenarioProvider>\n </DefaultRiScTypesProvider>\n </RiScProvider>\n </BackstageContextProvider>\n </CacheProvider>\n );\n}\n\nexport function PluginRoot() {\n return (\n <Routes>\n <Route path=\"/\" element={<ProvidedPlugin />} />\n <Route path={riScRouteRef.path} element={<ProvidedPlugin />} />\n <Route path={scenarioRouteRef.path} element={<ProvidedPlugin />} />\n </Routes>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAYA,MAAM,qBAAA,GAAwB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC3D,qBAAA,CAAsB,YAAA,CAAa,QAAQ,yBAAyB,CAAA;AACpE,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,EAAG,WAAA,CAAY,qBAAqB,CAAA;AAEjE,MAAM,QAAQ,WAAA,CAAY;AAAA,EACxB,GAAA,EAAK,KAAA;AAAA,EACL,cAAA,EAAgB;AAClB,CAAC,CAAA;AAED,SAAS,cAAA,GAAiB;AACxB,EAAA,2BACG,aAAA,EAAA,EAAc,KAAA,EAAO,OACpB,QAAA,kBAAA,GAAA,CAAC,wBAAA,EAAA,EACC,8BAAC,YAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,wBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,oBACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,GACd,CAAA,EACF,CAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAM,IAAA,EAAK,GAAA,EAAI,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI,CAAA;AAAA,oBAC7C,GAAA,CAAC,SAAM,IAAA,EAAM,YAAA,CAAa,MAAM,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI,CAAA;AAAA,oBAC7D,GAAA,CAAC,SAAM,IAAA,EAAM,gBAAA,CAAiB,MAAM,OAAA,kBAAS,GAAA,CAAC,kBAAe,CAAA,EAAI;AAAA,GAAA,EACnE,CAAA;AAEJ;;;;"}
|
|
@@ -38,6 +38,13 @@ function RiScActionChange({ action, type }) {
|
|
|
38
38
|
title: t("scenarioDrawer.action.lastUpdated"),
|
|
39
39
|
value: parsedDateTime
|
|
40
40
|
}
|
|
41
|
+
),
|
|
42
|
+
/* @__PURE__ */ jsx(
|
|
43
|
+
ChangeSetProperty,
|
|
44
|
+
{
|
|
45
|
+
title: t("migrationDialog.migration51.lastUpdatedBy"),
|
|
46
|
+
value: action.lastUpdatedBy
|
|
47
|
+
}
|
|
41
48
|
)
|
|
42
49
|
] });
|
|
43
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScActionChange.esm.js","sources":["../../../../src/components/riScInfo/changeset/RiScActionChange.tsx"],"sourcesContent":["import { Action } from '../../../utils/types';\nimport { ChangeSetBox } from './components/ChangeSetBox.tsx';\nimport { ChangeSetTag } from './components/ChangeSetTag.tsx';\nimport { ChangeSetTags } from './components/ChangeSetTags.tsx';\nimport { ChangeSetBoxTitle } from './components/ChangeSetBoxTitle.tsx';\nimport { ChangeSetProperty } from './components/ChangeSetProperty.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { formatDate } from '../../../utils/utilityfunctions.ts';\n\ninterface RiScWholeActionChangeProps {\n action: Action;\n type: 'ADDED' | 'DELETED';\n}\n\nexport function RiScActionChange({ action, type }: RiScWholeActionChangeProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const parsedDateTime = action.lastUpdated\n ? formatDate(action.lastUpdated)\n : t('scenarioDrawer.action.notUpdated');\n\n return (\n <ChangeSetBox type=\"secondary\">\n <ChangeSetTags>\n {type === 'ADDED' ? (\n <ChangeSetTag text={t('dictionary.added')} type=\"added\" />\n ) : (\n <ChangeSetTag text={t('dictionary.removed')} type=\"delete\" />\n )}\n <ChangeSetTag text={t('dictionary.action')} type=\"primary\" />\n </ChangeSetTags>\n <ChangeSetBoxTitle title={action.title} />\n <ChangeSetProperty\n title={t('dictionary.description')}\n value={action.description}\n />\n {action.url && (\n <ChangeSetProperty title={t('dictionary.url')} value={action.url} />\n )}\n <ChangeSetProperty\n title={t('dictionary.status')}\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n value={t(`actionStatus.${action.status}`)}\n />\n <ChangeSetProperty\n title={t('scenarioDrawer.action.lastUpdated')}\n value={parsedDateTime}\n />\n </ChangeSetBox>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAeO,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAQ,IAAA,EAAK,EAA+B;AAC7E,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,cAAA,GAAiB,OAAO,WAAA,GAC1B,UAAA,CAAW,OAAO,WAAW,CAAA,GAC7B,EAAE,kCAAkC,CAAA;AAExC,EAAA,uBACE,IAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,WAAA,EACjB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,IAAA,KAAS,0BACR,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,CAAA,CAAE,kBAAkB,CAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,CAAA,uBAEvD,YAAA,EAAA,EAAa,IAAA,EAAM,EAAE,oBAAoB,CAAA,EAAG,MAAK,QAAA,EAAS,CAAA;AAAA,0BAE5D,YAAA,EAAA,EAAa,IAAA,EAAM,EAAE,mBAAmB,CAAA,EAAG,MAAK,SAAA,EAAU;AAAA,KAAA,EAC7D,CAAA;AAAA,oBACA,GAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,oBACxC,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,QACjC,OAAO,MAAA,CAAO;AAAA;AAAA,KAChB;AAAA,IACC,MAAA,CAAO,GAAA,oBACN,GAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,EAAE,gBAAgB,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,GAAA,EAAK,CAAA;AAAA,oBAEpE,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mBAAmB,CAAA;AAAA,QAE5B,KAAA,EAAO,CAAA,CAAE,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA;AAAA,KAC1C;AAAA,oBACA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,QAC5C,KAAA,EAAO;AAAA;AAAA;
|
|
1
|
+
{"version":3,"file":"RiScActionChange.esm.js","sources":["../../../../src/components/riScInfo/changeset/RiScActionChange.tsx"],"sourcesContent":["import { Action } from '../../../utils/types';\nimport { ChangeSetBox } from './components/ChangeSetBox.tsx';\nimport { ChangeSetTag } from './components/ChangeSetTag.tsx';\nimport { ChangeSetTags } from './components/ChangeSetTags.tsx';\nimport { ChangeSetBoxTitle } from './components/ChangeSetBoxTitle.tsx';\nimport { ChangeSetProperty } from './components/ChangeSetProperty.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { formatDate } from '../../../utils/utilityfunctions.ts';\n\ninterface RiScWholeActionChangeProps {\n action: Action;\n type: 'ADDED' | 'DELETED';\n}\n\nexport function RiScActionChange({ action, type }: RiScWholeActionChangeProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const parsedDateTime = action.lastUpdated\n ? formatDate(action.lastUpdated)\n : t('scenarioDrawer.action.notUpdated');\n\n return (\n <ChangeSetBox type=\"secondary\">\n <ChangeSetTags>\n {type === 'ADDED' ? (\n <ChangeSetTag text={t('dictionary.added')} type=\"added\" />\n ) : (\n <ChangeSetTag text={t('dictionary.removed')} type=\"delete\" />\n )}\n <ChangeSetTag text={t('dictionary.action')} type=\"primary\" />\n </ChangeSetTags>\n <ChangeSetBoxTitle title={action.title} />\n <ChangeSetProperty\n title={t('dictionary.description')}\n value={action.description}\n />\n {action.url && (\n <ChangeSetProperty title={t('dictionary.url')} value={action.url} />\n )}\n <ChangeSetProperty\n title={t('dictionary.status')}\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n value={t(`actionStatus.${action.status}`)}\n />\n <ChangeSetProperty\n title={t('scenarioDrawer.action.lastUpdated')}\n value={parsedDateTime}\n />\n <ChangeSetProperty\n title={t('migrationDialog.migration51.lastUpdatedBy')}\n value={action.lastUpdatedBy}\n />\n </ChangeSetBox>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAeO,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAQ,IAAA,EAAK,EAA+B;AAC7E,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,cAAA,GAAiB,OAAO,WAAA,GAC1B,UAAA,CAAW,OAAO,WAAW,CAAA,GAC7B,EAAE,kCAAkC,CAAA;AAExC,EAAA,uBACE,IAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,WAAA,EACjB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,IAAA,KAAS,0BACR,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,CAAA,CAAE,kBAAkB,CAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,CAAA,uBAEvD,YAAA,EAAA,EAAa,IAAA,EAAM,EAAE,oBAAoB,CAAA,EAAG,MAAK,QAAA,EAAS,CAAA;AAAA,0BAE5D,YAAA,EAAA,EAAa,IAAA,EAAM,EAAE,mBAAmB,CAAA,EAAG,MAAK,SAAA,EAAU;AAAA,KAAA,EAC7D,CAAA;AAAA,oBACA,GAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,oBACxC,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,QACjC,OAAO,MAAA,CAAO;AAAA;AAAA,KAChB;AAAA,IACC,MAAA,CAAO,GAAA,oBACN,GAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,EAAE,gBAAgB,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,GAAA,EAAK,CAAA;AAAA,oBAEpE,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mBAAmB,CAAA;AAAA,QAE5B,KAAA,EAAO,CAAA,CAAE,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA;AAAA,KAC1C;AAAA,oBACA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,QAC5C,KAAA,EAAO;AAAA;AAAA,KACT;AAAA,oBACA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,2CAA2C,CAAA;AAAA,QACpD,OAAO,MAAA,CAAO;AAAA;AAAA;AAChB,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -45,6 +45,13 @@ function RiScActionChangeSet({ action }) {
|
|
|
45
45
|
property: action.lastUpdated,
|
|
46
46
|
valueFormatter: (actionValue) => actionValue ? formatDate(actionValue) : t("scenarioDrawer.action.notUpdated")
|
|
47
47
|
}
|
|
48
|
+
),
|
|
49
|
+
/* @__PURE__ */ jsx(
|
|
50
|
+
ChangeSetTrackedProperty,
|
|
51
|
+
{
|
|
52
|
+
title: t("migrationDialog.migration51.lastUpdatedBy"),
|
|
53
|
+
property: action.lastUpdatedBy
|
|
54
|
+
}
|
|
48
55
|
)
|
|
49
56
|
] });
|
|
50
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScActionChangeSet.esm.js","sources":["../../../../src/components/riScInfo/changeset/RiScActionChangeSet.tsx"],"sourcesContent":["import { ActionChange } from '../../../utils/types.ts';\nimport { ChangeSetBox } from './components/ChangeSetBox.tsx';\nimport { ChangeSetTags } from './components/ChangeSetTags.tsx';\nimport { ChangeSetTag } from './components/ChangeSetTag.tsx';\nimport { ChangeSetTrackedProperty } from './components/ChangeSetTrackedProperty.tsx';\nimport { ChangeSetChangedTitle } from './components/ChangeSetChangedTitle.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { formatDate } from '../../../utils/utilityfunctions.ts';\n\ninterface RiScActionChangeSetProps {\n action: ActionChange;\n}\n\nexport function RiScActionChangeSet({ action }: RiScActionChangeSetProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <ChangeSetBox type=\"secondary\">\n <ChangeSetTags>\n <ChangeSetTag text={t('dictionary.action')} type=\"primary\" />\n </ChangeSetTags>\n <ChangeSetChangedTitle title={action.title} />\n <ChangeSetTrackedProperty\n title={t('dictionary.description')}\n property={action.description}\n multiline={true}\n stringOnUndefinedProperty={t('comparisonDialog.noDescription')}\n />\n <ChangeSetTrackedProperty\n title={t('dictionary.url')}\n property={action.url}\n stringOnUndefinedProperty={t('comparisonDialog.noURL')}\n />\n <ChangeSetTrackedProperty\n title={t('dictionary.status')}\n property={action.status}\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n valueFormatter={actionValue => t(`actionStatus.${actionValue}`)}\n />\n <ChangeSetTrackedProperty\n title={t('scenarioDrawer.action.lastUpdated')}\n property={action.lastUpdated}\n valueFormatter={actionValue =>\n actionValue\n ? formatDate(actionValue)\n : t('scenarioDrawer.action.notUpdated')\n }\n />\n </ChangeSetBox>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcO,SAAS,mBAAA,CAAoB,EAAE,MAAA,EAAO,EAA6B;AACxE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,uBACE,IAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,WAAA,EACjB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,aAAA,EAAA,EACC,8BAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAE,mBAAmB,CAAA,EAAG,IAAA,EAAK,SAAA,EAAU,CAAA,EAC7D,CAAA;AAAA,oBACA,GAAA,CAAC,qBAAA,EAAA,EAAsB,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,oBAC5C,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,QACjC,UAAU,MAAA,CAAO,WAAA;AAAA,QACjB,SAAA,EAAW,IAAA;AAAA,QACX,yBAAA,EAA2B,EAAE,gCAAgC;AAAA;AAAA,KAC/D;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,QACzB,UAAU,MAAA,CAAO,GAAA;AAAA,QACjB,yBAAA,EAA2B,EAAE,wBAAwB;AAAA;AAAA,KACvD;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mBAAmB,CAAA;AAAA,QAC5B,UAAU,MAAA,CAAO,MAAA;AAAA,QAEjB,cAAA,EAAgB,CAAA,WAAA,KAAe,CAAA,CAAE,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAE;AAAA;AAAA,KAChE;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,QAC5C,UAAU,MAAA,CAAO,WAAA;AAAA,QACjB,gBAAgB,CAAA,WAAA,KACd,WAAA,GACI,WAAW,WAAW,CAAA,GACtB,EAAE,kCAAkC;AAAA;AAAA;
|
|
1
|
+
{"version":3,"file":"RiScActionChangeSet.esm.js","sources":["../../../../src/components/riScInfo/changeset/RiScActionChangeSet.tsx"],"sourcesContent":["import { ActionChange } from '../../../utils/types.ts';\nimport { ChangeSetBox } from './components/ChangeSetBox.tsx';\nimport { ChangeSetTags } from './components/ChangeSetTags.tsx';\nimport { ChangeSetTag } from './components/ChangeSetTag.tsx';\nimport { ChangeSetTrackedProperty } from './components/ChangeSetTrackedProperty.tsx';\nimport { ChangeSetChangedTitle } from './components/ChangeSetChangedTitle.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { formatDate } from '../../../utils/utilityfunctions.ts';\n\ninterface RiScActionChangeSetProps {\n action: ActionChange;\n}\n\nexport function RiScActionChangeSet({ action }: RiScActionChangeSetProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <ChangeSetBox type=\"secondary\">\n <ChangeSetTags>\n <ChangeSetTag text={t('dictionary.action')} type=\"primary\" />\n </ChangeSetTags>\n <ChangeSetChangedTitle title={action.title} />\n <ChangeSetTrackedProperty\n title={t('dictionary.description')}\n property={action.description}\n multiline={true}\n stringOnUndefinedProperty={t('comparisonDialog.noDescription')}\n />\n <ChangeSetTrackedProperty\n title={t('dictionary.url')}\n property={action.url}\n stringOnUndefinedProperty={t('comparisonDialog.noURL')}\n />\n <ChangeSetTrackedProperty\n title={t('dictionary.status')}\n property={action.status}\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n valueFormatter={actionValue => t(`actionStatus.${actionValue}`)}\n />\n <ChangeSetTrackedProperty\n title={t('scenarioDrawer.action.lastUpdated')}\n property={action.lastUpdated}\n valueFormatter={actionValue =>\n actionValue\n ? formatDate(actionValue)\n : t('scenarioDrawer.action.notUpdated')\n }\n />\n <ChangeSetTrackedProperty\n title={t('migrationDialog.migration51.lastUpdatedBy')}\n property={action.lastUpdatedBy}\n />\n </ChangeSetBox>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcO,SAAS,mBAAA,CAAoB,EAAE,MAAA,EAAO,EAA6B;AACxE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,uBACE,IAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,WAAA,EACjB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,aAAA,EAAA,EACC,8BAAC,YAAA,EAAA,EAAa,IAAA,EAAM,EAAE,mBAAmB,CAAA,EAAG,IAAA,EAAK,SAAA,EAAU,CAAA,EAC7D,CAAA;AAAA,oBACA,GAAA,CAAC,qBAAA,EAAA,EAAsB,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,oBAC5C,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,QACjC,UAAU,MAAA,CAAO,WAAA;AAAA,QACjB,SAAA,EAAW,IAAA;AAAA,QACX,yBAAA,EAA2B,EAAE,gCAAgC;AAAA;AAAA,KAC/D;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,gBAAgB,CAAA;AAAA,QACzB,UAAU,MAAA,CAAO,GAAA;AAAA,QACjB,yBAAA,EAA2B,EAAE,wBAAwB;AAAA;AAAA,KACvD;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mBAAmB,CAAA;AAAA,QAC5B,UAAU,MAAA,CAAO,MAAA;AAAA,QAEjB,cAAA,EAAgB,CAAA,WAAA,KAAe,CAAA,CAAE,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAE;AAAA;AAAA,KAChE;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,QAC5C,UAAU,MAAA,CAAO,WAAA;AAAA,QACjB,gBAAgB,CAAA,WAAA,KACd,WAAA,GACI,WAAW,WAAW,CAAA,GACtB,EAAE,kCAAkC;AAAA;AAAA,KAE5C;AAAA,oBACA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,2CAA2C,CAAA;AAAA,QACpD,UAAU,MAAA,CAAO;AAAA;AAAA;AACnB,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -8,6 +8,7 @@ import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
|
8
8
|
import { ChangeSetChangedProperty } from '../changeset/components/ChangeSetChangedProperty.esm.js';
|
|
9
9
|
import { RiScMigrationChanges42 } from './RiScMigrationChanges42.esm.js';
|
|
10
10
|
import { RiScMigrationChanges50 } from './RiScMigrationChanges50.esm.js';
|
|
11
|
+
import { RiScMigrationChanges51 } from './RiScMigrationChanges51.esm.js';
|
|
11
12
|
|
|
12
13
|
function RiScMigrationChanges({
|
|
13
14
|
migrationStatus
|
|
@@ -27,7 +28,8 @@ function RiScMigrationChanges({
|
|
|
27
28
|
migrationStatus.migrationChanges40 && /* @__PURE__ */ jsx(RiScMigrationChanges40, { changes: migrationStatus.migrationChanges40 }),
|
|
28
29
|
migrationStatus.migrationChanges41 && /* @__PURE__ */ jsx(RiScMigrationChanges41, { changes: migrationStatus.migrationChanges41 }),
|
|
29
30
|
migrationStatus.migrationChanges42 && /* @__PURE__ */ jsx(RiScMigrationChanges42, { changes: migrationStatus.migrationChanges42 }),
|
|
30
|
-
migrationStatus.migrationChanges50 && /* @__PURE__ */ jsx(RiScMigrationChanges50, { changes: migrationStatus.migrationChanges50 })
|
|
31
|
+
migrationStatus.migrationChanges50 && /* @__PURE__ */ jsx(RiScMigrationChanges50, { changes: migrationStatus.migrationChanges50 }),
|
|
32
|
+
migrationStatus.migrationChanges51 && /* @__PURE__ */ jsx(RiScMigrationChanges51, { changes: migrationStatus.migrationChanges51 })
|
|
31
33
|
] });
|
|
32
34
|
}
|
|
33
35
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiScMigrationChanges.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges.tsx"],"sourcesContent":["import { ChangeSetTitle } from '../changeset/components/ChangeSetTitle.tsx';\nimport { ChangeSetBox } from '../changeset/components/ChangeSetBox.tsx';\nimport { RiScMigrationChanges40 } from './RiScMigrationChanges40.tsx';\nimport { RiScMigrationChanges41 } from './RiScMigrationChanges41.tsx';\nimport { MigrationStatus } from '../../../utils/types.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { ChangeSetChangedProperty } from '../changeset/components/ChangeSetChangedProperty.tsx';\nimport { RiScMigrationChanges42 } from './RiScMigrationChanges42.tsx';\nimport { RiScMigrationChanges50 } from './RiScMigrationChanges50.tsx';\n\ninterface RiScMigrationChangesProps {\n migrationStatus: MigrationStatus;\n}\n\nexport function RiScMigrationChanges({\n migrationStatus,\n}: RiScMigrationChangesProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <div>\n <ChangeSetTitle text={t('migrationDialog.schemaVersion')} />\n <ChangeSetBox type=\"primary\">\n <ChangeSetChangedProperty\n propertyName={t('migrationDialog.schemaVersion')}\n oldValue={migrationStatus.migrationVersions?.fromVersion || ''}\n newValue={migrationStatus.migrationVersions?.toVersion || ''}\n compact={true}\n />\n </ChangeSetBox>\n {migrationStatus.migrationChanges40 && (\n <RiScMigrationChanges40 changes={migrationStatus.migrationChanges40} />\n )}\n {migrationStatus.migrationChanges41 && (\n <RiScMigrationChanges41 changes={migrationStatus.migrationChanges41} />\n )}\n {migrationStatus.migrationChanges42 && (\n <RiScMigrationChanges42 changes={migrationStatus.migrationChanges42} />\n )}\n {migrationStatus.migrationChanges50 && (\n <RiScMigrationChanges50 changes={migrationStatus.migrationChanges50} />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RiScMigrationChanges.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges.tsx"],"sourcesContent":["import { ChangeSetTitle } from '../changeset/components/ChangeSetTitle.tsx';\nimport { ChangeSetBox } from '../changeset/components/ChangeSetBox.tsx';\nimport { RiScMigrationChanges40 } from './RiScMigrationChanges40.tsx';\nimport { RiScMigrationChanges41 } from './RiScMigrationChanges41.tsx';\nimport { MigrationStatus } from '../../../utils/types.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\nimport { ChangeSetChangedProperty } from '../changeset/components/ChangeSetChangedProperty.tsx';\nimport { RiScMigrationChanges42 } from './RiScMigrationChanges42.tsx';\nimport { RiScMigrationChanges50 } from './RiScMigrationChanges50.tsx';\nimport { RiScMigrationChanges51 } from './RiScMigrationChanges51.tsx';\n\ninterface RiScMigrationChangesProps {\n migrationStatus: MigrationStatus;\n}\n\nexport function RiScMigrationChanges({\n migrationStatus,\n}: RiScMigrationChangesProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <div>\n <ChangeSetTitle text={t('migrationDialog.schemaVersion')} />\n <ChangeSetBox type=\"primary\">\n <ChangeSetChangedProperty\n propertyName={t('migrationDialog.schemaVersion')}\n oldValue={migrationStatus.migrationVersions?.fromVersion || ''}\n newValue={migrationStatus.migrationVersions?.toVersion || ''}\n compact={true}\n />\n </ChangeSetBox>\n {migrationStatus.migrationChanges40 && (\n <RiScMigrationChanges40 changes={migrationStatus.migrationChanges40} />\n )}\n {migrationStatus.migrationChanges41 && (\n <RiScMigrationChanges41 changes={migrationStatus.migrationChanges41} />\n )}\n {migrationStatus.migrationChanges42 && (\n <RiScMigrationChanges42 changes={migrationStatus.migrationChanges42} />\n )}\n {migrationStatus.migrationChanges50 && (\n <RiScMigrationChanges50 changes={migrationStatus.migrationChanges50} />\n )}\n {migrationStatus.migrationChanges51 && (\n <RiScMigrationChanges51 changes={migrationStatus.migrationChanges51} />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAgBO,SAAS,oBAAA,CAAqB;AAAA,EACnC;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,CAAA,CAAE,+BAA+B,CAAA,EAAG,CAAA;AAAA,oBAC1D,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,SAAA,EACjB,QAAA,kBAAA,GAAA;AAAA,MAAC,wBAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,EAAE,+BAA+B,CAAA;AAAA,QAC/C,QAAA,EAAU,eAAA,CAAgB,iBAAA,EAAmB,WAAA,IAAe,EAAA;AAAA,QAC5D,QAAA,EAAU,eAAA,CAAgB,iBAAA,EAAmB,SAAA,IAAa,EAAA;AAAA,QAC1D,OAAA,EAAS;AAAA;AAAA,KACX,EACF,CAAA;AAAA,IACC,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB,CAAA;AAAA,IAEtE,gBAAgB,kBAAA,oBACf,GAAA,CAAC,sBAAA,EAAA,EAAuB,OAAA,EAAS,gBAAgB,kBAAA,EAAoB;AAAA,GAAA,EAEzE,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { ChangeSetBox } from '../changeset/components/ChangeSetBox.esm.js';
|
|
3
|
+
import { MigrationTitle } from './components/MigrationTitle.esm.js';
|
|
4
|
+
import { ChangeSetBoxTitle } from '../changeset/components/ChangeSetBoxTitle.esm.js';
|
|
5
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
|
+
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
7
|
+
|
|
8
|
+
function RiScMigrationChanges51({
|
|
9
|
+
changes
|
|
10
|
+
}) {
|
|
11
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
12
|
+
const numberOfChangedActions = changes.scenarios.reduce(
|
|
13
|
+
(currentSum, newValue) => {
|
|
14
|
+
return currentSum + newValue.changedActions.length;
|
|
15
|
+
},
|
|
16
|
+
0
|
|
17
|
+
);
|
|
18
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19
|
+
/* @__PURE__ */ jsx(
|
|
20
|
+
MigrationTitle,
|
|
21
|
+
{
|
|
22
|
+
from: "5.0",
|
|
23
|
+
to: "5.1",
|
|
24
|
+
migrationExplanation: t(
|
|
25
|
+
"migrationDialog.migration51.changeExplanation"
|
|
26
|
+
),
|
|
27
|
+
changelogUrl: "https://github.com/kartverket/backstage-plugin-risk-scorecard-backend/blob/main/docs/schemaChangelog.md#50"
|
|
28
|
+
}
|
|
29
|
+
),
|
|
30
|
+
/* @__PURE__ */ jsx(ChangeSetBox, { type: "primary", children: /* @__PURE__ */ jsx(
|
|
31
|
+
ChangeSetBoxTitle,
|
|
32
|
+
{
|
|
33
|
+
title: t("migrationDialog.migration51.addedLastUpdatedBy", {
|
|
34
|
+
numberOfChangedActions: numberOfChangedActions.toString()
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
) })
|
|
38
|
+
] });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { RiScMigrationChanges51 };
|
|
42
|
+
//# sourceMappingURL=RiScMigrationChanges51.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RiScMigrationChanges51.esm.js","sources":["../../../../src/components/riScInfo/migrations/RiScMigrationChanges51.tsx"],"sourcesContent":["import { MigrationChanges51 } from '../../../utils/types.ts';\nimport { ChangeSetBox } from '../changeset/components/ChangeSetBox.tsx';\nimport { MigrationTitle } from './components/MigrationTitle.tsx';\nimport { ChangeSetBoxTitle } from '../changeset/components/ChangeSetBoxTitle.tsx';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../../utils/translations.ts';\n\ninterface RiScMigrationChanges51Props {\n changes: MigrationChanges51;\n}\n\nexport function RiScMigrationChanges51({\n changes,\n}: RiScMigrationChanges51Props) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const numberOfChangedActions = changes.scenarios.reduce(\n (currentSum, newValue) => {\n return currentSum + newValue.changedActions.length;\n },\n 0,\n );\n\n return (\n <>\n <MigrationTitle\n from=\"5.0\"\n to=\"5.1\"\n migrationExplanation={t(\n 'migrationDialog.migration51.changeExplanation',\n )}\n changelogUrl=\"https://github.com/kartverket/backstage-plugin-risk-scorecard-backend/blob/main/docs/schemaChangelog.md#50\"\n />\n <ChangeSetBox type=\"primary\">\n <ChangeSetBoxTitle\n title={t('migrationDialog.migration51.addedLastUpdatedBy', {\n numberOfChangedActions: numberOfChangedActions.toString(),\n })}\n />\n </ChangeSetBox>\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,sBAAA,CAAuB;AAAA,EACrC;AACF,CAAA,EAAgC;AAC9B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,sBAAA,GAAyB,QAAQ,SAAA,CAAU,MAAA;AAAA,IAC/C,CAAC,YAAY,QAAA,KAAa;AACxB,MAAA,OAAO,UAAA,GAAa,SAAS,cAAA,CAAe,MAAA;AAAA,IAC9C,CAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,KAAA;AAAA,QACL,EAAA,EAAG,KAAA;AAAA,QACH,oBAAA,EAAsB,CAAA;AAAA,UACpB;AAAA,SACF;AAAA,QACA,YAAA,EAAa;AAAA;AAAA,KACf;AAAA,oBACA,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAK,SAAA,EACjB,QAAA,kBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,EAAE,gDAAA,EAAkD;AAAA,UACzD,sBAAA,EAAwB,uBAAuB,QAAA;AAAS,SACzD;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Flex, Text } from '@backstage/ui';
|
|
3
|
+
import { formatDate, shortenName } from '../../utils/utilityfunctions.esm.js';
|
|
4
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
|
+
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
6
|
+
import styles from './ScenarioLastUpdatedLabel.module.css.esm.js';
|
|
7
|
+
|
|
8
|
+
function ScenarioLastUpdatedLabel(props) {
|
|
9
|
+
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
10
|
+
const parsedLastUpdated = props.lastUpdated ? formatDate(props.lastUpdated) : t("scenarioDrawer.action.notUpdated");
|
|
11
|
+
return /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "0", className: styles.flex, children: [
|
|
12
|
+
/* @__PURE__ */ jsxs(Text, { as: "p", variant: "body-medium", children: [
|
|
13
|
+
t("scenarioDrawer.action.lastUpdated"),
|
|
14
|
+
" ",
|
|
15
|
+
parsedLastUpdated
|
|
16
|
+
] }),
|
|
17
|
+
props.lastUpdatedBy && /* @__PURE__ */ jsxs(Text, { variant: "body-medium", className: styles.textGray, children: [
|
|
18
|
+
t("dictionary.by"),
|
|
19
|
+
" ",
|
|
20
|
+
shortenName(props.lastUpdatedBy, 16)
|
|
21
|
+
] })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { ScenarioLastUpdatedLabel };
|
|
26
|
+
//# sourceMappingURL=ScenarioLastUpdatedLabel.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScenarioLastUpdatedLabel.esm.js","sources":["../../../src/components/scenario/ScenarioLastUpdatedLabel.tsx"],"sourcesContent":["import { Flex, Text } from '@backstage/ui';\nimport { formatDate, shortenName } from '../../utils/utilityfunctions.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport styles from './ScenarioLastUpdatedLabel.module.css';\n\ntype ScenarioLastUpdatedLabelProps = {\n lastUpdated?: Date | undefined | null;\n lastUpdatedBy?: string | undefined | null;\n};\n\nexport function ScenarioLastUpdatedLabel(props: ScenarioLastUpdatedLabelProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const parsedLastUpdated = props.lastUpdated\n ? formatDate(props.lastUpdated)\n : t('scenarioDrawer.action.notUpdated');\n\n return (\n <Flex direction=\"column\" gap=\"0\" className={styles.flex}>\n <Text as=\"p\" variant=\"body-medium\">\n {t('scenarioDrawer.action.lastUpdated')} {parsedLastUpdated}\n </Text>\n {props.lastUpdatedBy && (\n <Text variant=\"body-medium\" className={styles.textGray}>\n {t('dictionary.by')} {shortenName(props.lastUpdatedBy, 16)}\n </Text>\n )}\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,yBAAyB,KAAA,EAAsC;AAC7E,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,iBAAA,GAAoB,MAAM,WAAA,GAC5B,UAAA,CAAW,MAAM,WAAW,CAAA,GAC5B,EAAE,kCAAkC,CAAA;AAExC,EAAA,uBACE,IAAA,CAAC,QAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAAI,SAAA,EAAW,OAAO,IAAA,EACjD,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,aAAA,EAClB,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,mCAAmC,CAAA;AAAA,MAAE,GAAA;AAAA,MAAE;AAAA,KAAA,EAC5C,CAAA;AAAA,IACC,KAAA,CAAM,iCACL,IAAA,CAAC,IAAA,EAAA,EAAK,SAAQ,aAAA,EAAc,SAAA,EAAW,OAAO,QAAA,EAC3C,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,eAAe,CAAA;AAAA,MAAE,GAAA;AAAA,MAAE,WAAA,CAAY,KAAA,CAAM,aAAA,EAAe,EAAE;AAAA,KAAA,EAC3D;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".ScenarioLastUpdatedLabel-module_textGray__o3Pt0 {\n color: var(--gray-400);\n}\n\n.ScenarioLastUpdatedLabel-module_flex__l-gCz {\n width: 180px;\n}\n";
|
|
4
|
+
var styles = {"textGray":"ScenarioLastUpdatedLabel-module_textGray__o3Pt0","flex":"ScenarioLastUpdatedLabel-module_flex__l-gCz"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=ScenarioLastUpdatedLabel.module.css.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScenarioLastUpdatedLabel.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -25,8 +25,10 @@ import { ScopeSection } from './components/ScopeSection.esm.js';
|
|
|
25
25
|
import { useDebounce } from '../../utils/hooks.esm.js';
|
|
26
26
|
import { Flex, Text } from '@backstage/ui';
|
|
27
27
|
import { getAlertStyle } from './scenarioDrawerComponents.esm.js';
|
|
28
|
+
import { useBackstageContext } from '../../contexts/BackstageContext.esm.js';
|
|
28
29
|
|
|
29
30
|
function ScenarioDrawer() {
|
|
31
|
+
const { profileInfo } = useBackstageContext();
|
|
30
32
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
31
33
|
const [isEditing, setIsEditing] = useState(false);
|
|
32
34
|
const {
|
|
@@ -67,11 +69,12 @@ function ScenarioDrawer() {
|
|
|
67
69
|
)
|
|
68
70
|
};
|
|
69
71
|
submitEditedScenarioToRiSc(updatedScenario, {
|
|
70
|
-
idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs
|
|
72
|
+
idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs,
|
|
73
|
+
profileInfo
|
|
71
74
|
});
|
|
72
75
|
setCurrentUpdatedActionIDs([]);
|
|
73
76
|
},
|
|
74
|
-
[scenario, formMethods, submitEditedScenarioToRiSc]
|
|
77
|
+
[scenario, formMethods, submitEditedScenarioToRiSc, profileInfo]
|
|
75
78
|
);
|
|
76
79
|
const { flush } = useDebounce(
|
|
77
80
|
currentUpdatedActionIDs,
|
|
@@ -104,7 +107,8 @@ function ScenarioDrawer() {
|
|
|
104
107
|
setCurrentUpdatedActionIDs([]);
|
|
105
108
|
setIsEditing(false);
|
|
106
109
|
},
|
|
107
|
-
idsOfActionsToForceUpdateLastUpdatedValue: currentUpdatedActionIDs
|
|
110
|
+
idsOfActionsToForceUpdateLastUpdatedValue: currentUpdatedActionIDs,
|
|
111
|
+
profileInfo
|
|
108
112
|
});
|
|
109
113
|
});
|
|
110
114
|
function onSubmitAndCloseDialog() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Alert from '@mui/material/Alert';\nimport { AlertTitle } from '@mui/material';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Drawer from '@mui/material/Drawer';\nimport { useEffect, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { FormScenario, ProcessingStatus } from '../../utils/types';\nimport { deleteScenario, getAlertSeverity } from '../../utils/utilityfunctions';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\nimport { ActionsSection } from './components/ActionsSection';\nimport { DeleteScenarioConfirmation } from './components/DeleteConfirmation';\nimport RiskFormSection from './components/RiskFormSection';\nimport { RiskSection } from './components/RiskSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport { ScopeSection } from './components/ScopeSection';\nimport { useCallback } from 'react';\nimport { useDebounce } from '../../utils/hooks';\nimport { Text, Flex } from '@backstage/ui';\nimport { getAlertStyle } from './scenarioDrawerComponents';\n\nexport function ScenarioDrawer() {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n isEditingAllowed,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n const { selectedRiSc, updateRiSc } = useRiScs();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { updateStatus, response } = useRiScs();\n\n const [currentUpdatedActionIDs, setCurrentUpdatedActionIDs] = useState<\n string[]\n >([]);\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onChange',\n });\n\n const debounceCallback = useCallback(\n (updatedIDs: string[]) => {\n const indexOfAction = (ID: string) => {\n return scenario.actions.findIndex(a => a.ID === ID);\n };\n if (updatedIDs.length === 0) return;\n\n const formValues = formMethods.getValues();\n const updatedScenario = {\n ...scenario,\n actions: scenario.actions.map(a =>\n updatedIDs.includes(a.ID)\n ? {\n ...a,\n status:\n formValues.actions?.[indexOfAction(a.ID)]?.status ?? a.status,\n }\n : a,\n ),\n };\n submitEditedScenarioToRiSc(updatedScenario, {\n idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs,\n });\n setCurrentUpdatedActionIDs([]);\n },\n [scenario, formMethods, submitEditedScenarioToRiSc],\n );\n const { flush } = useDebounce(\n currentUpdatedActionIDs,\n 6000,\n debounceCallback,\n );\n\n function onCancel() {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n }\n\n function handleClose() {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n }\n\n function onClose() {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n flush();\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n }\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), {\n onSuccess: () => {\n setCurrentUpdatedActionIDs([]);\n setIsEditing(false);\n },\n idsOfActionsToForceUpdateLastUpdatedValue: currentUpdatedActionIDs,\n });\n });\n\n function onSubmitAndCloseDialog() {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scenario]);\n\n return (\n <Drawer\n disablePortal\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && isEditingAllowed && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n {updateStatus.isLoading && (\n <Flex\n style={{\n position: 'fixed',\n width: '45%',\n zIndex: 20,\n border: '1px solid #439CCD',\n borderRadius: '4px',\n }}\n >\n <Alert\n severity=\"info\"\n style={{\n width: '100%',\n }}\n icon={<CircularProgress size={16} sx={{ color: 'inherit' }} />}\n >\n <AlertTitle>{t('infoMessages.UpdateAction')}</AlertTitle>\n <Text variant=\"body-large\">\n {' '}\n {t('infoMessages.UpdateInfoMessage')}\n </Text>\n </Alert>\n </Flex>\n )}\n {currentUpdatedActionIDs.length === 0 &&\n response &&\n response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && (\n <Flex\n style={{\n position: 'fixed',\n ...getAlertStyle(getAlertSeverity(updateStatus)),\n }}\n >\n <Alert\n severity={getAlertSeverity(updateStatus)}\n style={{ width: '100%' }}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </Alert>\n </Flex>\n )}\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection\n formMethods={formMethods}\n isEditing={isEditing}\n onSubmit={onSubmit}\n setCurrentUpdatedActionIDs={setCurrentUpdatedActionIDs}\n />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onSubmit}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n {isEditingAllowed && (\n <div ref={deleteScenarioRef}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"primary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n sx={{ marginLeft: 'auto' }}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n )}\n </Box>\n\n <DeleteScenarioConfirmation\n isOpen={deleteConfirmationIsOpen}\n setIsOpen={setDeleteConfirmationIsOpen}\n onConfirm={() => deleteScenario(selectedRiSc, updateRiSc, scenario)}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n}\n"],"names":["RiskFormSection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScenarioDrawer.esm.js","sources":["../../../src/components/scenarioDrawer/ScenarioDrawer.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Alert from '@mui/material/Alert';\nimport { AlertTitle } from '@mui/material';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Drawer from '@mui/material/Drawer';\nimport { useEffect, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useScenario } from '../../contexts/ScenarioContext';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { FormScenario, ProcessingStatus } from '../../utils/types';\nimport { deleteScenario, getAlertSeverity } from '../../utils/utilityfunctions';\nimport { MatrixDialog } from '../riScDialog/MatrixDialog';\nimport { CloseConfirmation } from '../scenarioWizard/components/CloseConfirmation';\nimport { ActionsSection } from './components/ActionsSection';\nimport { DeleteScenarioConfirmation } from './components/DeleteConfirmation';\nimport RiskFormSection from './components/RiskFormSection';\nimport { RiskSection } from './components/RiskSection';\nimport ScopeFormSection from './components/ScopeFormSection';\nimport { ScopeSection } from './components/ScopeSection';\nimport { useCallback } from 'react';\nimport { useDebounce } from '../../utils/hooks';\nimport { Text, Flex } from '@backstage/ui';\nimport { getAlertStyle } from './scenarioDrawerComponents';\nimport { useBackstageContext } from '../../contexts/BackstageContext.tsx';\n\nexport function ScenarioDrawer() {\n const { profileInfo } = useBackstageContext();\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [isEditing, setIsEditing] = useState(false);\n const {\n scenario,\n isDrawerOpen,\n isEditingAllowed,\n closeScenarioForm,\n submitEditedScenarioToRiSc,\n mapScenarioToFormScenario,\n mapFormScenarioToScenario,\n collapseAllActions,\n } = useScenario();\n const { selectedRiSc, updateRiSc } = useRiScs();\n\n const [deleteConfirmationIsOpen, setDeleteConfirmationIsOpen] =\n useState(false);\n\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n\n const [isMatrixDialogOpen, setIsMatrixDialogOpen] = useState<boolean>(false);\n\n const { updateStatus, response } = useRiScs();\n\n const [currentUpdatedActionIDs, setCurrentUpdatedActionIDs] = useState<\n string[]\n >([]);\n\n // Used to scroll to the bottom of the drawer when the user deletes a scenario\n // via the quick edit and DeleteConfirmation\n const deleteScenarioRef = useRef<HTMLDivElement>(null);\n\n const formMethods = useForm<FormScenario>({\n defaultValues: mapScenarioToFormScenario(scenario),\n mode: 'onChange',\n });\n\n const debounceCallback = useCallback(\n (updatedIDs: string[]) => {\n const indexOfAction = (ID: string) => {\n return scenario.actions.findIndex(a => a.ID === ID);\n };\n if (updatedIDs.length === 0) return;\n\n const formValues = formMethods.getValues();\n const updatedScenario = {\n ...scenario,\n actions: scenario.actions.map(a =>\n updatedIDs.includes(a.ID)\n ? {\n ...a,\n status:\n formValues.actions?.[indexOfAction(a.ID)]?.status ?? a.status,\n }\n : a,\n ),\n };\n submitEditedScenarioToRiSc(updatedScenario, {\n idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs,\n profileInfo: profileInfo,\n });\n setCurrentUpdatedActionIDs([]);\n },\n [scenario, formMethods, submitEditedScenarioToRiSc, profileInfo],\n );\n const { flush } = useDebounce(\n currentUpdatedActionIDs,\n 6000,\n debounceCallback,\n );\n\n function onCancel() {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n setIsEditing(false);\n }\n\n function handleClose() {\n closeScenarioForm();\n setIsEditing(false);\n setShowCloseConfirmation(false);\n collapseAllActions();\n }\n\n function onClose() {\n if (formMethods.formState.isDirty) {\n setShowCloseConfirmation(true);\n } else {\n flush();\n closeScenarioForm();\n setIsEditing(false);\n collapseAllActions();\n }\n }\n\n const onSubmit = formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), {\n onSuccess: () => {\n setCurrentUpdatedActionIDs([]);\n setIsEditing(false);\n },\n idsOfActionsToForceUpdateLastUpdatedValue: currentUpdatedActionIDs,\n profileInfo: profileInfo,\n });\n });\n\n function onSubmitAndCloseDialog() {\n onSubmit();\n setShowCloseConfirmation(false);\n\n if (deleteScenarioRef.current) {\n deleteScenarioRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n useEffect(() => {\n formMethods.reset(mapScenarioToFormScenario(scenario));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scenario]);\n\n return (\n <Drawer\n disablePortal\n PaperProps={{\n sx: theme => ({\n padding: theme.spacing(4),\n width: '50%',\n gap: theme.spacing(3),\n [theme.breakpoints.down('sm')]: {\n width: '90%',\n padding: theme.spacing(2),\n },\n backgroundColor:\n theme.palette.mode === 'dark' ? '#333333' : '#f8f8f8',\n }),\n }}\n variant=\"temporary\"\n anchor=\"right\"\n open={isDrawerOpen}\n onClose={onClose}\n >\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n marginLeft: 'auto',\n }}\n >\n {!isEditing && isEditingAllowed && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => setIsEditing(true)}\n >\n {t('dictionary.edit')}\n </Button>\n )}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={isEditing ? onCancel : onClose}\n >\n {t(isEditing ? 'dictionary.cancel' : 'dictionary.close')}\n </Button>\n </Box>\n\n {isEditing ? (\n <>\n <ScopeFormSection formMethods={formMethods} />\n <RiskFormSection\n formMethods={formMethods}\n setIsMatrixDialogOpen={setIsMatrixDialogOpen}\n />\n </>\n ) : (\n <>\n {updateStatus.isLoading && (\n <Flex\n style={{\n position: 'fixed',\n width: '45%',\n zIndex: 20,\n border: '1px solid #439CCD',\n borderRadius: '4px',\n }}\n >\n <Alert\n severity=\"info\"\n style={{\n width: '100%',\n }}\n icon={<CircularProgress size={16} sx={{ color: 'inherit' }} />}\n >\n <AlertTitle>{t('infoMessages.UpdateAction')}</AlertTitle>\n <Text variant=\"body-large\">\n {' '}\n {t('infoMessages.UpdateInfoMessage')}\n </Text>\n </Alert>\n </Flex>\n )}\n {currentUpdatedActionIDs.length === 0 &&\n response &&\n response.status !== ProcessingStatus.ErrorWhenFetchingRiScs && (\n <Flex\n style={{\n position: 'fixed',\n ...getAlertStyle(getAlertSeverity(updateStatus)),\n }}\n >\n <Alert\n severity={getAlertSeverity(updateStatus)}\n style={{ width: '100%' }}\n >\n <Text variant=\"body-large\">{response.statusMessage}</Text>\n </Alert>\n </Flex>\n )}\n <ScopeSection />\n <RiskSection />\n </>\n )}\n <ActionsSection\n formMethods={formMethods}\n isEditing={isEditing}\n onSubmit={onSubmit}\n setCurrentUpdatedActionIDs={setCurrentUpdatedActionIDs}\n />\n <Box\n sx={{\n display: 'flex',\n gap: '16px',\n }}\n >\n {isEditing && (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={onSubmit}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 1, color: 'inherit' }}\n />\n )}\n </Button>\n )}\n {isEditingAllowed && (\n <div ref={deleteScenarioRef}>\n <Button\n startIcon={<DeleteIcon />}\n variant=\"text\"\n color=\"primary\"\n onClick={() => setDeleteConfirmationIsOpen(true)}\n sx={{ marginLeft: 'auto' }}\n >\n {t('scenarioDrawer.deleteScenarioButton')}\n </Button>\n </div>\n )}\n </Box>\n\n <DeleteScenarioConfirmation\n isOpen={deleteConfirmationIsOpen}\n setIsOpen={setDeleteConfirmationIsOpen}\n onConfirm={() => deleteScenario(selectedRiSc, updateRiSc, scenario)}\n />\n <MatrixDialog\n open={isMatrixDialogOpen}\n close={() => setIsMatrixDialogOpen(false)}\n />\n <CloseConfirmation\n isOpen={showCloseConfirmation}\n close={handleClose}\n save={onSubmitAndCloseDialog}\n />\n </Drawer>\n );\n}\n"],"names":["RiskFormSection"],"mappings":"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"}
|
|
@@ -14,13 +14,15 @@ import { useRiScs } from '../../../contexts/RiScContext.esm.js';
|
|
|
14
14
|
import { useScenario } from '../../../contexts/ScenarioContext.esm.js';
|
|
15
15
|
import { ActionStatusOptions } from '../../../utils/constants.esm.js';
|
|
16
16
|
import { pluginRiScTranslationRef } from '../../../utils/translations.esm.js';
|
|
17
|
-
import { getTranslatedActionStatus, calculateDaysSince, calculateUpdatedStatus, getActionStatusButtonClass, actionStatusOptionsToTranslationKeys,
|
|
17
|
+
import { getTranslatedActionStatus, calculateDaysSince, calculateUpdatedStatus, getActionStatusButtonClass, actionStatusOptionsToTranslationKeys, deleteAction } from '../../../utils/utilityfunctions.esm.js';
|
|
18
18
|
import { Markdown } from '../../common/Markdown.esm.js';
|
|
19
19
|
import { body2 } from '../../common/typography.esm.js';
|
|
20
20
|
import UpdatedStatusBadge from '../../common/UpdatedStatusBadge.esm.js';
|
|
21
21
|
import { ActionFormItem } from './ActionFormItem.esm.js';
|
|
22
22
|
import { DeleteActionConfirmation } from './DeleteConfirmation.esm.js';
|
|
23
23
|
import { Flex, Text } from '@backstage/ui';
|
|
24
|
+
import { useBackstageContext } from '../../../contexts/BackstageContext.esm.js';
|
|
25
|
+
import { ScenarioLastUpdatedLabel } from '../../scenario/ScenarioLastUpdatedLabel.esm.js';
|
|
24
26
|
|
|
25
27
|
function ActionBox({
|
|
26
28
|
action,
|
|
@@ -31,6 +33,7 @@ function ActionBox({
|
|
|
31
33
|
setCurrentUpdatedActionIDs
|
|
32
34
|
}) {
|
|
33
35
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
36
|
+
const { profileInfo } = useBackstageContext();
|
|
34
37
|
const { isActionExpanded, toggleActionExpanded } = useScenario();
|
|
35
38
|
const isExpanded = isActionExpanded(action.ID);
|
|
36
39
|
const [isEditing, setIsEditing] = useState(false);
|
|
@@ -47,12 +50,6 @@ function ActionBox({
|
|
|
47
50
|
deleteAction(remove, index, onSubmit);
|
|
48
51
|
setDeleteActionConfirmationIsOpen(false);
|
|
49
52
|
}
|
|
50
|
-
function getParsedDateTime() {
|
|
51
|
-
if (isActionUpdated) return formatDate(/* @__PURE__ */ new Date());
|
|
52
|
-
if (action.lastUpdated) return formatDate(action.lastUpdated);
|
|
53
|
-
return t("scenarioDrawer.action.notUpdated");
|
|
54
|
-
}
|
|
55
|
-
const parsedDateTime = getParsedDateTime();
|
|
56
53
|
let daysSinceLastUpdate = null;
|
|
57
54
|
if (isActionUpdated) {
|
|
58
55
|
daysSinceLastUpdate = calculateDaysSince(/* @__PURE__ */ new Date());
|
|
@@ -103,7 +100,9 @@ function ActionBox({
|
|
|
103
100
|
color: "primary",
|
|
104
101
|
variant: "contained",
|
|
105
102
|
onClick: formMethods.handleSubmit((data) => {
|
|
106
|
-
submitEditedScenarioToRiSc(mapFormScenarioToScenario(data)
|
|
103
|
+
submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), {
|
|
104
|
+
profileInfo
|
|
105
|
+
});
|
|
107
106
|
}),
|
|
108
107
|
disabled: !formMethods.formState.isDirty || updateStatus.isLoading,
|
|
109
108
|
children: [
|
|
@@ -199,18 +198,11 @@ function ActionBox({
|
|
|
199
198
|
}))
|
|
200
199
|
}
|
|
201
200
|
),
|
|
202
|
-
/* @__PURE__ */
|
|
203
|
-
|
|
201
|
+
/* @__PURE__ */ jsx(
|
|
202
|
+
ScenarioLastUpdatedLabel,
|
|
204
203
|
{
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
textOverflow: "ellipsis",
|
|
208
|
-
whiteSpace: "nowrap"
|
|
209
|
-
},
|
|
210
|
-
children: [
|
|
211
|
-
/* @__PURE__ */ jsx(Text, { as: "p", variant: "body-large", children: t("scenarioDrawer.action.lastUpdated") }),
|
|
212
|
-
/* @__PURE__ */ jsx(Text, { variant: "body-large", children: parsedDateTime })
|
|
213
|
-
]
|
|
204
|
+
lastUpdated: isActionUpdated ? /* @__PURE__ */ new Date() : action.lastUpdated,
|
|
205
|
+
lastUpdatedBy: action.lastUpdatedBy
|
|
214
206
|
}
|
|
215
207
|
)
|
|
216
208
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionBox.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionBox.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Edit, ExpandLess, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Link from '@mui/material/Link';\nimport { DualButtonWithMenu } from '../../common/DualButtonWithMenu';\nimport { useState } from 'react';\nimport { UseFieldArrayRemove, UseFormReturn } from 'react-hook-form';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useScenario } from '../../../contexts/ScenarioContext';\nimport { ActionStatusOptions } from '../../../utils/constants';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { Action, FormScenario } from '../../../utils/types';\nimport {\n actionStatusOptionsToTranslationKeys,\n calculateDaysSince,\n calculateUpdatedStatus,\n deleteAction,\n formatDate,\n getTranslatedActionStatus,\n getActionStatusButtonClass,\n} from '../../../utils/utilityfunctions';\nimport { Markdown } from '../../common/Markdown';\nimport { body2 } from '../../common/typography';\nimport UpdatedStatusBadge from '../../common/UpdatedStatusBadge';\nimport { ActionFormItem } from './ActionFormItem';\nimport { DeleteActionConfirmation } from './DeleteConfirmation';\nimport { Text, Flex } from '@backstage/ui';\n\ninterface ActionBoxProps {\n action: Action;\n index: number;\n formMethods: UseFormReturn<FormScenario>;\n remove: UseFieldArrayRemove;\n onSubmit: () => void;\n setCurrentUpdatedActionIDs: React.Dispatch<React.SetStateAction<string[]>>;\n}\n\nexport function ActionBox({\n action,\n index,\n formMethods,\n remove,\n onSubmit,\n setCurrentUpdatedActionIDs,\n}: ActionBoxProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const { isActionExpanded, toggleActionExpanded } = useScenario();\n const isExpanded = isActionExpanded(action.ID);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n const [deleteActionConfirmationIsOpen, setDeleteActionConfirmationIsOpen] =\n useState(false);\n const [isActionUpdated, setIsActionUpdated] = useState(false);\n\n const { updateStatus, selectedRiSc } = useRiScs();\n\n const { submitEditedScenarioToRiSc, mapFormScenarioToScenario, scenario } =\n useScenario();\n\n const isActionTitlePresent = action.title !== null && action.title !== '';\n\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n const translatedActionStatus = getTranslatedActionStatus(action.status, t);\n\n function handleDeleteAction(): void {\n setDeleteActionConfirmationIsOpen(true);\n }\n\n function confirmDeleteAction(): void {\n deleteAction(remove, index, onSubmit);\n setDeleteActionConfirmationIsOpen(false);\n }\n\n function getParsedDateTime(): string {\n if (isActionUpdated) return formatDate(new Date());\n if (action.lastUpdated) return formatDate(action.lastUpdated);\n return t('scenarioDrawer.action.notUpdated');\n }\n const parsedDateTime = getParsedDateTime();\n\n let daysSinceLastUpdate: number | null = null;\n if (isActionUpdated) {\n daysSinceLastUpdate = calculateDaysSince(new Date());\n } else if (action.lastUpdated) {\n daysSinceLastUpdate = calculateDaysSince(new Date(action.lastUpdated));\n }\n\n const computedUpdatedStatus = calculateUpdatedStatus(\n daysSinceLastUpdate,\n selectedRiSc?.lastPublished?.numberOfCommits || null,\n );\n\n function updateActionInScenario(updates: ActionStatusOptions) {\n const actionIndex = scenario.actions.findIndex(a => a.ID === action.ID);\n const currentStatus =\n formMethods.getValues()?.actions?.[actionIndex]?.status;\n\n if (updates === currentStatus) {\n return;\n }\n\n formMethods.setValue(`actions.${index}.status`, updates);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n setIsActionUpdated(true);\n }\n\n function handleStatusChange(newStatus: ActionStatusOptions) {\n updateActionInScenario(newStatus);\n }\n\n function isToday(lastUpdated: Date | null): boolean {\n const today = new Date();\n\n if (!lastUpdated) return false;\n const lastUpdatedParsed =\n typeof lastUpdated === 'string' ? new Date(lastUpdated) : lastUpdated;\n\n return (\n lastUpdatedParsed.getDate() === today.getDate() &&\n lastUpdatedParsed.getMonth() === today.getMonth() &&\n lastUpdatedParsed.getFullYear() === today.getFullYear()\n );\n }\n\n if (isEditing) {\n return (\n <>\n <ActionFormItem\n formMethods={formMethods}\n index={index}\n handleDelete={handleDeleteAction}\n showTitleNumber={false}\n remove={remove}\n />\n <Box display=\"flex\" gap={1}>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data));\n })}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 8, color: 'inherit' }}\n />\n )}\n </Button>\n\n <Button onClick={() => setIsEditing(false)}>\n {t('dictionary.cancel')}\n </Button>\n </Box>\n </>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n cursor: 'pointer',\n width: '100%',\n }}\n onClick={() => toggleActionExpanded(action.ID)}\n >\n <IconButton>\n {isExpanded ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <Flex direction=\"column\" align=\"start\" gap=\"1\">\n <UpdatedStatusBadge\n status={computedUpdatedStatus}\n isPending={isActionUpdated}\n />\n <Text variant=\"body-large\">\n {isActionTitlePresent\n ? action.title\n : `${t('dictionary.measure')} ${index + 1}`}\n </Text>\n </Flex>\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 2,\n alignItems: 'center',\n }}\n >\n <DualButtonWithMenu\n propsCommon={{\n className: getActionStatusButtonClass(action.status),\n }}\n propsLeft={{\n children: translatedActionStatus,\n }}\n propsRight={{\n iconEnd: <i className=\"ri-loop-left-line\" />,\n onClick: () => {\n if (isToday(action.lastUpdated ?? null)) return;\n setIsActionUpdated(true);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n },\n }}\n menuItems={Object.values(ActionStatusOptions).map(value => ({\n key: value,\n // @ts-ignore\n label: t(\n actionStatusOptionsToTranslationKeys[\n value as ActionStatusOptions\n ],\n ),\n onClick: () => handleStatusChange(value as ActionStatusOptions),\n selected: value === action.status,\n }))}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <Text as=\"p\" variant=\"body-large\">\n {t('scenarioDrawer.action.lastUpdated')}\n </Text>\n <Text variant=\"body-large\">{parsedDateTime}</Text>\n </Box>\n </Box>\n <IconButton onClick={handleDeleteAction}>\n <DeleteIcon />\n </IconButton>\n </Box>\n\n <Collapse in={isExpanded} sx={{ marginTop: 1 }}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n }}\n >\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {t('dictionary.description')}\n </Text>\n <IconButton\n sx={{\n marginLeft: 'auto',\n transition: 'opacity 300ms ease-in',\n }}\n onClick={() => setIsEditing(!isEditing)}\n >\n <Edit />\n </IconButton>\n </Box>\n <Markdown description={action.description} />\n\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'end',\n marginTop: '16px',\n }}\n >\n <Box>\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {' '}\n {t('dictionary.url')}\n </Text>\n {action.url ? (\n <Link\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={\n action.url.startsWith('http') ? action.url : `//${action.url}`\n }\n >\n {action.url}\n </Link>\n ) : (\n <Text as=\"p\" variant=\"body-large\" style={{ fontStyle: 'italic' }}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n </Collapse>\n\n <DeleteActionConfirmation\n isOpen={deleteActionConfirmationIsOpen}\n setIsOpen={setDeleteActionConfirmationIsOpen}\n onConfirm={confirmDeleteAction}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionBox.esm.js","sources":["../../../../src/components/scenarioDrawer/components/ActionBox.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Edit, ExpandLess, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport Link from '@mui/material/Link';\nimport { DualButtonWithMenu } from '../../common/DualButtonWithMenu';\nimport { useState } from 'react';\nimport { UseFieldArrayRemove, UseFormReturn } from 'react-hook-form';\nimport { useRiScs } from '../../../contexts/RiScContext';\nimport { useScenario } from '../../../contexts/ScenarioContext';\nimport { ActionStatusOptions } from '../../../utils/constants';\nimport { pluginRiScTranslationRef } from '../../../utils/translations';\nimport { Action, FormScenario } from '../../../utils/types';\nimport {\n actionStatusOptionsToTranslationKeys,\n calculateDaysSince,\n calculateUpdatedStatus,\n deleteAction,\n getTranslatedActionStatus,\n getActionStatusButtonClass,\n} from '../../../utils/utilityfunctions';\nimport { Markdown } from '../../common/Markdown';\nimport { body2 } from '../../common/typography';\nimport UpdatedStatusBadge from '../../common/UpdatedStatusBadge';\nimport { ActionFormItem } from './ActionFormItem';\nimport { DeleteActionConfirmation } from './DeleteConfirmation';\nimport { Text, Flex } from '@backstage/ui';\nimport { useBackstageContext } from '../../../contexts/BackstageContext.tsx';\nimport { ScenarioLastUpdatedLabel } from '../../scenario/ScenarioLastUpdatedLabel.tsx';\n\ninterface ActionBoxProps {\n action: Action;\n index: number;\n formMethods: UseFormReturn<FormScenario>;\n remove: UseFieldArrayRemove;\n onSubmit: () => void;\n setCurrentUpdatedActionIDs: React.Dispatch<React.SetStateAction<string[]>>;\n}\n\nexport function ActionBox({\n action,\n index,\n formMethods,\n remove,\n onSubmit,\n setCurrentUpdatedActionIDs,\n}: ActionBoxProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { profileInfo } = useBackstageContext();\n\n const { isActionExpanded, toggleActionExpanded } = useScenario();\n const isExpanded = isActionExpanded(action.ID);\n\n const [isEditing, setIsEditing] = useState<boolean>(false);\n const [deleteActionConfirmationIsOpen, setDeleteActionConfirmationIsOpen] =\n useState(false);\n const [isActionUpdated, setIsActionUpdated] = useState(false);\n\n const { updateStatus, selectedRiSc } = useRiScs();\n\n const { submitEditedScenarioToRiSc, mapFormScenarioToScenario, scenario } =\n useScenario();\n\n const isActionTitlePresent = action.title !== null && action.title !== '';\n\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n const translatedActionStatus = getTranslatedActionStatus(action.status, t);\n\n function handleDeleteAction(): void {\n setDeleteActionConfirmationIsOpen(true);\n }\n\n function confirmDeleteAction(): void {\n deleteAction(remove, index, onSubmit);\n setDeleteActionConfirmationIsOpen(false);\n }\n\n let daysSinceLastUpdate: number | null = null;\n if (isActionUpdated) {\n daysSinceLastUpdate = calculateDaysSince(new Date());\n } else if (action.lastUpdated) {\n daysSinceLastUpdate = calculateDaysSince(new Date(action.lastUpdated));\n }\n\n const computedUpdatedStatus = calculateUpdatedStatus(\n daysSinceLastUpdate,\n selectedRiSc?.lastPublished?.numberOfCommits || null,\n );\n\n function updateActionInScenario(updates: ActionStatusOptions) {\n const actionIndex = scenario.actions.findIndex(a => a.ID === action.ID);\n const currentStatus =\n formMethods.getValues()?.actions?.[actionIndex]?.status;\n\n if (updates === currentStatus) {\n return;\n }\n\n formMethods.setValue(`actions.${index}.status`, updates);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n setIsActionUpdated(true);\n }\n\n function handleStatusChange(newStatus: ActionStatusOptions) {\n updateActionInScenario(newStatus);\n }\n\n function isToday(lastUpdated: Date | null): boolean {\n const today = new Date();\n\n if (!lastUpdated) return false;\n const lastUpdatedParsed =\n typeof lastUpdated === 'string' ? new Date(lastUpdated) : lastUpdated;\n\n return (\n lastUpdatedParsed.getDate() === today.getDate() &&\n lastUpdatedParsed.getMonth() === today.getMonth() &&\n lastUpdatedParsed.getFullYear() === today.getFullYear()\n );\n }\n\n if (isEditing) {\n return (\n <>\n <ActionFormItem\n formMethods={formMethods}\n index={index}\n handleDelete={handleDeleteAction}\n showTitleNumber={false}\n remove={remove}\n />\n <Box display=\"flex\" gap={1}>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={formMethods.handleSubmit((data: FormScenario) => {\n submitEditedScenarioToRiSc(mapFormScenarioToScenario(data), {\n profileInfo: profileInfo,\n });\n })}\n disabled={!formMethods.formState.isDirty || updateStatus.isLoading}\n >\n {t('dictionary.save')}\n {updateStatus.isLoading && (\n <CircularProgress\n size={16}\n sx={{ marginLeft: 8, color: 'inherit' }}\n />\n )}\n </Button>\n\n <Button onClick={() => setIsEditing(false)}>\n {t('dictionary.cancel')}\n </Button>\n </Box>\n </>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 1,\n }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n cursor: 'pointer',\n width: '100%',\n }}\n onClick={() => toggleActionExpanded(action.ID)}\n >\n <IconButton>\n {isExpanded ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <Flex direction=\"column\" align=\"start\" gap=\"1\">\n <UpdatedStatusBadge\n status={computedUpdatedStatus}\n isPending={isActionUpdated}\n />\n <Text variant=\"body-large\">\n {isActionTitlePresent\n ? action.title\n : `${t('dictionary.measure')} ${index + 1}`}\n </Text>\n </Flex>\n </Box>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 2,\n alignItems: 'center',\n }}\n >\n <DualButtonWithMenu\n propsCommon={{\n className: getActionStatusButtonClass(action.status),\n }}\n propsLeft={{\n children: translatedActionStatus,\n }}\n propsRight={{\n iconEnd: <i className=\"ri-loop-left-line\" />,\n onClick: () => {\n if (isToday(action.lastUpdated ?? null)) return;\n setIsActionUpdated(true);\n setCurrentUpdatedActionIDs(prev =>\n prev.includes(action.ID) ? prev : [...prev, action.ID],\n );\n },\n }}\n menuItems={Object.values(ActionStatusOptions).map(value => ({\n key: value,\n // @ts-ignore\n label: t(\n actionStatusOptionsToTranslationKeys[\n value as ActionStatusOptions\n ],\n ),\n onClick: () => handleStatusChange(value as ActionStatusOptions),\n selected: value === action.status,\n }))}\n />\n <ScenarioLastUpdatedLabel\n lastUpdated={isActionUpdated ? new Date() : action.lastUpdated}\n lastUpdatedBy={action.lastUpdatedBy}\n />\n </Box>\n <IconButton onClick={handleDeleteAction}>\n <DeleteIcon />\n </IconButton>\n </Box>\n\n <Collapse in={isExpanded} sx={{ marginTop: 1 }}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n }}\n >\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {t('dictionary.description')}\n </Text>\n <IconButton\n sx={{\n marginLeft: 'auto',\n transition: 'opacity 300ms ease-in',\n }}\n onClick={() => setIsEditing(!isEditing)}\n >\n <Edit />\n </IconButton>\n </Box>\n <Markdown description={action.description} />\n\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'end',\n marginTop: '16px',\n }}\n >\n <Box>\n <Text\n variant=\"body-medium\"\n weight=\"bold\"\n style={{ paddingBottom: '0.4rem', marginTop: '4px' }}\n >\n {' '}\n {t('dictionary.url')}\n </Text>\n {action.url ? (\n <Link\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={\n action.url.startsWith('http') ? action.url : `//${action.url}`\n }\n >\n {action.url}\n </Link>\n ) : (\n <Text as=\"p\" variant=\"body-large\" style={{ fontStyle: 'italic' }}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n </Collapse>\n\n <DeleteActionConfirmation\n isOpen={deleteActionConfirmationIsOpen}\n setIsOpen={setDeleteActionConfirmationIsOpen}\n onConfirm={confirmDeleteAction}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -11,13 +11,16 @@ import { useScenario } from '../../contexts/ScenarioContext.esm.js';
|
|
|
11
11
|
import { ActionStatusOptions } from '../../utils/constants.esm.js';
|
|
12
12
|
import { useDebounce } from '../../utils/hooks.esm.js';
|
|
13
13
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
14
|
-
import { getActionStatusButtonClass, actionStatusOptionsToTranslationKeys
|
|
14
|
+
import { getActionStatusButtonClass, actionStatusOptionsToTranslationKeys } from '../../utils/utilityfunctions.esm.js';
|
|
15
15
|
import { Markdown } from '../common/Markdown.esm.js';
|
|
16
16
|
import { body2 } from '../common/typography.esm.js';
|
|
17
|
+
import { useBackstageContext } from '../../contexts/BackstageContext.esm.js';
|
|
18
|
+
import { ScenarioLastUpdatedLabel } from '../scenario/ScenarioLastUpdatedLabel.esm.js';
|
|
17
19
|
import UpdatedStatusBadge from '../common/UpdatedStatusBadge.esm.js';
|
|
18
20
|
|
|
19
21
|
function ActionsCard(props) {
|
|
20
22
|
const { t } = useTranslationRef(pluginRiScTranslationRef);
|
|
23
|
+
const { profileInfo } = useBackstageContext();
|
|
21
24
|
const { filteredData, scenario, showUpdatedBadge } = props;
|
|
22
25
|
const [pendingUpdatedIDs, setPendingUpdatedIDs] = useState([]);
|
|
23
26
|
const [pendingStatusById, setPendingStatusById] = useState({});
|
|
@@ -35,11 +38,12 @@ function ActionsCard(props) {
|
|
|
35
38
|
)
|
|
36
39
|
};
|
|
37
40
|
submitEditedScenarioToRiSc(updatedScenario, {
|
|
38
|
-
idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs
|
|
41
|
+
idsOfActionsToForceUpdateLastUpdatedValue: updatedIDs,
|
|
42
|
+
profileInfo
|
|
39
43
|
});
|
|
40
44
|
setPendingUpdatedIDs([]);
|
|
41
45
|
},
|
|
42
|
-
[scenario, submitEditedScenarioToRiSc, pendingStatusById]
|
|
46
|
+
[scenario, submitEditedScenarioToRiSc, pendingStatusById, profileInfo]
|
|
43
47
|
);
|
|
44
48
|
const { flush } = useDebounce(pendingUpdatedIDs, 6e3, debounceCallback);
|
|
45
49
|
useEffect(() => {
|
|
@@ -105,7 +109,7 @@ function ActionsCard(props) {
|
|
|
105
109
|
/* @__PURE__ */ jsx(Text, { as: "p", variant: "body-large", children: action.title })
|
|
106
110
|
] })
|
|
107
111
|
] }),
|
|
108
|
-
/* @__PURE__ */ jsxs(Flex, { children: [
|
|
112
|
+
/* @__PURE__ */ jsxs(Flex, { align: "center", children: [
|
|
109
113
|
/* @__PURE__ */ jsx(
|
|
110
114
|
"span",
|
|
111
115
|
{
|
|
@@ -161,12 +165,13 @@ function ActionsCard(props) {
|
|
|
161
165
|
)
|
|
162
166
|
}
|
|
163
167
|
),
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
168
|
+
/* @__PURE__ */ jsx(
|
|
169
|
+
ScenarioLastUpdatedLabel,
|
|
170
|
+
{
|
|
171
|
+
lastUpdated: action.ID in pendingStatusById ? /* @__PURE__ */ new Date() : void 0,
|
|
172
|
+
lastUpdatedBy: action.lastUpdatedBy
|
|
173
|
+
}
|
|
174
|
+
)
|
|
170
175
|
] })
|
|
171
176
|
] })
|
|
172
177
|
}
|