@deviceinsight/ng-ui-scale-lib 9.26.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/AccessEditModal-x6TMxYkb.js +90 -0
- package/dist/AccessEditModal-x6TMxYkb.js.map +1 -0
- package/dist/BundleManagementContainer-B49bT5K-.js +16 -0
- package/dist/BundleManagementContainer-B49bT5K-.js.map +1 -0
- package/dist/BundlesContainer-BHzbWPe9.js +914 -0
- package/dist/BundlesContainer-BHzbWPe9.js.map +1 -0
- package/dist/DatapointImport-BSFXGuOh.js +293 -0
- package/dist/DatapointImport-BSFXGuOh.js.map +1 -0
- package/dist/FileUploadInput-Ccq_3cug.js +45 -0
- package/dist/FileUploadInput-Ccq_3cug.js.map +1 -0
- package/dist/Files-BniY5cJF.js +347 -0
- package/dist/Files-BniY5cJF.js.map +1 -0
- package/dist/GlobalPowerBiReports-CayA5Bqf.js +103 -0
- package/dist/GlobalPowerBiReports-CayA5Bqf.js.map +1 -0
- package/dist/Graph-BqYDNKEo.js +53 -0
- package/dist/Graph-BqYDNKEo.js.map +1 -0
- package/dist/JsonSettingWidget-pI5gCFnm.js +53 -0
- package/dist/JsonSettingWidget-pI5gCFnm.js.map +1 -0
- package/dist/LicensesEditPage-Bef9P-VO.js +145 -0
- package/dist/LicensesEditPage-Bef9P-VO.js.map +1 -0
- package/dist/LicensesList-Bwb2a9OS.js +149 -0
- package/dist/LicensesList-Bwb2a9OS.js.map +1 -0
- package/dist/PropertiesEditPage-OrwneFF4.js +373 -0
- package/dist/PropertiesEditPage-OrwneFF4.js.map +1 -0
- package/dist/{PropertiesList-59c05fe4.js → PropertiesList-DRYRjsEu.js} +56 -58
- package/dist/PropertiesList-DRYRjsEu.js.map +1 -0
- package/dist/TemplateEditPage-B9v3VwGH.js +508 -0
- package/dist/TemplateEditPage-B9v3VwGH.js.map +1 -0
- package/dist/TemplateTextInput-CZFJ0oAT.js +45 -0
- package/dist/TemplateTextInput-CZFJ0oAT.js.map +1 -0
- package/dist/TemplatesListPage-BIZ0egkq.js +330 -0
- package/dist/TemplatesListPage-BIZ0egkq.js.map +1 -0
- package/dist/UserGroupAssignments-Wk1S9obw.js +297 -0
- package/dist/UserGroupAssignments-Wk1S9obw.js.map +1 -0
- package/dist/{UserGroupTheme-6768666a.js → UserGroupTheme-BLBu4kUe.js} +51 -53
- package/dist/UserGroupTheme-BLBu4kUe.js.map +1 -0
- package/dist/api.d.ts +805 -802
- package/dist/api.js +73 -77
- package/dist/api.js.map +1 -0
- package/dist/{consts-012135e5.js → consts-CZ_QkIyI.js} +1 -2
- package/dist/consts-CZ_QkIyI.js.map +1 -0
- package/dist/{customFileCategories-1b64ed45.js → customFileCategories-bG5S9qSy.js} +1 -0
- package/dist/customFileCategories-bG5S9qSy.js.map +1 -0
- package/dist/index.d.ts +3 -7
- package/dist/index.js +4729 -17113
- package/dist/index.js.map +1 -0
- package/dist/setTitle-Ck-71vC0.js +39377 -0
- package/dist/setTitle-Ck-71vC0.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/{useCanDeleteBundleVersion-64f35949.js → useCanDeleteBundleVersion-CUD1pDJ0.js} +1 -0
- package/dist/useCanDeleteBundleVersion-CUD1pDJ0.js.map +1 -0
- package/package.json +85 -108
- package/dist/AccessEditModal-c2178ad5.js +0 -92
- package/dist/BundleManagementContainer-60c28e65.js +0 -20
- package/dist/BundlesContainer-b3ee1991.js +0 -912
- package/dist/ContextBarContext-a6c59c97.js +0 -88776
- package/dist/DatapointImport-f6bdbdbc.js +0 -864
- package/dist/FileUploadInput-81bb787f.js +0 -44
- package/dist/Files-dc240d97.js +0 -364
- package/dist/GlobalPowerBiReports-3b7feef9.js +0 -11081
- package/dist/Graph-f5463f47.js +0 -25012
- package/dist/JsonSettingWidget-307658b8.js +0 -56
- package/dist/LicensesEditPage-f62cca26.js +0 -146
- package/dist/LicensesList-85279448.js +0 -150
- package/dist/PropertiesEditPage-4edb93b7.js +0 -371
- package/dist/TemplateEditPage-fe1b5f44.js +0 -508
- package/dist/TemplateTextInput-34e4356f.js +0 -49
- package/dist/TemplatesListPage-cd3194a7.js +0 -330
- package/dist/UserGroupAssignments-291f29f0.js +0 -297
- package/dist/index-738ab9ab.js +0 -18679
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { javascript as v } from "@codemirror/lang-javascript";
|
|
3
|
+
import y from "@uiw/react-codemirror";
|
|
4
|
+
import { useState as u, useEffect as C, useCallback as x } from "react";
|
|
5
|
+
import { useFormContext as V, useController as b } from "react-hook-form";
|
|
6
|
+
import { X as g, a as J } from "./setTitle-Ck-71vC0.js";
|
|
7
|
+
import "react-i18next";
|
|
8
|
+
function I({ setting: e, ...d }) {
|
|
9
|
+
const { setValue: o, setError: s, clearErrors: n, control: c } = V(), {
|
|
10
|
+
field: a,
|
|
11
|
+
fieldState: { error: f }
|
|
12
|
+
} = b({ name: e.name, control: c }), [p, i] = u(""), [l, h] = u(!1);
|
|
13
|
+
C(() => {
|
|
14
|
+
if (!l && a.value) {
|
|
15
|
+
const r = JSON.stringify(a.value, null, 2);
|
|
16
|
+
i(r), h(!0);
|
|
17
|
+
}
|
|
18
|
+
}, [a.value, l]);
|
|
19
|
+
const S = x(
|
|
20
|
+
(r) => {
|
|
21
|
+
try {
|
|
22
|
+
i(r);
|
|
23
|
+
const m = r === "" ? void 0 : JSON.parse(r);
|
|
24
|
+
o(e.name, m, { shouldValidate: !0, shouldDirty: !0 }), n(e.name);
|
|
25
|
+
} catch {
|
|
26
|
+
s(e.name, { message: "Invalid JSON syntax" });
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
[n, s, o, e.name]
|
|
30
|
+
);
|
|
31
|
+
return /* @__PURE__ */ t(
|
|
32
|
+
g,
|
|
33
|
+
{
|
|
34
|
+
label: /* @__PURE__ */ t(J, { i18nKey: `appSettings.property.${e.name}`, children: e.name }),
|
|
35
|
+
error: f?.message ?? "",
|
|
36
|
+
size: "full-width",
|
|
37
|
+
children: /* @__PURE__ */ t(
|
|
38
|
+
y,
|
|
39
|
+
{
|
|
40
|
+
"data-testid": d["data-testid"],
|
|
41
|
+
onChange: S,
|
|
42
|
+
value: p,
|
|
43
|
+
basicSetup: { lineNumbers: !0 },
|
|
44
|
+
extensions: [v()]
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
I as default
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=JsonSettingWidget-pI5gCFnm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonSettingWidget-pI5gCFnm.js","sources":["../ng-ui-scale/src/components/applicationSettings/widgets/JsonSettingWidget.tsx"],"sourcesContent":["import {javascript} from '@codemirror/lang-javascript';\nimport CodeMirror from '@uiw/react-codemirror';\nimport {useCallback, useEffect, useState} from 'react';\nimport {useController, useFormContext} from 'react-hook-form';\n\nimport FieldDecorator from 'components/inputs/FieldDecorator';\nimport {Trans} from 'i18n';\nimport type {SettingProps} from '../ApplicationSettings';\n\nexport default function JsonSettingWidget({setting, ...rest}: SettingProps) {\n\tconst {setValue, setError, clearErrors, control} = useFormContext();\n\tconst {\n\t\tfield,\n\t\tfieldState: {error},\n\t} = useController({name: setting.name, control});\n\tconst [stringValue, setStringValue] = useState<string>('');\n\tconst [initialized, setInitialized] = useState<boolean>(false);\n\n\tuseEffect(() => {\n\t\tif (!initialized && field.value) {\n\t\t\tconst value = JSON.stringify(field.value, null, 2);\n\t\t\tsetStringValue(value);\n\t\t\tsetInitialized(true);\n\t\t}\n\t}, [field.value, initialized]);\n\n\tconst handleChange = useCallback(\n\t\t(value: string) => {\n\t\t\ttry {\n\t\t\t\tsetStringValue(value);\n\t\t\t\tconst parsedValue = value === '' ? undefined : JSON.parse(value);\n\t\t\t\tsetValue(setting.name, parsedValue, {shouldValidate: true, shouldDirty: true});\n\t\t\t\tclearErrors(setting.name);\n\t\t\t} catch (_e) {\n\t\t\t\tsetError(setting.name, {message: 'Invalid JSON syntax'});\n\t\t\t}\n\t\t},\n\t\t[clearErrors, setError, setValue, setting.name],\n\t);\n\n\treturn (\n\t\t<FieldDecorator\n\t\t\tlabel={<Trans i18nKey={`appSettings.property.${setting.name}`}>{setting.name}</Trans>}\n\t\t\terror={error?.message ?? ''}\n\t\t\tsize=\"full-width\"\n\t\t>\n\t\t\t<CodeMirror\n\t\t\t\tdata-testid={rest['data-testid']}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tvalue={stringValue}\n\t\t\t\tbasicSetup={{lineNumbers: true}}\n\t\t\t\textensions={[javascript()]}\n\t\t\t/>\n\t\t</FieldDecorator>\n\t);\n}\n"],"names":["JsonSettingWidget","setting","rest","setValue","setError","clearErrors","control","useFormContext","field","error","useController","stringValue","setStringValue","useState","initialized","setInitialized","useEffect","value","handleChange","useCallback","parsedValue","jsx","FieldDecorator","Trans","CodeMirror","javascript"],"mappings":";;;;;;;AASA,SAAwBA,EAAkB,EAAC,SAAAC,GAAS,GAAGC,KAAqB;AAC3E,QAAM,EAAC,UAAAC,GAAU,UAAAC,GAAU,aAAAC,GAAa,SAAAC,EAAA,IAAWC,EAAA,GAC7C;AAAA,IACL,OAAAC;AAAA,IACA,YAAY,EAAC,OAAAC,EAAA;AAAA,EAAK,IACfC,EAAc,EAAC,MAAMT,EAAQ,MAAM,SAAAK,GAAQ,GACzC,CAACK,GAAaC,CAAc,IAAIC,EAAiB,EAAE,GACnD,CAACC,GAAaC,CAAc,IAAIF,EAAkB,EAAK;AAE7D,EAAAG,EAAU,MAAM;AACf,QAAI,CAACF,KAAeN,EAAM,OAAO;AAChC,YAAMS,IAAQ,KAAK,UAAUT,EAAM,OAAO,MAAM,CAAC;AACjD,MAAAI,EAAeK,CAAK,GACpBF,EAAe,EAAI;AAAA,IACpB;AAAA,EACD,GAAG,CAACP,EAAM,OAAOM,CAAW,CAAC;AAE7B,QAAMI,IAAeC;AAAA,IACpB,CAACF,MAAkB;AAClB,UAAI;AACH,QAAAL,EAAeK,CAAK;AACpB,cAAMG,IAAcH,MAAU,KAAK,SAAY,KAAK,MAAMA,CAAK;AAC/D,QAAAd,EAASF,EAAQ,MAAMmB,GAAa,EAAC,gBAAgB,IAAM,aAAa,IAAK,GAC7Ef,EAAYJ,EAAQ,IAAI;AAAA,MACzB,QAAa;AACZ,QAAAG,EAASH,EAAQ,MAAM,EAAC,SAAS,uBAAsB;AAAA,MACxD;AAAA,IACD;AAAA,IACA,CAACI,GAAaD,GAAUD,GAAUF,EAAQ,IAAI;AAAA,EAAA;AAG/C,SACC,gBAAAoB;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,yBAAQC,GAAA,EAAM,SAAS,wBAAwBtB,EAAQ,IAAI,IAAK,UAAAA,EAAQ,KAAA,CAAK;AAAA,MAC7E,OAAOQ,GAAO,WAAW;AAAA,MACzB,MAAK;AAAA,MAEL,UAAA,gBAAAY;AAAA,QAACG;AAAA,QAAA;AAAA,UACA,eAAatB,EAAK,aAAa;AAAA,UAC/B,UAAUgB;AAAA,UACV,OAAOP;AAAA,UACP,YAAY,EAAC,aAAa,GAAA;AAAA,UAC1B,YAAY,CAACc,EAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1B;AAAA,EAAA;AAGH;"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { jsx as e, jsxs as S, Fragment as C } from "react/jsx-runtime";
|
|
2
|
+
import { useState as d, useEffect as v } from "react";
|
|
3
|
+
import { Prompt as E, useHistory as V, useLocation as q, useParams as B } from "react-router-dom";
|
|
4
|
+
import { fetchLicenses as H, fetchLicenseByName as T, updateLicense as D, createLicense as I } from "@deviceinsight/ng-ui-api-client";
|
|
5
|
+
import { SpinnerContainer as k, ButtonRow as R, Button as F, Spinner as j } from "@deviceinsight/ng-ui-basic-components";
|
|
6
|
+
import { messageBoxError as K, ContentHeader as U, messageBoxSuccess as P } from "@deviceinsight/ng-ui-components";
|
|
7
|
+
import "react-i18next";
|
|
8
|
+
import { u as A, a as n, P as b, b8 as O } from "./setTitle-Ck-71vC0.js";
|
|
9
|
+
import { useForm as z, Controller as L } from "react-hook-form";
|
|
10
|
+
function G({ editedLicense: l, onSubmit: u, onCancel: c }) {
|
|
11
|
+
const { t } = A(), {
|
|
12
|
+
handleSubmit: h,
|
|
13
|
+
control: o,
|
|
14
|
+
formState: { isSubmitting: a, isDirty: p },
|
|
15
|
+
setError: g
|
|
16
|
+
} = z({
|
|
17
|
+
defaultValues: l ?? { name: "", displayName: "", description: "" }
|
|
18
|
+
}), [y, m] = d([]), [f, N] = d(!1);
|
|
19
|
+
v(() => {
|
|
20
|
+
N(!0), H().then(m).catch(() => {
|
|
21
|
+
K(/* @__PURE__ */ e(n, { i18nKey: "licenses.form.fetchingError", children: "Fetching licenses failed" }));
|
|
22
|
+
}).finally(() => N(!1));
|
|
23
|
+
}, []);
|
|
24
|
+
function w(i) {
|
|
25
|
+
return l ? void 0 : y.some((r) => r.name === i) ? t("licenses.form.validation.nameInUse", {
|
|
26
|
+
defaultValue: "A license with the same technical name already exists"
|
|
27
|
+
}) : void 0;
|
|
28
|
+
}
|
|
29
|
+
function x() {
|
|
30
|
+
return h(async (s) => {
|
|
31
|
+
try {
|
|
32
|
+
await u(s);
|
|
33
|
+
} catch (r) {
|
|
34
|
+
r && r.response && r.response.status === 409 && r.response.data?.message && g("name", {
|
|
35
|
+
message: t("licenses.form.validation.nameInUse", {
|
|
36
|
+
defaultValue: r.response.data?.message
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}, (s) => {
|
|
41
|
+
console.warn("Validation error", s);
|
|
42
|
+
})();
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ S(k, { show: a || f, className: "di license-form", children: [
|
|
45
|
+
/* @__PURE__ */ e(
|
|
46
|
+
L,
|
|
47
|
+
{
|
|
48
|
+
control: o,
|
|
49
|
+
name: "name",
|
|
50
|
+
rules: {
|
|
51
|
+
required: t("licenses.form.validation.nameRequired", {
|
|
52
|
+
defaultValue: "Please enter the technical name"
|
|
53
|
+
}),
|
|
54
|
+
validate: w
|
|
55
|
+
},
|
|
56
|
+
render: ({ field: i, fieldState: { error: s } }) => /* @__PURE__ */ e(
|
|
57
|
+
b,
|
|
58
|
+
{
|
|
59
|
+
...i,
|
|
60
|
+
disabled: !!l,
|
|
61
|
+
label: /* @__PURE__ */ e(n, { i18nKey: "licenses.tableHeaders.name", children: "Technical Name" }),
|
|
62
|
+
required: !0,
|
|
63
|
+
error: s?.message
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
),
|
|
68
|
+
/* @__PURE__ */ e(
|
|
69
|
+
L,
|
|
70
|
+
{
|
|
71
|
+
control: o,
|
|
72
|
+
name: "displayName",
|
|
73
|
+
rules: {
|
|
74
|
+
required: t("licenses.form.validation.displayNameRequired", {
|
|
75
|
+
defaultValue: "Please enter the display name"
|
|
76
|
+
})
|
|
77
|
+
},
|
|
78
|
+
render: ({ field: i, fieldState: { error: s } }) => /* @__PURE__ */ e(
|
|
79
|
+
b,
|
|
80
|
+
{
|
|
81
|
+
...i,
|
|
82
|
+
label: /* @__PURE__ */ e(n, { i18nKey: "licenses.tableHeaders.displayName", children: "Name" }),
|
|
83
|
+
required: !0,
|
|
84
|
+
error: s?.message
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
/* @__PURE__ */ e(
|
|
90
|
+
L,
|
|
91
|
+
{
|
|
92
|
+
control: o,
|
|
93
|
+
name: "description",
|
|
94
|
+
render: ({ field: i }) => /* @__PURE__ */ e(
|
|
95
|
+
b,
|
|
96
|
+
{
|
|
97
|
+
...i,
|
|
98
|
+
label: /* @__PURE__ */ e(n, { i18nKey: "licenses.tableHeaders.description", children: "Description" })
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
/* @__PURE__ */ S(R, { dividing: !0, children: [
|
|
104
|
+
/* @__PURE__ */ e(F, { primary: !0, onClick: x, disabled: a, children: /* @__PURE__ */ e(n, { i18nKey: "general.actions.save", children: "Save" }) }),
|
|
105
|
+
/* @__PURE__ */ e(F, { disabled: a, onClick: c, children: /* @__PURE__ */ e(n, { i18nKey: "general.actions.cancel", children: "Cancel" }) })
|
|
106
|
+
] }),
|
|
107
|
+
/* @__PURE__ */ e(E, { message: "", when: p && !a })
|
|
108
|
+
] });
|
|
109
|
+
}
|
|
110
|
+
function ee() {
|
|
111
|
+
const l = V(), { pathname: u } = q(), { licenseName: c } = B(), [t, h] = d(), [o, a] = d(!1), [p, g] = d(!1);
|
|
112
|
+
if (v(() => {
|
|
113
|
+
c && (a(!0), T(c).then(h).catch(() => {
|
|
114
|
+
K(/* @__PURE__ */ e(n, { i18nKey: "licenses.editPage.fetchingError", children: "Fetching license failed" })), g(!0);
|
|
115
|
+
}).finally(() => a(!1)));
|
|
116
|
+
}, [c]), p)
|
|
117
|
+
return /* @__PURE__ */ e(O, {});
|
|
118
|
+
if (o)
|
|
119
|
+
return /* @__PURE__ */ e(j, { center: !0 });
|
|
120
|
+
const y = async (f) => {
|
|
121
|
+
c ? (await D(f), P(/* @__PURE__ */ e(n, { i18nKey: "licenses.updateSuccess", children: "License updated" }))) : (await I(f), P(/* @__PURE__ */ e(n, { i18nKey: "licenses.createSuccess", children: "License created" }))), m();
|
|
122
|
+
}, m = () => {
|
|
123
|
+
l.push(u.substring(0, u.lastIndexOf("/")));
|
|
124
|
+
};
|
|
125
|
+
return /* @__PURE__ */ S(C, { children: [
|
|
126
|
+
/* @__PURE__ */ e(
|
|
127
|
+
U,
|
|
128
|
+
{
|
|
129
|
+
title: t ? {
|
|
130
|
+
id: "licenses.edit.title",
|
|
131
|
+
defaultValue: "Edit License"
|
|
132
|
+
} : {
|
|
133
|
+
id: "licenses.create.title",
|
|
134
|
+
defaultValue: "Create License"
|
|
135
|
+
},
|
|
136
|
+
parentPageLink: !0
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
/* @__PURE__ */ e(G, { editedLicense: t, onSubmit: y, onCancel: m })
|
|
140
|
+
] });
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
ee as default
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=LicensesEditPage-Bef9P-VO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LicensesEditPage-Bef9P-VO.js","sources":["../ng-ui-scale/src/modules/licenses/LicenseForm.tsx","../ng-ui-scale/src/modules/licenses/LicensesEditPage.tsx"],"sourcesContent":["import {useEffect, useState} from 'react';\nimport {Controller, useForm} from 'react-hook-form';\nimport {Prompt} from 'react-router-dom';\n\nimport {fetchLicenses, type License} from '@deviceinsight/ng-ui-api-client';\nimport {Button, ButtonRow, SpinnerContainer} from '@deviceinsight/ng-ui-basic-components';\nimport {messageBoxError} from '@deviceinsight/ng-ui-components';\n\nimport {Trans, useTranslation} from 'i18n';\nimport TextInput from '../../components/inputs/textInput/TextInput';\n\ntype Props = {\n\teditedLicense: License | undefined;\n\tonSubmit: (license: License) => Promise<void>;\n\tonCancel: () => void;\n};\n\nexport default function LicenseForm({editedLicense, onSubmit, onCancel}: Props) {\n\tconst {t} = useTranslation();\n\tconst {\n\t\thandleSubmit,\n\t\tcontrol,\n\t\tformState: {isSubmitting, isDirty},\n\t\tsetError,\n\t} = useForm<License>({\n\t\tdefaultValues: editedLicense ?? {name: '', displayName: '', description: ''},\n\t});\n\tconst [licenses, setLicenses] = useState<License[]>([]);\n\tconst [isFetchingLicenses, setFetchingLicenses] = useState<boolean>(false);\n\n\tuseEffect(() => {\n\t\tsetFetchingLicenses(true);\n\t\tfetchLicenses()\n\t\t\t.then(setLicenses)\n\t\t\t.catch(() => {\n\t\t\t\tmessageBoxError(<Trans i18nKey=\"licenses.form.fetchingError\">Fetching licenses failed</Trans>);\n\t\t\t})\n\t\t\t.finally(() => setFetchingLicenses(false));\n\t}, []);\n\n\tfunction validateLicenseName(value: string): string | undefined {\n\t\tif (editedLicense) return; // license name is disabled in edit mode, so we don't validate it.\n\t\tconst isDuplicate = licenses.some(license => license.name === value);\n\n\t\treturn isDuplicate\n\t\t\t? t('licenses.form.validation.nameInUse', {\n\t\t\t\t\tdefaultValue: 'A license with the same technical name already exists',\n\t\t\t\t})\n\t\t\t: undefined;\n\t}\n\n\tfunction submit(): Promise<void> {\n\t\tconst submitFunction = async (license: License) => {\n\t\t\ttry {\n\t\t\t\tawait onSubmit(license);\n\t\t\t} catch (error: any) {\n\t\t\t\tif (error && error.response && error.response.status === 409 && error.response.data?.message) {\n\t\t\t\t\tsetError('name', {\n\t\t\t\t\t\tmessage: t('licenses.form.validation.nameInUse', {\n\t\t\t\t\t\t\tdefaultValue: error.response.data?.message,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn handleSubmit(submitFunction, errors => {\n\t\t\tconsole.warn('Validation error', errors);\n\t\t})();\n\t}\n\n\treturn (\n\t\t<SpinnerContainer show={isSubmitting || isFetchingLicenses} className=\"di license-form\">\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"name\"\n\t\t\t\trules={{\n\t\t\t\t\trequired: t('licenses.form.validation.nameRequired', {\n\t\t\t\t\t\tdefaultValue: 'Please enter the technical name',\n\t\t\t\t\t}),\n\t\t\t\t\tvalidate: validateLicenseName,\n\t\t\t\t}}\n\t\t\t\trender={({field, fieldState: {error}}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\tdisabled={!!editedLicense}\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"licenses.tableHeaders.name\">Technical Name</Trans>}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"displayName\"\n\t\t\t\trules={{\n\t\t\t\t\trequired: t('licenses.form.validation.displayNameRequired', {\n\t\t\t\t\t\tdefaultValue: 'Please enter the display name',\n\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t\trender={({field, fieldState: {error}}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"licenses.tableHeaders.displayName\">Name</Trans>}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\terror={error?.message}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<Controller\n\t\t\t\tcontrol={control}\n\t\t\t\tname=\"description\"\n\t\t\t\trender={({field}) => (\n\t\t\t\t\t<TextInput\n\t\t\t\t\t\t{...field}\n\t\t\t\t\t\tlabel={<Trans i18nKey=\"licenses.tableHeaders.description\">Description</Trans>}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<ButtonRow dividing>\n\t\t\t\t<Button primary onClick={submit} disabled={isSubmitting}>\n\t\t\t\t\t<Trans i18nKey=\"general.actions.save\">Save</Trans>\n\t\t\t\t</Button>\n\t\t\t\t<Button disabled={isSubmitting} onClick={onCancel}>\n\t\t\t\t\t<Trans i18nKey=\"general.actions.cancel\">Cancel</Trans>\n\t\t\t\t</Button>\n\t\t\t</ButtonRow>\n\t\t\t<Prompt message={''} when={isDirty && !isSubmitting} />\n\t\t</SpinnerContainer>\n\t);\n}\n","import {useEffect, useState} from 'react';\nimport {useHistory, useLocation, useParams} from 'react-router-dom';\n\nimport {createLicense, fetchLicenseByName, type License, updateLicense} from '@deviceinsight/ng-ui-api-client';\nimport {Spinner} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError, messageBoxSuccess} from '@deviceinsight/ng-ui-components';\n\nimport {Trans} from 'i18n';\nimport PageNotFound from '../../components/page/misc/PageNotFound';\nimport LicenseForm from './LicenseForm';\n\nexport default function LicensesEditPage() {\n\tconst history = useHistory();\n\tconst {pathname} = useLocation();\n\tconst {licenseName: editedLicenseName} = useParams<{licenseName: string | undefined}>();\n\tconst [editedLicense, setEditedLicense] = useState<License | undefined>();\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [notFound, setNotFound] = useState<boolean>(false);\n\n\tuseEffect(() => {\n\t\tif (editedLicenseName) {\n\t\t\tsetLoading(true);\n\t\t\tfetchLicenseByName(editedLicenseName)\n\t\t\t\t.then(setEditedLicense)\n\t\t\t\t.catch(() => {\n\t\t\t\t\tmessageBoxError(<Trans i18nKey=\"licenses.editPage.fetchingError\">Fetching license failed</Trans>);\n\t\t\t\t\tsetNotFound(true);\n\t\t\t\t})\n\t\t\t\t.finally(() => setLoading(false));\n\t\t}\n\t}, [editedLicenseName]);\n\n\tif (notFound) {\n\t\treturn <PageNotFound />;\n\t}\n\n\tif (loading) {\n\t\treturn <Spinner center />;\n\t}\n\n\tconst handleSubmit = async (license: License) => {\n\t\tif (editedLicenseName) {\n\t\t\tawait updateLicense(license);\n\t\t\tmessageBoxSuccess(<Trans i18nKey=\"licenses.updateSuccess\">License updated</Trans>);\n\t\t} else {\n\t\t\tawait createLicense(license);\n\t\t\tmessageBoxSuccess(<Trans i18nKey=\"licenses.createSuccess\">License created</Trans>);\n\t\t}\n\t\tgoToParentPage();\n\t};\n\n\tconst goToParentPage = () => {\n\t\thistory.push(pathname.substring(0, pathname.lastIndexOf('/')));\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<ContentHeader\n\t\t\t\ttitle={\n\t\t\t\t\t!editedLicense\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tid: 'licenses.create.title',\n\t\t\t\t\t\t\t\tdefaultValue: 'Create License',\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tid: 'licenses.edit.title',\n\t\t\t\t\t\t\t\tdefaultValue: 'Edit License',\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tparentPageLink\n\t\t\t/>\n\t\t\t<LicenseForm editedLicense={editedLicense} onSubmit={handleSubmit} onCancel={goToParentPage} />\n\t\t</>\n\t);\n}\n"],"names":["LicenseForm","editedLicense","onSubmit","onCancel","useTranslation","handleSubmit","control","isSubmitting","isDirty","setError","useForm","licenses","setLicenses","useState","isFetchingLicenses","setFetchingLicenses","useEffect","fetchLicenses","messageBoxError","jsx","Trans","validateLicenseName","value","license","submit","error","errors","SpinnerContainer","Controller","field","TextInput","jsxs","ButtonRow","Button","Prompt","LicensesEditPage","history","useHistory","pathname","useLocation","editedLicenseName","useParams","setEditedLicense","loading","setLoading","notFound","setNotFound","fetchLicenseByName","PageNotFound","Spinner","updateLicense","messageBoxSuccess","createLicense","goToParentPage","Fragment","ContentHeader"],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { jsxs as f, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { useState as c, useEffect as u } from "react";
|
|
3
|
+
import { Link as h } from "react-router-dom";
|
|
4
|
+
import { fetchRolesForLicense as g, fetchLicenses as N, deleteLicense as C } from "@deviceinsight/ng-ui-api-client";
|
|
5
|
+
import { useConfirm as S, Button as E, Icon as w } from "@deviceinsight/ng-ui-basic-components";
|
|
6
|
+
import { messageBoxError as p, ContentHeader as D } from "@deviceinsight/ng-ui-components";
|
|
7
|
+
import { a, u as I, bM as T, bN as A, am as x } from "./setTitle-Ck-71vC0.js";
|
|
8
|
+
import "react-i18next";
|
|
9
|
+
function K({ license: n }) {
|
|
10
|
+
const [e, i] = c([]), [r, o] = c(!1);
|
|
11
|
+
return u(() => {
|
|
12
|
+
o(!0), g(n).then(i).catch(() => {
|
|
13
|
+
p(
|
|
14
|
+
/* @__PURE__ */ f(a, { i18nKey: "license.roles.fetchingError", children: [
|
|
15
|
+
"Can't fetch the roles of the following license: ",
|
|
16
|
+
{ license: n }
|
|
17
|
+
] })
|
|
18
|
+
);
|
|
19
|
+
}).finally(() => o(!1));
|
|
20
|
+
}, [n]), r ? /* @__PURE__ */ t(a, { i18nKey: "general.actions.loading", children: "Loading..." }) : /* @__PURE__ */ t("span", { className: "di license-roles", children: e.map((s) => /* @__PURE__ */ t(h, { to: `/roles/${s.id}`, className: "role-link", children: s.name }, s.id)) });
|
|
21
|
+
}
|
|
22
|
+
const H = {
|
|
23
|
+
page: 0,
|
|
24
|
+
size: 15,
|
|
25
|
+
sort: {
|
|
26
|
+
property: "name",
|
|
27
|
+
direction: "ASC"
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
function F(n) {
|
|
31
|
+
return [
|
|
32
|
+
{
|
|
33
|
+
name: "name",
|
|
34
|
+
label: /* @__PURE__ */ t(a, { i18nKey: "licenses.tableHeaders.name", children: "Technical Name" }),
|
|
35
|
+
sortable: !0,
|
|
36
|
+
filterable: {
|
|
37
|
+
filterType: "text",
|
|
38
|
+
filterFn: (e, i) => e.name.toLowerCase().indexOf(i.toLowerCase()) >= 0
|
|
39
|
+
},
|
|
40
|
+
render: (e) => /* @__PURE__ */ t(h, { to: `licenses/${e.name}`, children: e.name })
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "displayName",
|
|
44
|
+
label: /* @__PURE__ */ t(a, { i18nKey: "licenses.tableHeaders.displayName", children: "Display Name" }),
|
|
45
|
+
sortable: !0,
|
|
46
|
+
filterable: {
|
|
47
|
+
filterType: "text",
|
|
48
|
+
filterFn: (e, i) => e.displayName.toLowerCase().indexOf(i.toLowerCase()) >= 0
|
|
49
|
+
},
|
|
50
|
+
render: (e) => e.displayName
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "description",
|
|
54
|
+
label: /* @__PURE__ */ t(a, { i18nKey: "licenses.tableHeaders.description", children: "Description" }),
|
|
55
|
+
render: (e) => e.description
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "roles",
|
|
59
|
+
label: /* @__PURE__ */ t(a, { i18nKey: "licenses.tableHeaders.roles", children: "Roles" }),
|
|
60
|
+
render: (e) => /* @__PURE__ */ t(K, { license: e.name })
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: "actions",
|
|
64
|
+
label: "",
|
|
65
|
+
width: "10%",
|
|
66
|
+
align: "right",
|
|
67
|
+
render: (e) => /* @__PURE__ */ t(x, { authorities: ["MANAGE_LICENSES"], children: /* @__PURE__ */ t(
|
|
68
|
+
E,
|
|
69
|
+
{
|
|
70
|
+
naked: !0,
|
|
71
|
+
title: {
|
|
72
|
+
id: "licenses.tableHeaders.deleteLicense",
|
|
73
|
+
defaultValue: "Delete this License"
|
|
74
|
+
},
|
|
75
|
+
onClick: () => n(e),
|
|
76
|
+
children: /* @__PURE__ */ t(w, { del: !0 })
|
|
77
|
+
}
|
|
78
|
+
) })
|
|
79
|
+
}
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
function j() {
|
|
83
|
+
const [n, e] = c(!1), [i, r] = c([]), o = S(), { t: s } = I(), L = /* @__PURE__ */ t(a, { i18nKey: "portalAdmin.sidebarElements.licenses.create", children: "Create new license" });
|
|
84
|
+
u(() => {
|
|
85
|
+
(async () => {
|
|
86
|
+
try {
|
|
87
|
+
e(!0);
|
|
88
|
+
const m = await N();
|
|
89
|
+
r(m);
|
|
90
|
+
} finally {
|
|
91
|
+
e(!1);
|
|
92
|
+
}
|
|
93
|
+
})();
|
|
94
|
+
}, []);
|
|
95
|
+
async function b(l) {
|
|
96
|
+
if (await o({
|
|
97
|
+
title: s("licenses.confirmDeleteLicenseTitle", { defaultValue: "Delete License" }),
|
|
98
|
+
message: s("licenses.confirmDeleteLicenseMessage", {
|
|
99
|
+
defaultValue: "Do you really want to delete this License?"
|
|
100
|
+
})
|
|
101
|
+
})) {
|
|
102
|
+
e(!0);
|
|
103
|
+
try {
|
|
104
|
+
await C(l.name), r((d) => d.filter((y) => y.name !== l.name));
|
|
105
|
+
} catch (d) {
|
|
106
|
+
console.error("Delete license error", d), p(
|
|
107
|
+
s("licenses.deleteFailure", { defaultValue: "Can't delete license because it is in use" })
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
e(!1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return /* @__PURE__ */ f("div", { "data-testid": "licenses-list", children: [
|
|
114
|
+
/* @__PURE__ */ t(
|
|
115
|
+
D,
|
|
116
|
+
{
|
|
117
|
+
title: {
|
|
118
|
+
id: "route.label.licenses.name",
|
|
119
|
+
defaultValue: "Licenses"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ t(
|
|
124
|
+
T,
|
|
125
|
+
{
|
|
126
|
+
tooltip: L,
|
|
127
|
+
authorities: "MANAGE_LICENSES",
|
|
128
|
+
path: "licenses/create",
|
|
129
|
+
dataTestId: "create-license-button"
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
/* @__PURE__ */ t(
|
|
133
|
+
A,
|
|
134
|
+
{
|
|
135
|
+
columnDefs: F(b),
|
|
136
|
+
items: i,
|
|
137
|
+
isLoading: n,
|
|
138
|
+
uniqueItemKey: (l) => l.name,
|
|
139
|
+
paginationSettings: H,
|
|
140
|
+
"data-testid": "licenses-table",
|
|
141
|
+
tableName: "licenses"
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
] });
|
|
145
|
+
}
|
|
146
|
+
export {
|
|
147
|
+
j as default
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=LicensesList-Bwb2a9OS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LicensesList-Bwb2a9OS.js","sources":["../ng-ui-scale/src/modules/licenses/LicenseRoles.tsx","../ng-ui-scale/src/modules/licenses/LicensesList.tsx"],"sourcesContent":["import {useEffect, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport {fetchRolesForLicense, type Role} from '@deviceinsight/ng-ui-api-client';\n\nimport {Trans} from '../../i18n';\nimport './LicenseRoles.scss';\n\nimport {messageBoxError} from '@deviceinsight/ng-ui-components';\n\ntype Props = {\n\tlicense: string;\n};\n\nexport default function LicenseRoles({license}: Props) {\n\tconst [roles, setRoles] = useState<Role[]>([]);\n\tconst [loading, setLoading] = useState<boolean>(false);\n\n\tuseEffect(() => {\n\t\tsetLoading(true);\n\t\tfetchRolesForLicense(license)\n\t\t\t.then(setRoles)\n\t\t\t.catch(() => {\n\t\t\t\tmessageBoxError(\n\t\t\t\t\t<Trans i18nKey=\"license.roles.fetchingError\">\n\t\t\t\t\t\tCan't fetch the roles of the following license: {{license}}\n\t\t\t\t\t</Trans>,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.finally(() => setLoading(false));\n\t}, [license]);\n\n\tif (loading) {\n\t\treturn <Trans i18nKey=\"general.actions.loading\">Loading...</Trans>;\n\t}\n\n\treturn (\n\t\t<span className=\"di license-roles\">\n\t\t\t{roles.map(role => (\n\t\t\t\t<Link key={role.id} to={`/roles/${role.id}`} className=\"role-link\">\n\t\t\t\t\t{role.name}\n\t\t\t\t</Link>\n\t\t\t))}\n\t\t</span>\n\t);\n}\n","import {useEffect, useState} from 'react';\nimport {Link} from 'react-router-dom';\n\nimport {deleteLicense, fetchLicenses, type License, type PaginationSettings} from '@deviceinsight/ng-ui-api-client';\nimport {Button, Icon, useConfirm} from '@deviceinsight/ng-ui-basic-components';\nimport {ContentHeader, messageBoxError, type ReactableColumnDef} from '@deviceinsight/ng-ui-components';\n\nimport {ReactableClientSidePaginationWithSizeSave} from 'components/reactable/ReactableClientSidePaginationWithSizeSave';\nimport {Trans, useTranslation} from 'i18n';\nimport {HasAuthorities} from '../../components/auth/HasAuthorities';\nimport {SidebarElementsCreateButton} from '../../utils/portalAdminUtils';\nimport LicenseRoles from './LicenseRoles';\n\nconst INITIAL_PAGINATION_SETTINGS: PaginationSettings = {\n\tpage: 0,\n\tsize: 15,\n\tsort: {\n\t\tproperty: 'name',\n\t\tdirection: 'ASC',\n\t},\n};\n\nfunction getColumnDefs(onDelete: (license: License) => Promise<void>): Array<ReactableColumnDef<License>> {\n\treturn [\n\t\t{\n\t\t\tname: 'name',\n\t\t\tlabel: <Trans i18nKey=\"licenses.tableHeaders.name\">Technical Name</Trans>,\n\t\t\tsortable: true,\n\t\t\tfilterable: {\n\t\t\t\tfilterType: 'text',\n\t\t\t\tfilterFn: (item: License, value: string) => item.name.toLowerCase().indexOf(value.toLowerCase()) >= 0,\n\t\t\t},\n\t\t\trender: item => <Link to={`licenses/${item.name}`}>{item.name}</Link>,\n\t\t},\n\t\t{\n\t\t\tname: 'displayName',\n\t\t\tlabel: <Trans i18nKey=\"licenses.tableHeaders.displayName\">Display Name</Trans>,\n\t\t\tsortable: true,\n\t\t\tfilterable: {\n\t\t\t\tfilterType: 'text',\n\t\t\t\tfilterFn: (item: License, value: string) =>\n\t\t\t\t\titem.displayName.toLowerCase().indexOf(value.toLowerCase()) >= 0,\n\t\t\t},\n\t\t\trender: item => item.displayName,\n\t\t},\n\t\t{\n\t\t\tname: 'description',\n\t\t\tlabel: <Trans i18nKey=\"licenses.tableHeaders.description\">Description</Trans>,\n\t\t\trender: item => item.description,\n\t\t},\n\t\t{\n\t\t\tname: 'roles',\n\t\t\tlabel: <Trans i18nKey=\"licenses.tableHeaders.roles\">Roles</Trans>,\n\t\t\trender: item => <LicenseRoles license={item.name} />,\n\t\t},\n\t\t{\n\t\t\tname: 'actions',\n\t\t\tlabel: '',\n\t\t\twidth: '10%',\n\t\t\talign: 'right',\n\t\t\trender: item => (\n\t\t\t\t<HasAuthorities authorities={['MANAGE_LICENSES']}>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tnaked\n\t\t\t\t\t\ttitle={{\n\t\t\t\t\t\t\tid: 'licenses.tableHeaders.deleteLicense',\n\t\t\t\t\t\t\tdefaultValue: 'Delete this License',\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonClick={() => onDelete(item)}\n\t\t\t\t\t>\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 default function LicensesList() {\n\tconst [loading, setLoading] = useState<boolean>(false);\n\tconst [licenses, setLicenses] = useState<License[]>([]);\n\tconst confirm = useConfirm();\n\tconst {t} = useTranslation();\n\tconst tooltip = <Trans i18nKey=\"portalAdmin.sidebarElements.licenses.create\">Create new license</Trans>;\n\n\tuseEffect(() => {\n\t\tconst doFetch = async () => {\n\t\t\ttry {\n\t\t\t\tsetLoading(true);\n\t\t\t\tconst licenses = await fetchLicenses();\n\t\t\t\tsetLicenses(licenses);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t};\n\t\tdoFetch();\n\t}, []);\n\n\tasync function handleDeleteLicense(license: License) {\n\t\tconst confirmed = await confirm({\n\t\t\ttitle: t('licenses.confirmDeleteLicenseTitle', {defaultValue: 'Delete License'}),\n\t\t\tmessage: t('licenses.confirmDeleteLicenseMessage', {\n\t\t\t\tdefaultValue: 'Do you really want to delete this License?',\n\t\t\t}),\n\t\t});\n\t\tif (confirmed) {\n\t\t\tsetLoading(true);\n\t\t\ttry {\n\t\t\t\tawait deleteLicense(license.name);\n\t\t\t\tsetLicenses(licenses => licenses.filter(l => l.name !== license.name));\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('Delete license error', e);\n\t\t\t\tmessageBoxError(\n\t\t\t\t\tt('licenses.deleteFailure', {defaultValue: `Can't delete license because it is in use`}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<div data-testid=\"licenses-list\">\n\t\t\t<ContentHeader\n\t\t\t\ttitle={{\n\t\t\t\t\tid: 'route.label.licenses.name',\n\t\t\t\t\tdefaultValue: 'Licenses',\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=\"MANAGE_LICENSES\"\n\t\t\t\tpath=\"licenses/create\"\n\t\t\t\tdataTestId=\"create-license-button\"\n\t\t\t/>\n\t\t\t<ReactableClientSidePaginationWithSizeSave\n\t\t\t\tcolumnDefs={getColumnDefs(handleDeleteLicense)}\n\t\t\t\titems={licenses}\n\t\t\t\tisLoading={loading}\n\t\t\t\tuniqueItemKey={item => item.name}\n\t\t\t\tpaginationSettings={INITIAL_PAGINATION_SETTINGS}\n\t\t\t\tdata-testid=\"licenses-table\"\n\t\t\t\ttableName={'licenses'}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"names":["LicenseRoles","license","roles","setRoles","useState","loading","setLoading","useEffect","fetchRolesForLicense","messageBoxError","jsxs","Trans","jsx","role","Link","INITIAL_PAGINATION_SETTINGS","getColumnDefs","onDelete","item","value","HasAuthorities","Button","Icon","LicensesList","licenses","setLicenses","confirm","useConfirm","t","useTranslation","tooltip","fetchLicenses","handleDeleteLicense","deleteLicense","l","e","ContentHeader","SidebarElementsCreateButton","ReactableClientSidePaginationWithSizeSave"],"mappings":"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"}
|