@deix/rossini-identity-management 5.0.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/components/AddItemDialog.d.ts.map +1 -1
- package/lib/src/components/AddItemDialog.js +7 -20
- package/lib/src/components/DeleteConfirmationDialog.d.ts.map +1 -1
- package/lib/src/components/DeleteConfirmationDialog.js +5 -22
- package/lib/src/components/groups/CreateGroupDialog.d.ts.map +1 -1
- package/lib/src/components/groups/CreateGroupDialog.js +3 -3
- package/lib/src/components/groups/GroupForm.d.ts.map +1 -1
- package/lib/src/components/groups/GroupForm.js +4 -4
- package/lib/src/components/groups/GroupTabs.d.ts.map +1 -1
- package/lib/src/components/groups/GroupTabs.js +3 -3
- package/lib/src/components/groups/GroupUsers.d.ts.map +1 -1
- package/lib/src/components/groups/GroupUsers.js +13 -23
- package/lib/src/components/groups/Groups.d.ts.map +1 -1
- package/lib/src/components/groups/Groups.js +7 -5
- package/lib/src/components/groups/GroupsTable.d.ts.map +1 -1
- package/lib/src/components/groups/GroupsTable.js +5 -6
- package/lib/src/components/tables/Table.d.ts +29 -0
- package/lib/src/components/tables/Table.d.ts.map +1 -0
- package/lib/src/components/tables/Table.js +96 -0
- package/lib/src/components/users/CreateUserDialog.d.ts.map +1 -1
- package/lib/src/components/users/CreateUserDialog.js +3 -3
- package/lib/src/components/users/UserCredentials.d.ts.map +1 -1
- package/lib/src/components/users/UserCredentials.js +3 -3
- package/lib/src/components/users/UserForm.d.ts.map +1 -1
- package/lib/src/components/users/UserForm.js +4 -6
- package/lib/src/components/users/UserGroups.d.ts.map +1 -1
- package/lib/src/components/users/UserGroups.js +5 -7
- package/lib/src/components/users/Users.d.ts.map +1 -1
- package/lib/src/components/users/Users.js +16 -6
- package/lib/src/components/users/UsersTable.d.ts +4 -1
- package/lib/src/components/users/UsersTable.d.ts.map +1 -1
- package/lib/src/components/users/UsersTable.js +14 -37
- package/lib/src/components/users/UsersTabs.d.ts.map +1 -1
- package/lib/src/components/users/UsersTabs.js +3 -3
- package/lib/src/lang/common.d.ts +6 -0
- package/lib/src/lang/common.d.ts.map +1 -0
- package/lib/src/lang/common.js +35 -0
- package/lib/src/lang/groups.d.ts.map +1 -1
- package/lib/src/lang/groups.js +4 -0
- package/lib/src/lang/tables.d.ts +6 -0
- package/lib/src/lang/tables.d.ts.map +1 -0
- package/lib/src/lang/tables.js +11 -0
- package/lib/src/lang/users.d.ts.map +1 -1
- package/lib/src/lang/users.js +16 -0
- package/lib/src/utils/hooks/groups.d.ts.map +1 -1
- package/lib/src/utils/hooks/groups.js +10 -10
- package/lib/src/utils/hooks/useTranslate.d.ts +6 -0
- package/lib/src/utils/hooks/useTranslate.d.ts.map +1 -0
- package/lib/src/utils/hooks/useTranslate.js +16 -0
- package/lib/src/utils/hooks/users.d.ts.map +1 -1
- package/lib/src/utils/hooks/users.js +19 -19
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddItemDialog.d.ts","sourceRoot":"","sources":["../../../src/components/AddItemDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"AddItemDialog.d.ts","sourceRoot":"","sources":["../../../src/components/AddItemDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAKvD,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3C;AAED,QAAA,MAAM,aAAa,kDAMhB,kBAAkB,sBAkDpB,CAAC;eAEa,aAAa"}
|
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Autocomplete, Button, Dialog, DialogActions, DialogContent, DialogTitle, TextField, } from '@mui/material';
|
|
3
|
-
import { useLocale } from '@deix/rossini-core';
|
|
4
3
|
import { useEffect, useState } from 'react';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
en: 'Add',
|
|
8
|
-
it: 'Aggiungi',
|
|
9
|
-
},
|
|
10
|
-
cancel: {
|
|
11
|
-
en: 'Cancel',
|
|
12
|
-
it: 'Annulla',
|
|
13
|
-
},
|
|
14
|
-
search: {
|
|
15
|
-
en: 'Search...',
|
|
16
|
-
it: 'Cerca...',
|
|
17
|
-
},
|
|
18
|
-
};
|
|
4
|
+
import useTranslate from '../utils/hooks/useTranslate';
|
|
5
|
+
import commonTranslations from '../lang/common';
|
|
19
6
|
const AddItemDialog = ({ title, options, open, onClose, onConfirm, }) => {
|
|
20
|
-
const
|
|
7
|
+
const t = useTranslate();
|
|
21
8
|
const [value, setValue] = useState(null);
|
|
22
9
|
// Reset the value when the dialog is closed
|
|
23
10
|
useEffect(() => {
|
|
@@ -25,15 +12,15 @@ const AddItemDialog = ({ title, options, open, onClose, onConfirm, }) => {
|
|
|
25
12
|
setValue(null);
|
|
26
13
|
}
|
|
27
14
|
}, [open]);
|
|
28
|
-
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: title
|
|
15
|
+
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: t(title) }), _jsx(DialogContent, { children: _jsx(Autocomplete
|
|
29
16
|
// multiple
|
|
30
17
|
, {
|
|
31
18
|
// multiple
|
|
32
|
-
options: options ?? [], getOptionLabel: (option) => option.label, getOptionKey: (option) => option.value, isOptionEqualToValue: (option, value) => option.value === value.value, renderInput: (params) => (_jsx(TextField, { ...params, label:
|
|
19
|
+
options: options ?? [], getOptionLabel: (option) => option.label, getOptionKey: (option) => option.value, isOptionEqualToValue: (option, value) => option.value === value.value, renderInput: (params) => (_jsx(TextField, { ...params, label: t(commonTranslations.search), placeholder: '' })), onChange: (event, newValue) => {
|
|
33
20
|
setValue(newValue);
|
|
34
|
-
}, value: value }) }), _jsxs(DialogActions, { children: [_jsx(Button, { size: 'small', variant: 'outlined', onClick: onClose, children:
|
|
21
|
+
}, value: value }) }), _jsxs(DialogActions, { children: [_jsx(Button, { size: 'small', variant: 'outlined', onClick: onClose, children: t(commonTranslations.cancel) }), _jsx(Button, { variant: 'contained', onClick: () => {
|
|
35
22
|
onConfirm(value);
|
|
36
23
|
onClose();
|
|
37
|
-
}, children:
|
|
24
|
+
}, children: t(commonTranslations.add) })] })] }));
|
|
38
25
|
};
|
|
39
26
|
export default AddItemDialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/components/DeleteConfirmationDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DeleteConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/components/DeleteConfirmationDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,QAAA,MAAM,wBAAwB,kCAI3B,6BAA6B,sBA2B/B,CAAC;eAEa,wBAAwB"}
|
|
@@ -1,29 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography, } from '@mui/material';
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
title: {
|
|
6
|
-
en: 'Delete item?',
|
|
7
|
-
it: 'Cancellare elemento?',
|
|
8
|
-
},
|
|
9
|
-
message: {
|
|
10
|
-
en: 'This is a permanent action',
|
|
11
|
-
it: "Questa è un'azione permanente",
|
|
12
|
-
},
|
|
13
|
-
yes: {
|
|
14
|
-
en: 'Yes',
|
|
15
|
-
it: 'Si',
|
|
16
|
-
},
|
|
17
|
-
no: {
|
|
18
|
-
en: 'No',
|
|
19
|
-
it: 'No',
|
|
20
|
-
},
|
|
21
|
-
};
|
|
3
|
+
import useTranslate from '../utils/hooks/useTranslate';
|
|
4
|
+
import commonTranslations from '../lang/common';
|
|
22
5
|
const DeleteConfirmationDialog = ({ open, onClose, onConfirm, }) => {
|
|
23
|
-
const
|
|
24
|
-
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children:
|
|
6
|
+
const t = useTranslate();
|
|
7
|
+
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: t(commonTranslations.deleteTitle) }), _jsx(DialogContent, { children: _jsx(Typography, { variant: 'caption', children: t(commonTranslations.deleteMessage) }) }), _jsxs(DialogActions, { children: [_jsx(Button, { size: 'small', variant: 'outlined', onClick: onClose, children: t(commonTranslations.no) }), _jsx(Button, { size: 'small', variant: 'contained', onClick: () => {
|
|
25
8
|
onConfirm();
|
|
26
9
|
onClose();
|
|
27
|
-
}, children:
|
|
10
|
+
}, children: t(commonTranslations.yes) })] })] }));
|
|
28
11
|
};
|
|
29
12
|
export default DeleteConfirmationDialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateGroupDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/CreateGroupDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"CreateGroupDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/CreateGroupDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;CAC3C;AAED,QAAA,MAAM,iBAAiB,sCAIpB,sBAAsB,sBAuBxB,CAAC;eAEa,iBAAiB"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useLocale } from '@deix/rossini-core';
|
|
3
2
|
import { Dialog, DialogContent, DialogTitle } from '@mui/material';
|
|
4
3
|
import { useQueryClient } from '@tanstack/react-query';
|
|
5
4
|
import groupsTranslations from '../../lang/groups';
|
|
6
5
|
import { useAddGroup } from '../../utils/hooks/groups';
|
|
7
6
|
import GroupForm from './GroupForm';
|
|
8
7
|
import { useAPIClient } from '../../utils/hooks/useAPIClient';
|
|
8
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
9
9
|
const CreateGroupDialog = ({ open, onClose, onGroupCreate, }) => {
|
|
10
|
-
const
|
|
10
|
+
const t = useTranslate();
|
|
11
11
|
const apiClient = useAPIClient();
|
|
12
12
|
const queryClient = useQueryClient();
|
|
13
13
|
const { mutate: addGroup } = useAddGroup(queryClient, apiClient);
|
|
@@ -18,6 +18,6 @@ const CreateGroupDialog = ({ open, onClose, onGroupCreate, }) => {
|
|
|
18
18
|
}
|
|
19
19
|
onClose();
|
|
20
20
|
};
|
|
21
|
-
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: groupsTranslations.create
|
|
21
|
+
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: t(groupsTranslations.create) }), _jsx(DialogContent, { children: _jsx(GroupForm, { mode: 'create', onSave: handleSave, onCancel: onClose }) })] }));
|
|
22
22
|
};
|
|
23
23
|
export default CreateGroupDialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupForm.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupForm.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,SAAS,iDAMZ,cAAc,sBAiEhB,CAAC;eAEa,SAAS"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useLocale } from '@deix/rossini-core';
|
|
3
2
|
import { Button, Grid, TextField } from '@mui/material';
|
|
4
3
|
import { Controller, useForm } from 'react-hook-form';
|
|
5
4
|
import { useEffect } from 'react';
|
|
6
5
|
import groupsTranslations from '../../lang/groups';
|
|
6
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
7
7
|
const GroupForm = ({ group, onCancel, onSave, mode, editName, }) => {
|
|
8
|
-
const
|
|
8
|
+
const t = useTranslate();
|
|
9
9
|
const { control, handleSubmit, setValue } = useForm({
|
|
10
10
|
defaultValues: {
|
|
11
11
|
id: group?.id,
|
|
@@ -21,12 +21,12 @@ const GroupForm = ({ group, onCancel, onSave, mode, editName, }) => {
|
|
|
21
21
|
const onSubmit = (data) => {
|
|
22
22
|
onSave(data);
|
|
23
23
|
};
|
|
24
|
-
return (_jsx("form", { onSubmit: (event) => void handleSubmit(onSubmit)(event), children: _jsxs(Grid, { container: true, spacing: 2, sx: { mt: 2, maxWidth: 'sm', justifyContent: 'stretch' }, children: [_jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'name', control: control, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, label: groupsTranslations.name
|
|
24
|
+
return (_jsx("form", { onSubmit: (event) => void handleSubmit(onSubmit)(event), children: _jsxs(Grid, { container: true, spacing: 2, sx: { mt: 2, maxWidth: 'sm', justifyContent: 'stretch' }, children: [_jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'name', control: control, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, label: t(groupsTranslations.name), disabled: mode === 'modify' && !editName, sx: { flexShrink: 0 }, ...field })) }) }), _jsxs(Grid, { sx: {
|
|
25
25
|
mt: 2,
|
|
26
26
|
display: 'flex',
|
|
27
27
|
justifyContent: 'flex-end',
|
|
28
28
|
gap: 2,
|
|
29
29
|
width: '100%',
|
|
30
|
-
}, children: [mode === 'create' && (_jsx(Button, { variant: 'outlined', onClick: onCancel, children: groupsTranslations.cancel
|
|
30
|
+
}, children: [mode === 'create' && (_jsx(Button, { variant: 'outlined', onClick: onCancel, children: t(groupsTranslations.cancel) })), _jsx(Button, { variant: 'contained', type: 'submit', children: t(groupsTranslations.save) })] })] }) }));
|
|
31
31
|
};
|
|
32
32
|
export default GroupForm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupTabs.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupTabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"GroupTabs.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupTabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,SAAS,wDAKZ,cAAc,sBAkDhB,CAAC;eAEa,SAAS"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { Box, Tab, Tabs } from '@mui/material';
|
|
5
|
-
import { useLocale } from '@deix/rossini-core';
|
|
6
5
|
import GroupDetails from './GroupDetails';
|
|
7
6
|
import groupsTranslations from '../../lang/groups';
|
|
8
7
|
import GroupUsers from './GroupUsers';
|
|
8
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
9
9
|
const GroupTabs = ({ group, additionalTabs = [], onGroupUpdate, editName, }) => {
|
|
10
|
-
const
|
|
10
|
+
const t = useTranslate();
|
|
11
11
|
const [selectedTab, setSelectedTab] = useState('DETAILS');
|
|
12
12
|
return (_jsxs(Box, { sx: {
|
|
13
13
|
flexGrow: 1,
|
|
@@ -16,6 +16,6 @@ const GroupTabs = ({ group, additionalTabs = [], onGroupUpdate, editName, }) =>
|
|
|
16
16
|
alignSelf: 'stretch',
|
|
17
17
|
}, children: [_jsx(Box, { sx: { borderBottom: 1, borderColor: 'divider' }, children: _jsxs(Tabs, { value: selectedTab, onChange: (_evt, newValue) => {
|
|
18
18
|
setSelectedTab(newValue);
|
|
19
|
-
}, "aria-label":
|
|
19
|
+
}, "aria-label": t(groupsTranslations.details), children: [_jsx(Tab, { label: t(groupsTranslations.details), value: 'DETAILS' }), _jsx(Tab, { label: t(groupsTranslations.users), value: 'USERS' }), additionalTabs.map((tab, index) => (_jsx(Tab, { label: t(tab.title), value: `ADDITIONAL_TAB_${index}` }, `tab${index}`)))] }) }), _jsxs(Box, { sx: { p: 1 }, children: [selectedTab === 'DETAILS' && (_jsx(GroupDetails, { group: group, onGroupUpdate: onGroupUpdate, editName: editName })), selectedTab === 'USERS' && _jsx(GroupUsers, { group: group }), additionalTabs.map((tab, index) => selectedTab === `ADDITIONAL_TAB_${index}` && (_jsx(tab.component, { group: group }, `tab${index}`)))] })] }));
|
|
20
20
|
};
|
|
21
21
|
export default GroupTabs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupUsers.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupUsers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupUsers.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupUsers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAgC3C,UAAU,eAAe;IACvB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,QAAA,MAAM,UAAU,cAAe,eAAe,sBAoD7C,CAAC;eAEa,UAAU"}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Button
|
|
2
|
+
import { Box, Button } from '@mui/material';
|
|
3
3
|
import AddIcon from '@mui/icons-material/Add';
|
|
4
|
-
import DeleteIcon from '@mui/icons-material/Delete';
|
|
5
|
-
import { isStringTranslation, useLocale } from '@deix/rossini-core';
|
|
6
4
|
import { useAddUserToGroup, useRemoveUserFromGroup, useUsers, } from '../../utils/hooks/users';
|
|
7
5
|
import { useState } from 'react';
|
|
8
|
-
import DeleteConfirmationDialog from '../DeleteConfirmationDialog';
|
|
9
6
|
import { useQueryClient } from '@tanstack/react-query';
|
|
10
7
|
import AddItemDialog from '../AddItemDialog';
|
|
8
|
+
import Table from '../tables/Table';
|
|
11
9
|
import { useGroupUsers } from '../../utils/hooks/groups';
|
|
12
10
|
import groupsTranslations from '../../lang/groups';
|
|
11
|
+
import usersTranslations from '../../lang/users';
|
|
13
12
|
import { useAPIClient } from '../../utils/hooks/useAPIClient';
|
|
13
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
14
14
|
const groupUsersTableColumns = [
|
|
15
15
|
{
|
|
16
|
-
|
|
17
|
-
label:
|
|
16
|
+
field: 'username',
|
|
17
|
+
label: usersTranslations.username,
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
|
-
|
|
21
|
-
label:
|
|
20
|
+
field: 'firstName',
|
|
21
|
+
label: usersTranslations.firstName,
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
|
-
|
|
25
|
-
label:
|
|
24
|
+
field: 'lastName',
|
|
25
|
+
label: usersTranslations.lastName,
|
|
26
26
|
},
|
|
27
27
|
];
|
|
28
28
|
const GroupUsers = ({ group }) => {
|
|
29
|
-
const
|
|
29
|
+
const t = useTranslate();
|
|
30
30
|
const apiClient = useAPIClient();
|
|
31
31
|
const queryClient = useQueryClient();
|
|
32
32
|
const { data: users } = useUsers(apiClient);
|
|
@@ -34,23 +34,13 @@ const GroupUsers = ({ group }) => {
|
|
|
34
34
|
const { mutate: addUserToGroup } = useAddUserToGroup(queryClient, apiClient);
|
|
35
35
|
const { mutate: removeUserFromGroup } = useRemoveUserFromGroup(queryClient, apiClient);
|
|
36
36
|
const [openAddUserDialog, setOpenAddUserDialog] = useState(false);
|
|
37
|
-
|
|
38
|
-
const [deleteId, setDeleteId] = useState();
|
|
39
|
-
return (_jsxs(_Fragment, { children: [groupUsers && groupUsers.length > 0 && (_jsx(Box, { sx: { maxWidth: 'md' }, children: _jsx(TableContainer, { children: _jsxs(Table, { size: 'small', children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [groupUsersTableColumns.map((col) => (_jsx(TableCell, { align: col.align || 'inherit', children: isStringTranslation(col.label)
|
|
40
|
-
? col.label[locale]
|
|
41
|
-
: col.label }, col.id))), _jsx(TableCell, { padding: 'none', children: '' })] }) }), _jsx(TableBody, { children: groupUsers?.map((user, rowIdx) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: user.username }), _jsx(TableCell, { children: user.firstName }), _jsx(TableCell, { children: user.lastName }), _jsx(TableCell, { padding: 'none', align: 'right', children: _jsx(IconButton, { size: 'small', onClick: (evt) => {
|
|
42
|
-
evt.stopPropagation();
|
|
43
|
-
setOpenConfirmationDialog(true);
|
|
44
|
-
setDeleteId(user.id);
|
|
45
|
-
}, children: _jsx(DeleteIcon, {}) }) })] }, rowIdx))) })] }) }) })), _jsx(Button, { variant: 'outlined', startIcon: _jsx(AddIcon, {}), onClick: () => setOpenAddUserDialog(true), sx: { marginTop: 2 }, children: groupsTranslations.addUser[locale] }), _jsx(AddItemDialog, { open: openAddUserDialog, onClose: () => setOpenAddUserDialog(false), onConfirm: (value) => {
|
|
37
|
+
return (_jsxs(_Fragment, { children: [groupUsers && groupUsers.length > 0 && (_jsx(Box, { sx: { maxWidth: 'md' }, children: _jsx(Table, { rows: groupUsers, columns: groupUsersTableColumns, onDelete: (user) => removeUserFromGroup({ userId: user.id, groupId: group.id }) }) })), _jsx(Button, { variant: 'outlined', startIcon: _jsx(AddIcon, {}), onClick: () => setOpenAddUserDialog(true), sx: { marginTop: 2 }, children: t(groupsTranslations.addUser) }), _jsx(AddItemDialog, { open: openAddUserDialog, onClose: () => setOpenAddUserDialog(false), onConfirm: (value) => {
|
|
46
38
|
if (value) {
|
|
47
39
|
addUserToGroup({ userId: value?.value, groupId: group.id });
|
|
48
40
|
}
|
|
49
41
|
}, title: groupsTranslations.addUser, options: users?.map((user) => ({
|
|
50
42
|
value: user.id,
|
|
51
43
|
label: user.username || '',
|
|
52
|
-
})) })
|
|
53
|
-
? removeUserFromGroup({ userId: deleteId, groupId: group.id })
|
|
54
|
-
: {} })] }));
|
|
44
|
+
})) })] }));
|
|
55
45
|
};
|
|
56
46
|
export default GroupUsers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Groups.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/Groups.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAWnD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Groups.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/Groups.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAWnD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMlD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAE5B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;IAE3D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;IAE1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,MAAM,uFAOT,WAAW,sBAgJb,CAAC;eAEa,MAAM"}
|
|
@@ -5,7 +5,7 @@ import GroupAddIcon from '@mui/icons-material/GroupAdd';
|
|
|
5
5
|
import { Box, Button, Grid, IconButton, Link } from '@mui/material';
|
|
6
6
|
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
|
|
7
7
|
import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';
|
|
8
|
-
import { useAPI
|
|
8
|
+
import { useAPI } from '@deix/rossini-core';
|
|
9
9
|
import { SearchField } from '..';
|
|
10
10
|
import CreateGroupDialog from './CreateGroupDialog';
|
|
11
11
|
import GroupsTable from './GroupsTable';
|
|
@@ -14,8 +14,10 @@ import { useDeleteGroup, useGroups } from '../../utils/hooks/groups';
|
|
|
14
14
|
import GroupTabs from './GroupTabs';
|
|
15
15
|
import { useQueryClient } from '@tanstack/react-query';
|
|
16
16
|
import { APIClientProvider } from '../../utils/hooks/useAPIClient';
|
|
17
|
+
import commonTranslations from '../../lang/common';
|
|
18
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
17
19
|
const Groups = ({ apiUrl, additionalTabs = [], onGroupUpdate, onGroupCreate, onGroupDelete, editName, }) => {
|
|
18
|
-
const
|
|
20
|
+
const t = useTranslate();
|
|
19
21
|
const apiClient = useAPI(apiUrl);
|
|
20
22
|
const queryClient = useQueryClient();
|
|
21
23
|
const { data: groups } = useGroups(apiClient);
|
|
@@ -60,10 +62,10 @@ const Groups = ({ apiUrl, additionalTabs = [], onGroupUpdate, onGroupCreate, onG
|
|
|
60
62
|
paddingTop: 3,
|
|
61
63
|
paddingLeft: 3,
|
|
62
64
|
paddingRight: 3,
|
|
63
|
-
}, children: [!selectedGroup && (_jsxs(_Fragment, { children: [_jsxs(Grid, { container: true, spacing: 2, sx: { marginBottom: 2 }, children: [_jsx(Grid, { children: _jsx(SearchField, { placeholder: groupsTranslations.search
|
|
65
|
+
}, children: [!selectedGroup && (_jsxs(_Fragment, { children: [_jsxs(Grid, { container: true, spacing: 2, sx: { marginBottom: 2 }, children: [_jsx(Grid, { children: _jsx(SearchField, { placeholder: t(groupsTranslations.search), onSearch: (value) => setSearchString(value) }) }), _jsx(Grid, { children: _jsx(Button, { variant: 'contained', startIcon: _jsx(GroupAddIcon, {}), onClick: () => {
|
|
64
66
|
setOpenGroupDialog(true);
|
|
65
67
|
setSelectedGroup(undefined);
|
|
66
|
-
}, children: groupsTranslations.new
|
|
68
|
+
}, children: t(groupsTranslations.new) }) })] }), _jsx(GroupsTable, { groups: filteredGroups, selectedGroup: selectedGroup, setSelectedGroup: (group) => {
|
|
67
69
|
setSelectedGroup(group);
|
|
68
70
|
}, onDelete: handleDelete })] })), selectedGroup && (_jsxs(Box, { sx: {
|
|
69
71
|
display: 'flex',
|
|
@@ -74,7 +76,7 @@ const Groups = ({ apiUrl, additionalTabs = [], onGroupUpdate, onGroupCreate, onG
|
|
|
74
76
|
display: 'flex',
|
|
75
77
|
flexDirection: 'row',
|
|
76
78
|
alignItems: 'center',
|
|
77
|
-
}, children: [_jsx(IconButton, { "aria-label":
|
|
79
|
+
}, children: [_jsx(IconButton, { "aria-label": t(commonTranslations.back), color: 'primary', onClick: () => setSelectedGroup(undefined), sx: { mr: 2 }, children: _jsx(ArrowBackIcon, {}) }), _jsx(Link, { underline: 'none', href: '#', onClick: () => setSelectedGroup(undefined), children: t(groupsTranslations.title) }), _jsx(KeyboardArrowRightIcon, {}), selectedGroup.name] }), _jsx(GroupTabs, { group: selectedGroup, additionalTabs: additionalTabs, onGroupUpdate: onGroupUpdate, editName: editName })] })), _jsx(CreateGroupDialog, { open: openGroupDialog, onClose: () => {
|
|
78
80
|
setOpenGroupDialog(false);
|
|
79
81
|
}, onGroupCreate: onGroupCreate })] }) }));
|
|
80
82
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupsTable.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupsTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupsTable.d.ts","sourceRoot":"","sources":["../../../../src/components/groups/GroupsTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAa3C,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,QAAA,MAAM,WAAW,2DAKd,UAAU,sBA4DZ,CAAC;eAEa,WAAW"}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { isStringTranslation, useLocale } from '@deix/rossini-core';
|
|
3
2
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
4
3
|
import { IconButton, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, useTheme, } from '@mui/material';
|
|
5
4
|
import { useState } from 'react';
|
|
6
5
|
import DeleteConfirmationDialog from '../DeleteConfirmationDialog';
|
|
6
|
+
import groupsTranslations from '../../lang/groups';
|
|
7
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
7
8
|
const groupsTableColumns = [
|
|
8
9
|
{
|
|
9
10
|
id: 'name',
|
|
10
|
-
label:
|
|
11
|
+
label: groupsTranslations.nameColumn,
|
|
11
12
|
},
|
|
12
13
|
];
|
|
13
14
|
const GroupsTable = ({ groups = [], selectedGroup, setSelectedGroup, onDelete, }) => {
|
|
14
|
-
const
|
|
15
|
+
const t = useTranslate();
|
|
15
16
|
const muiTheme = useTheme();
|
|
16
17
|
const [openConfirmationDialog, setOpenConfirmationDialog] = useState(false);
|
|
17
18
|
const [deleteGroup, setDeleteGroup] = useState();
|
|
18
|
-
return (_jsxs(_Fragment, { children: [_jsx(TableContainer, { children: _jsxs(Table, { size: 'small', children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [groupsTableColumns.map((col) => (_jsx(TableCell, { align: col.align || 'inherit', children:
|
|
19
|
-
? col.label[locale]
|
|
20
|
-
: col.label }, col.id))), _jsx(TableCell, { padding: 'none', children: '' })] }) }), _jsx(TableBody, { children: groups.map((group, rowIdx) => (_jsxs(TableRow, { onClick: () => setSelectedGroup(group), sx: {
|
|
19
|
+
return (_jsxs(_Fragment, { children: [_jsx(TableContainer, { children: _jsxs(Table, { size: 'small', children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [groupsTableColumns.map((col) => (_jsx(TableCell, { align: col.align || 'inherit', children: t(col.label) }, col.id))), _jsx(TableCell, { padding: 'none', children: '' })] }) }), _jsx(TableBody, { children: groups.map((group, rowIdx) => (_jsxs(TableRow, { onClick: () => setSelectedGroup(group), sx: {
|
|
21
20
|
cursor: 'pointer',
|
|
22
21
|
background: selectedGroup && group.id === selectedGroup.id
|
|
23
22
|
? muiTheme.palette.primary.light
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { ReactElement, ReactNode } from 'react';
|
|
2
|
+
import { StringTranslation } from '@deix/rossini-core';
|
|
3
|
+
import { DataGridProps, GridRowId, GridValidRowModel } from '@mui/x-data-grid';
|
|
4
|
+
export interface TableColumn<T extends GridValidRowModel> {
|
|
5
|
+
field: string;
|
|
6
|
+
label: string | StringTranslation;
|
|
7
|
+
type?: 'string' | 'number' | 'boolean' | 'date' | 'dateTime';
|
|
8
|
+
align?: 'left' | 'right' | 'center';
|
|
9
|
+
width?: number;
|
|
10
|
+
minWidth?: number;
|
|
11
|
+
flex?: number;
|
|
12
|
+
sortable?: boolean;
|
|
13
|
+
valueGetter?: (row: T) => unknown;
|
|
14
|
+
renderCell?: (row: T) => ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export interface TableProps<T extends GridValidRowModel> extends Omit<DataGridProps<T>, 'rows' | 'columns' | 'onRowClick'> {
|
|
17
|
+
rows?: T[];
|
|
18
|
+
columns: TableColumn<T>[];
|
|
19
|
+
rowIdColumn?: string;
|
|
20
|
+
pageSizeOptions?: number[];
|
|
21
|
+
onRowClick?: (row: T) => void;
|
|
22
|
+
selectedRowId?: GridRowId;
|
|
23
|
+
onDelete?: (row: T) => void;
|
|
24
|
+
additionalActions?: (row: T) => ReactElement[];
|
|
25
|
+
noDataLabel?: string | StringTranslation;
|
|
26
|
+
}
|
|
27
|
+
declare const Table: <T extends GridValidRowModel>({ rows, columns, rowIdColumn, pageSizeOptions, onRowClick, selectedRowId, onDelete, additionalActions, noDataLabel, initialState, localeText, sx, ...props }: TableProps<T>) => React.JSX.Element;
|
|
28
|
+
export default Table;
|
|
29
|
+
//# sourceMappingURL=Table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/components/tables/Table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AACjE,OAAO,EAAU,iBAAiB,EAAa,MAAM,oBAAoB,CAAC;AAK1E,OAAO,EAEL,aAAa,EAMb,SAAS,EACT,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAY1B,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,iBAAiB;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAClC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAElC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,IAAI,CACnE,aAAa,CAAC,CAAC,CAAC,EAChB,MAAM,GAAG,SAAS,GAAG,YAAY,CAClC;IACC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAE9B,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,YAAY,EAAE,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC1C;AAED,QAAA,MAAM,KAAK,GAAI,CAAC,SAAS,iBAAiB,gKAcvC,UAAU,CAAC,CAAC,CAAC,sBAwHf,CAAC;eAEa,KAAK"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useLocale } from '@deix/rossini-core';
|
|
5
|
+
import CheckIcon from '@mui/icons-material/Check';
|
|
6
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
7
|
+
import DeleteIcon from '@mui/icons-material/Delete';
|
|
8
|
+
import { Tooltip, useTheme } from '@mui/material';
|
|
9
|
+
import { DataGrid, GridActionsCell, GridActionsCellItem, } from '@mui/x-data-grid';
|
|
10
|
+
import { enUS, itIT } from '@mui/x-data-grid/locales';
|
|
11
|
+
import DeleteConfirmationDialog from '../DeleteConfirmationDialog';
|
|
12
|
+
import tablesTranslations from '../../lang/tables';
|
|
13
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
14
|
+
// DataGrid built-in texts (pagination, sorting, ...); English is the default
|
|
15
|
+
const dataGridLocales = {
|
|
16
|
+
en: enUS.components.MuiDataGrid.defaultProps.localeText,
|
|
17
|
+
it: itIT.components.MuiDataGrid.defaultProps.localeText,
|
|
18
|
+
};
|
|
19
|
+
const Table = ({ rows = [], columns, rowIdColumn = 'id', pageSizeOptions = [25, 50, 100], onRowClick, selectedRowId, onDelete, additionalActions, noDataLabel = tablesTranslations.noData, initialState, localeText, sx, ...props }) => {
|
|
20
|
+
const locale = useLocale();
|
|
21
|
+
const t = useTranslate();
|
|
22
|
+
const theme = useTheme();
|
|
23
|
+
const [openConfirmationDialog, setOpenConfirmationDialog] = useState(false);
|
|
24
|
+
const [deleteRow, setDeleteRow] = useState();
|
|
25
|
+
const gridColumns = columns.map((col) => ({
|
|
26
|
+
field: col.field,
|
|
27
|
+
headerName: t(col.label),
|
|
28
|
+
type: col.type,
|
|
29
|
+
align: col.align,
|
|
30
|
+
headerAlign: col.align,
|
|
31
|
+
width: col.width,
|
|
32
|
+
minWidth: col.minWidth,
|
|
33
|
+
flex: col.width ? undefined : (col.flex ?? 1),
|
|
34
|
+
sortable: col.sortable ?? true,
|
|
35
|
+
valueGetter: col.valueGetter
|
|
36
|
+
? (_value, row) => col.valueGetter?.(row)
|
|
37
|
+
: undefined,
|
|
38
|
+
renderCell: (params) => {
|
|
39
|
+
if (col.renderCell) {
|
|
40
|
+
return col.renderCell(params.row);
|
|
41
|
+
}
|
|
42
|
+
if (col.type === 'boolean') {
|
|
43
|
+
return params.value ? _jsx(CheckIcon, {}) : _jsx(CloseIcon, {});
|
|
44
|
+
}
|
|
45
|
+
return (_jsx(Tooltip, { title: String(params.formattedValue ?? ''), children: _jsx("span", { children: params.formattedValue }) }));
|
|
46
|
+
},
|
|
47
|
+
}));
|
|
48
|
+
if (onDelete || additionalActions) {
|
|
49
|
+
gridColumns.push({
|
|
50
|
+
field: 'actions',
|
|
51
|
+
type: 'actions',
|
|
52
|
+
renderCell: (params) => {
|
|
53
|
+
const actionItems = [];
|
|
54
|
+
if (additionalActions) {
|
|
55
|
+
actionItems.push(...additionalActions(params.row));
|
|
56
|
+
}
|
|
57
|
+
if (onDelete) {
|
|
58
|
+
actionItems.push(_jsx(GridActionsCellItem, { icon: _jsx(DeleteIcon, {}), label: t(tablesTranslations.delete), onClick: (evt) => {
|
|
59
|
+
evt.stopPropagation();
|
|
60
|
+
setDeleteRow(params.row);
|
|
61
|
+
setOpenConfirmationDialog(true);
|
|
62
|
+
} }, 'delete'));
|
|
63
|
+
}
|
|
64
|
+
return _jsx(GridActionsCell, { ...params, children: actionItems });
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return (_jsxs(_Fragment, { children: [_jsx(DataGrid, { rows: rows, columns: gridColumns, getRowId: (row) => row[rowIdColumn], pageSizeOptions: pageSizeOptions, initialState: {
|
|
69
|
+
...initialState,
|
|
70
|
+
pagination: {
|
|
71
|
+
paginationModel: { page: 0, pageSize: pageSizeOptions[0] },
|
|
72
|
+
...initialState?.pagination,
|
|
73
|
+
},
|
|
74
|
+
}, onRowClick: onRowClick ? (params) => onRowClick(params.row) : undefined, getRowClassName: (params) => selectedRowId !== undefined && params.id === selectedRowId
|
|
75
|
+
? 'Table-selectedRow'
|
|
76
|
+
: '', localeText: {
|
|
77
|
+
...(dataGridLocales[locale] ?? dataGridLocales.en),
|
|
78
|
+
noRowsLabel: t(noDataLabel),
|
|
79
|
+
...localeText,
|
|
80
|
+
}, density: 'compact', autoHeight: true, disableColumnMenu: true, disableRowSelectionOnClick: true, sx: {
|
|
81
|
+
'& .Table-selectedRow': {
|
|
82
|
+
backgroundColor: theme.palette.primary.light,
|
|
83
|
+
},
|
|
84
|
+
...(!!onRowClick && {
|
|
85
|
+
'& .MuiDataGrid-row:hover': {
|
|
86
|
+
cursor: 'pointer',
|
|
87
|
+
backgroundColor: theme.palette.primary.light,
|
|
88
|
+
},
|
|
89
|
+
'.MuiDataGrid-cell:focus, .MuiDataGrid-cell:focus-within': {
|
|
90
|
+
outline: 'none',
|
|
91
|
+
},
|
|
92
|
+
}),
|
|
93
|
+
...sx,
|
|
94
|
+
}, ...props }), onDelete && (_jsx(DeleteConfirmationDialog, { open: openConfirmationDialog, onClose: () => setOpenConfirmationDialog(false), onConfirm: () => (deleteRow ? onDelete(deleteRow) : {}) }))] }));
|
|
95
|
+
};
|
|
96
|
+
export default Table;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateUserDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/users/CreateUserDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"CreateUserDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/users/CreateUserDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,QAAA,MAAM,gBAAgB,qEAMnB,qBAAqB,sBA6CvB,CAAC;eAEa,gBAAgB"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useLocale } from '@deix/rossini-core';
|
|
3
2
|
import { Dialog, DialogContent, DialogTitle } from '@mui/material';
|
|
4
3
|
import { useQueryClient } from '@tanstack/react-query';
|
|
5
4
|
import { getUsers, useAddUser } from '../../utils/hooks/users';
|
|
6
5
|
import UserForm from './UserForm';
|
|
7
6
|
import usersTranslations from '../../lang/users';
|
|
8
7
|
import { useAPIClient } from '../../utils/hooks/useAPIClient';
|
|
8
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
9
9
|
const CreateUserDialog = ({ open, onClose, onUserCreate, filteredGroup, emailAsUsername, }) => {
|
|
10
|
-
const
|
|
10
|
+
const t = useTranslate();
|
|
11
11
|
const apiClient = useAPIClient();
|
|
12
12
|
const queryClient = useQueryClient();
|
|
13
13
|
const addUserMutation = useAddUser(queryClient, apiClient);
|
|
@@ -31,6 +31,6 @@ const CreateUserDialog = ({ open, onClose, onUserCreate, filteredGroup, emailAsU
|
|
|
31
31
|
});
|
|
32
32
|
onClose();
|
|
33
33
|
};
|
|
34
|
-
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: usersTranslations.create
|
|
34
|
+
return (_jsxs(Dialog, { open: open, fullWidth: true, maxWidth: 'sm', onClose: onClose, children: [_jsx(DialogTitle, { children: t(usersTranslations.create) }), _jsx(DialogContent, { children: _jsx(UserForm, { mode: 'create', onSave: handleSave, onCancel: onClose, emailAsUsername: emailAsUsername }) })] }));
|
|
35
35
|
};
|
|
36
36
|
export default CreateUserDialog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserCredentials.d.ts","sourceRoot":"","sources":["../../../../src/components/users/UserCredentials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"UserCredentials.d.ts","sourceRoot":"","sources":["../../../../src/components/users/UserCredentials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAQzC,UAAU,oBAAoB;IAC5B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,QAAA,MAAM,eAAe,aAAc,oBAAoB,sBAkBtD,CAAC;eAEa,eAAe"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useLocale } from '@deix/rossini-core';
|
|
3
2
|
import { Box, Button } from '@mui/material';
|
|
4
3
|
import usersTranslations from '../../lang/users';
|
|
5
4
|
import { useSendUpdatePasswordEmail } from '../../utils/hooks/users';
|
|
6
5
|
import { useQueryClient } from '@tanstack/react-query';
|
|
7
6
|
import { useAPIClient } from '../../utils/hooks/useAPIClient';
|
|
7
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
8
8
|
const UserCredentials = ({ user }) => {
|
|
9
|
-
const
|
|
9
|
+
const t = useTranslate();
|
|
10
10
|
const apiClient = useAPIClient();
|
|
11
11
|
const queryClient = useQueryClient();
|
|
12
12
|
const { mutate: sendResetPasswordEmail } = useSendUpdatePasswordEmail(queryClient, apiClient);
|
|
13
|
-
return (_jsx(Box, { sx: { mt: 2 }, children: _jsx(Button, { variant: 'contained', onClick: () => sendResetPasswordEmail(user.id), children: usersTranslations.sendResetPasswordEmail
|
|
13
|
+
return (_jsx(Box, { sx: { mt: 2 }, children: _jsx(Button, { variant: 'contained', onClick: () => sendResetPasswordEmail(user.id), children: t(usersTranslations.sendResetPasswordEmail) }) }));
|
|
14
14
|
};
|
|
15
15
|
export default UserCredentials;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserForm.d.ts","sourceRoot":"","sources":["../../../../src/components/users/UserForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"UserForm.d.ts","sourceRoot":"","sources":["../../../../src/components/users/UserForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,MAAM,WAAW,cAAe,SAAQ,IAAI;IAC1C,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,QAAA,MAAM,QAAQ,qEAOX,aAAa,sBA0Kf,CAAC;eAEa,QAAQ"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useLocale } from '@deix/rossini-core';
|
|
3
2
|
import { Button, FormControlLabel, Grid, Switch, TextField, } from '@mui/material';
|
|
4
3
|
import { Controller, useForm } from 'react-hook-form';
|
|
5
4
|
import { useEffect } from 'react';
|
|
6
5
|
import usersTranslations from '../../lang/users';
|
|
6
|
+
import useTranslate from '../../utils/hooks/useTranslate';
|
|
7
7
|
const UserForm = ({ user, onSave, onCancel, mode = 'create', editUsername, emailAsUsername = false, }) => {
|
|
8
|
-
const
|
|
8
|
+
const t = useTranslate();
|
|
9
9
|
const { control, formState: { errors }, handleSubmit, setValue, } = useForm({
|
|
10
10
|
defaultValues: {
|
|
11
11
|
id: user?.id,
|
|
@@ -37,14 +37,12 @@ const UserForm = ({ user, onSave, onCancel, mode = 'create', editUsername, email
|
|
|
37
37
|
const onSubmit = (data) => {
|
|
38
38
|
onSave(data);
|
|
39
39
|
};
|
|
40
|
-
return (_jsx("form", { onSubmit: (event) => void handleSubmit(onSubmit)(event), children: _jsxs(Grid, { container: true, spacing: 2, sx: { mt: 2, maxWidth: 'sm', justifyContent: 'stretch' }, children: [!emailAsUsername && (_jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'username', control: control, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, label: usersTranslations.username
|
|
41
|
-
? usersTranslations.requiredField[locale]
|
|
42
|
-
: undefined, label: usersTranslations.email[locale], sx: { flexShrink: 0 }, ...field })) }) }), _jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'enabled', control: control, render: ({ field }) => (_jsx(FormControlLabel, { sx: { ml: 1 }, control: _jsx(Switch, { checked: field.value, size: 'small', ...field }), label: usersTranslations.enabled[locale] })) }) }), mode === 'create' && (_jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'sendEmailOnCreation', control: control, render: ({ field }) => (_jsx(FormControlLabel, { sx: { ml: 1 }, control: _jsx(Switch, { checked: field.value, size: 'small', ...field }), label: usersTranslations.sendResetPasswordEmail[locale] })) }) })), _jsxs(Grid, { sx: {
|
|
40
|
+
return (_jsx("form", { onSubmit: (event) => void handleSubmit(onSubmit)(event), children: _jsxs(Grid, { container: true, spacing: 2, sx: { mt: 2, maxWidth: 'sm', justifyContent: 'stretch' }, children: [!emailAsUsername && (_jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'username', control: control, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, label: t(usersTranslations.username), disabled: mode === 'modify' && !editUsername, sx: { flexShrink: 0 }, ...field })) }) })), _jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'firstName', control: control, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, label: t(usersTranslations.firstName), sx: { flexShrink: 0 }, ...field })) }) }), _jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'lastName', control: control, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, label: t(usersTranslations.lastName), sx: { flexShrink: 0 }, ...field })) }) }), _jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'email', control: control, rules: { required: true }, render: ({ field }) => (_jsx(TextField, { size: 'small', fullWidth: true, error: !!errors.email, helperText: errors.email ? t(usersTranslations.requiredField) : undefined, label: t(usersTranslations.email), sx: { flexShrink: 0 }, ...field })) }) }), _jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'enabled', control: control, render: ({ field }) => (_jsx(FormControlLabel, { sx: { ml: 1 }, control: _jsx(Switch, { checked: field.value, size: 'small', ...field }), label: t(usersTranslations.enabled) })) }) }), mode === 'create' && (_jsx(Grid, { size: { xs: 12 }, children: _jsx(Controller, { name: 'sendEmailOnCreation', control: control, render: ({ field }) => (_jsx(FormControlLabel, { sx: { ml: 1 }, control: _jsx(Switch, { checked: field.value, size: 'small', ...field }), label: t(usersTranslations.sendResetPasswordEmail) })) }) })), _jsxs(Grid, { sx: {
|
|
43
41
|
mt: 2,
|
|
44
42
|
display: 'flex',
|
|
45
43
|
justifyContent: 'flex-end',
|
|
46
44
|
gap: 2,
|
|
47
45
|
width: '100%',
|
|
48
|
-
}, children: [mode === 'create' && (_jsx(Button, { variant: 'outlined', onClick: onCancel, children: usersTranslations.cancel
|
|
46
|
+
}, children: [mode === 'create' && (_jsx(Button, { variant: 'outlined', onClick: onCancel, children: t(usersTranslations.cancel) })), _jsx(Button, { variant: 'contained', type: 'submit', children: t(usersTranslations.save) })] })] }) }));
|
|
49
47
|
};
|
|
50
48
|
export default UserForm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserGroups.d.ts","sourceRoot":"","sources":["../../../../src/components/users/UserGroups.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"UserGroups.d.ts","sourceRoot":"","sources":["../../../../src/components/users/UserGroups.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAuBzC,UAAU,eAAe;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,QAAA,MAAM,UAAU,aAAc,eAAe,sBA0F5C,CAAC;eAEa,UAAU"}
|