@deviceinsight/ng-ui-scale-lib 10.2.2 → 10.3.1

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 (43) hide show
  1. package/dist/{AccessEditModal-kndFZDt-.js → AccessEditModal-C_Ymwezb.js} +17 -17
  2. package/dist/{AccessEditModal-kndFZDt-.js.map → AccessEditModal-C_Ymwezb.js.map} +1 -1
  3. package/dist/{BundleManagementContainer-vMlhg6fJ.js → BundleManagementContainer-ChHU9uVM.js} +4 -4
  4. package/dist/{BundleManagementContainer-vMlhg6fJ.js.map → BundleManagementContainer-ChHU9uVM.js.map} +1 -1
  5. package/dist/{BundlesContainer-CaC__bAh.js → BundlesContainer-C1myE7uh.js} +40 -40
  6. package/dist/{BundlesContainer-CaC__bAh.js.map → BundlesContainer-C1myE7uh.js.map} +1 -1
  7. package/dist/{DatapointImport-Cq8cifAI.js → DatapointImport-Cyt0hdP-.js} +10 -10
  8. package/dist/DatapointImport-Cyt0hdP-.js.map +1 -0
  9. package/dist/{FileUploadInput-DSyHVZUT.js → FileUploadInput-BU6ttAuK.js} +2 -2
  10. package/dist/{FileUploadInput-DSyHVZUT.js.map → FileUploadInput-BU6ttAuK.js.map} +1 -1
  11. package/dist/{Files-CJ7EHXzr.js → Files-mFzfngqf.js} +3 -3
  12. package/dist/{Files-CJ7EHXzr.js.map → Files-mFzfngqf.js.map} +1 -1
  13. package/dist/{GlobalPowerBiReports-PsiWcApU.js → GlobalPowerBiReports-DWXwL_TH.js} +2 -2
  14. package/dist/{GlobalPowerBiReports-PsiWcApU.js.map → GlobalPowerBiReports-DWXwL_TH.js.map} +1 -1
  15. package/dist/{JsonSettingWidget-CpZmTuBe.js → JsonSettingWidget-BbYyUBtl.js} +9 -9
  16. package/dist/JsonSettingWidget-BbYyUBtl.js.map +1 -0
  17. package/dist/{LicensesEditPage-CwGor2gV.js → LicensesEditPage-wa-EEvag.js} +11 -11
  18. package/dist/{LicensesEditPage-CwGor2gV.js.map → LicensesEditPage-wa-EEvag.js.map} +1 -1
  19. package/dist/{LicensesList-DWQlVNdR.js → LicensesList-ihwXeJ0k.js} +2 -2
  20. package/dist/{LicensesList-DWQlVNdR.js.map → LicensesList-ihwXeJ0k.js.map} +1 -1
  21. package/dist/{PropertiesEditPage-C4jjCoPp.js → PropertiesEditPage-CsrU5lnR.js} +29 -29
  22. package/dist/{PropertiesEditPage-C4jjCoPp.js.map → PropertiesEditPage-CsrU5lnR.js.map} +1 -1
  23. package/dist/{PropertiesList-CBLvLopM.js → PropertiesList-DJ3hDmSL.js} +5 -5
  24. package/dist/{PropertiesList-CBLvLopM.js.map → PropertiesList-DJ3hDmSL.js.map} +1 -1
  25. package/dist/{TemplateEditPage-d-3_n4YW.js → TemplateEditPage-DPJ5MJpd.js} +25 -25
  26. package/dist/{TemplateEditPage-d-3_n4YW.js.map → TemplateEditPage-DPJ5MJpd.js.map} +1 -1
  27. package/dist/{TemplateTextInput-CQ6XJiql.js → TemplateTextInput-CmCxL3xj.js} +2 -2
  28. package/dist/{TemplateTextInput-CQ6XJiql.js.map → TemplateTextInput-CmCxL3xj.js.map} +1 -1
  29. package/dist/{TemplatesListPage-roTvuqft.js → TemplatesListPage-HwJpI4I0.js} +13 -13
  30. package/dist/{TemplatesListPage-roTvuqft.js.map → TemplatesListPage-HwJpI4I0.js.map} +1 -1
  31. package/dist/{UserGroupAssignments-DTXRBp_V.js → UserGroupAssignments-2ZrZXU8K.js} +10 -10
  32. package/dist/{UserGroupAssignments-DTXRBp_V.js.map → UserGroupAssignments-2ZrZXU8K.js.map} +1 -1
  33. package/dist/{UserGroupTheme-CAHBWb9Q.js → UserGroupTheme-DJut0WZe.js} +5 -5
  34. package/dist/{UserGroupTheme-CAHBWb9Q.js.map → UserGroupTheme-DJut0WZe.js.map} +1 -1
  35. package/dist/api.js +23 -23
  36. package/dist/index.js +567 -562
  37. package/dist/index.js.map +1 -1
  38. package/dist/{setTitle-CjnK8p-J.js → setTitle-Dij-z9p9.js} +4547 -4543
  39. package/dist/setTitle-Dij-z9p9.js.map +1 -0
  40. package/package.json +12 -11
  41. package/dist/DatapointImport-Cq8cifAI.js.map +0 -1
  42. package/dist/JsonSettingWidget-CpZmTuBe.js.map +0 -1
  43. package/dist/setTitle-CjnK8p-J.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateEditPage-d-3_n4YW.js","sources":["../ng-ui-scale/src/components/template/LocalePicker.tsx","../ng-ui-scale/src/modules/templates/templateForm/FooterButtons.tsx","../ng-ui-scale/src/components/template/VariablePicker.tsx","../ng-ui-scale/src/modules/templates/templateForm/NotificationContent.tsx","../ng-ui-scale/src/modules/templates/templateForm/NotificationInfo.tsx","../ng-ui-scale/src/modules/templates/templateForm/TemplateForm.tsx","../ng-ui-scale/src/modules/templates/useInitialFormData.ts","../ng-ui-scale/src/modules/templates/TemplateEditPage.tsx"],"sourcesContent":["import type {$PropertyType} from 'utility-types';\n\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {ReactableWithClientSidePagination} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\n\ntype Props = {\n\tlocales: Array<string>;\n\tonSelect: (language: string) => any;\n\tonCancel: () => any;\n};\n\nconst getColumnDefs = (onSelect: $PropertyType<Props, 'onSelect'>) => [\n\t{\n\t\tname: 'locale',\n\t\tlabel: <Trans i18nKey=\"notificationTemplate.localePicker.localeCode\">Locale code</Trans>,\n\t\tsortable: true,\n\t\trender: ({locale}: Record<string, string>) => (\n\t\t\t<div onClick={() => onSelect(locale)} className=\"clickable\">\n\t\t\t\t{locale}\n\t\t\t</div>\n\t\t),\n\t},\n];\n\nexport const LocalePicker = ({locales, onSelect, onCancel}: Props) => {\n\tconst items = locales.map(locale => ({\n\t\tlocale,\n\t}));\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"di notification-template-modal\"\n\t\t\theader={<Trans i18nKey=\"notificationTemplate.localePicker.title\">Select locale</Trans>}\n\t\t\tcontent={\n\t\t\t\t<ReactableWithClientSidePagination\n\t\t\t\t\tcolumnDefs={getColumnDefs(onSelect)}\n\t\t\t\t\tuniqueItemKey={item => `${item.locale}`}\n\t\t\t\t\titems={items}\n\t\t\t\t\tpaginationSettings={{\n\t\t\t\t\t\tpage: 0,\n\t\t\t\t\t\tsize: items.length,\n\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\tproperty: 'locale',\n\t\t\t\t\t\t\tdirection: 'ASC',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\ttableName={'localePicker'}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t</Button>\n\t\t\t}\n\t\t\twidth={600}\n\t\t/>\n\t);\n};\n","import {Button, ButtonRow} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\n\ntype Props = {\n\tonCancel: () => void;\n\tonSubmit: () => Promise<any> | void;\n\tdisabled: boolean;\n};\n\nexport default function FooterButtons({onCancel, onSubmit, disabled}: Props) {\n\treturn (\n\t\t<ButtonRow dividing>\n\t\t\t<Button primary onClick={onSubmit} disabled={disabled}>\n\t\t\t\t<Trans i18nKey={messages.save.id}>{messages.save.defaultValue}</Trans>\n\t\t\t</Button>\n\t\t\t<Button onClick={onCancel}>\n\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t</Button>\n\t\t</ButtonRow>\n\t);\n}\n","import type {$PropertyType} from 'utility-types';\n\nimport type {Property} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {ReactableWithClientSidePagination} from '@deviceinsight/ng-ui-components';\n\nimport useProperties from 'hooks/useProperties';\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\n\ntype Props = {\n\tonSelect: (variable: string) => any;\n\tonCancel: () => any;\n};\n\nconst generateVariables = (assetProperties: Array<Property>, assetGroupProperties: Array<Property>) => [\n\t'asset.name',\n\t...assetProperties.map(({key}) => `asset.properties.${key}`),\n\t...assetGroupProperties.map(({key}) => `assetGroup.${key}`),\n\t'event.key',\n\t'event.ruleId',\n\t'event.timestamp?datetime',\n];\n\nconst getColumnDefs = (onSelect: $PropertyType<Props, 'onSelect'>) => [\n\t{\n\t\tname: 'variable',\n\t\tlabel: <Trans i18nKey=\"notificationTemplate.variablePicker.variable\">Variable</Trans>,\n\t\trender: (variable: string) => (\n\t\t\t<div onClick={() => onSelect(variable)} className=\"clickable\">\n\t\t\t\t{variable}\n\t\t\t</div>\n\t\t),\n\t},\n];\n\nconst useFilteredProperties = () => {\n\tconst {assetProperties, assetGroupProperties} = useProperties();\n\treturn {\n\t\tassetProperties: assetProperties.filter(property => !property.key.startsWith('_') && property.deletable),\n\t\tassetGroupProperties: assetGroupProperties.filter(\n\t\t\tproperty => !property.key.startsWith('_') && property.deletable,\n\t\t),\n\t};\n};\n\nexport const VariablePicker = ({onSelect, onCancel}: Props) => {\n\tconst {assetProperties, assetGroupProperties} = useFilteredProperties();\n\tconst items = generateVariables(assetProperties, assetGroupProperties);\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"di notification-template-modal\"\n\t\t\theader={<Trans i18nKey=\"notificationTemplate.variablePicker.title\">Select variable</Trans>}\n\t\t\tcontent={\n\t\t\t\t<ReactableWithClientSidePagination\n\t\t\t\t\tcolumnDefs={getColumnDefs(onSelect)}\n\t\t\t\t\tuniqueItemKey={item => item}\n\t\t\t\t\titems={items}\n\t\t\t\t\tpaginationSettings={{\n\t\t\t\t\t\tpage: 0,\n\t\t\t\t\t\tsize: 10,\n\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\tproperty: 'locale',\n\t\t\t\t\t\t\tdirection: 'ASC',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\ttableName={'variablePicker'}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t</Button>\n\t\t\t}\n\t\t\twidth={600}\n\t\t/>\n\t);\n};\n","import type {EditorView} from '@codemirror/view';\nimport {lazy, useRef, useState} from 'react';\nimport {Controller, useFormContext} from 'react-hook-form';\n\nimport {Accordion, AccordionItem, Button, Icon, useConfirm} from '@deviceinsight/ng-ui-basic-components';\n\nimport {VariablePicker} from 'components/template/VariablePicker';\nimport {Trans, useTranslation} from 'i18n';\nimport warningIcon from '../../../assets/svg/icon_warning.svg';\nimport type {LocaleData, TemplateFormData} from '../types';\n\nconst TemplateTextInput = lazy(() => import('components/template/TemplateTextInput'));\n\nconst compareSelectedLocalesDefaultFirst = (locale1: LocaleData, locale2: LocaleData) => {\n\tif (locale1.locale === 'default') {\n\t\treturn -1;\n\t}\n\n\tif (locale2.locale === 'default') {\n\t\treturn 1;\n\t}\n\n\treturn locale1.locale.localeCompare(locale2.locale);\n};\n\nfunction NotificationContent() {\n\tconst confirm = useConfirm();\n\tconst [variablePickerVisible, setVariablePickerVisible] = useState<boolean>(false);\n\tconst [focusedField, setFocusedField] = useState<'subject' | 'message' | 'text'>('message');\n\tconst {\n\t\twatch,\n\t\tcontrol,\n\t\tsetValue,\n\t\tformState: {errors},\n\t} = useFormContext<TemplateFormData>();\n\tconst {t} = useTranslation();\n\tconst subjectEditorRef = useRef<EditorView | null>(null);\n\tconst messageFieldRef = useRef<EditorView | null>(null);\n\n\tconst locales = watch('locales');\n\n\tasync function handleDelete(locale: string) {\n\t\tconst confirmed = await confirm({\n\t\t\ttitle: t('notificationTemplate.form.confirmDeleteTitle', {defaultValue: 'Delete translation'}),\n\t\t\tmessage: t('notificationTemplate.form.confirmDeleteMessage', {\n\t\t\t\tdefaultValue: 'Do you really want to delete this translation?',\n\t\t\t}),\n\t\t});\n\n\t\tif (confirmed) {\n\t\t\tsetValue(\n\t\t\t\t'locales',\n\t\t\t\tlocales.filter(localeData => localeData.locale !== locale),\n\t\t\t\t{shouldDirty: true},\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction handleShowVariablePicker() {\n\t\tsetVariablePickerVisible(true);\n\t}\n\n\tfunction handleSelectVariable(variable: string) {\n\t\tconst editor = focusedField === 'subject' ? subjectEditorRef.current : messageFieldRef.current;\n\t\tif (editor) {\n\t\t\tconst transaction = editor.state.update({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: editor.state.selection.main.head,\n\t\t\t\t\tinsert: `\\${${variable}}`,\n\t\t\t\t},\n\t\t\t});\n\t\t\teditor.dispatch(transaction);\n\t\t\tsetVariablePickerVisible(false);\n\t\t} else {\n\t\t\tthrow new Error('Codemirror field not found');\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"notification-content\">\n\t\t\t<h2>{<Trans i18nKey=\"notificationTemplates.form.languages\">Languages</Trans>}</h2>\n\t\t\t<Accordion>\n\t\t\t\t{[...locales].sort(compareSelectedLocalesDefaultFirst).map(localeData => {\n\t\t\t\t\tconst {locale} = localeData;\n\t\t\t\t\tconst textLabel = <Trans i18nKey=\"notificationTemplate.form.message\">Message</Trans>;\n\t\t\t\t\tconst index = locales.indexOf(localeData);\n\t\t\t\t\tconst isError = !!errors.locales?.[index];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<AccordionItem\n\t\t\t\t\t\t\tkey={locale}\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t<span className=\"notification-locale-header\">\n\t\t\t\t\t\t\t\t\t{locale}\n\t\t\t\t\t\t\t\t\t{isError && <img src={warningIcon} alt=\"\" />}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttools={[\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\t\tdisabled={locale === 'default'}\n\t\t\t\t\t\t\t\t\tonClick={() => handleDelete(locale)}\n\t\t\t\t\t\t\t\t\tdata-testid=\"delete-locale-button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon del large />\n\t\t\t\t\t\t\t\t</Button>,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"notification-content-fields\">\n\t\t\t\t\t\t\t\t<div className=\"notification-content-fields-wrapper\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\t\t\t\t\tname={`locales.${index}.subject`}\n\t\t\t\t\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\trender={({field: {value, onChange}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<TemplateTextInput\n\t\t\t\t\t\t\t\t\t\t\t\t\tonFocus={() => setFocusedField('subject')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\terror={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? t('notificationTemplates.form.subjectRequired', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Please input subject',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.form.subject\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSubject\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\t\trefField={field => (subjectEditorRef.current = field)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tmarginTop: 10,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\t\t\t\t\tname={`locales.${locales.indexOf(localeData)}.text`}\n\t\t\t\t\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\trender={({field: {value, onChange}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<TemplateTextInput\n\t\t\t\t\t\t\t\t\t\t\t\t\tonFocus={() => setFocusedField('text')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\terror={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? t('notificationTemplates.form.messageRequired', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Please input message',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={textLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\trefField={field => (messageFieldRef.current = field)}\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderAs=\"textarea\"\n\t\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"notification-content-variables-wrapper\">\n\t\t\t\t\t\t\t\t\t<Button naked onClick={handleShowVariablePicker} data-testid=\"add-button\">\n\t\t\t\t\t\t\t\t\t\t<Icon add />\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.form.addVariables\">\n\t\t\t\t\t\t\t\t\t\t\t\tAdd variables...\n\t\t\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</AccordionItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Accordion>\n\n\t\t\t{variablePickerVisible && (\n\t\t\t\t<VariablePicker onSelect={handleSelectVariable} onCancel={() => setVariablePickerVisible(false)} />\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport default NotificationContent;\n","import {Controller, useFormContext} from 'react-hook-form';\n\nimport FormRow from 'components/inputs/formRow/FormRow';\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {Trans, useTranslation} from 'i18n';\n\nfunction NotificationInfo() {\n\tconst {t} = useTranslation();\n\tconst {control} = useFormContext();\n\n\treturn (\n\t\t<FormRow>\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"displayName\"\n\t\t\t\trules={{\n\t\t\t\t\trequired: true,\n\t\t\t\t}}\n\t\t\t\trender={({field, fieldState: {error}}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\terror={\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t? t('notificationTemplates.form.nameRequired', {\n\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Please enter a name',\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"notificationTemplate.form.name\">Name</Trans>}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"name\"\n\t\t\t\trender={({field}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"notificationTemplate.form.technicalName\">Technical Name</Trans>}\n\t\t\t\t\t\tdisabled\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t</FormRow>\n\t);\n}\n\nexport default NotificationInfo;\n","import {useContext, useState} from 'react';\nimport {FormProvider, useForm} from 'react-hook-form';\nimport {Prompt} from 'react-router-dom';\n\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport {nanoid10} from '@deviceinsight/ng-ui-components';\n\nimport {LocalePicker} from 'components/template/LocalePicker';\nimport {GlobalResourcesContext} from 'contexts/globalResources/GlobalResourcesContext';\nimport {Trans} from 'i18n';\nimport type {TemplateFormData} from '../types';\nimport AccessEditModal from './AccessEditModal';\nimport FooterButtons from './FooterButtons';\nimport NotificationContent from './NotificationContent';\nimport NotificationInfo from './NotificationInfo';\nimport './templateForm.scss';\n\ntype Props = {\n\tonCancel: () => void;\n\tonSubmit: (formValues: TemplateFormData) => Promise<void>;\n\teditedTemplateData: TemplateFormData | undefined;\n};\n\nfunction createEmptyTemplateFormData(): TemplateFormData {\n\treturn {\n\t\tname: `__${nanoid10()}`,\n\t\tlocales: [\n\t\t\t{\n\t\t\t\tlocale: 'default',\n\t\t\t\tsubject: '',\n\t\t\t\ttext: '',\n\t\t\t\tid: 0,\n\t\t\t},\n\t\t],\n\t\tdisplayName: '',\n\t};\n}\n\nexport default function TemplateForm({onCancel, onSubmit, editedTemplateData}: Props) {\n\tconst {locales: availableLocales} = useContext(GlobalResourcesContext);\n\tconst formContext = useForm<TemplateFormData>({\n\t\tdefaultValues: editedTemplateData ?? createEmptyTemplateFormData(),\n\t});\n\tconst {\n\t\thandleSubmit,\n\t\tsetValue,\n\t\twatch,\n\t\tformState: {isSubmitting, isDirty},\n\t} = formContext;\n\tconst [accessPickerVisible, setAccessPickerVisible] = useState<boolean>(false);\n\tconst [localePickerVisible, setLocalPickerVisible] = useState<boolean>(false);\n\tconst formLocales = watch('locales');\n\n\tfunction submit(): Promise<void> {\n\t\treturn handleSubmit(onSubmit, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t}\n\n\tasync function handleAccountGroupsSelect(accountGroupIdsWithAccess: number[]) {\n\t\tsetAccessPickerVisible(false);\n\t\tsetValue('accountGroupsWithAccess', accountGroupIdsWithAccess);\n\t\tawait submit();\n\t}\n\n\tfunction handleSelectLocale(locale: string) {\n\t\tsetLocalPickerVisible(false);\n\t\tsetValue('locales', [...formLocales, {locale, id: 0, text: '', subject: ''}], {shouldDirty: true});\n\t}\n\n\tfunction getUnusedLocales() {\n\t\treturn availableLocales.filter(locale => !formLocales.some(localeData => localeData.locale === locale));\n\t}\n\n\treturn (\n\t\t<FormProvider {...formContext}>\n\t\t\t<div className=\"template-form\">\n\t\t\t\t<NotificationInfo />\n\t\t\t\t<NotificationContent />\n\t\t\t\t<div className=\"di button-row add-locale\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => setLocalPickerVisible(true)}\n\t\t\t\t\t\tdata-testid=\"add-locale-button\"\n\t\t\t\t\t\tdisabled={!getUnusedLocales().length}\n\t\t\t\t\t\tnaked\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon add />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.form.addLocale\">Add locale...</Trans>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<FooterButtons\n\t\t\t\t\tonCancel={onCancel}\n\t\t\t\t\tonSubmit={editedTemplateData ? submit : () => setAccessPickerVisible(true)}\n\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t/>\n\t\t\t\t{localePickerVisible && (\n\t\t\t\t\t<LocalePicker\n\t\t\t\t\t\tlocales={getUnusedLocales()}\n\t\t\t\t\t\tonSelect={handleSelectLocale}\n\t\t\t\t\t\tonCancel={() => setLocalPickerVisible(false)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{accessPickerVisible && (\n\t\t\t\t\t<AccessEditModal\n\t\t\t\t\t\tonSave={handleAccountGroupsSelect}\n\t\t\t\t\t\tonCancel={() => setAccessPickerVisible(false)}\n\t\t\t\t\t\tloading={isSubmitting}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<Prompt message=\"\" when={isDirty && !isSubmitting} />\n\t\t\t</div>\n\t\t</FormProvider>\n\t);\n}\n","import type {AxiosError} from 'axios';\nimport {useEffect, useState} from 'react';\nimport {useParams} from 'react-router-dom';\n\nimport {fetchEmailTemplateById, fetchEmailTemplates} from '@deviceinsight/ng-ui-api-client';\n\nimport type {LocaleData, TemplateFormData} from './types';\n\ntype InitialFormDataContainer = {\n\tinitialFormData: TemplateFormData | undefined;\n\terror: AxiosError | undefined;\n\tloading: boolean;\n};\n\ntype UrlParams = {\n\ttemplateId: string;\n};\n\nexport default function useInitialFormData(): InitialFormDataContainer {\n\tconst {templateId} = useParams<UrlParams>();\n\tconst [initialData, setInitialData] = useState<TemplateFormData | undefined>(undefined);\n\tconst [error, setError] = useState<AxiosError | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\n\tuseEffect(() => {\n\t\tif (!templateId || templateId === 'create') {\n\t\t\tsetLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst defaultTemplate = await fetchEmailTemplateById(parseInt(templateId));\n\t\t\t\tconst fetchedTemplates = await fetchEmailTemplates({\n\t\t\t\t\tname: defaultTemplate.name,\n\t\t\t\t\tpage: 0,\n\t\t\t\t\tsize: 2000,\n\t\t\t\t});\n\t\t\t\tconst allTemplateVersions = fetchedTemplates // filter must be performed because the backend returns all templates starting with the given name\n\t\t\t\t\t.filter(template => template.name === defaultTemplate.name);\n\n\t\t\t\tconst locales = allTemplateVersions.map<LocaleData>(template => ({\n\t\t\t\t\tid: template.id,\n\t\t\t\t\tlocale: template.locale ?? 'default',\n\t\t\t\t\ttext: template.text,\n\t\t\t\t\tsubject: template.subject ?? '',\n\t\t\t\t}));\n\n\t\t\t\tsetInitialData({\n\t\t\t\t\taccountGroupsWithAccess: undefined,\n\t\t\t\t\tname: defaultTemplate.name,\n\t\t\t\t\tdisplayName: defaultTemplate.displayName,\n\t\t\t\t\tlocales,\n\t\t\t\t});\n\t\t\t} catch (e: any) {\n\t\t\t\tsetError(e);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t})();\n\t}, [templateId]);\n\n\treturn {\n\t\tloading,\n\t\terror,\n\t\tinitialFormData: initialData,\n\t};\n}\n","import {useContext, useEffect} from 'react';\nimport {useHistory, useLocation} from 'react-router-dom';\n\nimport {\n\tcreateEmailTemplate,\n\tdeleteEmailTemplate,\n\ttype NotificationTemplate,\n\ttype NotificationTemplateNew,\n\tupdateEmailTemplate,\n} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport PageNotFound from 'components/page/misc/PageNotFound';\nimport {ContextInfoContext} from 'contexts/contextInfo/ContextInfoContext';\nimport UIConfiguration from 'customization/UIConfiguration';\nimport {Trans, useTranslation} from 'i18n';\nimport TemplateForm from './templateForm/TemplateForm';\nimport type {LocaleData, TemplateFormData} from './types';\nimport useInitialFormData from './useInitialFormData';\n\nfunction addEmailTemplates(templates: NotificationTemplateNew[]) {\n\treturn templates.map(template => createEmailTemplate(template));\n}\n\nfunction updateEmailTemplates(templates: NotificationTemplate[]) {\n\treturn templates.map(template => updateEmailTemplate(template));\n}\n\nfunction deleteEmailTemplates(templates: number[]) {\n\treturn templates.map(id => deleteEmailTemplate(id));\n}\n\nfunction transformLocaleFormDataToNotificationTemplateNew(\n\tlocale: string,\n\ttemplateFormData: TemplateFormData,\n): NotificationTemplateNew {\n\tconst {name, displayName, accountGroupsWithAccess} = templateFormData;\n\tconst localeData = templateFormData.locales.find(localeData => localeData.locale === locale);\n\tif (!localeData) {\n\t\tthrow new Error(`Locale ${locale} not found`);\n\t}\n\tconst {subject, text} = localeData;\n\treturn {\n\t\taccountGroupsWithAccess,\n\t\tname,\n\t\tdisplayName,\n\t\ttenant: UIConfiguration.getTenant(),\n\t\tlocale: locale === 'default' ? null : locale,\n\t\tsubject,\n\t\ttext,\n\t\tscope: 'CONDITION_MONITORING',\n\t};\n}\n\nfunction transformLocaleFormDataToNotificationTemplate(id: number, locale: string, formValues: TemplateFormData) {\n\treturn {\n\t\tid,\n\t\t...transformLocaleFormDataToNotificationTemplateNew(locale, formValues),\n\t};\n}\n\nconst isNotificationChanged = (prevNotification: LocaleData, currentNotification: LocaleData) =>\n\tprevNotification.subject !== currentNotification.subject || prevNotification.text !== currentNotification.text;\n\nexport default function TemplateEditPage() {\n\tconst {t} = useTranslation();\n\tconst {setContextInfo} = useContext(ContextInfoContext);\n\tconst history = useHistory();\n\tconst {pathname} = useLocation();\n\tconst {initialFormData, error, loading} = useInitialFormData();\n\n\tasync function saveChanges(toAdd: NotificationTemplateNew[], toUpdate: NotificationTemplate[], toRemove: number[]) {\n\t\tconst addPromises = addEmailTemplates(toAdd);\n\t\tconst updatePromises = updateEmailTemplates(toUpdate);\n\t\tconst removePromises = deleteEmailTemplates(toRemove);\n\t\tawait Promise.all([...addPromises, ...updatePromises, ...removePromises]);\n\t}\n\n\tfunction createTemplates(formValues: TemplateFormData) {\n\t\tconst {locales} = formValues;\n\t\treturn saveChanges(\n\t\t\tlocales.map(({locale}) => transformLocaleFormDataToNotificationTemplateNew(locale, formValues)),\n\t\t\t[],\n\t\t\t[],\n\t\t);\n\t}\n\n\tfunction updateTemplates(formValues: TemplateFormData) {\n\t\tconst {locales: newLocales} = formValues;\n\t\tconst previousName = initialFormData?.displayName;\n\t\tconst previousLocales = initialFormData?.locales ?? [];\n\t\tconst toRemove = previousLocales.filter(\n\t\t\t({locale}) => !newLocales.some(localeData => localeData.locale === locale),\n\t\t);\n\t\tconst toAdd = newLocales.filter(\n\t\t\t({locale}) => !previousLocales.some(localeData => localeData.locale === locale),\n\t\t);\n\t\tconst toUpdate =\n\t\t\tpreviousName === formValues.displayName\n\t\t\t\t? newLocales.filter(newLocaleData => {\n\t\t\t\t\t\tconst previousLocaleData = previousLocales.find(\n\t\t\t\t\t\t\tlocaleData => localeData.locale === newLocaleData.locale,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn previousLocaleData && isNotificationChanged(previousLocaleData, newLocaleData);\n\t\t\t\t\t})\n\t\t\t\t: newLocales.filter(newLocaleData =>\n\t\t\t\t\t\tpreviousLocales.some(previousLocaleData => previousLocaleData.locale === newLocaleData.locale),\n\t\t\t\t\t);\n\t\treturn saveChanges(\n\t\t\ttoAdd.map(({locale}) => transformLocaleFormDataToNotificationTemplateNew(locale, formValues)),\n\t\t\ttoUpdate.map(({locale, id}) => transformLocaleFormDataToNotificationTemplate(id, locale, formValues)),\n\t\t\ttoRemove.map(({id}) => id),\n\t\t);\n\t}\n\n\tasync function handleSubmit(formData: TemplateFormData) {\n\t\ttry {\n\t\t\tif (initialFormData) {\n\t\t\t\tawait updateTemplates(formData);\n\t\t\t} else {\n\t\t\t\tawait createTemplates(formData);\n\t\t\t}\n\n\t\t\tgoToTemplatesList();\n\t\t} catch (e: any) {\n\t\t\tconsole.error('An error occured while trying to submit the template(s): ', e);\n\n\t\t\tif (e.response && e.response.status === 400) {\n\t\t\t\tmessageBoxError(\n\t\t\t\t\t<Trans i18nKey=\"notificationTemplates.form.nameOccupied\">\n\t\t\t\t\t\tTemplate with this name already exists\n\t\t\t\t\t</Trans>,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmessageBoxError(<Trans i18nKey=\"notificationTemplates.form.unknownError\">Unknown error occured</Trans>);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction goToTemplatesList() {\n\t\thistory.push('/portaladmin/templates');\n\t}\n\n\tuseEffect(() => {\n\t\tsetContextInfo({\n\t\t\ttype: 'string',\n\t\t\tvalue: initialFormData?.displayName || initialFormData?.name || '',\n\t\t\tpathname,\n\t\t});\n\t}, [initialFormData, pathname, setContextInfo]);\n\n\tuseEffect(() => {\n\t\treturn () => setContextInfo();\n\t}, [setContextInfo]);\n\n\tuseEffect(() => {\n\t\tif (error) {\n\t\t\tconsole.error(error);\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"notificationTemplates.form.fetchFailed\">\n\t\t\t\t\tAn error occurred while trying to fetch the template(s)\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t}\n\t}, [error]);\n\n\tif (error) {\n\t\treturn <PageNotFound />;\n\t}\n\n\treturn (\n\t\t<SpinnerContainer show={loading}>\n\t\t\t<ContentHeader\n\t\t\t\tparentPageLink\n\t\t\t\tsubPagePathPrefixArray={['/email', '/sms']}\n\t\t\t\ttitle={\n\t\t\t\t\tinitialFormData\n\t\t\t\t\t\t? t('notificationTemplate.form.editTemplate', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Edit Template',\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: t('notificationTemplate.form.createTemplate', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Create Template',\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t/>\n\t\t\t{!loading && (\n\t\t\t\t<TemplateForm\n\t\t\t\t\tonCancel={goToTemplatesList}\n\t\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\t\teditedTemplateData={initialFormData}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</SpinnerContainer>\n\t);\n}\n"],"names":["getColumnDefs","onSelect","jsx","Trans","locale","LocalePicker","locales","onCancel","items","Modal","ReactableWithClientSidePagination","item","Button","messages","FooterButtons","onSubmit","disabled","jsxs","ButtonRow","generateVariables","assetProperties","assetGroupProperties","key","variable","useFilteredProperties","useProperties","property","VariablePicker","TemplateTextInput","lazy","compareSelectedLocalesDefaultFirst","locale1","locale2","NotificationContent","confirm","useConfirm","variablePickerVisible","setVariablePickerVisible","useState","focusedField","setFocusedField","watch","control","setValue","errors","useFormContext","t","useTranslation","subjectEditorRef","useRef","messageFieldRef","handleDelete","localeData","handleShowVariablePicker","handleSelectVariable","editor","transaction","Accordion","textLabel","index","isError","AccordionItem","warningIcon","Icon","Controller","value","onChange","error","field","NotificationInfo","FormRow","TextInput","createEmptyTemplateFormData","nanoid10","TemplateForm","editedTemplateData","availableLocales","useContext","GlobalResourcesContext","formContext","useForm","handleSubmit","isSubmitting","isDirty","accessPickerVisible","setAccessPickerVisible","localePickerVisible","setLocalPickerVisible","formLocales","submit","handleAccountGroupsSelect","accountGroupIdsWithAccess","handleSelectLocale","getUnusedLocales","FormProvider","AccessEditModal","Prompt","useInitialFormData","templateId","useParams","initialData","setInitialData","setError","loading","setLoading","useEffect","defaultTemplate","fetchEmailTemplateById","fetchEmailTemplates","template","e","addEmailTemplates","templates","createEmailTemplate","updateEmailTemplates","updateEmailTemplate","deleteEmailTemplates","id","deleteEmailTemplate","transformLocaleFormDataToNotificationTemplateNew","templateFormData","name","displayName","accountGroupsWithAccess","subject","text","UIConfiguration","transformLocaleFormDataToNotificationTemplate","formValues","isNotificationChanged","prevNotification","currentNotification","TemplateEditPage","setContextInfo","ContextInfoContext","history","useHistory","pathname","useLocation","initialFormData","saveChanges","toAdd","toUpdate","toRemove","addPromises","updatePromises","removePromises","createTemplates","updateTemplates","newLocales","previousName","previousLocales","newLocaleData","previousLocaleData","formData","goToTemplatesList","messageBoxError","PageNotFound","SpinnerContainer","ContentHeader"],"mappings":"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"}
1
+ {"version":3,"file":"TemplateEditPage-DPJ5MJpd.js","sources":["../ng-ui-scale/src/components/template/LocalePicker.tsx","../ng-ui-scale/src/modules/templates/templateForm/FooterButtons.tsx","../ng-ui-scale/src/components/template/VariablePicker.tsx","../ng-ui-scale/src/modules/templates/templateForm/NotificationContent.tsx","../ng-ui-scale/src/modules/templates/templateForm/NotificationInfo.tsx","../ng-ui-scale/src/modules/templates/templateForm/TemplateForm.tsx","../ng-ui-scale/src/modules/templates/useInitialFormData.ts","../ng-ui-scale/src/modules/templates/TemplateEditPage.tsx"],"sourcesContent":["import type {$PropertyType} from 'utility-types';\n\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {ReactableWithClientSidePagination} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\n\ntype Props = {\n\tlocales: Array<string>;\n\tonSelect: (language: string) => any;\n\tonCancel: () => any;\n};\n\nconst getColumnDefs = (onSelect: $PropertyType<Props, 'onSelect'>) => [\n\t{\n\t\tname: 'locale',\n\t\tlabel: <Trans i18nKey=\"notificationTemplate.localePicker.localeCode\">Locale code</Trans>,\n\t\tsortable: true,\n\t\trender: ({locale}: Record<string, string>) => (\n\t\t\t<div onClick={() => onSelect(locale)} className=\"clickable\">\n\t\t\t\t{locale}\n\t\t\t</div>\n\t\t),\n\t},\n];\n\nexport const LocalePicker = ({locales, onSelect, onCancel}: Props) => {\n\tconst items = locales.map(locale => ({\n\t\tlocale,\n\t}));\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"di notification-template-modal\"\n\t\t\theader={<Trans i18nKey=\"notificationTemplate.localePicker.title\">Select locale</Trans>}\n\t\t\tcontent={\n\t\t\t\t<ReactableWithClientSidePagination\n\t\t\t\t\tcolumnDefs={getColumnDefs(onSelect)}\n\t\t\t\t\tuniqueItemKey={item => `${item.locale}`}\n\t\t\t\t\titems={items}\n\t\t\t\t\tpaginationSettings={{\n\t\t\t\t\t\tpage: 0,\n\t\t\t\t\t\tsize: items.length,\n\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\tproperty: 'locale',\n\t\t\t\t\t\t\tdirection: 'ASC',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\ttableName={'localePicker'}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t</Button>\n\t\t\t}\n\t\t\twidth={600}\n\t\t/>\n\t);\n};\n","import {Button, ButtonRow} from '@deviceinsight/ng-ui-basic-components';\n\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\n\ntype Props = {\n\tonCancel: () => void;\n\tonSubmit: () => Promise<any> | void;\n\tdisabled: boolean;\n};\n\nexport default function FooterButtons({onCancel, onSubmit, disabled}: Props) {\n\treturn (\n\t\t<ButtonRow dividing>\n\t\t\t<Button primary onClick={onSubmit} disabled={disabled}>\n\t\t\t\t<Trans i18nKey={messages.save.id}>{messages.save.defaultValue}</Trans>\n\t\t\t</Button>\n\t\t\t<Button onClick={onCancel}>\n\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t</Button>\n\t\t</ButtonRow>\n\t);\n}\n","import type {$PropertyType} from 'utility-types';\n\nimport type {Property} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {ReactableWithClientSidePagination} from '@deviceinsight/ng-ui-components';\n\nimport useProperties from 'hooks/useProperties';\nimport {Trans} from 'i18n';\nimport messages from 'i18n/messages';\n\ntype Props = {\n\tonSelect: (variable: string) => any;\n\tonCancel: () => any;\n};\n\nconst generateVariables = (assetProperties: Array<Property>, assetGroupProperties: Array<Property>) => [\n\t'asset.name',\n\t...assetProperties.map(({key}) => `asset.properties.${key}`),\n\t...assetGroupProperties.map(({key}) => `assetGroup.${key}`),\n\t'event.key',\n\t'event.ruleId',\n\t'event.timestamp?datetime',\n];\n\nconst getColumnDefs = (onSelect: $PropertyType<Props, 'onSelect'>) => [\n\t{\n\t\tname: 'variable',\n\t\tlabel: <Trans i18nKey=\"notificationTemplate.variablePicker.variable\">Variable</Trans>,\n\t\trender: (variable: string) => (\n\t\t\t<div onClick={() => onSelect(variable)} className=\"clickable\">\n\t\t\t\t{variable}\n\t\t\t</div>\n\t\t),\n\t},\n];\n\nconst useFilteredProperties = () => {\n\tconst {assetProperties, assetGroupProperties} = useProperties();\n\treturn {\n\t\tassetProperties: assetProperties.filter(property => !property.key.startsWith('_') && property.deletable),\n\t\tassetGroupProperties: assetGroupProperties.filter(\n\t\t\tproperty => !property.key.startsWith('_') && property.deletable,\n\t\t),\n\t};\n};\n\nexport const VariablePicker = ({onSelect, onCancel}: Props) => {\n\tconst {assetProperties, assetGroupProperties} = useFilteredProperties();\n\tconst items = generateVariables(assetProperties, assetGroupProperties);\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"di notification-template-modal\"\n\t\t\theader={<Trans i18nKey=\"notificationTemplate.variablePicker.title\">Select variable</Trans>}\n\t\t\tcontent={\n\t\t\t\t<ReactableWithClientSidePagination\n\t\t\t\t\tcolumnDefs={getColumnDefs(onSelect)}\n\t\t\t\t\tuniqueItemKey={item => item}\n\t\t\t\t\titems={items}\n\t\t\t\t\tpaginationSettings={{\n\t\t\t\t\t\tpage: 0,\n\t\t\t\t\t\tsize: 10,\n\t\t\t\t\t\tsort: {\n\t\t\t\t\t\t\tproperty: 'locale',\n\t\t\t\t\t\t\tdirection: 'ASC',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tisLoading={false}\n\t\t\t\t\ttableName={'variablePicker'}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<Button onClick={onCancel}>\n\t\t\t\t\t<Trans i18nKey={messages.cancel.id}>{messages.cancel.defaultValue}</Trans>\n\t\t\t\t</Button>\n\t\t\t}\n\t\t\twidth={600}\n\t\t/>\n\t);\n};\n","import type {EditorView} from '@codemirror/view';\nimport {lazy, useRef, useState} from 'react';\nimport {Controller, useFormContext} from 'react-hook-form';\n\nimport {Accordion, AccordionItem, Button, Icon, useConfirm} from '@deviceinsight/ng-ui-basic-components';\n\nimport {VariablePicker} from 'components/template/VariablePicker';\nimport {Trans, useTranslation} from 'i18n';\nimport warningIcon from '../../../assets/svg/icon_warning.svg';\nimport type {LocaleData, TemplateFormData} from '../types';\n\nconst TemplateTextInput = lazy(() => import('components/template/TemplateTextInput'));\n\nconst compareSelectedLocalesDefaultFirst = (locale1: LocaleData, locale2: LocaleData) => {\n\tif (locale1.locale === 'default') {\n\t\treturn -1;\n\t}\n\n\tif (locale2.locale === 'default') {\n\t\treturn 1;\n\t}\n\n\treturn locale1.locale.localeCompare(locale2.locale);\n};\n\nfunction NotificationContent() {\n\tconst confirm = useConfirm();\n\tconst [variablePickerVisible, setVariablePickerVisible] = useState<boolean>(false);\n\tconst [focusedField, setFocusedField] = useState<'subject' | 'message' | 'text'>('message');\n\tconst {\n\t\twatch,\n\t\tcontrol,\n\t\tsetValue,\n\t\tformState: {errors},\n\t} = useFormContext<TemplateFormData>();\n\tconst {t} = useTranslation();\n\tconst subjectEditorRef = useRef<EditorView | null>(null);\n\tconst messageFieldRef = useRef<EditorView | null>(null);\n\n\tconst locales = watch('locales');\n\n\tasync function handleDelete(locale: string) {\n\t\tconst confirmed = await confirm({\n\t\t\ttitle: t('notificationTemplate.form.confirmDeleteTitle', {defaultValue: 'Delete translation'}),\n\t\t\tmessage: t('notificationTemplate.form.confirmDeleteMessage', {\n\t\t\t\tdefaultValue: 'Do you really want to delete this translation?',\n\t\t\t}),\n\t\t});\n\n\t\tif (confirmed) {\n\t\t\tsetValue(\n\t\t\t\t'locales',\n\t\t\t\tlocales.filter(localeData => localeData.locale !== locale),\n\t\t\t\t{shouldDirty: true},\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction handleShowVariablePicker() {\n\t\tsetVariablePickerVisible(true);\n\t}\n\n\tfunction handleSelectVariable(variable: string) {\n\t\tconst editor = focusedField === 'subject' ? subjectEditorRef.current : messageFieldRef.current;\n\t\tif (editor) {\n\t\t\tconst transaction = editor.state.update({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: editor.state.selection.main.head,\n\t\t\t\t\tinsert: `\\${${variable}}`,\n\t\t\t\t},\n\t\t\t});\n\t\t\teditor.dispatch(transaction);\n\t\t\tsetVariablePickerVisible(false);\n\t\t} else {\n\t\t\tthrow new Error('Codemirror field not found');\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"notification-content\">\n\t\t\t<h2>{<Trans i18nKey=\"notificationTemplates.form.languages\">Languages</Trans>}</h2>\n\t\t\t<Accordion>\n\t\t\t\t{[...locales].sort(compareSelectedLocalesDefaultFirst).map(localeData => {\n\t\t\t\t\tconst {locale} = localeData;\n\t\t\t\t\tconst textLabel = <Trans i18nKey=\"notificationTemplate.form.message\">Message</Trans>;\n\t\t\t\t\tconst index = locales.indexOf(localeData);\n\t\t\t\t\tconst isError = !!errors.locales?.[index];\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<AccordionItem\n\t\t\t\t\t\t\tkey={locale}\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t<span className=\"notification-locale-header\">\n\t\t\t\t\t\t\t\t\t{locale}\n\t\t\t\t\t\t\t\t\t{isError && <img src={warningIcon} alt=\"\" />}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttools={[\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\t\tdisabled={locale === 'default'}\n\t\t\t\t\t\t\t\t\tonClick={() => handleDelete(locale)}\n\t\t\t\t\t\t\t\t\tdata-testid=\"delete-locale-button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon del large />\n\t\t\t\t\t\t\t\t</Button>,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"notification-content-fields\">\n\t\t\t\t\t\t\t\t<div className=\"notification-content-fields-wrapper\">\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\t\t\t\t\tname={`locales.${index}.subject`}\n\t\t\t\t\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\trender={({field: {value, onChange}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<TemplateTextInput\n\t\t\t\t\t\t\t\t\t\t\t\t\tonFocus={() => setFocusedField('subject')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\terror={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? t('notificationTemplates.form.subjectRequired', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Please input subject',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.form.subject\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSubject\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\t\trefField={field => (subjectEditorRef.current = field)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tmarginTop: 10,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\t\t\t\t\tname={`locales.${locales.indexOf(localeData)}.text`}\n\t\t\t\t\t\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\trender={({field: {value, onChange}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<TemplateTextInput\n\t\t\t\t\t\t\t\t\t\t\t\t\tonFocus={() => setFocusedField('text')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={onChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\terror={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? t('notificationTemplates.form.messageRequired', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Please input message',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={textLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\trefField={field => (messageFieldRef.current = field)}\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderAs=\"textarea\"\n\t\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"notification-content-variables-wrapper\">\n\t\t\t\t\t\t\t\t\t<Button naked onClick={handleShowVariablePicker} data-testid=\"add-button\">\n\t\t\t\t\t\t\t\t\t\t<Icon add />\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.form.addVariables\">\n\t\t\t\t\t\t\t\t\t\t\t\tAdd variables...\n\t\t\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</AccordionItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Accordion>\n\n\t\t\t{variablePickerVisible && (\n\t\t\t\t<VariablePicker onSelect={handleSelectVariable} onCancel={() => setVariablePickerVisible(false)} />\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport default NotificationContent;\n","import {Controller, useFormContext} from 'react-hook-form';\n\nimport FormRow from 'components/inputs/formRow/FormRow';\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {Trans, useTranslation} from 'i18n';\n\nfunction NotificationInfo() {\n\tconst {t} = useTranslation();\n\tconst {control} = useFormContext();\n\n\treturn (\n\t\t<FormRow>\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"displayName\"\n\t\t\t\trules={{\n\t\t\t\t\trequired: true,\n\t\t\t\t}}\n\t\t\t\trender={({field, fieldState: {error}}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\terror={\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t\t\t? t('notificationTemplates.form.nameRequired', {\n\t\t\t\t\t\t\t\t\t\tdefaultValue: 'Please enter a name',\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"notificationTemplate.form.name\">Name</Trans>}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"name\"\n\t\t\t\trender={({field}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"notificationTemplate.form.technicalName\">Technical Name</Trans>}\n\t\t\t\t\t\tdisabled\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t</FormRow>\n\t);\n}\n\nexport default NotificationInfo;\n","import {useContext, useState} from 'react';\nimport {FormProvider, useForm} from 'react-hook-form';\nimport {Prompt} from 'react-router-dom';\n\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport {nanoid10} from '@deviceinsight/ng-ui-components';\n\nimport {LocalePicker} from 'components/template/LocalePicker';\nimport {GlobalResourcesContext} from 'contexts/globalResources/GlobalResourcesContext';\nimport {Trans} from 'i18n';\nimport type {TemplateFormData} from '../types';\nimport AccessEditModal from './AccessEditModal';\nimport FooterButtons from './FooterButtons';\nimport NotificationContent from './NotificationContent';\nimport NotificationInfo from './NotificationInfo';\nimport './templateForm.scss';\n\ntype Props = {\n\tonCancel: () => void;\n\tonSubmit: (formValues: TemplateFormData) => Promise<void>;\n\teditedTemplateData: TemplateFormData | undefined;\n};\n\nfunction createEmptyTemplateFormData(): TemplateFormData {\n\treturn {\n\t\tname: `__${nanoid10()}`,\n\t\tlocales: [\n\t\t\t{\n\t\t\t\tlocale: 'default',\n\t\t\t\tsubject: '',\n\t\t\t\ttext: '',\n\t\t\t\tid: 0,\n\t\t\t},\n\t\t],\n\t\tdisplayName: '',\n\t};\n}\n\nexport default function TemplateForm({onCancel, onSubmit, editedTemplateData}: Props) {\n\tconst {locales: availableLocales} = useContext(GlobalResourcesContext);\n\tconst formContext = useForm<TemplateFormData>({\n\t\tdefaultValues: editedTemplateData ?? createEmptyTemplateFormData(),\n\t});\n\tconst {\n\t\thandleSubmit,\n\t\tsetValue,\n\t\twatch,\n\t\tformState: {isSubmitting, isDirty},\n\t} = formContext;\n\tconst [accessPickerVisible, setAccessPickerVisible] = useState<boolean>(false);\n\tconst [localePickerVisible, setLocalPickerVisible] = useState<boolean>(false);\n\tconst formLocales = watch('locales');\n\n\tfunction submit(): Promise<void> {\n\t\treturn handleSubmit(onSubmit, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t}\n\n\tasync function handleAccountGroupsSelect(accountGroupIdsWithAccess: number[]) {\n\t\tsetAccessPickerVisible(false);\n\t\tsetValue('accountGroupsWithAccess', accountGroupIdsWithAccess);\n\t\tawait submit();\n\t}\n\n\tfunction handleSelectLocale(locale: string) {\n\t\tsetLocalPickerVisible(false);\n\t\tsetValue('locales', [...formLocales, {locale, id: 0, text: '', subject: ''}], {shouldDirty: true});\n\t}\n\n\tfunction getUnusedLocales() {\n\t\treturn availableLocales.filter(locale => !formLocales.some(localeData => localeData.locale === locale));\n\t}\n\n\treturn (\n\t\t<FormProvider {...formContext}>\n\t\t\t<div className=\"template-form\">\n\t\t\t\t<NotificationInfo />\n\t\t\t\t<NotificationContent />\n\t\t\t\t<div className=\"di button-row add-locale\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={() => setLocalPickerVisible(true)}\n\t\t\t\t\t\tdata-testid=\"add-locale-button\"\n\t\t\t\t\t\tdisabled={!getUnusedLocales().length}\n\t\t\t\t\t\tnaked\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon add />\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.form.addLocale\">Add locale...</Trans>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<FooterButtons\n\t\t\t\t\tonCancel={onCancel}\n\t\t\t\t\tonSubmit={editedTemplateData ? submit : () => setAccessPickerVisible(true)}\n\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t/>\n\t\t\t\t{localePickerVisible && (\n\t\t\t\t\t<LocalePicker\n\t\t\t\t\t\tlocales={getUnusedLocales()}\n\t\t\t\t\t\tonSelect={handleSelectLocale}\n\t\t\t\t\t\tonCancel={() => setLocalPickerVisible(false)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{accessPickerVisible && (\n\t\t\t\t\t<AccessEditModal\n\t\t\t\t\t\tonSave={handleAccountGroupsSelect}\n\t\t\t\t\t\tonCancel={() => setAccessPickerVisible(false)}\n\t\t\t\t\t\tloading={isSubmitting}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<Prompt message=\"\" when={isDirty && !isSubmitting} />\n\t\t\t</div>\n\t\t</FormProvider>\n\t);\n}\n","import type {AxiosError} from 'axios';\nimport {useEffect, useState} from 'react';\nimport {useParams} from 'react-router-dom';\n\nimport {fetchEmailTemplateById, fetchEmailTemplates} from '@deviceinsight/ng-ui-api-client';\n\nimport type {LocaleData, TemplateFormData} from './types';\n\ntype InitialFormDataContainer = {\n\tinitialFormData: TemplateFormData | undefined;\n\terror: AxiosError | undefined;\n\tloading: boolean;\n};\n\ntype UrlParams = {\n\ttemplateId: string;\n};\n\nexport default function useInitialFormData(): InitialFormDataContainer {\n\tconst {templateId} = useParams<UrlParams>();\n\tconst [initialData, setInitialData] = useState<TemplateFormData | undefined>(undefined);\n\tconst [error, setError] = useState<AxiosError | undefined>(undefined);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\n\tuseEffect(() => {\n\t\tif (!templateId || templateId === 'create') {\n\t\t\tsetLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst defaultTemplate = await fetchEmailTemplateById(parseInt(templateId));\n\t\t\t\tconst fetchedTemplates = await fetchEmailTemplates({\n\t\t\t\t\tname: defaultTemplate.name,\n\t\t\t\t\tpage: 0,\n\t\t\t\t\tsize: 2000,\n\t\t\t\t});\n\t\t\t\tconst allTemplateVersions = fetchedTemplates // filter must be performed because the backend returns all templates starting with the given name\n\t\t\t\t\t.filter(template => template.name === defaultTemplate.name);\n\n\t\t\t\tconst locales = allTemplateVersions.map<LocaleData>(template => ({\n\t\t\t\t\tid: template.id,\n\t\t\t\t\tlocale: template.locale ?? 'default',\n\t\t\t\t\ttext: template.text,\n\t\t\t\t\tsubject: template.subject ?? '',\n\t\t\t\t}));\n\n\t\t\t\tsetInitialData({\n\t\t\t\t\taccountGroupsWithAccess: undefined,\n\t\t\t\t\tname: defaultTemplate.name,\n\t\t\t\t\tdisplayName: defaultTemplate.displayName,\n\t\t\t\t\tlocales,\n\t\t\t\t});\n\t\t\t} catch (e: any) {\n\t\t\t\tsetError(e);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t})();\n\t}, [templateId]);\n\n\treturn {\n\t\tloading,\n\t\terror,\n\t\tinitialFormData: initialData,\n\t};\n}\n","import {useContext, useEffect} from 'react';\nimport {useHistory, useLocation} from 'react-router-dom';\n\nimport {\n\tcreateEmailTemplate,\n\tdeleteEmailTemplate,\n\ttype NotificationTemplate,\n\ttype NotificationTemplateNew,\n\tupdateEmailTemplate,\n} from '@deviceinsight/ng-ui-api-client';\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport PageNotFound from 'components/page/misc/PageNotFound';\nimport {ContextInfoContext} from 'contexts/contextInfo/ContextInfoContext';\nimport UIConfiguration from 'customization/UIConfiguration';\nimport {Trans, useTranslation} from 'i18n';\nimport TemplateForm from './templateForm/TemplateForm';\nimport type {LocaleData, TemplateFormData} from './types';\nimport useInitialFormData from './useInitialFormData';\n\nfunction addEmailTemplates(templates: NotificationTemplateNew[]) {\n\treturn templates.map(template => createEmailTemplate(template));\n}\n\nfunction updateEmailTemplates(templates: NotificationTemplate[]) {\n\treturn templates.map(template => updateEmailTemplate(template));\n}\n\nfunction deleteEmailTemplates(templates: number[]) {\n\treturn templates.map(id => deleteEmailTemplate(id));\n}\n\nfunction transformLocaleFormDataToNotificationTemplateNew(\n\tlocale: string,\n\ttemplateFormData: TemplateFormData,\n): NotificationTemplateNew {\n\tconst {name, displayName, accountGroupsWithAccess} = templateFormData;\n\tconst localeData = templateFormData.locales.find(localeData => localeData.locale === locale);\n\tif (!localeData) {\n\t\tthrow new Error(`Locale ${locale} not found`);\n\t}\n\tconst {subject, text} = localeData;\n\treturn {\n\t\taccountGroupsWithAccess,\n\t\tname,\n\t\tdisplayName,\n\t\ttenant: UIConfiguration.getTenant(),\n\t\tlocale: locale === 'default' ? null : locale,\n\t\tsubject,\n\t\ttext,\n\t\tscope: 'CONDITION_MONITORING',\n\t};\n}\n\nfunction transformLocaleFormDataToNotificationTemplate(id: number, locale: string, formValues: TemplateFormData) {\n\treturn {\n\t\tid,\n\t\t...transformLocaleFormDataToNotificationTemplateNew(locale, formValues),\n\t};\n}\n\nconst isNotificationChanged = (prevNotification: LocaleData, currentNotification: LocaleData) =>\n\tprevNotification.subject !== currentNotification.subject || prevNotification.text !== currentNotification.text;\n\nexport default function TemplateEditPage() {\n\tconst {t} = useTranslation();\n\tconst {setContextInfo} = useContext(ContextInfoContext);\n\tconst history = useHistory();\n\tconst {pathname} = useLocation();\n\tconst {initialFormData, error, loading} = useInitialFormData();\n\n\tasync function saveChanges(toAdd: NotificationTemplateNew[], toUpdate: NotificationTemplate[], toRemove: number[]) {\n\t\tconst addPromises = addEmailTemplates(toAdd);\n\t\tconst updatePromises = updateEmailTemplates(toUpdate);\n\t\tconst removePromises = deleteEmailTemplates(toRemove);\n\t\tawait Promise.all([...addPromises, ...updatePromises, ...removePromises]);\n\t}\n\n\tfunction createTemplates(formValues: TemplateFormData) {\n\t\tconst {locales} = formValues;\n\t\treturn saveChanges(\n\t\t\tlocales.map(({locale}) => transformLocaleFormDataToNotificationTemplateNew(locale, formValues)),\n\t\t\t[],\n\t\t\t[],\n\t\t);\n\t}\n\n\tfunction updateTemplates(formValues: TemplateFormData) {\n\t\tconst {locales: newLocales} = formValues;\n\t\tconst previousName = initialFormData?.displayName;\n\t\tconst previousLocales = initialFormData?.locales ?? [];\n\t\tconst toRemove = previousLocales.filter(\n\t\t\t({locale}) => !newLocales.some(localeData => localeData.locale === locale),\n\t\t);\n\t\tconst toAdd = newLocales.filter(\n\t\t\t({locale}) => !previousLocales.some(localeData => localeData.locale === locale),\n\t\t);\n\t\tconst toUpdate =\n\t\t\tpreviousName === formValues.displayName\n\t\t\t\t? newLocales.filter(newLocaleData => {\n\t\t\t\t\t\tconst previousLocaleData = previousLocales.find(\n\t\t\t\t\t\t\tlocaleData => localeData.locale === newLocaleData.locale,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn previousLocaleData && isNotificationChanged(previousLocaleData, newLocaleData);\n\t\t\t\t\t})\n\t\t\t\t: newLocales.filter(newLocaleData =>\n\t\t\t\t\t\tpreviousLocales.some(previousLocaleData => previousLocaleData.locale === newLocaleData.locale),\n\t\t\t\t\t);\n\t\treturn saveChanges(\n\t\t\ttoAdd.map(({locale}) => transformLocaleFormDataToNotificationTemplateNew(locale, formValues)),\n\t\t\ttoUpdate.map(({locale, id}) => transformLocaleFormDataToNotificationTemplate(id, locale, formValues)),\n\t\t\ttoRemove.map(({id}) => id),\n\t\t);\n\t}\n\n\tasync function handleSubmit(formData: TemplateFormData) {\n\t\ttry {\n\t\t\tif (initialFormData) {\n\t\t\t\tawait updateTemplates(formData);\n\t\t\t} else {\n\t\t\t\tawait createTemplates(formData);\n\t\t\t}\n\n\t\t\tgoToTemplatesList();\n\t\t} catch (e: any) {\n\t\t\tconsole.error('An error occured while trying to submit the template(s): ', e);\n\n\t\t\tif (e.response && e.response.status === 400) {\n\t\t\t\tmessageBoxError(\n\t\t\t\t\t<Trans i18nKey=\"notificationTemplates.form.nameOccupied\">\n\t\t\t\t\t\tTemplate with this name already exists\n\t\t\t\t\t</Trans>,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmessageBoxError(<Trans i18nKey=\"notificationTemplates.form.unknownError\">Unknown error occured</Trans>);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction goToTemplatesList() {\n\t\thistory.push('/portaladmin/templates');\n\t}\n\n\tuseEffect(() => {\n\t\tsetContextInfo({\n\t\t\ttype: 'string',\n\t\t\tvalue: initialFormData?.displayName || initialFormData?.name || '',\n\t\t\tpathname,\n\t\t});\n\t}, [initialFormData, pathname, setContextInfo]);\n\n\tuseEffect(() => {\n\t\treturn () => setContextInfo();\n\t}, [setContextInfo]);\n\n\tuseEffect(() => {\n\t\tif (error) {\n\t\t\tconsole.error(error);\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"notificationTemplates.form.fetchFailed\">\n\t\t\t\t\tAn error occurred while trying to fetch the template(s)\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t}\n\t}, [error]);\n\n\tif (error) {\n\t\treturn <PageNotFound />;\n\t}\n\n\treturn (\n\t\t<SpinnerContainer show={loading}>\n\t\t\t<ContentHeader\n\t\t\t\tparentPageLink\n\t\t\t\tsubPagePathPrefixArray={['/email', '/sms']}\n\t\t\t\ttitle={\n\t\t\t\t\tinitialFormData\n\t\t\t\t\t\t? t('notificationTemplate.form.editTemplate', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Edit Template',\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: t('notificationTemplate.form.createTemplate', {\n\t\t\t\t\t\t\t\tdefaultValue: 'Create Template',\n\t\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t/>\n\t\t\t{!loading && (\n\t\t\t\t<TemplateForm\n\t\t\t\t\tonCancel={goToTemplatesList}\n\t\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\t\teditedTemplateData={initialFormData}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</SpinnerContainer>\n\t);\n}\n"],"names":["getColumnDefs","onSelect","jsx","Trans","locale","LocalePicker","locales","onCancel","items","Modal","ReactableWithClientSidePagination","item","Button","messages","FooterButtons","onSubmit","disabled","jsxs","ButtonRow","generateVariables","assetProperties","assetGroupProperties","key","variable","useFilteredProperties","useProperties","property","VariablePicker","TemplateTextInput","lazy","compareSelectedLocalesDefaultFirst","locale1","locale2","NotificationContent","confirm","useConfirm","variablePickerVisible","setVariablePickerVisible","useState","focusedField","setFocusedField","watch","control","setValue","errors","useFormContext","t","useTranslation","subjectEditorRef","useRef","messageFieldRef","handleDelete","localeData","handleShowVariablePicker","handleSelectVariable","editor","transaction","Accordion","textLabel","index","isError","AccordionItem","warningIcon","Icon","Controller","value","onChange","error","field","NotificationInfo","FormRow","TextInput","createEmptyTemplateFormData","nanoid10","TemplateForm","editedTemplateData","availableLocales","useContext","GlobalResourcesContext","formContext","useForm","handleSubmit","isSubmitting","isDirty","accessPickerVisible","setAccessPickerVisible","localePickerVisible","setLocalPickerVisible","formLocales","submit","handleAccountGroupsSelect","accountGroupIdsWithAccess","handleSelectLocale","getUnusedLocales","FormProvider","AccessEditModal","Prompt","useInitialFormData","templateId","useParams","initialData","setInitialData","setError","loading","setLoading","useEffect","defaultTemplate","fetchEmailTemplateById","fetchEmailTemplates","template","e","addEmailTemplates","templates","createEmailTemplate","updateEmailTemplates","updateEmailTemplate","deleteEmailTemplates","id","deleteEmailTemplate","transformLocaleFormDataToNotificationTemplateNew","templateFormData","name","displayName","accountGroupsWithAccess","subject","text","UIConfiguration","transformLocaleFormDataToNotificationTemplate","formValues","isNotificationChanged","prevNotification","currentNotification","TemplateEditPage","setContextInfo","ContextInfoContext","history","useHistory","pathname","useLocation","initialFormData","saveChanges","toAdd","toUpdate","toRemove","addPromises","updatePromises","removePromises","createTemplates","updateTemplates","newLocales","previousName","previousLocales","newLocaleData","previousLocaleData","formData","goToTemplatesList","messageBoxError","PageNotFound","SpinnerContainer","ContentHeader"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { javascript as u } from "@codemirror/lang-javascript";
3
3
  import h from "@uiw/react-codemirror";
4
4
  import x from "classnames";
5
5
  import * as g from "react";
6
- import { X as b } from "./setTitle-CjnK8p-J.js";
6
+ import { Y as b } from "./setTitle-Dij-z9p9.js";
7
7
  const T = g.forwardRef(
8
8
  ({ onFocus: c, onChange: r, refField: l, renderAs: i, ...n }, e) => {
9
9
  function s() {
@@ -42,4 +42,4 @@ const T = g.forwardRef(
42
42
  export {
43
43
  T as default
44
44
  };
45
- //# sourceMappingURL=TemplateTextInput-CQ6XJiql.js.map
45
+ //# sourceMappingURL=TemplateTextInput-CmCxL3xj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateTextInput-CQ6XJiql.js","sources":["../ng-ui-scale/src/components/template/TemplateTextInput.tsx"],"sourcesContent":["import {javascript} from '@codemirror/lang-javascript';\nimport type {EditorView, ViewUpdate} from '@codemirror/view';\nimport Controlled from '@uiw/react-codemirror';\nimport classNames from 'classnames';\nimport type {ReactNode} from 'react';\nimport * as React from 'react';\n\nimport FieldDecorator from 'components/inputs/FieldDecorator';\n\ntype Props = {\n\tonChange?: (value: string, viewUpdate: ViewUpdate) => void;\n\tonFocus: () => void;\n\tlabel?: ReactNode | string;\n\trequired?: boolean;\n\trenderAs?: 'textarea' | 'input';\n\trefField: (editor: EditorView) => void;\n\tvalue: string;\n\terror?: string;\n};\n\nconst TemplateTextInput = React.forwardRef<EditorView, Props>(\n\t({onFocus, onChange, refField, renderAs, ...rest}, forwardedRef) => {\n\t\tfunction handleFocus() {\n\t\t\tonFocus();\n\t\t}\n\t\tconst handleChange = (value: string, viewUpdate: ViewUpdate) => {\n\t\t\tif (!renderAs || renderAs === 'input') {\n\t\t\t\tonChange?.(value.replace(/\\n/g, ''), viewUpdate);\n\t\t\t} else {\n\t\t\t\tonChange?.(value, viewUpdate);\n\t\t\t}\n\t\t};\n\n\t\tconst {label, ...decoratorProps} = rest;\n\n\t\treturn (\n\t\t\t<FieldDecorator {...decoratorProps} label={label}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames('di notification-template-field', {\n\t\t\t\t\t\ttextarea: renderAs === 'textarea',\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<Controlled\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tbasicSetup={{\n\t\t\t\t\t\t\tlineNumbers: false,\n\t\t\t\t\t\t\thighlightActiveLine: false,\n\t\t\t\t\t\t\tfoldGutter: false,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonChange={(value: string, viewUpdate: ViewUpdate) => handleChange(value, viewUpdate)}\n\t\t\t\t\t\tonCreateEditor={(editor: EditorView) => {\n\t\t\t\t\t\t\trefField(editor);\n\t\t\t\t\t\t\tif (forwardedRef) {\n\t\t\t\t\t\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\t\t\t\t\t\tforwardedRef(editor);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t(forwardedRef as React.MutableRefObject<EditorView | null>).current = editor;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\textensions={[javascript()]}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</FieldDecorator>\n\t\t);\n\t},\n);\n\nexport default TemplateTextInput;\n"],"names":["TemplateTextInput","React","onFocus","onChange","refField","renderAs","rest","forwardedRef","handleFocus","handleChange","value","viewUpdate","label","decoratorProps","jsx","FieldDecorator","classNames","Controlled","editor","javascript"],"mappings":";;;;;;AAoBA,MAAMA,IAAoBC,EAAM;AAAA,EAC/B,CAAC,EAAC,SAAAC,GAAS,UAAAC,GAAU,UAAAC,GAAU,UAAAC,GAAU,GAAGC,EAAA,GAAOC,MAAiB;AACnE,aAASC,IAAc;AACtB,MAAAN,EAAA;AAAA,IACD;AACA,UAAMO,IAAe,CAACC,GAAeC,MAA2B;AAC/D,MACCR,IADG,CAACE,KAAYA,MAAa,UAClBK,EAAM,QAAQ,OAAO,EAAE,IAEvBA,GAF0BC,CAAU;AAAA,IAIjD,GAEM,EAAC,OAAAC,GAAO,GAAGC,EAAA,IAAkBP;AAEnC,WACC,gBAAAQ,EAACC,GAAA,EAAgB,GAAGF,GAAgB,OAAAD,GACnC,UAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAWE,EAAW,kCAAkC;AAAA,UACvD,UAAUX,MAAa;AAAA,QAAA,CACvB;AAAA,QAED,UAAA,gBAAAS;AAAA,UAACG;AAAAA,UAAA;AAAA,YACC,GAAGX;AAAA,YACJ,YAAY;AAAA,cACX,aAAa;AAAA,cACb,qBAAqB;AAAA,cACrB,YAAY;AAAA,YAAA;AAAA,YAEb,UAAU,CAACI,GAAeC,MAA2BF,EAAaC,GAAOC,CAAU;AAAA,YACnF,gBAAgB,CAACO,MAAuB;AACvC,cAAAd,EAASc,CAAM,GACXX,MACC,OAAOA,KAAiB,aAC3BA,EAAaW,CAAM,IAElBX,EAA2D,UAAUW;AAAA,YAGzE;AAAA,YACA,SAASV;AAAA,YACT,YAAY,CAACW,EAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAC1B;AAAA,IAAA,GAEF;AAAA,EAEF;AACD;"}
1
+ {"version":3,"file":"TemplateTextInput-CmCxL3xj.js","sources":["../ng-ui-scale/src/components/template/TemplateTextInput.tsx"],"sourcesContent":["import {javascript} from '@codemirror/lang-javascript';\nimport type {EditorView, ViewUpdate} from '@codemirror/view';\nimport Controlled from '@uiw/react-codemirror';\nimport classNames from 'classnames';\nimport type {ReactNode} from 'react';\nimport * as React from 'react';\n\nimport FieldDecorator from 'components/inputs/FieldDecorator';\n\ntype Props = {\n\tonChange?: (value: string, viewUpdate: ViewUpdate) => void;\n\tonFocus: () => void;\n\tlabel?: ReactNode | string;\n\trequired?: boolean;\n\trenderAs?: 'textarea' | 'input';\n\trefField: (editor: EditorView) => void;\n\tvalue: string;\n\terror?: string;\n};\n\nconst TemplateTextInput = React.forwardRef<EditorView, Props>(\n\t({onFocus, onChange, refField, renderAs, ...rest}, forwardedRef) => {\n\t\tfunction handleFocus() {\n\t\t\tonFocus();\n\t\t}\n\t\tconst handleChange = (value: string, viewUpdate: ViewUpdate) => {\n\t\t\tif (!renderAs || renderAs === 'input') {\n\t\t\t\tonChange?.(value.replace(/\\n/g, ''), viewUpdate);\n\t\t\t} else {\n\t\t\t\tonChange?.(value, viewUpdate);\n\t\t\t}\n\t\t};\n\n\t\tconst {label, ...decoratorProps} = rest;\n\n\t\treturn (\n\t\t\t<FieldDecorator {...decoratorProps} label={label}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames('di notification-template-field', {\n\t\t\t\t\t\ttextarea: renderAs === 'textarea',\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<Controlled\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tbasicSetup={{\n\t\t\t\t\t\t\tlineNumbers: false,\n\t\t\t\t\t\t\thighlightActiveLine: false,\n\t\t\t\t\t\t\tfoldGutter: false,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonChange={(value: string, viewUpdate: ViewUpdate) => handleChange(value, viewUpdate)}\n\t\t\t\t\t\tonCreateEditor={(editor: EditorView) => {\n\t\t\t\t\t\t\trefField(editor);\n\t\t\t\t\t\t\tif (forwardedRef) {\n\t\t\t\t\t\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\t\t\t\t\t\tforwardedRef(editor);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t(forwardedRef as React.MutableRefObject<EditorView | null>).current = editor;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\textensions={[javascript()]}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</FieldDecorator>\n\t\t);\n\t},\n);\n\nexport default TemplateTextInput;\n"],"names":["TemplateTextInput","React","onFocus","onChange","refField","renderAs","rest","forwardedRef","handleFocus","handleChange","value","viewUpdate","label","decoratorProps","jsx","FieldDecorator","classNames","Controlled","editor","javascript"],"mappings":";;;;;;AAoBA,MAAMA,IAAoBC,EAAM;AAAA,EAC/B,CAAC,EAAC,SAAAC,GAAS,UAAAC,GAAU,UAAAC,GAAU,UAAAC,GAAU,GAAGC,EAAA,GAAOC,MAAiB;AACnE,aAASC,IAAc;AACtB,MAAAN,EAAA;AAAA,IACD;AACA,UAAMO,IAAe,CAACC,GAAeC,MAA2B;AAC/D,MACCR,IADG,CAACE,KAAYA,MAAa,UAClBK,EAAM,QAAQ,OAAO,EAAE,IAEvBA,GAF0BC,CAAU;AAAA,IAIjD,GAEM,EAAC,OAAAC,GAAO,GAAGC,EAAA,IAAkBP;AAEnC,WACC,gBAAAQ,EAACC,GAAA,EAAgB,GAAGF,GAAgB,OAAAD,GACnC,UAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAWE,EAAW,kCAAkC;AAAA,UACvD,UAAUX,MAAa;AAAA,QAAA,CACvB;AAAA,QAED,UAAA,gBAAAS;AAAA,UAACG;AAAAA,UAAA;AAAA,YACC,GAAGX;AAAA,YACJ,YAAY;AAAA,cACX,aAAa;AAAA,cACb,qBAAqB;AAAA,cACrB,YAAY;AAAA,YAAA;AAAA,YAEb,UAAU,CAACI,GAAeC,MAA2BF,EAAaC,GAAOC,CAAU;AAAA,YACnF,gBAAgB,CAACO,MAAuB;AACvC,cAAAd,EAASc,CAAM,GACXX,MACC,OAAOA,KAAiB,aAC3BA,EAAaW,CAAM,IAElBX,EAA2D,UAAUW;AAAA,YAGzE;AAAA,YACA,SAASV;AAAA,YACT,YAAY,CAACW,EAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAC1B;AAAA,IAAA,GAEF;AAAA,EAEF;AACD;"}
@@ -1,13 +1,13 @@
1
1
  import { jsx as e, jsxs as O, Fragment as v } from "react/jsx-runtime";
2
2
  import { flatten as M, unionBy as z } from "lodash";
3
3
  import { useContext as j, useState as T, useCallback as W, useEffect as H } from "react";
4
- import { Link as Y, useLocation as $ } from "react-router-dom";
5
- import { fetchUserGroupById as D, fetchEmailTemplates as L, fetchEmailTemplateAccessById as q, updateEmailTemplate as J, deleteEmailTemplate as Q } from "@deviceinsight/ng-ui-api-client";
6
- import { Label as S, Button as w, Icon as X, Modal as Z, withConfirm as ee } from "@deviceinsight/ng-ui-basic-components";
4
+ import { Link as $, useLocation as q } from "react-router-dom";
5
+ import { fetchUserGroupById as D, fetchEmailTemplates as L, fetchEmailTemplateAccessById as Y, updateEmailTemplate as Z, deleteEmailTemplate as J } from "@deviceinsight/ng-ui-api-client";
6
+ import { Label as S, Button as w, Icon as Q, Modal as X, withConfirm as ee } from "@deviceinsight/ng-ui-basic-components";
7
7
  import { MultiMenu as te, MultiMenuItem as ae, InfoBox as ne, messageBoxError as _, ContentHeader as oe } from "@deviceinsight/ng-ui-components";
8
- import { a as i, r as y, c0 as ie, Y as x, u as le, b6 as se, aC as re, bM as ce, bN as me } from "./setTitle-CjnK8p-J.js";
8
+ import { a as i, t as y, c1 as ie, Z as x, u as le, b7 as se, aD as re, bN as ce, bO as me } from "./setTitle-Dij-z9p9.js";
9
9
  import "react-i18next";
10
- import { A as ue } from "./AccessEditModal-kndFZDt-.js";
10
+ import { A as ue } from "./AccessEditModal-C_Ymwezb.js";
11
11
  function de(r, s, c, h, m) {
12
12
  return [
13
13
  {
@@ -19,7 +19,7 @@ function de(r, s, c, h, m) {
19
19
  filterType: "text",
20
20
  filterFn: (t, n) => (t.displayName || t.name).toLowerCase().indexOf(n.toLowerCase()) >= 0
21
21
  },
22
- render: (t) => t.id ? /* @__PURE__ */ e(Y, { to: `./${t.id}`, children: t.displayName || t.name }) : "-"
22
+ render: (t) => t.id ? /* @__PURE__ */ e($, { to: `./${t.id}`, children: t.displayName || t.name }) : "-"
23
23
  },
24
24
  {
25
25
  name: "message",
@@ -108,7 +108,7 @@ function de(r, s, c, h, m) {
108
108
  naked: !0,
109
109
  onClick: () => r(t),
110
110
  "data-testid": "delete-notification-template-button",
111
- children: /* @__PURE__ */ e(X, { del: !0 })
111
+ children: /* @__PURE__ */ e(Q, { del: !0 })
112
112
  }
113
113
  )
114
114
  ] })
@@ -122,7 +122,7 @@ function pe({ onCancel: r, onSave: s, template: c }) {
122
122
  defaultValue: "You are about ot remove the last User Groups from a Template. Please note that you wouldn't be able to see it as you do not have the required Authorities. Please contact your Administrator."
123
123
  });
124
124
  return /* @__PURE__ */ e(
125
- Z,
125
+ X,
126
126
  {
127
127
  onOutsideClick: r,
128
128
  header: /* @__PURE__ */ e(i, { i18nKey: "notificationTemplate.access.delete.modal.title", children: "Remove all authorised User Groups from this Template" }),
@@ -150,7 +150,7 @@ async function Te() {
150
150
  const r = await L(he);
151
151
  return await Promise.all(
152
152
  r.map(async (s) => {
153
- const { accountGroupIds: c } = await q(s.id);
153
+ const { accountGroupIds: c } = await Y(s.id);
154
154
  return Promise.resolve({
155
155
  ...s,
156
156
  accountGroupsWithAccess: c,
@@ -160,7 +160,7 @@ async function Te() {
160
160
  );
161
161
  }
162
162
  function ye({ confirm: r }) {
163
- const { setContextInfo: s } = j(re), { pathname: c } = $(), [h, m] = T([]), [t, n] = T(!0), [g, l] = T(!1), [u, A] = T(!1), [C, b] = T([]), [I, P] = T(), U = /* @__PURE__ */ e(i, { i18nKey: "portalAdmin.sidebarElements.templates.create", children: "Create new notification template" }), N = W(
163
+ const { setContextInfo: s } = j(re), { pathname: c } = q(), [h, m] = T([]), [t, n] = T(!0), [g, l] = T(!1), [u, A] = T(!1), [C, b] = T([]), [I, P] = T(), U = /* @__PURE__ */ e(i, { i18nKey: "portalAdmin.sidebarElements.templates.create", children: "Create new notification template" }), N = W(
164
164
  (a) => {
165
165
  s({
166
166
  type: "search",
@@ -181,7 +181,7 @@ function ye({ confirm: r }) {
181
181
  page: 0,
182
182
  size: 2e3
183
183
  });
184
- await Promise.all(o.map((p) => Q(p.id)));
184
+ await Promise.all(o.map((p) => J(p.id)));
185
185
  const d = C.filter((p) => p.name !== a.name);
186
186
  b(d), N(d);
187
187
  } catch (o) {
@@ -215,7 +215,7 @@ function ye({ confirm: r }) {
215
215
  }), p = { ...o, accountGroupsWithAccess: a }, f = z([p], C, "id");
216
216
  await Promise.all(
217
217
  d.map(
218
- (E) => J({
218
+ (E) => Z({
219
219
  ...E,
220
220
  accountGroupsWithAccess: a
221
221
  })
@@ -327,4 +327,4 @@ const _e = ee(ye);
327
327
  export {
328
328
  _e as default
329
329
  };
330
- //# sourceMappingURL=TemplatesListPage-roTvuqft.js.map
330
+ //# sourceMappingURL=TemplatesListPage-HwJpI4I0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TemplatesListPage-roTvuqft.js","sources":["../ng-ui-scale/src/modules/templates/getColumnDefinitions.tsx","../ng-ui-scale/src/modules/templates/templateForm/AccessInfoModal.tsx","../ng-ui-scale/src/modules/templates/TemplatesListPage.tsx"],"sourcesContent":["import {Link} from 'react-router-dom';\n\nimport type {NotificationTemplate, UserGroup} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon, Label} from '@deviceinsight/ng-ui-basic-components';\nimport {MultiMenu, MultiMenuItem, type ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport iconDark from 'assets/svg/icon_key.svg';\nimport {Trans} from 'i18n';\nimport {hasAuthorities} from 'utils/hasAuthorities';\nimport {nonNull} from 'utils/tsUtils';\n\nexport default function getColumnDefinitions(\n\tonDeleteTemplate: (template: NotificationTemplate) => any,\n\tonSaveAccess: (accountGroupIds: number[], template: NotificationTemplate) => any,\n\tonEditAccess: (template: NotificationTemplate) => any,\n\tonEditLastAccess: (template: NotificationTemplate) => any,\n\taccountGroups: UserGroup[],\n): Array<ReactableColumnDef<NotificationTemplate>> {\n\treturn [\n\t\t{\n\t\t\tname: 'displayName',\n\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.name\">Name</Trans>,\n\t\t\twidth: '10%',\n\t\t\tsortable: true,\n\t\t\tfilterable: {\n\t\t\t\tfilterType: 'text' as const,\n\t\t\t\tfilterFn: (item: NotificationTemplate, value: string) =>\n\t\t\t\t\t(item.displayName || item.name).toLowerCase().indexOf(value.toLowerCase()) >= 0,\n\t\t\t},\n\t\t\trender: (item: NotificationTemplate) =>\n\t\t\t\titem.id ? <Link to={`./${item.id}`}>{item.displayName || item.name}</Link> : '-',\n\t\t},\n\t\t{\n\t\t\tname: 'message',\n\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.message\">Message</Trans>,\n\t\t\twidth: '40%',\n\t\t\tsortable: true,\n\t\t\twhiteSpace: 'normal',\n\t\t\trender: ({text}: NotificationTemplate) => text,\n\t\t},\n\t\t{\n\t\t\tname: 'subject',\n\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.subject\">Subject</Trans>,\n\t\t\twidth: '20%',\n\t\t\tsortable: true,\n\t\t\twhiteSpace: 'normal',\n\t\t\trender: ({subject}: NotificationTemplate) =>\n\t\t\t\tsubject ? <span>{subject}</span> : <Trans i18nKey=\"notificationTemplates.noSubject\">None</Trans>,\n\t\t},\n\t\thasAuthorities(['READ_ACCOUNT_GROUP'] as string[])\n\t\t\t? {\n\t\t\t\t\tname: 'userGroups',\n\t\t\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.userGroups\">Authorised User Groups</Trans>,\n\t\t\t\t\twidth: '10%',\n\t\t\t\t\twhiteSpace: 'normal',\n\t\t\t\t\tfilterable: {\n\t\t\t\t\t\tfilterType: 'text' as const,\n\t\t\t\t\t\tfilterFn: (item: NotificationTemplate, value: string) =>\n\t\t\t\t\t\t\titem.name.toLowerCase().includes(value.toLowerCase()),\n\t\t\t\t\t},\n\t\t\t\t\trender: (item: NotificationTemplate) => {\n\t\t\t\t\t\tconst {accountGroupsWithAccess} = item;\n\n\t\t\t\t\t\tif (!accountGroupsWithAccess || !accountGroupsWithAccess.length) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction getAccountGroupById(id: number) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\taccountGroups.find(accountGroup => accountGroup.id === id) ||\n\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\tdisplayName: '-',\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t} as UserGroup)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (accountGroupsWithAccess.length > 1) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MultiMenu\n\t\t\t\t\t\t\t\t\tmenuButton={<Label text={`${accountGroupsWithAccess.length} User Groups`} />}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{accountGroupsWithAccess.map(id => {\n\t\t\t\t\t\t\t\t\t\tconst accountGroup = getAccountGroupById(id);\n\t\t\t\t\t\t\t\t\t\tconst accountGroupIds = accountGroupsWithAccess.filter(\n\t\t\t\t\t\t\t\t\t\t\taccess => access !== accountGroup.id,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<MultiMenuItem key={accountGroup.id}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Label\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext={accountGroup.displayName || accountGroup.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete={() => onSaveAccess(accountGroupIds, item)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</MultiMenuItem>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</MultiMenu>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst accountGroup = getAccountGroupById(accountGroupsWithAccess[0]);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Label\n\t\t\t\t\t\t\t\t\ttext={accountGroup.displayName || accountGroup.name}\n\t\t\t\t\t\t\t\t\tonDelete={() => onEditLastAccess(item)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: null,\n\t\thasAuthorities([['DELETE_NOTIFICATION_TEMPLATE'], ['READ_ACCOUNT_GROUP']] as string[][])\n\t\t\t? {\n\t\t\t\t\tname: 'actions',\n\t\t\t\t\tlabel: '',\n\t\t\t\t\twidth: '10%',\n\t\t\t\t\talign: 'right' as const,\n\t\t\t\t\trender: (template: NotificationTemplate) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{hasAuthorities([['READ_ACCOUNT_GROUP']] as string[][]) && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\t\tonClick={() => onEditAccess(template)}\n\t\t\t\t\t\t\t\t\tdata-testid=\"edit-notification-template-access-button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<img className=\"di icon\" src={iconDark} alt=\"key\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{hasAuthorities(['DELETE_NOTIFICATION_TEMPLATE'] as string[]) && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\t\tonClick={() => onDeleteTemplate(template)}\n\t\t\t\t\t\t\t\t\tdata-testid=\"delete-notification-template-button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: null,\n\t].filter(nonNull);\n}\n","import type {NotificationTemplate} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {InfoBox} from '@deviceinsight/ng-ui-components';\n\nimport warning_icon from 'assets/svg/icon_warning_triangle.svg';\nimport {Trans, useTranslation} from 'i18n';\nimport {hasAuthorities} from 'utils/hasAuthorities';\n\ntype Props = {\n\tonCancel: () => void;\n\tonSave: (accountGroupIds: number[], template: NotificationTemplate) => Promise<void>;\n\ttemplate: NotificationTemplate;\n};\n\nfunction AccessInfoModal({onCancel, onSave, template}: Props) {\n\tconst {t} = useTranslation();\n\tconst hasAccess = hasAuthorities(['ACCESS_TO_ALL_NOTIFICATION_TEMPLATES'] as string[]);\n\tconst message = hasAccess\n\t\t? t('notificationTemplate.access.delete.authorized', {\n\t\t\t\tdefaultValue:\n\t\t\t\t\t\"You are about to remove all User Groups from a Template. Please note that for all other Users who don't have such Authorities like you (ACCESS_TO_ALL_NOTIFICATION_TEMPLATES), this Template will then be completely hidden!\",\n\t\t\t})\n\t\t: t('notificationTemplate.access.delete.unauthorized', {\n\t\t\t\tdefaultValue:\n\t\t\t\t\t\"You are about ot remove the last User Groups from a Template. Please note that you wouldn't be able to see it as you do not have the required Authorities. Please contact your Administrator.\",\n\t\t\t});\n\treturn (\n\t\t<Modal\n\t\t\tonOutsideClick={onCancel}\n\t\t\theader={\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.access.delete.modal.title\">\n\t\t\t\t\tRemove all authorised User Groups from this Template\n\t\t\t\t</Trans>\n\t\t\t}\n\t\t\tcontent={<InfoBox type={hasAccess ? 'warning' : 'error'} icon={warning_icon} message={message} />}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t{hasAccess && (\n\t\t\t\t\t\t<Button onClick={() => onSave([], template)}>\n\t\t\t\t\t\t\t<Trans i18nKey=\"general.actions.save\">Save</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t<Button onClick={() => onCancel()}>\n\t\t\t\t\t\t<Trans i18nKey=\"general.actions.cancel\">Cancel</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport default AccessInfoModal;\n","import {flatten, unionBy} from 'lodash';\nimport {type ComponentType, useCallback, useContext, useEffect, useState} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nimport {\n\tdeleteEmailTemplate,\n\tfetchEmailTemplateAccessById,\n\tfetchEmailTemplates,\n\tfetchUserGroupById,\n\ttype NotificationTemplate,\n\ttype PaginationSettings,\n\ttype UserGroup,\n\tupdateEmailTemplate,\n} from '@deviceinsight/ng-ui-api-client';\nimport {type ConfirmProps, withConfirm} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport {ReactableClientSidePaginationWithSizeSave} from 'components/reactable/ReactableClientSidePaginationWithSizeSave';\nimport {ContextInfoContext} from 'contexts/contextInfo/ContextInfoContext';\nimport {Trans} from 'i18n';\nimport {hasAuthorities} from 'utils/hasAuthorities';\nimport {nonNull} from 'utils/tsUtils';\nimport {SidebarElementsCreateButton} from '../../utils/portalAdminUtils';\nimport getColumnDefinitions from './getColumnDefinitions';\nimport AccessEditModal from './templateForm/AccessEditModal';\nimport AccessInfoModal from './templateForm/AccessInfoModal';\n\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 10,\n\tsort: {\n\t\tproperty: 'name',\n\t\tdirection: 'ASC',\n\t},\n};\n\nconst FETCHING_PARAMS = {\n\tlocale: 'null',\n\tpage: 0,\n\tsize: 2000,\n};\n\nasync function fetchEmailTemplatesWithAccesses(): Promise<NotificationTemplate[]> {\n\tconst emailTemplates = await fetchEmailTemplates(FETCHING_PARAMS);\n\treturn await Promise.all(\n\t\temailTemplates.map(async template => {\n\t\t\tconst {accountGroupIds: accountGroupsWithAccess} = await fetchEmailTemplateAccessById(template.id);\n\t\t\treturn Promise.resolve({\n\t\t\t\t...template,\n\t\t\t\taccountGroupsWithAccess,\n\t\t\t\ttype: 'email',\n\t\t\t} as NotificationTemplate);\n\t\t}),\n\t);\n}\n\nfunction TemplatesListPage({confirm}: ConfirmProps) {\n\tconst {setContextInfo} = useContext(ContextInfoContext);\n\tconst {pathname} = useLocation();\n\tconst [accountGroups, setAccountGroups] = useState<UserGroup[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [editModalVisible, setEditModalVisible] = useState<boolean>(false);\n\tconst [infoModalVisible, setInfoModalVisible] = useState<boolean>(false);\n\tconst [templates, setTemplates] = useState<NotificationTemplate[]>([]);\n\tconst [template, setTemplate] = useState<NotificationTemplate | null | undefined>();\n\tconst tooltip = (\n\t\t<Trans i18nKey=\"portalAdmin.sidebarElements.templates.create\">Create new notification template</Trans>\n\t);\n\tconst updateHeader = useCallback(\n\t\t(templates: NotificationTemplate[]) => {\n\t\t\tsetContextInfo({\n\t\t\t\ttype: 'search',\n\t\t\t\telements: templates.length,\n\t\t\t\ttotalElements: templates.length,\n\t\t\t\ttotalElementsAccurate: undefined,\n\t\t\t\tcontext: 'notificationtemplates',\n\t\t\t\tpathname,\n\t\t\t});\n\t\t},\n\t\t[pathname, setContextInfo],\n\t);\n\n\tasync function deleteTemplate(template: NotificationTemplate) {\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tconst templatesToDelete = await fetchEmailTemplates({\n\t\t\t\tname: template.name,\n\t\t\t\tpage: 0,\n\t\t\t\tsize: 2000,\n\t\t\t});\n\t\t\tawait Promise.all(templatesToDelete.map(template => deleteEmailTemplate(template.id)));\n\t\t\tconst updatedTemplates = templates.filter(tpl => tpl.name !== template.name);\n\t\t\tsetTemplates(updatedTemplates);\n\t\t\tupdateHeader(updatedTemplates);\n\t\t} catch (e) {\n\t\t\tconsole.error('error occured while trying to delete the template', e);\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.list.deleteTemplate.error\">\n\t\t\t\t\tAn error occurred while trying to delete the template\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}\n\n\tfunction handleDeleteTemplate(template: NotificationTemplate) {\n\t\tconfirm(\n\t\t\t{\n\t\t\t\tid: 'notificationTemplate.list.confirmDeleteTitle',\n\t\t\t\tdefaultValue: 'Delete template',\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'notificationTemplate.list.confirmDeleteMessage',\n\t\t\t\tdefaultValue: 'Do you really want to delete this template?',\n\t\t\t},\n\t\t).then(() => deleteTemplate(template));\n\t}\n\n\tasync function handleSaveAccess(accountGroupsWithAccess: number[], template?: NotificationTemplate): Promise<any> {\n\t\tif (!template) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetLoading(true);\n\n\t\ttry {\n\t\t\tconst templatesToUpdate = await fetchEmailTemplates({\n\t\t\t\tname: template.name,\n\t\t\t\tpage: 0,\n\t\t\t\tsize: 2000,\n\t\t\t});\n\t\t\tconst updatedTemplate = {...template, accountGroupsWithAccess};\n\t\t\tconst updatedTemplates = unionBy([updatedTemplate], templates, 'id');\n\t\t\tawait Promise.all(\n\t\t\t\ttemplatesToUpdate.map(template =>\n\t\t\t\t\tupdateEmailTemplate({\n\t\t\t\t\t\t...template,\n\t\t\t\t\t\taccountGroupsWithAccess,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst accountGroupIds = [\n\t\t\t\t...new Set(\n\t\t\t\t\tflatten(\n\t\t\t\t\t\tupdatedTemplates.map(({accountGroupsWithAccess}) => accountGroupsWithAccess).filter(Boolean),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t] as number[];\n\t\t\tconst accountGroups = await Promise.all(accountGroupIds.map(id => fetchUserGroupById(id)));\n\t\t\tsetTemplates(updatedTemplates);\n\t\t\tsetAccountGroups(accountGroups);\n\t\t\tupdateHeader(updatedTemplates);\n\t\t} catch (e) {\n\t\t\tconsole.error('error occured while trying to save access on template: ', e);\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.list.updateTemplate.error\">\n\t\t\t\t\tAn error occured while trying to save access\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t\tsetInfoModalVisible(false);\n\t\t\tsetEditModalVisible(false);\n\t\t}\n\t}\n\n\tfunction handleEditAccess(template: NotificationTemplate) {\n\t\tsetTemplate(template);\n\t\tsetEditModalVisible(true);\n\t}\n\n\tfunction handleEditLastAccess(template: NotificationTemplate) {\n\t\tsetTemplate(template);\n\t\tsetInfoModalVisible(true);\n\t}\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: It's ok\n\tuseEffect(() => {\n\t\tlet canceled = false;\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst templates = await fetchEmailTemplatesWithAccesses();\n\t\t\t\tif (canceled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetTemplates(templates);\n\t\t\t\tupdateHeader(templates);\n\n\t\t\t\tif (hasAuthorities(['READ_ACCOUNT_GROUP'] as string[])) {\n\t\t\t\t\tconst accountGroupIds = [\n\t\t\t\t\t\t...new Set(flatten(templates.map(({accountGroupsWithAccess}) => accountGroupsWithAccess))),\n\t\t\t\t\t].filter(nonNull);\n\t\t\t\t\tconst accountGroups = await Promise.all(accountGroupIds.map(id => fetchUserGroupById(id)));\n\t\t\t\t\tsetAccountGroups(accountGroups);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('error occured while trying to fetch templates: ', e);\n\t\t\t\tmessageBoxError(\n\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.list.fetchTemplates.error\">\n\t\t\t\t\t\tAn error occured while trying to fetch templates\n\t\t\t\t\t</Trans>,\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t})();\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t\tsetContextInfo();\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\treturn (\n\t\t<div className=\"template-list\">\n\t\t\t<ContentHeader\n\t\t\t\ttitle={{\n\t\t\t\t\tid: 'route.label.templates.name',\n\t\t\t\t\tdefaultValue: 'Notification Templates',\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<SidebarElementsCreateButton\n\t\t\t\ttooltip={tooltip}\n\t\t\t\tauthorities=\"WRITE_NOTIFICATION_TEMPLATE\"\n\t\t\t\tpath=\"/portaladmin/templates/create\"\n\t\t\t\tdataTestId=\"create-template-button\"\n\t\t\t/>\n\t\t\t<ReactableClientSidePaginationWithSizeSave\n\t\t\t\tcolumnDefs={getColumnDefinitions(\n\t\t\t\t\thandleDeleteTemplate,\n\t\t\t\t\thandleSaveAccess,\n\t\t\t\t\thandleEditAccess,\n\t\t\t\t\thandleEditLastAccess,\n\t\t\t\t\taccountGroups,\n\t\t\t\t)}\n\t\t\t\tuniqueItemKey={(item: NotificationTemplate) => `${item.id}`}\n\t\t\t\tpaginationSettings={INITIAL_PAGINATION_SETTINGS}\n\t\t\t\titems={templates}\n\t\t\t\tisLoading={loading}\n\t\t\t\tdata-testid=\"notification-templates-table\"\n\t\t\t\ttableName={'notificationTemplates'}\n\t\t\t/>\n\t\t\t{editModalVisible && template && (\n\t\t\t\t<AccessEditModal\n\t\t\t\t\tonCancel={() => setEditModalVisible(false)}\n\t\t\t\t\tonSave={handleSaveAccess}\n\t\t\t\t\tloading={loading}\n\t\t\t\t\ttemplate={template}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{infoModalVisible && template && (\n\t\t\t\t<AccessInfoModal\n\t\t\t\t\tonCancel={() => setInfoModalVisible(false)}\n\t\t\t\t\tonSave={handleSaveAccess}\n\t\t\t\t\ttemplate={template}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport default withConfirm(TemplatesListPage) as ComponentType;\n"],"names":["getColumnDefinitions","onDeleteTemplate","onSaveAccess","onEditAccess","onEditLastAccess","accountGroups","jsx","Trans","item","value","Link","text","subject","hasAuthorities","accountGroupsWithAccess","getAccountGroupById","id","accountGroup","MultiMenu","Label","accountGroupIds","access","MultiMenuItem","template","jsxs","Fragment","Button","iconDark","Icon","nonNull","AccessInfoModal","onCancel","onSave","t","useTranslation","hasAccess","message","Modal","InfoBox","warning_icon","INITIAL_PAGINATION_SETTINGS","FETCHING_PARAMS","fetchEmailTemplatesWithAccesses","emailTemplates","fetchEmailTemplates","fetchEmailTemplateAccessById","TemplatesListPage","confirm","setContextInfo","useContext","ContextInfoContext","pathname","useLocation","setAccountGroups","useState","loading","setLoading","editModalVisible","setEditModalVisible","infoModalVisible","setInfoModalVisible","templates","setTemplates","setTemplate","tooltip","updateHeader","useCallback","deleteTemplate","templatesToDelete","deleteEmailTemplate","updatedTemplates","tpl","e","messageBoxError","handleDeleteTemplate","handleSaveAccess","templatesToUpdate","updatedTemplate","unionBy","updateEmailTemplate","flatten","fetchUserGroupById","handleEditAccess","handleEditLastAccess","useEffect","canceled","ContentHeader","SidebarElementsCreateButton","ReactableClientSidePaginationWithSizeSave","AccessEditModal","TemplatesListPage_default","withConfirm"],"mappings":"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"}
1
+ {"version":3,"file":"TemplatesListPage-HwJpI4I0.js","sources":["../ng-ui-scale/src/modules/templates/getColumnDefinitions.tsx","../ng-ui-scale/src/modules/templates/templateForm/AccessInfoModal.tsx","../ng-ui-scale/src/modules/templates/TemplatesListPage.tsx"],"sourcesContent":["import {Link} from 'react-router-dom';\n\nimport type {NotificationTemplate, UserGroup} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon, Label} from '@deviceinsight/ng-ui-basic-components';\nimport {MultiMenu, MultiMenuItem, type ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport iconDark from 'assets/svg/icon_key.svg';\nimport {Trans} from 'i18n';\nimport {hasAuthorities} from 'utils/hasAuthorities';\nimport {nonNull} from 'utils/tsUtils';\n\nexport default function getColumnDefinitions(\n\tonDeleteTemplate: (template: NotificationTemplate) => any,\n\tonSaveAccess: (accountGroupIds: number[], template: NotificationTemplate) => any,\n\tonEditAccess: (template: NotificationTemplate) => any,\n\tonEditLastAccess: (template: NotificationTemplate) => any,\n\taccountGroups: UserGroup[],\n): Array<ReactableColumnDef<NotificationTemplate>> {\n\treturn [\n\t\t{\n\t\t\tname: 'displayName',\n\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.name\">Name</Trans>,\n\t\t\twidth: '10%',\n\t\t\tsortable: true,\n\t\t\tfilterable: {\n\t\t\t\tfilterType: 'text' as const,\n\t\t\t\tfilterFn: (item: NotificationTemplate, value: string) =>\n\t\t\t\t\t(item.displayName || item.name).toLowerCase().indexOf(value.toLowerCase()) >= 0,\n\t\t\t},\n\t\t\trender: (item: NotificationTemplate) =>\n\t\t\t\titem.id ? <Link to={`./${item.id}`}>{item.displayName || item.name}</Link> : '-',\n\t\t},\n\t\t{\n\t\t\tname: 'message',\n\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.message\">Message</Trans>,\n\t\t\twidth: '40%',\n\t\t\tsortable: true,\n\t\t\twhiteSpace: 'normal',\n\t\t\trender: ({text}: NotificationTemplate) => text,\n\t\t},\n\t\t{\n\t\t\tname: 'subject',\n\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.subject\">Subject</Trans>,\n\t\t\twidth: '20%',\n\t\t\tsortable: true,\n\t\t\twhiteSpace: 'normal',\n\t\t\trender: ({subject}: NotificationTemplate) =>\n\t\t\t\tsubject ? <span>{subject}</span> : <Trans i18nKey=\"notificationTemplates.noSubject\">None</Trans>,\n\t\t},\n\t\thasAuthorities(['READ_ACCOUNT_GROUP'] as string[])\n\t\t\t? {\n\t\t\t\t\tname: 'userGroups',\n\t\t\t\t\tlabel: <Trans i18nKey=\"notificationTemplates.columns.userGroups\">Authorised User Groups</Trans>,\n\t\t\t\t\twidth: '10%',\n\t\t\t\t\twhiteSpace: 'normal',\n\t\t\t\t\tfilterable: {\n\t\t\t\t\t\tfilterType: 'text' as const,\n\t\t\t\t\t\tfilterFn: (item: NotificationTemplate, value: string) =>\n\t\t\t\t\t\t\titem.name.toLowerCase().includes(value.toLowerCase()),\n\t\t\t\t\t},\n\t\t\t\t\trender: (item: NotificationTemplate) => {\n\t\t\t\t\t\tconst {accountGroupsWithAccess} = item;\n\n\t\t\t\t\t\tif (!accountGroupsWithAccess || !accountGroupsWithAccess.length) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction getAccountGroupById(id: number) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\taccountGroups.find(accountGroup => accountGroup.id === id) ||\n\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\tdisplayName: '-',\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t} as UserGroup)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (accountGroupsWithAccess.length > 1) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MultiMenu\n\t\t\t\t\t\t\t\t\tmenuButton={<Label text={`${accountGroupsWithAccess.length} User Groups`} />}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{accountGroupsWithAccess.map(id => {\n\t\t\t\t\t\t\t\t\t\tconst accountGroup = getAccountGroupById(id);\n\t\t\t\t\t\t\t\t\t\tconst accountGroupIds = accountGroupsWithAccess.filter(\n\t\t\t\t\t\t\t\t\t\t\taccess => access !== accountGroup.id,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<MultiMenuItem key={accountGroup.id}>\n\t\t\t\t\t\t\t\t\t\t\t\t<Label\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext={accountGroup.displayName || accountGroup.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonDelete={() => onSaveAccess(accountGroupIds, item)}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</MultiMenuItem>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</MultiMenu>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst accountGroup = getAccountGroupById(accountGroupsWithAccess[0]);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Label\n\t\t\t\t\t\t\t\t\ttext={accountGroup.displayName || accountGroup.name}\n\t\t\t\t\t\t\t\t\tonDelete={() => onEditLastAccess(item)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: null,\n\t\thasAuthorities([['DELETE_NOTIFICATION_TEMPLATE'], ['READ_ACCOUNT_GROUP']] as string[][])\n\t\t\t? {\n\t\t\t\t\tname: 'actions',\n\t\t\t\t\tlabel: '',\n\t\t\t\t\twidth: '10%',\n\t\t\t\t\talign: 'right' as const,\n\t\t\t\t\trender: (template: NotificationTemplate) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{hasAuthorities([['READ_ACCOUNT_GROUP']] as string[][]) && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\t\tonClick={() => onEditAccess(template)}\n\t\t\t\t\t\t\t\t\tdata-testid=\"edit-notification-template-access-button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<img className=\"di icon\" src={iconDark} alt=\"key\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{hasAuthorities(['DELETE_NOTIFICATION_TEMPLATE'] as string[]) && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tnaked\n\t\t\t\t\t\t\t\t\tonClick={() => onDeleteTemplate(template)}\n\t\t\t\t\t\t\t\t\tdata-testid=\"delete-notification-template-button\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: null,\n\t].filter(nonNull);\n}\n","import type {NotificationTemplate} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {InfoBox} from '@deviceinsight/ng-ui-components';\n\nimport warning_icon from 'assets/svg/icon_warning_triangle.svg';\nimport {Trans, useTranslation} from 'i18n';\nimport {hasAuthorities} from 'utils/hasAuthorities';\n\ntype Props = {\n\tonCancel: () => void;\n\tonSave: (accountGroupIds: number[], template: NotificationTemplate) => Promise<void>;\n\ttemplate: NotificationTemplate;\n};\n\nfunction AccessInfoModal({onCancel, onSave, template}: Props) {\n\tconst {t} = useTranslation();\n\tconst hasAccess = hasAuthorities(['ACCESS_TO_ALL_NOTIFICATION_TEMPLATES'] as string[]);\n\tconst message = hasAccess\n\t\t? t('notificationTemplate.access.delete.authorized', {\n\t\t\t\tdefaultValue:\n\t\t\t\t\t\"You are about to remove all User Groups from a Template. Please note that for all other Users who don't have such Authorities like you (ACCESS_TO_ALL_NOTIFICATION_TEMPLATES), this Template will then be completely hidden!\",\n\t\t\t})\n\t\t: t('notificationTemplate.access.delete.unauthorized', {\n\t\t\t\tdefaultValue:\n\t\t\t\t\t\"You are about ot remove the last User Groups from a Template. Please note that you wouldn't be able to see it as you do not have the required Authorities. Please contact your Administrator.\",\n\t\t\t});\n\treturn (\n\t\t<Modal\n\t\t\tonOutsideClick={onCancel}\n\t\t\theader={\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.access.delete.modal.title\">\n\t\t\t\t\tRemove all authorised User Groups from this Template\n\t\t\t\t</Trans>\n\t\t\t}\n\t\t\tcontent={<InfoBox type={hasAccess ? 'warning' : 'error'} icon={warning_icon} message={message} />}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t{hasAccess && (\n\t\t\t\t\t\t<Button onClick={() => onSave([], template)}>\n\t\t\t\t\t\t\t<Trans i18nKey=\"general.actions.save\">Save</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t<Button onClick={() => onCancel()}>\n\t\t\t\t\t\t<Trans i18nKey=\"general.actions.cancel\">Cancel</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t}\n\t\t/>\n\t);\n}\n\nexport default AccessInfoModal;\n","import {flatten, unionBy} from 'lodash';\nimport {type ComponentType, useCallback, useContext, useEffect, useState} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nimport {\n\tdeleteEmailTemplate,\n\tfetchEmailTemplateAccessById,\n\tfetchEmailTemplates,\n\tfetchUserGroupById,\n\ttype NotificationTemplate,\n\ttype PaginationSettings,\n\ttype UserGroup,\n\tupdateEmailTemplate,\n} from '@deviceinsight/ng-ui-api-client';\nimport {type ConfirmProps, withConfirm} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport {ReactableClientSidePaginationWithSizeSave} from 'components/reactable/ReactableClientSidePaginationWithSizeSave';\nimport {ContextInfoContext} from 'contexts/contextInfo/ContextInfoContext';\nimport {Trans} from 'i18n';\nimport {hasAuthorities} from 'utils/hasAuthorities';\nimport {nonNull} from 'utils/tsUtils';\nimport {SidebarElementsCreateButton} from '../../utils/portalAdminUtils';\nimport getColumnDefinitions from './getColumnDefinitions';\nimport AccessEditModal from './templateForm/AccessEditModal';\nimport AccessInfoModal from './templateForm/AccessInfoModal';\n\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 10,\n\tsort: {\n\t\tproperty: 'name',\n\t\tdirection: 'ASC',\n\t},\n};\n\nconst FETCHING_PARAMS = {\n\tlocale: 'null',\n\tpage: 0,\n\tsize: 2000,\n};\n\nasync function fetchEmailTemplatesWithAccesses(): Promise<NotificationTemplate[]> {\n\tconst emailTemplates = await fetchEmailTemplates(FETCHING_PARAMS);\n\treturn await Promise.all(\n\t\temailTemplates.map(async template => {\n\t\t\tconst {accountGroupIds: accountGroupsWithAccess} = await fetchEmailTemplateAccessById(template.id);\n\t\t\treturn Promise.resolve({\n\t\t\t\t...template,\n\t\t\t\taccountGroupsWithAccess,\n\t\t\t\ttype: 'email',\n\t\t\t} as NotificationTemplate);\n\t\t}),\n\t);\n}\n\nfunction TemplatesListPage({confirm}: ConfirmProps) {\n\tconst {setContextInfo} = useContext(ContextInfoContext);\n\tconst {pathname} = useLocation();\n\tconst [accountGroups, setAccountGroups] = useState<UserGroup[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [editModalVisible, setEditModalVisible] = useState<boolean>(false);\n\tconst [infoModalVisible, setInfoModalVisible] = useState<boolean>(false);\n\tconst [templates, setTemplates] = useState<NotificationTemplate[]>([]);\n\tconst [template, setTemplate] = useState<NotificationTemplate | null | undefined>();\n\tconst tooltip = (\n\t\t<Trans i18nKey=\"portalAdmin.sidebarElements.templates.create\">Create new notification template</Trans>\n\t);\n\tconst updateHeader = useCallback(\n\t\t(templates: NotificationTemplate[]) => {\n\t\t\tsetContextInfo({\n\t\t\t\ttype: 'search',\n\t\t\t\telements: templates.length,\n\t\t\t\ttotalElements: templates.length,\n\t\t\t\ttotalElementsAccurate: undefined,\n\t\t\t\tcontext: 'notificationtemplates',\n\t\t\t\tpathname,\n\t\t\t});\n\t\t},\n\t\t[pathname, setContextInfo],\n\t);\n\n\tasync function deleteTemplate(template: NotificationTemplate) {\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tconst templatesToDelete = await fetchEmailTemplates({\n\t\t\t\tname: template.name,\n\t\t\t\tpage: 0,\n\t\t\t\tsize: 2000,\n\t\t\t});\n\t\t\tawait Promise.all(templatesToDelete.map(template => deleteEmailTemplate(template.id)));\n\t\t\tconst updatedTemplates = templates.filter(tpl => tpl.name !== template.name);\n\t\t\tsetTemplates(updatedTemplates);\n\t\t\tupdateHeader(updatedTemplates);\n\t\t} catch (e) {\n\t\t\tconsole.error('error occured while trying to delete the template', e);\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.list.deleteTemplate.error\">\n\t\t\t\t\tAn error occurred while trying to delete the template\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}\n\n\tfunction handleDeleteTemplate(template: NotificationTemplate) {\n\t\tconfirm(\n\t\t\t{\n\t\t\t\tid: 'notificationTemplate.list.confirmDeleteTitle',\n\t\t\t\tdefaultValue: 'Delete template',\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'notificationTemplate.list.confirmDeleteMessage',\n\t\t\t\tdefaultValue: 'Do you really want to delete this template?',\n\t\t\t},\n\t\t).then(() => deleteTemplate(template));\n\t}\n\n\tasync function handleSaveAccess(accountGroupsWithAccess: number[], template?: NotificationTemplate): Promise<any> {\n\t\tif (!template) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetLoading(true);\n\n\t\ttry {\n\t\t\tconst templatesToUpdate = await fetchEmailTemplates({\n\t\t\t\tname: template.name,\n\t\t\t\tpage: 0,\n\t\t\t\tsize: 2000,\n\t\t\t});\n\t\t\tconst updatedTemplate = {...template, accountGroupsWithAccess};\n\t\t\tconst updatedTemplates = unionBy([updatedTemplate], templates, 'id');\n\t\t\tawait Promise.all(\n\t\t\t\ttemplatesToUpdate.map(template =>\n\t\t\t\t\tupdateEmailTemplate({\n\t\t\t\t\t\t...template,\n\t\t\t\t\t\taccountGroupsWithAccess,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst accountGroupIds = [\n\t\t\t\t...new Set(\n\t\t\t\t\tflatten(\n\t\t\t\t\t\tupdatedTemplates.map(({accountGroupsWithAccess}) => accountGroupsWithAccess).filter(Boolean),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t] as number[];\n\t\t\tconst accountGroups = await Promise.all(accountGroupIds.map(id => fetchUserGroupById(id)));\n\t\t\tsetTemplates(updatedTemplates);\n\t\t\tsetAccountGroups(accountGroups);\n\t\t\tupdateHeader(updatedTemplates);\n\t\t} catch (e) {\n\t\t\tconsole.error('error occured while trying to save access on template: ', e);\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"notificationTemplate.list.updateTemplate.error\">\n\t\t\t\t\tAn error occured while trying to save access\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t\tsetInfoModalVisible(false);\n\t\t\tsetEditModalVisible(false);\n\t\t}\n\t}\n\n\tfunction handleEditAccess(template: NotificationTemplate) {\n\t\tsetTemplate(template);\n\t\tsetEditModalVisible(true);\n\t}\n\n\tfunction handleEditLastAccess(template: NotificationTemplate) {\n\t\tsetTemplate(template);\n\t\tsetInfoModalVisible(true);\n\t}\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: It's ok\n\tuseEffect(() => {\n\t\tlet canceled = false;\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst templates = await fetchEmailTemplatesWithAccesses();\n\t\t\t\tif (canceled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetTemplates(templates);\n\t\t\t\tupdateHeader(templates);\n\n\t\t\t\tif (hasAuthorities(['READ_ACCOUNT_GROUP'] as string[])) {\n\t\t\t\t\tconst accountGroupIds = [\n\t\t\t\t\t\t...new Set(flatten(templates.map(({accountGroupsWithAccess}) => accountGroupsWithAccess))),\n\t\t\t\t\t].filter(nonNull);\n\t\t\t\t\tconst accountGroups = await Promise.all(accountGroupIds.map(id => fetchUserGroupById(id)));\n\t\t\t\t\tsetAccountGroups(accountGroups);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('error occured while trying to fetch templates: ', e);\n\t\t\t\tmessageBoxError(\n\t\t\t\t\t<Trans i18nKey=\"notificationTemplate.list.fetchTemplates.error\">\n\t\t\t\t\t\tAn error occured while trying to fetch templates\n\t\t\t\t\t</Trans>,\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t})();\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t\tsetContextInfo();\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\treturn (\n\t\t<div className=\"template-list\">\n\t\t\t<ContentHeader\n\t\t\t\ttitle={{\n\t\t\t\t\tid: 'route.label.templates.name',\n\t\t\t\t\tdefaultValue: 'Notification Templates',\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<SidebarElementsCreateButton\n\t\t\t\ttooltip={tooltip}\n\t\t\t\tauthorities=\"WRITE_NOTIFICATION_TEMPLATE\"\n\t\t\t\tpath=\"/portaladmin/templates/create\"\n\t\t\t\tdataTestId=\"create-template-button\"\n\t\t\t/>\n\t\t\t<ReactableClientSidePaginationWithSizeSave\n\t\t\t\tcolumnDefs={getColumnDefinitions(\n\t\t\t\t\thandleDeleteTemplate,\n\t\t\t\t\thandleSaveAccess,\n\t\t\t\t\thandleEditAccess,\n\t\t\t\t\thandleEditLastAccess,\n\t\t\t\t\taccountGroups,\n\t\t\t\t)}\n\t\t\t\tuniqueItemKey={(item: NotificationTemplate) => `${item.id}`}\n\t\t\t\tpaginationSettings={INITIAL_PAGINATION_SETTINGS}\n\t\t\t\titems={templates}\n\t\t\t\tisLoading={loading}\n\t\t\t\tdata-testid=\"notification-templates-table\"\n\t\t\t\ttableName={'notificationTemplates'}\n\t\t\t/>\n\t\t\t{editModalVisible && template && (\n\t\t\t\t<AccessEditModal\n\t\t\t\t\tonCancel={() => setEditModalVisible(false)}\n\t\t\t\t\tonSave={handleSaveAccess}\n\t\t\t\t\tloading={loading}\n\t\t\t\t\ttemplate={template}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{infoModalVisible && template && (\n\t\t\t\t<AccessInfoModal\n\t\t\t\t\tonCancel={() => setInfoModalVisible(false)}\n\t\t\t\t\tonSave={handleSaveAccess}\n\t\t\t\t\ttemplate={template}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport default withConfirm(TemplatesListPage) as ComponentType;\n"],"names":["getColumnDefinitions","onDeleteTemplate","onSaveAccess","onEditAccess","onEditLastAccess","accountGroups","jsx","Trans","item","value","Link","text","subject","hasAuthorities","accountGroupsWithAccess","getAccountGroupById","id","accountGroup","MultiMenu","Label","accountGroupIds","access","MultiMenuItem","template","jsxs","Fragment","Button","iconDark","Icon","nonNull","AccessInfoModal","onCancel","onSave","t","useTranslation","hasAccess","message","Modal","InfoBox","warning_icon","INITIAL_PAGINATION_SETTINGS","FETCHING_PARAMS","fetchEmailTemplatesWithAccesses","emailTemplates","fetchEmailTemplates","fetchEmailTemplateAccessById","TemplatesListPage","confirm","setContextInfo","useContext","ContextInfoContext","pathname","useLocation","setAccountGroups","useState","loading","setLoading","editModalVisible","setEditModalVisible","infoModalVisible","setInfoModalVisible","templates","setTemplates","setTemplate","tooltip","updateHeader","useCallback","deleteTemplate","templatesToDelete","deleteEmailTemplate","updatedTemplates","tpl","e","messageBoxError","handleDeleteTemplate","handleSaveAccess","templatesToUpdate","updatedTemplate","unionBy","updateEmailTemplate","flatten","fetchUserGroupById","handleEditAccess","handleEditLastAccess","useEffect","canceled","ContentHeader","SidebarElementsCreateButton","ReactableClientSidePaginationWithSizeSave","AccessEditModal","TemplatesListPage_default","withConfirm"],"mappings":"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"}
@@ -3,9 +3,9 @@ import I from "axios";
3
3
  import { useState as A, useEffect as S } from "react";
4
4
  import { Modal as w, Button as G, Icon as N, useConfirm as K, SpinnerContainer as V } from "@deviceinsight/ng-ui-basic-components";
5
5
  import { messageBoxError as _, ReactableWithClientSidePagination as L, ContentHeader as v } from "@deviceinsight/ng-ui-components";
6
- import { u as M, a as u, P as R, bO as k, bP as H, am as b } from "./setTitle-CjnK8p-J.js";
7
- import { useForm as O, Controller as y } from "react-hook-form";
8
- import { getInitialAccountGroupAssignmentRules as q, deleteInitialAccountGroupAssignmentRule as x, updateInitialAccountGroupAssignmentRule as D, createInitialAccountGroupAssignmentRule as F } from "@deviceinsight/ng-ui-api-client";
6
+ import { u as M, a as u, Q as R, bP as k, bQ as H, an as b } from "./setTitle-Dij-z9p9.js";
7
+ import { useForm as q, Controller as y } from "react-hook-form";
8
+ import { getInitialAccountGroupAssignmentRules as x, deleteInitialAccountGroupAssignmentRule as D, updateInitialAccountGroupAssignmentRule as O, createInitialAccountGroupAssignmentRule as F } from "@deviceinsight/ng-ui-api-client";
9
9
  function P(t) {
10
10
  if (I.isAxiosError(t) && t.response?.data) {
11
11
  const { fieldErrors: n } = t.response.data;
@@ -19,7 +19,7 @@ function C({ onSubmit: t, onClose: n, value: r }) {
19
19
  formState: { isSubmitting: p },
20
20
  control: m,
21
21
  setError: g
22
- } = O({
22
+ } = q({
23
23
  defaultValues: r ?? { name: "", displayName: "", acceptedEmailHostname: "" }
24
24
  }), { t: c } = M(), d = {
25
25
  required: c("userGroupAssignments.ruleModal.validation.required", {
@@ -190,12 +190,12 @@ function B({ onEditRuleClick: t, onDeleteRuleClick: n, rules: r }) {
190
190
  }
191
191
  );
192
192
  }
193
- function z() {
193
+ function Q() {
194
194
  const [t, n] = A([]), [r, l] = A(!1), [p, m] = A(null);
195
195
  S(() => {
196
196
  l(!0);
197
197
  let s = !1;
198
- return q().then((a) => {
198
+ return x().then((a) => {
199
199
  s || (n(a), l(!1));
200
200
  }).catch((a) => {
201
201
  s || (m(a), l(!1));
@@ -215,7 +215,7 @@ function z() {
215
215
  async function c(s, a) {
216
216
  try {
217
217
  l(!0);
218
- const i = await D(s, a);
218
+ const i = await O(s, a);
219
219
  n(t.map((o) => o.name === s ? i : o));
220
220
  } finally {
221
221
  l(!1);
@@ -223,7 +223,7 @@ function z() {
223
223
  }
224
224
  async function d(s) {
225
225
  try {
226
- l(!0), await x(s), n(t.filter((a) => a.name !== s));
226
+ l(!0), await D(s), n(t.filter((a) => a.name !== s));
227
227
  } finally {
228
228
  l(!1);
229
229
  }
@@ -231,7 +231,7 @@ function z() {
231
231
  return { rules: t, isLoading: r, error: p, createRule: g, editRule: c, deleteRule: d };
232
232
  }
233
233
  function te() {
234
- const { isLoading: t, rules: n, error: r, createRule: l, editRule: p, deleteRule: m } = z(), [g, c] = A(!1), [d, s] = A(null), a = K(), { t: i } = M();
234
+ const { isLoading: t, rules: n, error: r, createRule: l, editRule: p, deleteRule: m } = Q(), [g, c] = A(!1), [d, s] = A(null), a = K(), { t: i } = M();
235
235
  S(() => {
236
236
  r && I.isAxiosError(r) && (_(
237
237
  /* @__PURE__ */ e(u, { i18nKey: "userGroupAssignments.fetchError", children: "An error occurred while loading the initial user group assignment rules" })
@@ -294,4 +294,4 @@ function te() {
294
294
  export {
295
295
  te as default
296
296
  };
297
- //# sourceMappingURL=UserGroupAssignments-DTXRBp_V.js.map
297
+ //# sourceMappingURL=UserGroupAssignments-2ZrZXU8K.js.map