@deviceinsight/ng-ui-scale-lib 10.1.1 → 10.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AccessEditModal--CrrHDx-.js → AccessEditModal-kndFZDt-.js} +2 -2
- package/dist/{AccessEditModal--CrrHDx-.js.map → AccessEditModal-kndFZDt-.js.map} +1 -1
- package/dist/{BundleManagementContainer-pF44tpPR.js → BundleManagementContainer-vMlhg6fJ.js} +2 -2
- package/dist/{BundleManagementContainer-pF44tpPR.js.map → BundleManagementContainer-vMlhg6fJ.js.map} +1 -1
- package/dist/{BundlesContainer-CZ70n2vt.js → BundlesContainer-CaC__bAh.js} +3 -3
- package/dist/{BundlesContainer-CZ70n2vt.js.map → BundlesContainer-CaC__bAh.js.map} +1 -1
- package/dist/{DatapointImport-D5MqlPlb.js → DatapointImport-Cq8cifAI.js} +2 -2
- package/dist/{DatapointImport-D5MqlPlb.js.map → DatapointImport-Cq8cifAI.js.map} +1 -1
- package/dist/{FileUploadInput-gnfjNZsT.js → FileUploadInput-DSyHVZUT.js} +2 -2
- package/dist/{FileUploadInput-gnfjNZsT.js.map → FileUploadInput-DSyHVZUT.js.map} +1 -1
- package/dist/{Files-B7r5BhB0.js → Files-CJ7EHXzr.js} +3 -3
- package/dist/{Files-B7r5BhB0.js.map → Files-CJ7EHXzr.js.map} +1 -1
- package/dist/{GlobalPowerBiReports-BFCqFXrG.js → GlobalPowerBiReports-PsiWcApU.js} +2 -2
- package/dist/{GlobalPowerBiReports-BFCqFXrG.js.map → GlobalPowerBiReports-PsiWcApU.js.map} +1 -1
- package/dist/{JsonSettingWidget-Dmoshz7m.js → JsonSettingWidget-CpZmTuBe.js} +2 -2
- package/dist/{JsonSettingWidget-Dmoshz7m.js.map → JsonSettingWidget-CpZmTuBe.js.map} +1 -1
- package/dist/{LicensesEditPage-C8vTjupQ.js → LicensesEditPage-CwGor2gV.js} +2 -2
- package/dist/{LicensesEditPage-C8vTjupQ.js.map → LicensesEditPage-CwGor2gV.js.map} +1 -1
- package/dist/{LicensesList-yByygj9U.js → LicensesList-DWQlVNdR.js} +2 -2
- package/dist/{LicensesList-yByygj9U.js.map → LicensesList-DWQlVNdR.js.map} +1 -1
- package/dist/{PropertiesEditPage-W9i-93un.js → PropertiesEditPage-C4jjCoPp.js} +2 -2
- package/dist/{PropertiesEditPage-W9i-93un.js.map → PropertiesEditPage-C4jjCoPp.js.map} +1 -1
- package/dist/{PropertiesList-BoqIna7m.js → PropertiesList-CBLvLopM.js} +2 -2
- package/dist/{PropertiesList-BoqIna7m.js.map → PropertiesList-CBLvLopM.js.map} +1 -1
- package/dist/{TemplateEditPage-D9OFIKqk.js → TemplateEditPage-d-3_n4YW.js} +4 -4
- package/dist/{TemplateEditPage-D9OFIKqk.js.map → TemplateEditPage-d-3_n4YW.js.map} +1 -1
- package/dist/{TemplateTextInput-prp5cWrV.js → TemplateTextInput-CQ6XJiql.js} +2 -2
- package/dist/{TemplateTextInput-prp5cWrV.js.map → TemplateTextInput-CQ6XJiql.js.map} +1 -1
- package/dist/{TemplatesListPage-7VM9CVDI.js → TemplatesListPage-roTvuqft.js} +3 -3
- package/dist/{TemplatesListPage-7VM9CVDI.js.map → TemplatesListPage-roTvuqft.js.map} +1 -1
- package/dist/{UserGroupAssignments-Ce4pvexW.js → UserGroupAssignments-DTXRBp_V.js} +2 -2
- package/dist/{UserGroupAssignments-Ce4pvexW.js.map → UserGroupAssignments-DTXRBp_V.js.map} +1 -1
- package/dist/{UserGroupTheme-CXQyYGco.js → UserGroupTheme-CAHBWb9Q.js} +2 -2
- package/dist/{UserGroupTheme-CXQyYGco.js.map → UserGroupTheme-CAHBWb9Q.js.map} +1 -1
- package/dist/api.d.ts +7 -6
- package/dist/api.js +2 -2
- package/dist/index.js +1473 -1444
- package/dist/index.js.map +1 -1
- package/dist/{setTitle-DZyXA3i8.js → setTitle-CjnK8p-J.js} +6289 -6194
- package/dist/setTitle-CjnK8p-J.js.map +1 -0
- package/dist/style.css +1 -1
- package/package.json +14 -13
- package/dist/setTitle-DZyXA3i8.js.map +0 -1
|
@@ -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-
|
|
6
|
+
import { X as b } from "./setTitle-CjnK8p-J.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-
|
|
45
|
+
//# sourceMappingURL=TemplateTextInput-CQ6XJiql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateTextInput-
|
|
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;"}
|
|
@@ -5,9 +5,9 @@ import { Link as Y, useLocation as $ } from "react-router-dom";
|
|
|
5
5
|
import { fetchUserGroupById as D, fetchEmailTemplates as L, fetchEmailTemplateAccessById as q, updateEmailTemplate as J, deleteEmailTemplate as Q } from "@deviceinsight/ng-ui-api-client";
|
|
6
6
|
import { Label as S, Button as w, Icon as X, Modal as Z, 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-
|
|
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";
|
|
9
9
|
import "react-i18next";
|
|
10
|
-
import { A as ue } from "./AccessEditModal
|
|
10
|
+
import { A as ue } from "./AccessEditModal-kndFZDt-.js";
|
|
11
11
|
function de(r, s, c, h, m) {
|
|
12
12
|
return [
|
|
13
13
|
{
|
|
@@ -327,4 +327,4 @@ const _e = ee(ye);
|
|
|
327
327
|
export {
|
|
328
328
|
_e as default
|
|
329
329
|
};
|
|
330
|
-
//# sourceMappingURL=TemplatesListPage-
|
|
330
|
+
//# sourceMappingURL=TemplatesListPage-roTvuqft.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplatesListPage-7VM9CVDI.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-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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"}
|
|
@@ -3,7 +3,7 @@ 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-
|
|
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
7
|
import { useForm as O, Controller as y } from "react-hook-form";
|
|
8
8
|
import { getInitialAccountGroupAssignmentRules as q, deleteInitialAccountGroupAssignmentRule as x, updateInitialAccountGroupAssignmentRule as D, createInitialAccountGroupAssignmentRule as F } from "@deviceinsight/ng-ui-api-client";
|
|
9
9
|
function P(t) {
|
|
@@ -294,4 +294,4 @@ function te() {
|
|
|
294
294
|
export {
|
|
295
295
|
te as default
|
|
296
296
|
};
|
|
297
|
-
//# sourceMappingURL=UserGroupAssignments-
|
|
297
|
+
//# sourceMappingURL=UserGroupAssignments-DTXRBp_V.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserGroupAssignments-Ce4pvexW.js","sources":["../ng-ui-scale/src/modules/userGroupAssignments/EditUserGroupAssignmentsRuleModal.tsx","../ng-ui-scale/src/modules/userGroupAssignments/UserGroupAssignmentsTable.tsx","../ng-ui-scale/src/modules/userGroupAssignments/useUserGroupAssignmentRules.ts","../ng-ui-scale/src/modules/userGroupAssignments/UserGroupAssignments.tsx"],"sourcesContent":["import axios from 'axios';\nimport {Controller, useForm} from 'react-hook-form';\n\nimport type {InitialAccountGroupAssignmentRule} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {UserGroupSelectInput} from 'components/inputs/UserGroupSelectInput';\nimport {Trans, useTranslation} from 'i18n';\n\ntype Props = {\n\tonSubmit: (rule: InitialAccountGroupAssignmentRule) => Promise<void>;\n\tonClose: () => void;\n\tvalue?: InitialAccountGroupAssignmentRule;\n};\n\ntype ErrorResponse = {\n\tfieldErrors?: Array<{field: string}>;\n};\n\nfunction parseValidationError(error: unknown): string[] | undefined {\n\tif (axios.isAxiosError(error) && error.response?.data) {\n\t\tconst {fieldErrors} = error.response.data as ErrorResponse;\n\t\tif (fieldErrors) {\n\t\t\treturn fieldErrors.map(({field}) => field);\n\t\t}\n\t}\n}\n\nexport function EditUserGroupAssignmentsRuleModal({onSubmit, onClose, value}: Props) {\n\tconst {\n\t\thandleSubmit,\n\t\tformState: {isSubmitting},\n\t\tcontrol,\n\t\tsetError,\n\t} = useForm<InitialAccountGroupAssignmentRule>({\n\t\tdefaultValues: value ?? {name: '', displayName: '', acceptedEmailHostname: ''},\n\t});\n\tconst {t} = useTranslation();\n\n\tconst required = {\n\t\trequired: t('userGroupAssignments.ruleModal.validation.required', {\n\t\t\tdefaultValue: 'Required field',\n\t\t}),\n\t};\n\n\tconst submit = handleSubmit(async rule => {\n\t\ttry {\n\t\t\tawait onSubmit(rule);\n\t\t} catch (error: unknown) {\n\t\t\tconst invalidFields = parseValidationError(error);\n\t\t\tif (invalidFields) {\n\t\t\t\tfor (const field of invalidFields) {\n\t\t\t\t\tsetError(field as keyof InitialAccountGroupAssignmentRule, {\n\t\t\t\t\t\tmessage: t('userGroupAssignments.ruleModal.validation.invalid', {\n\t\t\t\t\t\t\tdefaultValue: 'Invalid value',\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (axios.isAxiosError(error)) {\n\t\t\t\tmessageBoxError(\n\t\t\t\t\terror.response?.data?.message ??\n\t\t\t\t\t\tt('userGroupAssignments.ruleModal.validation.unknownError', {\n\t\t\t\t\t\t\tdefaultValue: 'An error occurred',\n\t\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn (\n\t\t<Modal\n\t\t\twidth={500}\n\t\t\theader={\n\t\t\t\tvalue ? (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.editTitle\">Edit Rule</Trans>\n\t\t\t\t) : (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.createTitle\">Create Rule</Trans>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcontent={\n\t\t\t\t<div className=\"rule-modal\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.info\">\n\t\t\t\t\t\t\tRules regulate from which e-mail addresses (hostnames) logins will be accepted. Users\n\t\t\t\t\t\t\t{`'`} Rights will finally depend on the User Group they are assigned to.\n\t\t\t\t\t\t</Trans>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"userGroupAssignments.ruleModal.name\">Name</Trans>}\n\t\t\t\t\t\t\t\tdata-testid=\"nameField\"\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\trequired\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\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"displayName\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"userGroupAssignments.ruleModal.displayName\">Display Name</Trans>}\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\tdata-testid=\"displayNameField\"\n\t\t\t\t\t\t\t\trequired\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\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"acceptedEmailHostname\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.acceptedEmailHostname\">\n\t\t\t\t\t\t\t\t\t\tE-Mail Hostname\n\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\tdata-testid=\"acceptedEmailHostnameField\"\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<hr />\n\t\t\t\t\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"accountGroupId\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<UserGroupSelectInput\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.accountGroupId\">\n\t\t\t\t\t\t\t\t\t\tin Target User Group\n\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdata-testid=\"accountGroupIdField\"\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\trequired\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</div>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t<Button primary onClick={submit} disabled={isSubmitting}>\n\t\t\t\t\t\t<Trans i18nKey=\"general.actions.apply\">Apply</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={onClose} disabled={isSubmitting}>\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","import type {InitialAccountGroupAssignmentRule} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport {\n\ttype PaginationSettings,\n\ttype ReactableColumnDef,\n\tReactableWithClientSidePagination,\n} from '@deviceinsight/ng-ui-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {UserGroupName} from 'components/usergroups/UserGroupName';\n\ntype Props = {\n\trules: InitialAccountGroupAssignmentRule[];\n\tonEditRuleClick: (rule: InitialAccountGroupAssignmentRule) => void;\n\tonDeleteRuleClick: (ruleName: string) => void;\n};\n\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 10,\n\tsort: {direction: 'ASC', property: 'name'},\n};\n\nexport const createColumnDefs = (\n\tonEdit: (rule: InitialAccountGroupAssignmentRule) => void,\n\tonRemove: (ruleName: string) => void,\n): Array<ReactableColumnDef<InitialAccountGroupAssignmentRule>> => [\n\t{\n\t\tname: 'name',\n\t\tsortable: true,\n\t\tlabel: {id: 'userGroupAssignments.col.name', defaultValue: 'Name'},\n\t\trender: ({name}: InitialAccountGroupAssignmentRule) => name,\n\t},\n\t{\n\t\tname: 'displayName',\n\t\tsortable: true,\n\t\tlabel: {id: 'userGroupAssignments.col.displayName', defaultValue: 'Display Name'},\n\t\trender: ({displayName}: InitialAccountGroupAssignmentRule) => displayName,\n\t},\n\t{\n\t\tname: 'acceptedEmailHostname',\n\t\tsortable: true,\n\t\tlabel: {id: 'userGroupAssignments.col.acceptedEmailHostname', defaultValue: 'Accepted Email Hostname'},\n\t\trender: ({acceptedEmailHostname}: InitialAccountGroupAssignmentRule) => acceptedEmailHostname,\n\t},\n\t{\n\t\tname: 'accountGroup',\n\t\tsortable: false,\n\t\tlabel: {id: 'userGroupAssignments.col.accountGroup', defaultValue: 'Account Group'},\n\t\trender: ({accountGroupId}: InitialAccountGroupAssignmentRule) => <UserGroupName id={accountGroupId} />,\n\t},\n\t{\n\t\tname: 'actions',\n\t\tsortable: true,\n\t\tlabel: '',\n\t\twidth: '1%',\n\t\trender: (item: InitialAccountGroupAssignmentRule) => (\n\t\t\t<>\n\t\t\t\t<HasAuthorities authorities={['WRITE_INITIAL_ACCOUNT_GROUP_ASSIGNMENT_RULE']}>\n\t\t\t\t\t<Button naked onClick={() => onEdit(item)} data-testid=\"edit-rule-button\">\n\t\t\t\t\t\t<Icon edit />\n\t\t\t\t\t</Button>\n\t\t\t\t</HasAuthorities>\n\t\t\t\t<HasAuthorities authorities={['DELETE_INITIAL_ACCOUNT_GROUP_ASSIGNMENT_RULE']}>\n\t\t\t\t\t<Button naked onClick={() => onRemove(item.name)} data-testid=\"delete-rule-button\">\n\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t</Button>\n\t\t\t\t</HasAuthorities>\n\t\t\t</>\n\t\t),\n\t},\n];\n\nexport function UserGroupAssignmentsTable({onEditRuleClick, onDeleteRuleClick, rules}: Props) {\n\treturn (\n\t\t<ReactableWithClientSidePagination\n\t\t\tcolumnDefs={createColumnDefs(onEditRuleClick, onDeleteRuleClick)}\n\t\t\tuniqueItemKey={item => item.name}\n\t\t\tpaginationSettings={INITIAL_PAGINATION_SETTINGS}\n\t\t\titems={rules}\n\t\t\tisLoading={false}\n\t\t\tdata-testid=\"user-group-assignments-table\"\n\t\t\ttableName={'userGroupAssignments'}\n\t\t/>\n\t);\n}\n","import {useEffect, useState} from 'react';\n\nimport {\n\tcreateInitialAccountGroupAssignmentRule,\n\tdeleteInitialAccountGroupAssignmentRule,\n\tgetInitialAccountGroupAssignmentRules,\n\ttype InitialAccountGroupAssignmentRule,\n\tupdateInitialAccountGroupAssignmentRule,\n} from '@deviceinsight/ng-ui-api-client';\n\ntype UseUserGroupAssignmentRules = {\n\trules: InitialAccountGroupAssignmentRule[];\n\tisLoading: boolean;\n\terror: unknown;\n\tcreateRule: (rule: InitialAccountGroupAssignmentRule) => Promise<void>;\n\teditRule: (ruleName: string, rule: InitialAccountGroupAssignmentRule) => Promise<void>;\n\tdeleteRule: (ruleName: string) => Promise<void>;\n};\n\nexport function useUserGroupAssignmentRules(): UseUserGroupAssignmentRules {\n\tconst [rules, setRules] = useState<InitialAccountGroupAssignmentRule[]>([]);\n\tconst [isLoading, setIsLoading] = useState<boolean>(false);\n\tconst [error, setError] = useState<unknown>(null);\n\n\tuseEffect(() => {\n\t\tsetIsLoading(true);\n\t\tlet canceled = false;\n\n\t\tgetInitialAccountGroupAssignmentRules()\n\t\t\t.then(rules => {\n\t\t\t\tif (!canceled) {\n\t\t\t\t\tsetRules(rules);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tif (!canceled) {\n\t\t\t\t\tsetError(error);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t};\n\t}, []);\n\n\tasync function createRule(rule: InitialAccountGroupAssignmentRule) {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tconst createdRule = await createInitialAccountGroupAssignmentRule(rule);\n\t\t\tsetRules([...rules, createdRule]);\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\tasync function editRule(name: string, rule: InitialAccountGroupAssignmentRule) {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tconst updatedRule = await updateInitialAccountGroupAssignmentRule(name, rule);\n\t\t\tsetRules(rules.map(r => (r.name === name ? updatedRule : r)));\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\tasync function deleteRule(name: string) {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tawait deleteInitialAccountGroupAssignmentRule(name);\n\t\t\tsetRules(rules.filter(r => r.name !== name));\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\treturn {rules, isLoading, error, createRule, editRule, deleteRule};\n}\n","import axios from 'axios';\nimport {useEffect, useState} from 'react';\n\nimport type {InitialAccountGroupAssignmentRule} from '@deviceinsight/ng-ui-api-client';\nimport {Button, SpinnerContainer, useConfirm} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {Trans, useTranslation} from 'i18n';\nimport {EditUserGroupAssignmentsRuleModal} from './EditUserGroupAssignmentsRuleModal';\nimport {UserGroupAssignmentsTable} from './UserGroupAssignmentsTable';\nimport {useUserGroupAssignmentRules} from './useUserGroupAssignmentRules';\nimport './UserGroupAssignments.scss';\n\nexport default function UserGroupAssignments() {\n\tconst {isLoading, rules, error, createRule, editRule, deleteRule} = useUserGroupAssignmentRules();\n\tconst [createModalOpen, setCreateModalOpen] = useState(false);\n\tconst [editModalValue, setEditModalValue] = useState<InitialAccountGroupAssignmentRule | null>(null);\n\tconst confirm = useConfirm();\n\tconst {t} = useTranslation();\n\n\tuseEffect(() => {\n\t\tif (error && axios.isAxiosError(error)) {\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"userGroupAssignments.fetchError\">\n\t\t\t\t\tAn error occurred while loading the initial user group assignment rules\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t\tconsole.error('Error loading initial user group assignment rules', error);\n\t\t}\n\t}, [error]);\n\n\tasync function handleCreateRule(rule: InitialAccountGroupAssignmentRule) {\n\t\tawait createRule(rule);\n\t\tsetCreateModalOpen(false);\n\t}\n\n\tasync function handleEditRule(rule: InitialAccountGroupAssignmentRule) {\n\t\tif (editModalValue) {\n\t\t\tawait editRule(editModalValue.name, rule);\n\t\t\tsetEditModalValue(null);\n\t\t}\n\t}\n\n\tasync function handleDeleteRule(ruleName: string) {\n\t\tif (\n\t\t\tawait confirm({\n\t\t\t\ttitle: t('userGroupAssignments.deleteConfirmTitle', {defaultValue: 'Delete Rule'}),\n\t\t\t\tmessage: t('userGroupAssignments.deleteConfirm', {\n\t\t\t\t\tdefaultValue: 'Do you really want to delete the rule?',\n\t\t\t\t}),\n\t\t\t})\n\t\t) {\n\t\t\tawait deleteRule(ruleName);\n\t\t}\n\t}\n\treturn (\n\t\t<div className=\"di user-group-assignments\">\n\t\t\t<SpinnerContainer show={isLoading} data-testid=\"spinner-container\">\n\t\t\t\t<ContentHeader\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'route.label.userGroupAssignments.name',\n\t\t\t\t\t\tdefaultValue: 'User Group Assignments',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\n\t\t\t\t{!isLoading && !!error && (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.fetchError\">\n\t\t\t\t\t\tAn error occurred while loading the initial user group assignment rules\n\t\t\t\t\t</Trans>\n\t\t\t\t)}\n\n\t\t\t\t{!isLoading && !error && rules.length === 0 && (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.emptyList\">\n\t\t\t\t\t\tNo initial user group assignment rules available yet.\n\t\t\t\t\t</Trans>\n\t\t\t\t)}\n\n\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t<UserGroupAssignmentsTable\n\t\t\t\t\t\trules={rules}\n\t\t\t\t\t\tonEditRuleClick={setEditModalValue}\n\t\t\t\t\t\tonDeleteRuleClick={handleDeleteRule}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<HasAuthorities authorities={['WRITE_INITIAL_ACCOUNT_GROUP_ASSIGNMENT_RULE']}>\n\t\t\t\t\t<div className=\"footer\">\n\t\t\t\t\t\t<Button data-testid=\"create-rule-button\" onClick={() => setCreateModalOpen(true)}>\n\t\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.createRule\">Create Rule</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</HasAuthorities>\n\t\t\t</SpinnerContainer>\n\n\t\t\t{createModalOpen && (\n\t\t\t\t<EditUserGroupAssignmentsRuleModal\n\t\t\t\t\tonClose={() => setCreateModalOpen(false)}\n\t\t\t\t\tonSubmit={handleCreateRule}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{editModalValue && (\n\t\t\t\t<EditUserGroupAssignmentsRuleModal\n\t\t\t\t\tonClose={() => setEditModalValue(null)}\n\t\t\t\t\tonSubmit={handleEditRule}\n\t\t\t\t\tvalue={editModalValue}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"names":["parseValidationError","error","axios","fieldErrors","field","EditUserGroupAssignmentsRuleModal","onSubmit","onClose","value","handleSubmit","isSubmitting","control","setError","useForm","t","useTranslation","required","submit","rule","invalidFields","messageBoxError","jsx","Modal","Trans","jsxs","Controller","_","inputProps","TextInput","UserGroupSelectInput","Fragment","Button","INITIAL_PAGINATION_SETTINGS","createColumnDefs","onEdit","onRemove","name","displayName","acceptedEmailHostname","accountGroupId","UserGroupName","item","HasAuthorities","Icon","UserGroupAssignmentsTable","onEditRuleClick","onDeleteRuleClick","rules","ReactableWithClientSidePagination","useUserGroupAssignmentRules","setRules","useState","isLoading","setIsLoading","useEffect","canceled","getInitialAccountGroupAssignmentRules","createRule","createdRule","createInitialAccountGroupAssignmentRule","editRule","updatedRule","updateInitialAccountGroupAssignmentRule","r","deleteRule","deleteInitialAccountGroupAssignmentRule","UserGroupAssignments","createModalOpen","setCreateModalOpen","editModalValue","setEditModalValue","confirm","useConfirm","handleCreateRule","handleEditRule","handleDeleteRule","ruleName","SpinnerContainer","ContentHeader"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserGroupAssignments-DTXRBp_V.js","sources":["../ng-ui-scale/src/modules/userGroupAssignments/EditUserGroupAssignmentsRuleModal.tsx","../ng-ui-scale/src/modules/userGroupAssignments/UserGroupAssignmentsTable.tsx","../ng-ui-scale/src/modules/userGroupAssignments/useUserGroupAssignmentRules.ts","../ng-ui-scale/src/modules/userGroupAssignments/UserGroupAssignments.tsx"],"sourcesContent":["import axios from 'axios';\nimport {Controller, useForm} from 'react-hook-form';\n\nimport type {InitialAccountGroupAssignmentRule} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Modal} from '@deviceinsight/ng-ui-basic-components';\nimport {messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport TextInput from 'components/inputs/textInput/TextInput';\nimport {UserGroupSelectInput} from 'components/inputs/UserGroupSelectInput';\nimport {Trans, useTranslation} from 'i18n';\n\ntype Props = {\n\tonSubmit: (rule: InitialAccountGroupAssignmentRule) => Promise<void>;\n\tonClose: () => void;\n\tvalue?: InitialAccountGroupAssignmentRule;\n};\n\ntype ErrorResponse = {\n\tfieldErrors?: Array<{field: string}>;\n};\n\nfunction parseValidationError(error: unknown): string[] | undefined {\n\tif (axios.isAxiosError(error) && error.response?.data) {\n\t\tconst {fieldErrors} = error.response.data as ErrorResponse;\n\t\tif (fieldErrors) {\n\t\t\treturn fieldErrors.map(({field}) => field);\n\t\t}\n\t}\n}\n\nexport function EditUserGroupAssignmentsRuleModal({onSubmit, onClose, value}: Props) {\n\tconst {\n\t\thandleSubmit,\n\t\tformState: {isSubmitting},\n\t\tcontrol,\n\t\tsetError,\n\t} = useForm<InitialAccountGroupAssignmentRule>({\n\t\tdefaultValues: value ?? {name: '', displayName: '', acceptedEmailHostname: ''},\n\t});\n\tconst {t} = useTranslation();\n\n\tconst required = {\n\t\trequired: t('userGroupAssignments.ruleModal.validation.required', {\n\t\t\tdefaultValue: 'Required field',\n\t\t}),\n\t};\n\n\tconst submit = handleSubmit(async rule => {\n\t\ttry {\n\t\t\tawait onSubmit(rule);\n\t\t} catch (error: unknown) {\n\t\t\tconst invalidFields = parseValidationError(error);\n\t\t\tif (invalidFields) {\n\t\t\t\tfor (const field of invalidFields) {\n\t\t\t\t\tsetError(field as keyof InitialAccountGroupAssignmentRule, {\n\t\t\t\t\t\tmessage: t('userGroupAssignments.ruleModal.validation.invalid', {\n\t\t\t\t\t\t\tdefaultValue: 'Invalid value',\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (axios.isAxiosError(error)) {\n\t\t\t\tmessageBoxError(\n\t\t\t\t\terror.response?.data?.message ??\n\t\t\t\t\t\tt('userGroupAssignments.ruleModal.validation.unknownError', {\n\t\t\t\t\t\t\tdefaultValue: 'An error occurred',\n\t\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn (\n\t\t<Modal\n\t\t\twidth={500}\n\t\t\theader={\n\t\t\t\tvalue ? (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.editTitle\">Edit Rule</Trans>\n\t\t\t\t) : (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.createTitle\">Create Rule</Trans>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcontent={\n\t\t\t\t<div className=\"rule-modal\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.info\">\n\t\t\t\t\t\t\tRules regulate from which e-mail addresses (hostnames) logins will be accepted. Users\n\t\t\t\t\t\t\t{`'`} Rights will finally depend on the User Group they are assigned to.\n\t\t\t\t\t\t</Trans>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"userGroupAssignments.ruleModal.name\">Name</Trans>}\n\t\t\t\t\t\t\t\tdata-testid=\"nameField\"\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\trequired\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\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"displayName\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tlabel={<Trans i18nKey=\"userGroupAssignments.ruleModal.displayName\">Display Name</Trans>}\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\tdata-testid=\"displayNameField\"\n\t\t\t\t\t\t\t\trequired\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\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"acceptedEmailHostname\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.acceptedEmailHostname\">\n\t\t\t\t\t\t\t\t\t\tE-Mail Hostname\n\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\tdata-testid=\"acceptedEmailHostnameField\"\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<hr />\n\t\t\t\t\t<Controller\n\t\t\t\t\t\tcontrol={control}\n\t\t\t\t\t\tname=\"accountGroupId\"\n\t\t\t\t\t\trules={required}\n\t\t\t\t\t\trender={({field: {ref: _, ...inputProps}, fieldState: {error}}) => (\n\t\t\t\t\t\t\t<UserGroupSelectInput\n\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.ruleModal.accountGroupId\">\n\t\t\t\t\t\t\t\t\t\tin Target User Group\n\t\t\t\t\t\t\t\t\t</Trans>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdata-testid=\"accountGroupIdField\"\n\t\t\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t\t\t\trequired\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</div>\n\t\t\t}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t<Button primary onClick={submit} disabled={isSubmitting}>\n\t\t\t\t\t\t<Trans i18nKey=\"general.actions.apply\">Apply</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button onClick={onClose} disabled={isSubmitting}>\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","import type {InitialAccountGroupAssignmentRule} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon} from '@deviceinsight/ng-ui-basic-components';\nimport {\n\ttype PaginationSettings,\n\ttype ReactableColumnDef,\n\tReactableWithClientSidePagination,\n} from '@deviceinsight/ng-ui-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {UserGroupName} from 'components/usergroups/UserGroupName';\n\ntype Props = {\n\trules: InitialAccountGroupAssignmentRule[];\n\tonEditRuleClick: (rule: InitialAccountGroupAssignmentRule) => void;\n\tonDeleteRuleClick: (ruleName: string) => void;\n};\n\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 10,\n\tsort: {direction: 'ASC', property: 'name'},\n};\n\nexport const createColumnDefs = (\n\tonEdit: (rule: InitialAccountGroupAssignmentRule) => void,\n\tonRemove: (ruleName: string) => void,\n): Array<ReactableColumnDef<InitialAccountGroupAssignmentRule>> => [\n\t{\n\t\tname: 'name',\n\t\tsortable: true,\n\t\tlabel: {id: 'userGroupAssignments.col.name', defaultValue: 'Name'},\n\t\trender: ({name}: InitialAccountGroupAssignmentRule) => name,\n\t},\n\t{\n\t\tname: 'displayName',\n\t\tsortable: true,\n\t\tlabel: {id: 'userGroupAssignments.col.displayName', defaultValue: 'Display Name'},\n\t\trender: ({displayName}: InitialAccountGroupAssignmentRule) => displayName,\n\t},\n\t{\n\t\tname: 'acceptedEmailHostname',\n\t\tsortable: true,\n\t\tlabel: {id: 'userGroupAssignments.col.acceptedEmailHostname', defaultValue: 'Accepted Email Hostname'},\n\t\trender: ({acceptedEmailHostname}: InitialAccountGroupAssignmentRule) => acceptedEmailHostname,\n\t},\n\t{\n\t\tname: 'accountGroup',\n\t\tsortable: false,\n\t\tlabel: {id: 'userGroupAssignments.col.accountGroup', defaultValue: 'Account Group'},\n\t\trender: ({accountGroupId}: InitialAccountGroupAssignmentRule) => <UserGroupName id={accountGroupId} />,\n\t},\n\t{\n\t\tname: 'actions',\n\t\tsortable: true,\n\t\tlabel: '',\n\t\twidth: '1%',\n\t\trender: (item: InitialAccountGroupAssignmentRule) => (\n\t\t\t<>\n\t\t\t\t<HasAuthorities authorities={['WRITE_INITIAL_ACCOUNT_GROUP_ASSIGNMENT_RULE']}>\n\t\t\t\t\t<Button naked onClick={() => onEdit(item)} data-testid=\"edit-rule-button\">\n\t\t\t\t\t\t<Icon edit />\n\t\t\t\t\t</Button>\n\t\t\t\t</HasAuthorities>\n\t\t\t\t<HasAuthorities authorities={['DELETE_INITIAL_ACCOUNT_GROUP_ASSIGNMENT_RULE']}>\n\t\t\t\t\t<Button naked onClick={() => onRemove(item.name)} data-testid=\"delete-rule-button\">\n\t\t\t\t\t\t<Icon del />\n\t\t\t\t\t</Button>\n\t\t\t\t</HasAuthorities>\n\t\t\t</>\n\t\t),\n\t},\n];\n\nexport function UserGroupAssignmentsTable({onEditRuleClick, onDeleteRuleClick, rules}: Props) {\n\treturn (\n\t\t<ReactableWithClientSidePagination\n\t\t\tcolumnDefs={createColumnDefs(onEditRuleClick, onDeleteRuleClick)}\n\t\t\tuniqueItemKey={item => item.name}\n\t\t\tpaginationSettings={INITIAL_PAGINATION_SETTINGS}\n\t\t\titems={rules}\n\t\t\tisLoading={false}\n\t\t\tdata-testid=\"user-group-assignments-table\"\n\t\t\ttableName={'userGroupAssignments'}\n\t\t/>\n\t);\n}\n","import {useEffect, useState} from 'react';\n\nimport {\n\tcreateInitialAccountGroupAssignmentRule,\n\tdeleteInitialAccountGroupAssignmentRule,\n\tgetInitialAccountGroupAssignmentRules,\n\ttype InitialAccountGroupAssignmentRule,\n\tupdateInitialAccountGroupAssignmentRule,\n} from '@deviceinsight/ng-ui-api-client';\n\ntype UseUserGroupAssignmentRules = {\n\trules: InitialAccountGroupAssignmentRule[];\n\tisLoading: boolean;\n\terror: unknown;\n\tcreateRule: (rule: InitialAccountGroupAssignmentRule) => Promise<void>;\n\teditRule: (ruleName: string, rule: InitialAccountGroupAssignmentRule) => Promise<void>;\n\tdeleteRule: (ruleName: string) => Promise<void>;\n};\n\nexport function useUserGroupAssignmentRules(): UseUserGroupAssignmentRules {\n\tconst [rules, setRules] = useState<InitialAccountGroupAssignmentRule[]>([]);\n\tconst [isLoading, setIsLoading] = useState<boolean>(false);\n\tconst [error, setError] = useState<unknown>(null);\n\n\tuseEffect(() => {\n\t\tsetIsLoading(true);\n\t\tlet canceled = false;\n\n\t\tgetInitialAccountGroupAssignmentRules()\n\t\t\t.then(rules => {\n\t\t\t\tif (!canceled) {\n\t\t\t\t\tsetRules(rules);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tif (!canceled) {\n\t\t\t\t\tsetError(error);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn () => {\n\t\t\tcanceled = true;\n\t\t};\n\t}, []);\n\n\tasync function createRule(rule: InitialAccountGroupAssignmentRule) {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tconst createdRule = await createInitialAccountGroupAssignmentRule(rule);\n\t\t\tsetRules([...rules, createdRule]);\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\tasync function editRule(name: string, rule: InitialAccountGroupAssignmentRule) {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tconst updatedRule = await updateInitialAccountGroupAssignmentRule(name, rule);\n\t\t\tsetRules(rules.map(r => (r.name === name ? updatedRule : r)));\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\tasync function deleteRule(name: string) {\n\t\ttry {\n\t\t\tsetIsLoading(true);\n\t\t\tawait deleteInitialAccountGroupAssignmentRule(name);\n\t\t\tsetRules(rules.filter(r => r.name !== name));\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}\n\n\treturn {rules, isLoading, error, createRule, editRule, deleteRule};\n}\n","import axios from 'axios';\nimport {useEffect, useState} from 'react';\n\nimport type {InitialAccountGroupAssignmentRule} from '@deviceinsight/ng-ui-api-client';\nimport {Button, SpinnerContainer, useConfirm} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport {HasAuthorities} from 'components/auth/HasAuthorities';\nimport {Trans, useTranslation} from 'i18n';\nimport {EditUserGroupAssignmentsRuleModal} from './EditUserGroupAssignmentsRuleModal';\nimport {UserGroupAssignmentsTable} from './UserGroupAssignmentsTable';\nimport {useUserGroupAssignmentRules} from './useUserGroupAssignmentRules';\nimport './UserGroupAssignments.scss';\n\nexport default function UserGroupAssignments() {\n\tconst {isLoading, rules, error, createRule, editRule, deleteRule} = useUserGroupAssignmentRules();\n\tconst [createModalOpen, setCreateModalOpen] = useState(false);\n\tconst [editModalValue, setEditModalValue] = useState<InitialAccountGroupAssignmentRule | null>(null);\n\tconst confirm = useConfirm();\n\tconst {t} = useTranslation();\n\n\tuseEffect(() => {\n\t\tif (error && axios.isAxiosError(error)) {\n\t\t\tmessageBoxError(\n\t\t\t\t<Trans i18nKey=\"userGroupAssignments.fetchError\">\n\t\t\t\t\tAn error occurred while loading the initial user group assignment rules\n\t\t\t\t</Trans>,\n\t\t\t);\n\t\t\tconsole.error('Error loading initial user group assignment rules', error);\n\t\t}\n\t}, [error]);\n\n\tasync function handleCreateRule(rule: InitialAccountGroupAssignmentRule) {\n\t\tawait createRule(rule);\n\t\tsetCreateModalOpen(false);\n\t}\n\n\tasync function handleEditRule(rule: InitialAccountGroupAssignmentRule) {\n\t\tif (editModalValue) {\n\t\t\tawait editRule(editModalValue.name, rule);\n\t\t\tsetEditModalValue(null);\n\t\t}\n\t}\n\n\tasync function handleDeleteRule(ruleName: string) {\n\t\tif (\n\t\t\tawait confirm({\n\t\t\t\ttitle: t('userGroupAssignments.deleteConfirmTitle', {defaultValue: 'Delete Rule'}),\n\t\t\t\tmessage: t('userGroupAssignments.deleteConfirm', {\n\t\t\t\t\tdefaultValue: 'Do you really want to delete the rule?',\n\t\t\t\t}),\n\t\t\t})\n\t\t) {\n\t\t\tawait deleteRule(ruleName);\n\t\t}\n\t}\n\treturn (\n\t\t<div className=\"di user-group-assignments\">\n\t\t\t<SpinnerContainer show={isLoading} data-testid=\"spinner-container\">\n\t\t\t\t<ContentHeader\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'route.label.userGroupAssignments.name',\n\t\t\t\t\t\tdefaultValue: 'User Group Assignments',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\n\t\t\t\t{!isLoading && !!error && (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.fetchError\">\n\t\t\t\t\t\tAn error occurred while loading the initial user group assignment rules\n\t\t\t\t\t</Trans>\n\t\t\t\t)}\n\n\t\t\t\t{!isLoading && !error && rules.length === 0 && (\n\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.emptyList\">\n\t\t\t\t\t\tNo initial user group assignment rules available yet.\n\t\t\t\t\t</Trans>\n\t\t\t\t)}\n\n\t\t\t\t{rules.length > 0 && (\n\t\t\t\t\t<UserGroupAssignmentsTable\n\t\t\t\t\t\trules={rules}\n\t\t\t\t\t\tonEditRuleClick={setEditModalValue}\n\t\t\t\t\t\tonDeleteRuleClick={handleDeleteRule}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<HasAuthorities authorities={['WRITE_INITIAL_ACCOUNT_GROUP_ASSIGNMENT_RULE']}>\n\t\t\t\t\t<div className=\"footer\">\n\t\t\t\t\t\t<Button data-testid=\"create-rule-button\" onClick={() => setCreateModalOpen(true)}>\n\t\t\t\t\t\t\t<Trans i18nKey=\"userGroupAssignments.createRule\">Create Rule</Trans>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</HasAuthorities>\n\t\t\t</SpinnerContainer>\n\n\t\t\t{createModalOpen && (\n\t\t\t\t<EditUserGroupAssignmentsRuleModal\n\t\t\t\t\tonClose={() => setCreateModalOpen(false)}\n\t\t\t\t\tonSubmit={handleCreateRule}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{editModalValue && (\n\t\t\t\t<EditUserGroupAssignmentsRuleModal\n\t\t\t\t\tonClose={() => setEditModalValue(null)}\n\t\t\t\t\tonSubmit={handleEditRule}\n\t\t\t\t\tvalue={editModalValue}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"names":["parseValidationError","error","axios","fieldErrors","field","EditUserGroupAssignmentsRuleModal","onSubmit","onClose","value","handleSubmit","isSubmitting","control","setError","useForm","t","useTranslation","required","submit","rule","invalidFields","messageBoxError","jsx","Modal","Trans","jsxs","Controller","_","inputProps","TextInput","UserGroupSelectInput","Fragment","Button","INITIAL_PAGINATION_SETTINGS","createColumnDefs","onEdit","onRemove","name","displayName","acceptedEmailHostname","accountGroupId","UserGroupName","item","HasAuthorities","Icon","UserGroupAssignmentsTable","onEditRuleClick","onDeleteRuleClick","rules","ReactableWithClientSidePagination","useUserGroupAssignmentRules","setRules","useState","isLoading","setIsLoading","useEffect","canceled","getInitialAccountGroupAssignmentRules","createRule","createdRule","createInitialAccountGroupAssignmentRule","editRule","updatedRule","updateInitialAccountGroupAssignmentRule","r","deleteRule","deleteInitialAccountGroupAssignmentRule","UserGroupAssignments","createModalOpen","setCreateModalOpen","editModalValue","setEditModalValue","confirm","useConfirm","handleCreateRule","handleEditRule","handleDeleteRule","ruleName","SpinnerContainer","ContentHeader"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as s, jsxs as u, Fragment as v } from "react/jsx-runtime";
|
|
2
2
|
import * as C from "react";
|
|
3
3
|
import { PureComponent as m, useContext as w } from "react";
|
|
4
|
-
import { c4 as P, c5 as S, a as c, c6 as g, y as T, T as r, c7 as l, c8 as U, c9 as y } from "./setTitle-
|
|
4
|
+
import { c4 as P, c5 as S, a as c, c6 as g, y as T, T as r, c7 as l, c8 as U, c9 as y } from "./setTitle-CjnK8p-J.js";
|
|
5
5
|
import { isEqual as x } from "lodash";
|
|
6
6
|
import { Prompt as D } from "react-router-dom";
|
|
7
7
|
import { Button as d, ButtonRow as b, SpinnerContainer as I } from "@deviceinsight/ng-ui-basic-components";
|
|
@@ -276,4 +276,4 @@ const M = ({ usergroup: { id: o } }) => {
|
|
|
276
276
|
export {
|
|
277
277
|
M as default
|
|
278
278
|
};
|
|
279
|
-
//# sourceMappingURL=UserGroupTheme-
|
|
279
|
+
//# sourceMappingURL=UserGroupTheme-CAHBWb9Q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserGroupTheme-CXQyYGco.js","sources":["../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/rgbToHex.ts","../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/ColorPickerInput.tsx","../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/ThemeForm.tsx","../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/ThemeEditor.tsx","../ng-ui-scale/src/modules/usergroups/components/theme/UserGroupTheme.tsx"],"sourcesContent":["const getHex = (color: string) => {\n\treturn ('0' + parseInt(color).toString(16)).slice(-2);\n};\n\nexport const rgbToHex = (rgbOrRgbaColor: string): string => {\n\tif (rgbOrRgbaColor.includes('#')) return rgbOrRgbaColor;\n\tconst rgb = rgbOrRgbaColor.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n\treturn rgb && rgb.length === 4 ? `#${getHex(rgb[1])}${getHex(rgb[2])}${getHex(rgb[3])}` : '';\n};\n","import * as React from 'react';\n\nimport {Button} from '@deviceinsight/ng-ui-basic-components';\nimport {GradientColorPicker} from '@deviceinsight/ng-ui-components';\n\nimport {Trans, type TranslationDescriptor} from 'i18n';\nimport {ContentOrDefaultImage} from './ContentOrDefaultImage';\nimport {rgbToHex} from './rgbToHex';\nimport {UserGroupThemeField} from './UserGroupThemeField';\n\ntype Props = {\n\ttitle: TranslationDescriptor;\n\tdescription: TranslationDescriptor;\n\tonChange: (arg0?: string | null | undefined) => void;\n\tvalue: string | null | undefined;\n};\n\ntype State = {\n\tisOpen: boolean;\n};\n\nconst DEFAULT_INITIAL_COLOR = '#0077bb';\n\nexport default class ColorPickerInput extends React.PureComponent<Props, State> {\n\tstate: State = {\n\t\tisOpen: false,\n\t};\n\n\ttoggleIsOpen: () => void = () => {\n\t\tconst {value} = this.props;\n\t\tconst {isOpen} = this.state;\n\n\t\tif (!value) {\n\t\t\tthis.handleChange(DEFAULT_INITIAL_COLOR);\n\t\t}\n\n\t\tthis.setState({\n\t\t\tisOpen: !isOpen,\n\t\t});\n\t};\n\n\thandleChange: (color: string) => void = (color: string) => {\n\t\tconst {onChange} = this.props;\n\t\tconst hexColor = rgbToHex(color);\n\t\tonChange(hexColor);\n\t};\n\n\thandleUnset: (event: React.SyntheticEvent<EventTarget>) => void = (event: React.SyntheticEvent<any>) => {\n\t\tevent.stopPropagation();\n\t\tconst {onChange} = this.props;\n\t\tonChange();\n\t\tthis.setState({\n\t\t\tisOpen: false,\n\t\t});\n\t};\n\n\trender() {\n\t\tconst {isOpen} = this.state;\n\t\tconst {value, title, description} = this.props;\n\t\treturn (\n\t\t\t<div className=\"di with-bottom-margin\">\n\t\t\t\t<UserGroupThemeField title={title} description={description}>\n\t\t\t\t\t<ContentOrDefaultImage content={value} onClick={this.toggleIsOpen}>\n\t\t\t\t\t\t<GradientColorPicker\n\t\t\t\t\t\t\tdirection=\"right\"\n\t\t\t\t\t\t\tinline={false}\n\t\t\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\t\t\tallowTextInput={true}\n\t\t\t\t\t\t\tvalue={value || ''}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonPick={this.handleChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{value && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={this.handleUnset}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmarginLeft: 10,\n\t\t\t\t\t\t\t\t\tmarginTop: 3,\n\t\t\t\t\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Trans i18nKey=\"usergroups.detail.theme.resetColor\">Reset Color</Trans>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ContentOrDefaultImage>\n\t\t\t\t</UserGroupThemeField>\n\t\t\t</div>\n\t\t);\n\t}\n}\n","import {PureComponent} from 'react';\n\nimport {Button, ButtonRow} from '@deviceinsight/ng-ui-basic-components';\n\nimport type {ThemeConfig} from 'customization/types';\nimport {Trans} from 'i18n';\nimport ColorPickerInput from './ColorPickerInput';\nimport FileUploadInput from './FileUploadInput';\n\ntype Props = {\n\tconfig: ThemeConfig;\n\tonChangeConfig: (arg0: ThemeConfig) => void;\n\tonSubmit: () => void;\n\tonStartPreview: () => void;\n\tonStopPreview: () => void;\n\thasUnsavedChanges: boolean;\n};\n\ntype State = {\n\tisPreview: boolean;\n};\n\nexport default class ThemeForm extends PureComponent<Props, State> {\n\tstate: State = {\n\t\tisPreview: false,\n\t};\n\n\tcomponentDidUpdate(prevProps: Props) {\n\t\tconst {isPreview} = this.state;\n\n\t\tif (isPreview && prevProps.config !== this.props.config) {\n\t\t\tthis.startPreview();\n\t\t}\n\n\t\tif (!this.props.hasUnsavedChanges) this.stopPreview();\n\t}\n\n\tchangeConfig: (field: keyof ThemeConfig) => (value: string | null | undefined) => void =\n\t\t(field: keyof ThemeConfig) => (value: string | null | undefined) => {\n\t\t\tconst {config, onChangeConfig} = this.props;\n\t\t\tconst newConfig: ThemeConfig = {...config};\n\n\t\t\tif (value) {\n\t\t\t\tnewConfig[field] = value;\n\t\t\t} else {\n\t\t\t\t// we need to delete the field so the merge\n\t\t\t\t// with defaults in ThemeAPI works\n\t\t\t\tdelete newConfig[field];\n\t\t\t}\n\n\t\t\tonChangeConfig(newConfig);\n\t\t};\n\n\thandleSubmit: () => void = () => {\n\t\tconst {onSubmit} = this.props;\n\t\tonSubmit();\n\t};\n\n\tstopPreview: () => void = () => {\n\t\tconst {onStopPreview} = this.props;\n\t\tthis.setState({\n\t\t\tisPreview: false,\n\t\t});\n\t\tonStopPreview();\n\t};\n\n\tstartPreview: () => void = () => {\n\t\tconst {onStartPreview} = this.props;\n\t\tthis.setState({\n\t\t\tisPreview: true,\n\t\t});\n\t\tonStartPreview();\n\t};\n\n\ttogglePreview: () => void = () => {\n\t\tconst {isPreview} = this.state;\n\n\t\tif (isPreview) {\n\t\t\tthis.stopPreview();\n\t\t} else {\n\t\t\tthis.startPreview();\n\t\t}\n\t};\n\n\trender() {\n\t\tconst {isPreview} = this.state;\n\t\tconst {config, hasUnsavedChanges} = this.props;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<FileUploadInput\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.logo',\n\t\t\t\t\t\tdefaultValue: 'Logo',\n\t\t\t\t\t}}\n\t\t\t\t\tdescription={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.logoDescription',\n\t\t\t\t\t\tdefaultValue: 'Change the header logo (max height: 40px)',\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={config.logo}\n\t\t\t\t\tonChange={this.changeConfig('logo')}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaxHeight: 40,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsrc={config.logo}\n\t\t\t\t\t\talt=\"Logo\"\n\t\t\t\t\t/>\n\t\t\t\t</FileUploadInput>\n\t\t\t\t<FileUploadInput\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.favicon',\n\t\t\t\t\t\tdefaultValue: 'Favicon',\n\t\t\t\t\t}}\n\t\t\t\t\tdescription={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.faviconDescription',\n\t\t\t\t\t\tdefaultValue: 'Change the favicon',\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={config.favicon}\n\t\t\t\t\tonChange={this.changeConfig('favicon')}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaxHeight: 16,\n\t\t\t\t\t\t\tmaxWidth: 16,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsrc={config.favicon}\n\t\t\t\t\t\talt=\"Favicon\"\n\t\t\t\t\t/>\n\t\t\t\t</FileUploadInput>\n\t\t\t\t<ColorPickerInput\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.primaryColor',\n\t\t\t\t\t\tdefaultValue: 'Primary Color',\n\t\t\t\t\t}}\n\t\t\t\t\tdescription={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.primaryColorDescription',\n\t\t\t\t\t\tdefaultValue: 'Change the main color (will be used with white text)',\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={config.primaryColor}\n\t\t\t\t\tonChange={this.changeConfig('primaryColor')}\n\t\t\t\t/>\n\t\t\t\t<ButtonRow dividing>\n\t\t\t\t\t<Button primary disabled={!hasUnsavedChanges} onClick={this.handleSubmit}>\n\t\t\t\t\t\t<Trans i18nKey={'usergroups.detail.theme.save'}>Save</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button disabled={!hasUnsavedChanges} onClick={this.togglePreview}>\n\t\t\t\t\t\t{isPreview ? (\n\t\t\t\t\t\t\t<Trans i18nKey={'usergroups.detail.theme.preview'}>Stop Preview</Trans>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Trans i18nKey={'usergroups.detail.theme.preview'}>Preview</Trans>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Button>\n\t\t\t\t</ButtonRow>\n\t\t\t</>\n\t\t);\n\t}\n}\n","import {isEqual} from 'lodash';\nimport {PureComponent} from 'react';\nimport {Prompt} from 'react-router-dom';\n\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader} from '@deviceinsight/ng-ui-components';\n\nimport type {ThemeConfig} from 'customization/types';\nimport ThemeForm from './ThemeForm';\n\ntype Props = {\n\tonSave: (arg0: ThemeConfig) => Promise<ThemeConfig>;\n\tonFetch: () => Promise<ThemeConfig>;\n\tonDelete: () => Promise<ThemeConfig>;\n\tsetTheme: (arg0: ThemeConfig) => void;\n\tunsetTheme: () => void;\n};\n\ntype State = {\n\tisLoading: boolean;\n\tconfig: ThemeConfig;\n\tsavedConfig: ThemeConfig;\n};\n\nexport default class ThemeEditor extends PureComponent<Props, State> {\n\tstate: State = {\n\t\tisLoading: true,\n\t\tconfig: {},\n\t\tsavedConfig: {},\n\t};\n\n\tcomponentDidMount() {\n\t\tthis.fetchTheme();\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (this.hasUnsavedChanges()) this.handleStopPreview();\n\t}\n\n\tfetchTheme() {\n\t\tconst {onFetch} = this.props;\n\t\tthis.handleRequestStatus(onFetch());\n\t}\n\n\tsaveTheme: () => void = () => {\n\t\tconst {onSave, onDelete} = this.props;\n\t\tconst {config} = this.state;\n\n\t\tif (Object.values(config).some(Boolean)) {\n\t\t\tthis.handleRequestStatus(onSave(config));\n\t\t} else {\n\t\t\tthis.handleRequestStatus(onDelete());\n\t\t}\n\t};\n\n\thandleRequestStatus(promise: Promise<ThemeConfig>): Promise<void> {\n\t\tthis.setState({\n\t\t\tisLoading: true,\n\t\t});\n\t\treturn promise\n\t\t\t.then(config => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tconfig,\n\t\t\t\t\tsavedConfig: config,\n\t\t\t\t\tisLoading: false,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tthis.setState({\n\t\t\t\t\tisLoading: false,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\thandleChangeConfig: (config: ThemeConfig) => void = (config: ThemeConfig) => {\n\t\tthis.setState({\n\t\t\tconfig,\n\t\t});\n\t};\n\thandleStartPreview: () => void = () => {\n\t\tconst {setTheme} = this.props;\n\t\tconst {config} = this.state;\n\t\tsetTheme(config);\n\t};\n\thandleStopPreview: () => void = () => {\n\t\tconst {unsetTheme} = this.props;\n\t\tunsetTheme();\n\t};\n\thasUnsavedChanges: () => boolean = () => {\n\t\tconst {config, savedConfig} = this.state;\n\t\treturn !isEqual(config, savedConfig);\n\t};\n\n\trender() {\n\t\tconst {isLoading, config} = this.state;\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<ContentHeader\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.title',\n\t\t\t\t\t\tdefaultValue: 'Custom Design Options',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<SpinnerContainer show={isLoading}>\n\t\t\t\t\t<ThemeForm\n\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\tonChangeConfig={this.handleChangeConfig}\n\t\t\t\t\t\tonSubmit={this.saveTheme}\n\t\t\t\t\t\tonStartPreview={this.handleStartPreview}\n\t\t\t\t\t\tonStopPreview={this.handleStopPreview}\n\t\t\t\t\t\thasUnsavedChanges={this.hasUnsavedChanges()}\n\t\t\t\t\t/>\n\t\t\t\t</SpinnerContainer>\n\t\t\t\t<Prompt when={this.hasUnsavedChanges()} message={''} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n","import {useContext} from 'react';\n\nimport type {UserGroup} from '@deviceinsight/ng-ui-api-client';\n\nimport {UserContext} from 'contexts/user/UserContext';\nimport ThemeApi, {deleteAccountGroupTheme, readAccountGroupTheme, writeAccountGroupTheme} from 'customization/ThemeApi';\nimport type {ThemeConfig} from 'customization/types';\nimport ThemeEditor from './themeeditor/ThemeEditor';\n\ntype Props = {\n\tusergroup: UserGroup;\n};\n\nconst UserGroupTheme = ({usergroup: {id}}: Props) => {\n\tconst {user} = useContext(UserContext);\n\n\tconst isCurrentUserMemberOfUserGroup = (userGroupId: number) => {\n\t\tif (user) {\n\t\t\treturn user.accountGroupIds.includes(userGroupId);\n\t\t}\n\t};\n\n\tconst handleDelete = async (id: number): Promise<ThemeConfig> => {\n\t\ttry {\n\t\t\tawait deleteAccountGroupTheme(id);\n\n\t\t\tif (isCurrentUserMemberOfUserGroup(id)) {\n\t\t\t\tThemeApi.setUserTheme(ThemeApi.getDefaultTheme());\n\t\t\t}\n\n\t\t\treturn {};\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn await readAccountGroupTheme(id);\n\t\t}\n\t};\n\n\tconst handleSave = async (id: number, config: ThemeConfig): Promise<ThemeConfig> => {\n\t\ttry {\n\t\t\tawait writeAccountGroupTheme(id, config);\n\n\t\t\tif (isCurrentUserMemberOfUserGroup(id)) {\n\t\t\t\tThemeApi.setUserTheme(config);\n\t\t\t\tThemeApi.setTheme(ThemeApi.getUserTheme());\n\t\t\t\treturn config;\n\t\t\t}\n\n\t\t\treturn await readAccountGroupTheme(id);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn await readAccountGroupTheme(id);\n\t\t}\n\t};\n\n\treturn (\n\t\t<ThemeEditor\n\t\t\tonSave={(config: ThemeConfig) => handleSave(id, config)}\n\t\t\tonFetch={() => readAccountGroupTheme(id)}\n\t\t\tonDelete={() => handleDelete(id)}\n\t\t\tsetTheme={(config: ThemeConfig) => ThemeApi.setTheme(config)}\n\t\t\tunsetTheme={() => ThemeApi.setTheme(ThemeApi.getUserTheme())}\n\t\t/>\n\t);\n};\n\nexport default UserGroupTheme;\n"],"names":["getHex","color","rgbToHex","rgbOrRgbaColor","rgb","DEFAULT_INITIAL_COLOR","ColorPickerInput","React","value","isOpen","onChange","hexColor","event","title","description","jsx","UserGroupThemeField","jsxs","ContentOrDefaultImage","GradientColorPicker","Button","Trans","ThemeForm","PureComponent","field","config","onChangeConfig","newConfig","onSubmit","onStopPreview","onStartPreview","isPreview","prevProps","hasUnsavedChanges","Fragment","FileUploadInput","ButtonRow","ThemeEditor","onSave","onDelete","setTheme","unsetTheme","savedConfig","isEqual","onFetch","promise","error","isLoading","ContentHeader","SpinnerContainer","Prompt","UserGroupTheme","id","user","useContext","UserContext","isCurrentUserMemberOfUserGroup","userGroupId","handleDelete","deleteAccountGroupTheme","ThemeApi","readAccountGroupTheme","handleSave","writeAccountGroupTheme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserGroupTheme-CAHBWb9Q.js","sources":["../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/rgbToHex.ts","../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/ColorPickerInput.tsx","../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/ThemeForm.tsx","../ng-ui-scale/src/modules/usergroups/components/theme/themeeditor/ThemeEditor.tsx","../ng-ui-scale/src/modules/usergroups/components/theme/UserGroupTheme.tsx"],"sourcesContent":["const getHex = (color: string) => {\n\treturn ('0' + parseInt(color).toString(16)).slice(-2);\n};\n\nexport const rgbToHex = (rgbOrRgbaColor: string): string => {\n\tif (rgbOrRgbaColor.includes('#')) return rgbOrRgbaColor;\n\tconst rgb = rgbOrRgbaColor.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n\treturn rgb && rgb.length === 4 ? `#${getHex(rgb[1])}${getHex(rgb[2])}${getHex(rgb[3])}` : '';\n};\n","import * as React from 'react';\n\nimport {Button} from '@deviceinsight/ng-ui-basic-components';\nimport {GradientColorPicker} from '@deviceinsight/ng-ui-components';\n\nimport {Trans, type TranslationDescriptor} from 'i18n';\nimport {ContentOrDefaultImage} from './ContentOrDefaultImage';\nimport {rgbToHex} from './rgbToHex';\nimport {UserGroupThemeField} from './UserGroupThemeField';\n\ntype Props = {\n\ttitle: TranslationDescriptor;\n\tdescription: TranslationDescriptor;\n\tonChange: (arg0?: string | null | undefined) => void;\n\tvalue: string | null | undefined;\n};\n\ntype State = {\n\tisOpen: boolean;\n};\n\nconst DEFAULT_INITIAL_COLOR = '#0077bb';\n\nexport default class ColorPickerInput extends React.PureComponent<Props, State> {\n\tstate: State = {\n\t\tisOpen: false,\n\t};\n\n\ttoggleIsOpen: () => void = () => {\n\t\tconst {value} = this.props;\n\t\tconst {isOpen} = this.state;\n\n\t\tif (!value) {\n\t\t\tthis.handleChange(DEFAULT_INITIAL_COLOR);\n\t\t}\n\n\t\tthis.setState({\n\t\t\tisOpen: !isOpen,\n\t\t});\n\t};\n\n\thandleChange: (color: string) => void = (color: string) => {\n\t\tconst {onChange} = this.props;\n\t\tconst hexColor = rgbToHex(color);\n\t\tonChange(hexColor);\n\t};\n\n\thandleUnset: (event: React.SyntheticEvent<EventTarget>) => void = (event: React.SyntheticEvent<any>) => {\n\t\tevent.stopPropagation();\n\t\tconst {onChange} = this.props;\n\t\tonChange();\n\t\tthis.setState({\n\t\t\tisOpen: false,\n\t\t});\n\t};\n\n\trender() {\n\t\tconst {isOpen} = this.state;\n\t\tconst {value, title, description} = this.props;\n\t\treturn (\n\t\t\t<div className=\"di with-bottom-margin\">\n\t\t\t\t<UserGroupThemeField title={title} description={description}>\n\t\t\t\t\t<ContentOrDefaultImage content={value} onClick={this.toggleIsOpen}>\n\t\t\t\t\t\t<GradientColorPicker\n\t\t\t\t\t\t\tdirection=\"right\"\n\t\t\t\t\t\t\tinline={false}\n\t\t\t\t\t\t\tisOpen={isOpen}\n\t\t\t\t\t\t\tallowTextInput={true}\n\t\t\t\t\t\t\tvalue={value || ''}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonPick={this.handleChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{value && (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tonClick={this.handleUnset}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmarginLeft: 10,\n\t\t\t\t\t\t\t\t\tmarginTop: 3,\n\t\t\t\t\t\t\t\t\tfloat: 'left',\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Trans i18nKey=\"usergroups.detail.theme.resetColor\">Reset Color</Trans>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ContentOrDefaultImage>\n\t\t\t\t</UserGroupThemeField>\n\t\t\t</div>\n\t\t);\n\t}\n}\n","import {PureComponent} from 'react';\n\nimport {Button, ButtonRow} from '@deviceinsight/ng-ui-basic-components';\n\nimport type {ThemeConfig} from 'customization/types';\nimport {Trans} from 'i18n';\nimport ColorPickerInput from './ColorPickerInput';\nimport FileUploadInput from './FileUploadInput';\n\ntype Props = {\n\tconfig: ThemeConfig;\n\tonChangeConfig: (arg0: ThemeConfig) => void;\n\tonSubmit: () => void;\n\tonStartPreview: () => void;\n\tonStopPreview: () => void;\n\thasUnsavedChanges: boolean;\n};\n\ntype State = {\n\tisPreview: boolean;\n};\n\nexport default class ThemeForm extends PureComponent<Props, State> {\n\tstate: State = {\n\t\tisPreview: false,\n\t};\n\n\tcomponentDidUpdate(prevProps: Props) {\n\t\tconst {isPreview} = this.state;\n\n\t\tif (isPreview && prevProps.config !== this.props.config) {\n\t\t\tthis.startPreview();\n\t\t}\n\n\t\tif (!this.props.hasUnsavedChanges) this.stopPreview();\n\t}\n\n\tchangeConfig: (field: keyof ThemeConfig) => (value: string | null | undefined) => void =\n\t\t(field: keyof ThemeConfig) => (value: string | null | undefined) => {\n\t\t\tconst {config, onChangeConfig} = this.props;\n\t\t\tconst newConfig: ThemeConfig = {...config};\n\n\t\t\tif (value) {\n\t\t\t\tnewConfig[field] = value;\n\t\t\t} else {\n\t\t\t\t// we need to delete the field so the merge\n\t\t\t\t// with defaults in ThemeAPI works\n\t\t\t\tdelete newConfig[field];\n\t\t\t}\n\n\t\t\tonChangeConfig(newConfig);\n\t\t};\n\n\thandleSubmit: () => void = () => {\n\t\tconst {onSubmit} = this.props;\n\t\tonSubmit();\n\t};\n\n\tstopPreview: () => void = () => {\n\t\tconst {onStopPreview} = this.props;\n\t\tthis.setState({\n\t\t\tisPreview: false,\n\t\t});\n\t\tonStopPreview();\n\t};\n\n\tstartPreview: () => void = () => {\n\t\tconst {onStartPreview} = this.props;\n\t\tthis.setState({\n\t\t\tisPreview: true,\n\t\t});\n\t\tonStartPreview();\n\t};\n\n\ttogglePreview: () => void = () => {\n\t\tconst {isPreview} = this.state;\n\n\t\tif (isPreview) {\n\t\t\tthis.stopPreview();\n\t\t} else {\n\t\t\tthis.startPreview();\n\t\t}\n\t};\n\n\trender() {\n\t\tconst {isPreview} = this.state;\n\t\tconst {config, hasUnsavedChanges} = this.props;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<FileUploadInput\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.logo',\n\t\t\t\t\t\tdefaultValue: 'Logo',\n\t\t\t\t\t}}\n\t\t\t\t\tdescription={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.logoDescription',\n\t\t\t\t\t\tdefaultValue: 'Change the header logo (max height: 40px)',\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={config.logo}\n\t\t\t\t\tonChange={this.changeConfig('logo')}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaxHeight: 40,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsrc={config.logo}\n\t\t\t\t\t\talt=\"Logo\"\n\t\t\t\t\t/>\n\t\t\t\t</FileUploadInput>\n\t\t\t\t<FileUploadInput\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.favicon',\n\t\t\t\t\t\tdefaultValue: 'Favicon',\n\t\t\t\t\t}}\n\t\t\t\t\tdescription={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.faviconDescription',\n\t\t\t\t\t\tdefaultValue: 'Change the favicon',\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={config.favicon}\n\t\t\t\t\tonChange={this.changeConfig('favicon')}\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaxHeight: 16,\n\t\t\t\t\t\t\tmaxWidth: 16,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsrc={config.favicon}\n\t\t\t\t\t\talt=\"Favicon\"\n\t\t\t\t\t/>\n\t\t\t\t</FileUploadInput>\n\t\t\t\t<ColorPickerInput\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.primaryColor',\n\t\t\t\t\t\tdefaultValue: 'Primary Color',\n\t\t\t\t\t}}\n\t\t\t\t\tdescription={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.primaryColorDescription',\n\t\t\t\t\t\tdefaultValue: 'Change the main color (will be used with white text)',\n\t\t\t\t\t}}\n\t\t\t\t\tvalue={config.primaryColor}\n\t\t\t\t\tonChange={this.changeConfig('primaryColor')}\n\t\t\t\t/>\n\t\t\t\t<ButtonRow dividing>\n\t\t\t\t\t<Button primary disabled={!hasUnsavedChanges} onClick={this.handleSubmit}>\n\t\t\t\t\t\t<Trans i18nKey={'usergroups.detail.theme.save'}>Save</Trans>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button disabled={!hasUnsavedChanges} onClick={this.togglePreview}>\n\t\t\t\t\t\t{isPreview ? (\n\t\t\t\t\t\t\t<Trans i18nKey={'usergroups.detail.theme.preview'}>Stop Preview</Trans>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Trans i18nKey={'usergroups.detail.theme.preview'}>Preview</Trans>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Button>\n\t\t\t\t</ButtonRow>\n\t\t\t</>\n\t\t);\n\t}\n}\n","import {isEqual} from 'lodash';\nimport {PureComponent} from 'react';\nimport {Prompt} from 'react-router-dom';\n\nimport {SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader} from '@deviceinsight/ng-ui-components';\n\nimport type {ThemeConfig} from 'customization/types';\nimport ThemeForm from './ThemeForm';\n\ntype Props = {\n\tonSave: (arg0: ThemeConfig) => Promise<ThemeConfig>;\n\tonFetch: () => Promise<ThemeConfig>;\n\tonDelete: () => Promise<ThemeConfig>;\n\tsetTheme: (arg0: ThemeConfig) => void;\n\tunsetTheme: () => void;\n};\n\ntype State = {\n\tisLoading: boolean;\n\tconfig: ThemeConfig;\n\tsavedConfig: ThemeConfig;\n};\n\nexport default class ThemeEditor extends PureComponent<Props, State> {\n\tstate: State = {\n\t\tisLoading: true,\n\t\tconfig: {},\n\t\tsavedConfig: {},\n\t};\n\n\tcomponentDidMount() {\n\t\tthis.fetchTheme();\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif (this.hasUnsavedChanges()) this.handleStopPreview();\n\t}\n\n\tfetchTheme() {\n\t\tconst {onFetch} = this.props;\n\t\tthis.handleRequestStatus(onFetch());\n\t}\n\n\tsaveTheme: () => void = () => {\n\t\tconst {onSave, onDelete} = this.props;\n\t\tconst {config} = this.state;\n\n\t\tif (Object.values(config).some(Boolean)) {\n\t\t\tthis.handleRequestStatus(onSave(config));\n\t\t} else {\n\t\t\tthis.handleRequestStatus(onDelete());\n\t\t}\n\t};\n\n\thandleRequestStatus(promise: Promise<ThemeConfig>): Promise<void> {\n\t\tthis.setState({\n\t\t\tisLoading: true,\n\t\t});\n\t\treturn promise\n\t\t\t.then(config => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tconfig,\n\t\t\t\t\tsavedConfig: config,\n\t\t\t\t\tisLoading: false,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tthis.setState({\n\t\t\t\t\tisLoading: false,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\thandleChangeConfig: (config: ThemeConfig) => void = (config: ThemeConfig) => {\n\t\tthis.setState({\n\t\t\tconfig,\n\t\t});\n\t};\n\thandleStartPreview: () => void = () => {\n\t\tconst {setTheme} = this.props;\n\t\tconst {config} = this.state;\n\t\tsetTheme(config);\n\t};\n\thandleStopPreview: () => void = () => {\n\t\tconst {unsetTheme} = this.props;\n\t\tunsetTheme();\n\t};\n\thasUnsavedChanges: () => boolean = () => {\n\t\tconst {config, savedConfig} = this.state;\n\t\treturn !isEqual(config, savedConfig);\n\t};\n\n\trender() {\n\t\tconst {isLoading, config} = this.state;\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<ContentHeader\n\t\t\t\t\ttitle={{\n\t\t\t\t\t\tid: 'usergroups.detail.theme.title',\n\t\t\t\t\t\tdefaultValue: 'Custom Design Options',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<SpinnerContainer show={isLoading}>\n\t\t\t\t\t<ThemeForm\n\t\t\t\t\t\tconfig={config}\n\t\t\t\t\t\tonChangeConfig={this.handleChangeConfig}\n\t\t\t\t\t\tonSubmit={this.saveTheme}\n\t\t\t\t\t\tonStartPreview={this.handleStartPreview}\n\t\t\t\t\t\tonStopPreview={this.handleStopPreview}\n\t\t\t\t\t\thasUnsavedChanges={this.hasUnsavedChanges()}\n\t\t\t\t\t/>\n\t\t\t\t</SpinnerContainer>\n\t\t\t\t<Prompt when={this.hasUnsavedChanges()} message={''} />\n\t\t\t</div>\n\t\t);\n\t}\n}\n","import {useContext} from 'react';\n\nimport type {UserGroup} from '@deviceinsight/ng-ui-api-client';\n\nimport {UserContext} from 'contexts/user/UserContext';\nimport ThemeApi, {deleteAccountGroupTheme, readAccountGroupTheme, writeAccountGroupTheme} from 'customization/ThemeApi';\nimport type {ThemeConfig} from 'customization/types';\nimport ThemeEditor from './themeeditor/ThemeEditor';\n\ntype Props = {\n\tusergroup: UserGroup;\n};\n\nconst UserGroupTheme = ({usergroup: {id}}: Props) => {\n\tconst {user} = useContext(UserContext);\n\n\tconst isCurrentUserMemberOfUserGroup = (userGroupId: number) => {\n\t\tif (user) {\n\t\t\treturn user.accountGroupIds.includes(userGroupId);\n\t\t}\n\t};\n\n\tconst handleDelete = async (id: number): Promise<ThemeConfig> => {\n\t\ttry {\n\t\t\tawait deleteAccountGroupTheme(id);\n\n\t\t\tif (isCurrentUserMemberOfUserGroup(id)) {\n\t\t\t\tThemeApi.setUserTheme(ThemeApi.getDefaultTheme());\n\t\t\t}\n\n\t\t\treturn {};\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn await readAccountGroupTheme(id);\n\t\t}\n\t};\n\n\tconst handleSave = async (id: number, config: ThemeConfig): Promise<ThemeConfig> => {\n\t\ttry {\n\t\t\tawait writeAccountGroupTheme(id, config);\n\n\t\t\tif (isCurrentUserMemberOfUserGroup(id)) {\n\t\t\t\tThemeApi.setUserTheme(config);\n\t\t\t\tThemeApi.setTheme(ThemeApi.getUserTheme());\n\t\t\t\treturn config;\n\t\t\t}\n\n\t\t\treturn await readAccountGroupTheme(id);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn await readAccountGroupTheme(id);\n\t\t}\n\t};\n\n\treturn (\n\t\t<ThemeEditor\n\t\t\tonSave={(config: ThemeConfig) => handleSave(id, config)}\n\t\t\tonFetch={() => readAccountGroupTheme(id)}\n\t\t\tonDelete={() => handleDelete(id)}\n\t\t\tsetTheme={(config: ThemeConfig) => ThemeApi.setTheme(config)}\n\t\t\tunsetTheme={() => ThemeApi.setTheme(ThemeApi.getUserTheme())}\n\t\t/>\n\t);\n};\n\nexport default UserGroupTheme;\n"],"names":["getHex","color","rgbToHex","rgbOrRgbaColor","rgb","DEFAULT_INITIAL_COLOR","ColorPickerInput","React","value","isOpen","onChange","hexColor","event","title","description","jsx","UserGroupThemeField","jsxs","ContentOrDefaultImage","GradientColorPicker","Button","Trans","ThemeForm","PureComponent","field","config","onChangeConfig","newConfig","onSubmit","onStopPreview","onStartPreview","isPreview","prevProps","hasUnsavedChanges","Fragment","FileUploadInput","ButtonRow","ThemeEditor","onSave","onDelete","setTheme","unsetTheme","savedConfig","isEqual","onFetch","promise","error","isLoading","ContentHeader","SpinnerContainer","Prompt","UserGroupTheme","id","user","useContext","UserContext","isCurrentUserMemberOfUserGroup","userGroupId","handleDelete","deleteAccountGroupTheme","ThemeApi","readAccountGroupTheme","handleSave","writeAccountGroupTheme"],"mappings":";;;;;;;;;AAAA,MAAMA,IAAS,CAACC,OACP,MAAM,SAASA,CAAK,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAGxCC,IAAW,CAACC,MAAmC;AAC3D,MAAIA,EAAe,SAAS,GAAG,EAAG,QAAOA;AACzC,QAAMC,IAAMD,EAAe,MAAM,sEAAsE;AACvG,SAAOC,KAAOA,EAAI,WAAW,IAAI,IAAIJ,EAAOI,EAAI,CAAC,CAAC,CAAC,GAAGJ,EAAOI,EAAI,CAAC,CAAC,CAAC,GAAGJ,EAAOI,EAAI,CAAC,CAAC,CAAC,KAAK;AAC3F,GCaMC,IAAwB;AAE9B,MAAqBC,UAAyBC,EAAM,cAA4B;AAAA,EAAhF,cAAA;AAAA,UAAA,GAAA,SAAA,GACC,KAAA,QAAe;AAAA,MACd,QAAQ;AAAA,IAAA,GAGT,KAAA,eAA2B,MAAM;AAChC,YAAM,EAAC,OAAAC,MAAS,KAAK,OACf,EAAC,QAAAC,MAAU,KAAK;AAEtB,MAAKD,KACJ,KAAK,aAAaH,CAAqB,GAGxC,KAAK,SAAS;AAAA,QACb,QAAQ,CAACI;AAAA,MAAA,CACT;AAAA,IACF,GAEA,KAAA,eAAwC,CAACR,MAAkB;AAC1D,YAAM,EAAC,UAAAS,MAAY,KAAK,OAClBC,IAAWT,EAASD,CAAK;AAC/B,MAAAS,EAASC,CAAQ;AAAA,IAClB,GAEA,KAAA,cAAkE,CAACC,MAAqC;AACvG,MAAAA,EAAM,gBAAA;AACN,YAAM,EAAC,UAAAF,MAAY,KAAK;AACxB,MAAAA,EAAA,GACA,KAAK,SAAS;AAAA,QACb,QAAQ;AAAA,MAAA,CACR;AAAA,IACF;AAAA,EAAA;AAAA,EAEA,SAAS;AACR,UAAM,EAAC,QAAAD,MAAU,KAAK,OAChB,EAAC,OAAAD,GAAO,OAAAK,GAAO,aAAAC,EAAA,IAAe,KAAK;AACzC,WACC,gBAAAC,EAAC,OAAA,EAAI,WAAU,yBACd,4BAACC,GAAA,EAAoB,OAAAH,GAAc,aAAAC,GAClC,UAAA,gBAAAG,EAACC,GAAA,EAAsB,SAASV,GAAO,SAAS,KAAK,cACpD,UAAA;AAAA,MAAA,gBAAAO;AAAA,QAACI;AAAA,QAAA;AAAA,UACA,WAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAAV;AAAA,UACA,gBAAgB;AAAA,UAChB,OAAOD,KAAS;AAAA,UAChB,OAAO;AAAA,YACN,OAAO;AAAA,UAAA;AAAA,UAER,QAAQ,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEbA,KACA,gBAAAO;AAAA,QAACK;AAAA,QAAA;AAAA,UACA,SAAS,KAAK;AAAA,UACd,OAAO;AAAA,YACN,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,OAAO;AAAA,UAAA;AAAA,UAGR,UAAA,gBAAAL,EAACM,GAAA,EAAM,SAAQ,sCAAqC,UAAA,cAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IAChE,EAAA,CAEF,GACD,GACD;AAAA,EAEF;AACD;ACrEA,MAAqBC,UAAkBC,EAA4B;AAAA,EAAnE,cAAA;AAAA,UAAA,GAAA,SAAA,GACC,KAAA,QAAe;AAAA,MACd,WAAW;AAAA,IAAA,GAaZ,KAAA,eACC,CAACC,MAA6B,CAAChB,MAAqC;AACnE,YAAM,EAAC,QAAAiB,GAAQ,gBAAAC,EAAA,IAAkB,KAAK,OAChCC,IAAyB,EAAC,GAAGF,EAAA;AAEnC,MAAIjB,IACHmB,EAAUH,CAAK,IAAIhB,IAInB,OAAOmB,EAAUH,CAAK,GAGvBE,EAAeC,CAAS;AAAA,IACzB,GAED,KAAA,eAA2B,MAAM;AAChC,YAAM,EAAC,UAAAC,MAAY,KAAK;AACxB,MAAAA,EAAA;AAAA,IACD,GAEA,KAAA,cAA0B,MAAM;AAC/B,YAAM,EAAC,eAAAC,MAAiB,KAAK;AAC7B,WAAK,SAAS;AAAA,QACb,WAAW;AAAA,MAAA,CACX,GACDA,EAAA;AAAA,IACD,GAEA,KAAA,eAA2B,MAAM;AAChC,YAAM,EAAC,gBAAAC,MAAkB,KAAK;AAC9B,WAAK,SAAS;AAAA,QACb,WAAW;AAAA,MAAA,CACX,GACDA,EAAA;AAAA,IACD,GAEA,KAAA,gBAA4B,MAAM;AACjC,YAAM,EAAC,WAAAC,MAAa,KAAK;AAEzB,MAAIA,IACH,KAAK,YAAA,IAEL,KAAK,aAAA;AAAA,IAEP;AAAA,EAAA;AAAA,EAvDA,mBAAmBC,GAAkB;AACpC,UAAM,EAAC,WAAAD,MAAa,KAAK;AAEzB,IAAIA,KAAaC,EAAU,WAAW,KAAK,MAAM,UAChD,KAAK,aAAA,GAGD,KAAK,MAAM,0BAAwB,YAAA;AAAA,EACzC;AAAA,EAiDA,SAAS;AACR,UAAM,EAAC,WAAAD,MAAa,KAAK,OACnB,EAAC,QAAAN,GAAQ,mBAAAQ,EAAA,IAAqB,KAAK;AACzC,WACC,gBAAAhB,EAAAiB,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAnB;AAAA,QAACoB;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,YACN,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAEf,aAAa;AAAA,YACZ,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAEf,OAAOV,EAAO;AAAA,UACd,UAAU,KAAK,aAAa,MAAM;AAAA,UAElC,UAAA,gBAAAV;AAAA,YAAC;AAAA,YAAA;AAAA,cACA,OAAO;AAAA,gBACN,WAAW;AAAA,cAAA;AAAA,cAEZ,KAAKU,EAAO;AAAA,cACZ,KAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACL;AAAA,MAAA;AAAA,MAED,gBAAAV;AAAA,QAACoB;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,YACN,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAEf,aAAa;AAAA,YACZ,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAEf,OAAOV,EAAO;AAAA,UACd,UAAU,KAAK,aAAa,SAAS;AAAA,UAErC,UAAA,gBAAAV;AAAA,YAAC;AAAA,YAAA;AAAA,cACA,OAAO;AAAA,gBACN,WAAW;AAAA,gBACX,UAAU;AAAA,cAAA;AAAA,cAEX,KAAKU,EAAO;AAAA,cACZ,KAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACL;AAAA,MAAA;AAAA,MAED,gBAAAV;AAAA,QAACT;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,YACN,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAEf,aAAa;AAAA,YACZ,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,UAEf,OAAOmB,EAAO;AAAA,UACd,UAAU,KAAK,aAAa,cAAc;AAAA,QAAA;AAAA,MAAA;AAAA,MAE3C,gBAAAR,EAACmB,GAAA,EAAU,UAAQ,IAClB,UAAA;AAAA,QAAA,gBAAArB,EAACK,GAAA,EAAO,SAAO,IAAC,UAAU,CAACa,GAAmB,SAAS,KAAK,cAC3D,UAAA,gBAAAlB,EAACM,GAAA,EAAM,SAAS,gCAAgC,kBAAI,GACrD;AAAA,QACA,gBAAAN,EAACK,KAAO,UAAU,CAACa,GAAmB,SAAS,KAAK,eAClD,UAAAF,IACA,gBAAAhB,EAACM,KAAM,SAAS,mCAAmC,0BAAY,IAE/D,gBAAAN,EAACM,KAAM,SAAS,mCAAmC,qBAAO,EAAA,CAE5D;AAAA,MAAA,EAAA,CACD;AAAA,IAAA,GACD;AAAA,EAEF;AACD;ACrIA,MAAqBgB,UAAoBd,EAA4B;AAAA,EAArE,cAAA;AAAA,UAAA,GAAA,SAAA,GACC,KAAA,QAAe;AAAA,MACd,WAAW;AAAA,MACX,QAAQ,CAAA;AAAA,MACR,aAAa,CAAA;AAAA,IAAC,GAgBf,KAAA,YAAwB,MAAM;AAC7B,YAAM,EAAC,QAAAe,GAAQ,UAAAC,EAAA,IAAY,KAAK,OAC1B,EAAC,QAAAd,MAAU,KAAK;AAEtB,MAAI,OAAO,OAAOA,CAAM,EAAE,KAAK,OAAO,IACrC,KAAK,oBAAoBa,EAAOb,CAAM,CAAC,IAEvC,KAAK,oBAAoBc,GAAU;AAAA,IAErC,GAsBA,KAAA,qBAAoD,CAACd,MAAwB;AAC5E,WAAK,SAAS;AAAA,QACb,QAAAA;AAAA,MAAA,CACA;AAAA,IACF,GACA,KAAA,qBAAiC,MAAM;AACtC,YAAM,EAAC,UAAAe,MAAY,KAAK,OAClB,EAAC,QAAAf,MAAU,KAAK;AACtB,MAAAe,EAASf,CAAM;AAAA,IAChB,GACA,KAAA,oBAAgC,MAAM;AACrC,YAAM,EAAC,YAAAgB,MAAc,KAAK;AAC1B,MAAAA,EAAA;AAAA,IACD,GACA,KAAA,oBAAmC,MAAM;AACxC,YAAM,EAAC,QAAAhB,GAAQ,aAAAiB,EAAA,IAAe,KAAK;AACnC,aAAO,CAACC,EAAQlB,GAAQiB,CAAW;AAAA,IACpC;AAAA,EAAA;AAAA,EA7DA,oBAAoB;AACnB,SAAK,WAAA;AAAA,EACN;AAAA,EAEA,uBAAuB;AACtB,IAAI,KAAK,uBAAqB,KAAK,kBAAA;AAAA,EACpC;AAAA,EAEA,aAAa;AACZ,UAAM,EAAC,SAAAE,MAAW,KAAK;AACvB,SAAK,oBAAoBA,GAAS;AAAA,EACnC;AAAA,EAaA,oBAAoBC,GAA8C;AACjE,gBAAK,SAAS;AAAA,MACb,WAAW;AAAA,IAAA,CACX,GACMA,EACL,KAAK,CAAApB,MAAU;AACf,WAAK,SAAS;AAAA,QACb,QAAAA;AAAA,QACA,aAAaA;AAAA,QACb,WAAW;AAAA,MAAA,CACX;AAAA,IACF,CAAC,EACA,MAAM,CAAAqB,MAAS;AACf,cAAQ,MAAMA,CAAK,GACnB,KAAK,SAAS;AAAA,QACb,WAAW;AAAA,MAAA,CACX;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAqBA,SAAS;AACR,UAAM,EAAC,WAAAC,GAAW,QAAAtB,EAAA,IAAU,KAAK;AACjC,6BACE,OAAA,EACA,UAAA;AAAA,MAAA,gBAAAV;AAAA,QAACiC;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,YACN,IAAI;AAAA,YACJ,cAAc;AAAA,UAAA;AAAA,QACf;AAAA,MAAA;AAAA,MAED,gBAAAjC,EAACkC,GAAA,EAAiB,MAAMF,GACvB,UAAA,gBAAAhC;AAAA,QAACO;AAAA,QAAA;AAAA,UACA,QAAAG;AAAA,UACA,gBAAgB,KAAK;AAAA,UACrB,UAAU,KAAK;AAAA,UACf,gBAAgB,KAAK;AAAA,UACrB,eAAe,KAAK;AAAA,UACpB,mBAAmB,KAAK,kBAAA;AAAA,QAAkB;AAAA,MAAA,GAE5C;AAAA,wBACCyB,GAAA,EAAO,MAAM,KAAK,kBAAA,GAAqB,SAAS,GAAA,CAAI;AAAA,IAAA,GACtD;AAAA,EAEF;AACD;ACzGA,MAAMC,IAAiB,CAAC,EAAC,WAAW,EAAC,IAAAC,EAAA,QAAgB;AACpD,QAAM,EAAC,MAAAC,EAAA,IAAQC,EAAWC,CAAW,GAE/BC,IAAiC,CAACC,MAAwB;AAC/D,QAAIJ;AACH,aAAOA,EAAK,gBAAgB,SAASI,CAAW;AAAA,EAElD,GAEMC,IAAe,OAAON,MAAqC;AAChE,QAAI;AACH,mBAAMO,EAAwBP,CAAE,GAE5BI,EAA+BJ,CAAE,KACpCQ,EAAS,aAAaA,EAAS,iBAAiB,GAG1C,CAAA;AAAA,IACR,SAASd,GAAO;AACf,qBAAQ,MAAMA,CAAK,GACZ,MAAMe,EAAsBT,CAAE;AAAA,IACtC;AAAA,EACD,GAEMU,IAAa,OAAOV,GAAY3B,MAA8C;AACnF,QAAI;AAGH,aAFA,MAAMsC,EAAuBX,GAAI3B,CAAM,GAEnC+B,EAA+BJ,CAAE,KACpCQ,EAAS,aAAanC,CAAM,GAC5BmC,EAAS,SAASA,EAAS,cAAc,GAClCnC,KAGD,MAAMoC,EAAsBT,CAAE;AAAA,IACtC,SAASN,GAAO;AACf,qBAAQ,MAAMA,CAAK,GACZ,MAAMe,EAAsBT,CAAE;AAAA,IACtC;AAAA,EACD;AAEA,SACC,gBAAArC;AAAA,IAACsB;AAAA,IAAA;AAAA,MACA,QAAQ,CAACZ,MAAwBqC,EAAWV,GAAI3B,CAAM;AAAA,MACtD,SAAS,MAAMoC,EAAsBT,CAAE;AAAA,MACvC,UAAU,MAAMM,EAAaN,CAAE;AAAA,MAC/B,UAAU,CAAC3B,MAAwBmC,EAAS,SAASnC,CAAM;AAAA,MAC3D,YAAY,MAAMmC,EAAS,SAASA,EAAS,cAAc;AAAA,IAAA;AAAA,EAAA;AAG9D;"}
|
package/dist/api.d.ts
CHANGED
|
@@ -64,12 +64,9 @@ type Result = {
|
|
|
64
64
|
};
|
|
65
65
|
/**
|
|
66
66
|
* Hook to use the translation function in a functional component.
|
|
67
|
-
* @param
|
|
68
|
-
* @
|
|
69
|
-
* @returns {WithTranslation} The translation function.
|
|
67
|
+
* @param args - forwarded to react-i18next's useTranslation (namespace, options)
|
|
68
|
+
* @returns object with `t`, `i18n`, and `ready`
|
|
70
69
|
* @example
|
|
71
|
-
* import { useTranslation } from '@deviceinsight/scale-ui-types';
|
|
72
|
-
*
|
|
73
70
|
* const { t } = useTranslation('namespace');
|
|
74
71
|
* const text = t('my.title', {defaultValue: 'My Title'});
|
|
75
72
|
*/
|
|
@@ -1117,8 +1114,12 @@ declare class UIConfiguration {
|
|
|
1117
1114
|
getUx4IotGrantRequestEndpoint(): string;
|
|
1118
1115
|
isTestTenant(): boolean;
|
|
1119
1116
|
private getConfigurationValue;
|
|
1120
|
-
getDefaultPlotType(): 'step' | 'line' | 'line-area' | 'step-area' | null;
|
|
1117
|
+
getDefaultPlotType(): 'step' | 'line' | 'line-area' | 'step-area' | 'dots' | null;
|
|
1118
|
+
isTrendDotsPlotTypeEnabled(): boolean;
|
|
1121
1119
|
getDatapointSortingDisabled(): boolean;
|
|
1120
|
+
getTrendShowLiveModeIndicator(): boolean;
|
|
1121
|
+
getDatapointsShowLiveModeIndicator(): boolean;
|
|
1122
|
+
isEulaDownloadRequired(): boolean;
|
|
1122
1123
|
}
|
|
1123
1124
|
declare const _default$1: UIConfiguration;
|
|
1124
1125
|
|
package/dist/api.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as n } from "react/jsx-runtime";
|
|
2
2
|
import a from "classnames";
|
|
3
3
|
import { useContext as t, useEffect as i } from "react";
|
|
4
|
-
import { ax as r, y as u, h as m, bp as f, N as C, bg as d, o as c, bq as b, br as A } from "./setTitle-
|
|
5
|
-
import { am as S, aD as U, S as F, T as H, a as L, bs as O, U as G, bt as V, bu as k, bv as w, O as K, r as Z, bw as q, bx as J, by as M, bz as $, bA as j, bB as z, bC as W, bD as X, bE as Y, bF as Q, bG as ee, bH as se, bI as te, a1 as oe, bJ as ne, bK as ae, bL as ie, s as re, aV as ue, u as me, b4 as fe } from "./setTitle-
|
|
4
|
+
import { ax as r, y as u, h as m, bp as f, N as C, bg as d, o as c, bq as b, br as A } from "./setTitle-CjnK8p-J.js";
|
|
5
|
+
import { am as S, aD as U, S as F, T as H, a as L, bs as O, U as G, bt as V, bu as k, bv as w, O as K, r as Z, bw as q, bx as J, by as M, bz as $, bA as j, bB as z, bC as W, bD as X, bE as Y, bF as Q, bG as ee, bH as se, bI as te, a1 as oe, bJ as ne, bK as ae, bL as ie, s as re, aV as ue, u as me, b4 as fe } from "./setTitle-CjnK8p-J.js";
|
|
6
6
|
import { m as de, a as ce } from "./useCanDeleteBundleVersion-CUD1pDJ0.js";
|
|
7
7
|
import { s as Ae } from "./customFileCategories-bG5S9qSy.js";
|
|
8
8
|
import { getAxios as l } from "@deviceinsight/ng-ui-api-client";
|