@fluxo-dev/shell 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/index.esm.css +115 -0
  2. package/index.esm.d.ts +1 -0
  3. package/index.esm.js +68195 -0
  4. package/package.json +4 -1
  5. package/src/index.d.ts +1 -0
  6. package/src/lib/app.d.ts +16 -0
  7. package/src/lib/components/error-page/404.d.ts +1 -0
  8. package/src/lib/components/routes/main-routes.d.ts +6 -0
  9. package/src/lib/layouts/blank/blank-layout.d.ts +2 -0
  10. package/src/lib/layouts/main/app-bar.d.ts +9 -0
  11. package/src/lib/layouts/main/app-layout.d.ts +5 -0
  12. package/src/lib/layouts/main/content.d.ts +2 -0
  13. package/src/lib/layouts/main/footer-bar.d.ts +5 -0
  14. package/src/lib/layouts/main/navbar-item.d.ts +12 -0
  15. package/src/lib/layouts/main/navbar.d.ts +1 -0
  16. package/src/lib/layouts/main/search-bar.d.ts +5 -0
  17. package/src/lib/layouts/main/shell-spotlight.d.ts +2 -0
  18. package/src/lib/models/app-jit.d.ts +5 -0
  19. package/src/lib/pages/general/fluxo-plugin-loader.d.ts +7 -0
  20. package/src/lib/pages/login/account-confirmation.d.ts +2 -0
  21. package/src/lib/pages/login/change-password.d.ts +2 -0
  22. package/src/lib/pages/login/forgot-password.d.ts +2 -0
  23. package/src/lib/pages/login/login-page.d.ts +2 -0
  24. package/src/lib/pages/login/reset-password.d.ts +2 -0
  25. package/src/lib/pages/settings/apps/add-jit-app.d.ts +5 -0
  26. package/src/lib/pages/settings/apps/app-item.d.ts +10 -0
  27. package/src/lib/pages/settings/apps/app-jit-item.d.ts +8 -0
  28. package/src/lib/pages/settings/apps/apps-list.d.ts +6 -0
  29. package/src/lib/pages/settings/apps/embedded-module-item.d.ts +10 -0
  30. package/src/lib/pages/settings/apps/install-or-upgrade-app.d.ts +6 -0
  31. package/src/lib/pages/settings/menu-designer/custom-node.d.ts +14 -0
  32. package/src/lib/pages/settings/menu-designer/menu-create-form.d.ts +5 -0
  33. package/src/lib/pages/settings/menu-designer/menu-designer.d.ts +1 -0
  34. package/src/lib/pages/settings/menu-designer/menu-item-edit.d.ts +8 -0
  35. package/src/lib/pages/settings/menu-designer/placeholder.d.ts +8 -0
  36. package/src/lib/pages/settings/security/components/domani-role/domain-role-form.d.ts +6 -0
  37. package/src/lib/pages/settings/security/components/domani-role/domain-role-grid.d.ts +1 -0
  38. package/src/lib/pages/settings/security/components/permission/create-custom-permission-form.d.ts +7 -0
  39. package/src/lib/pages/settings/security/components/permission/create-scope-form.d.ts +7 -0
  40. package/src/lib/pages/settings/security/components/permission/permission-grid.d.ts +1 -0
  41. package/src/lib/pages/settings/security/components/permission/permission-navigator.d.ts +8 -0
  42. package/src/lib/pages/settings/security/components/permission/update-permission.d.ts +5 -0
  43. package/src/lib/pages/settings/security/components/route-rule/route-rule-create-form.d.ts +7 -0
  44. package/src/lib/pages/settings/security/components/route-rule/route-rule-grid.d.ts +1 -0
  45. package/src/lib/pages/settings/security/components/user/user-form.d.ts +7 -0
  46. package/src/lib/pages/settings/security/components/user/users-grid.d.ts +1 -0
  47. package/src/lib/pages/settings/settings.d.ts +6 -0
  48. package/src/lib/pages/settings/token/token-row.d.ts +7 -0
  49. package/src/lib/pages/settings/token/tokens.d.ts +2 -0
  50. package/src/lib/pages/settings/ui/ui.d.ts +1 -0
  51. package/src/lib/services/app-jit-manager.d.ts +10 -0
  52. package/src/lib/services/app-menu.service.d.ts +5 -0
  53. package/src/lib/utils/icon-factory.d.ts +9 -0
  54. package/src/lib/utils/security/only-not-logged-route.d.ts +2 -0
  55. package/src/lib/utils/security/protected-route.d.ts +2 -0
  56. package/.babelrc +0 -12
  57. package/.eslintrc.json +0 -18
  58. package/jest.config.ts +0 -11
  59. package/project.json +0 -43
  60. package/src/index.ts +0 -1
  61. package/src/lib/app.module.css +0 -1
  62. package/src/lib/app.spec.tsx +0 -17
  63. package/src/lib/app.tsx +0 -374
  64. package/src/lib/components/error-page/404.tsx +0 -16
  65. package/src/lib/components/routes/main-routes.tsx +0 -26
  66. package/src/lib/layouts/blank/blank-layout.tsx +0 -10
  67. package/src/lib/layouts/main/app-bar.tsx +0 -192
  68. package/src/lib/layouts/main/app-layout.tsx +0 -52
  69. package/src/lib/layouts/main/content.tsx +0 -10
  70. package/src/lib/layouts/main/footer-bar.tsx +0 -76
  71. package/src/lib/layouts/main/navbar-item.module.css +0 -49
  72. package/src/lib/layouts/main/navbar-item.tsx +0 -129
  73. package/src/lib/layouts/main/navbar.tsx +0 -38
  74. package/src/lib/layouts/main/search-bar.tsx +0 -44
  75. package/src/lib/layouts/main/shell-spotlight.tsx +0 -58
  76. package/src/lib/models/app-jit.ts +0 -6
  77. package/src/lib/pages/general/fluxo-plugin-loader.tsx +0 -22
  78. package/src/lib/pages/login/account-confirmation.tsx +0 -86
  79. package/src/lib/pages/login/change-password.tsx +0 -58
  80. package/src/lib/pages/login/forgot-password.tsx +0 -53
  81. package/src/lib/pages/login/login-page.tsx +0 -70
  82. package/src/lib/pages/login/reset-password.tsx +0 -91
  83. package/src/lib/pages/settings/apps/add-jit-app.tsx +0 -79
  84. package/src/lib/pages/settings/apps/app-item.tsx +0 -157
  85. package/src/lib/pages/settings/apps/app-jit-item.tsx +0 -105
  86. package/src/lib/pages/settings/apps/apps-list.tsx +0 -171
  87. package/src/lib/pages/settings/apps/embedded-module-item.tsx +0 -66
  88. package/src/lib/pages/settings/apps/install-or-upgrade-app.tsx +0 -105
  89. package/src/lib/pages/settings/menu-designer/custom-node.module.css +0 -34
  90. package/src/lib/pages/settings/menu-designer/custom-node.tsx +0 -160
  91. package/src/lib/pages/settings/menu-designer/menu-create-form.tsx +0 -109
  92. package/src/lib/pages/settings/menu-designer/menu-designer.module.css +0 -19
  93. package/src/lib/pages/settings/menu-designer/menu-designer.tsx +0 -463
  94. package/src/lib/pages/settings/menu-designer/menu-item-edit.tsx +0 -115
  95. package/src/lib/pages/settings/menu-designer/placeholder.module.css +0 -8
  96. package/src/lib/pages/settings/menu-designer/placeholder.tsx +0 -13
  97. package/src/lib/pages/settings/security/components/domani-role/domain-role-form.tsx +0 -67
  98. package/src/lib/pages/settings/security/components/domani-role/domain-role-grid.tsx +0 -139
  99. package/src/lib/pages/settings/security/components/permission/create-custom-permission-form.tsx +0 -64
  100. package/src/lib/pages/settings/security/components/permission/create-scope-form.tsx +0 -158
  101. package/src/lib/pages/settings/security/components/permission/permission-grid.tsx +0 -304
  102. package/src/lib/pages/settings/security/components/permission/permission-navigator.tsx +0 -320
  103. package/src/lib/pages/settings/security/components/permission/update-permission.tsx +0 -54
  104. package/src/lib/pages/settings/security/components/route-rule/route-rule-create-form.tsx +0 -59
  105. package/src/lib/pages/settings/security/components/route-rule/route-rule-grid.tsx +0 -229
  106. package/src/lib/pages/settings/security/components/user/user-form.tsx +0 -123
  107. package/src/lib/pages/settings/security/components/user/users-grid.tsx +0 -127
  108. package/src/lib/pages/settings/settings.tsx +0 -298
  109. package/src/lib/pages/settings/token/token-row.tsx +0 -69
  110. package/src/lib/pages/settings/token/tokens.tsx +0 -73
  111. package/src/lib/pages/settings/ui/ui.tsx +0 -149
  112. package/src/lib/services/app-jit-manager.ts +0 -92
  113. package/src/lib/services/app-menu.service.ts +0 -35
  114. package/src/lib/utils/icon-factory.tsx +0 -25
  115. package/src/lib/utils/security/only-not-logged-route.tsx +0 -17
  116. package/src/lib/utils/security/protected-route.tsx +0 -47
  117. package/tsconfig.json +0 -20
  118. package/tsconfig.lib.json +0 -24
  119. package/tsconfig.spec.json +0 -20
@@ -1,66 +0,0 @@
1
- import {
2
- EmbeddedModule, FluxoClientSys
3
- } from "@fluxo-dev/api-client-base";
4
- import {Badge, Button, Group, Stack} from "@mantine/core";
5
- import React from "react";
6
- import {IconRefresh} from '@tabler/icons-react';
7
- import {showNotification} from "@mantine/notifications";
8
-
9
- export interface EmbeddedModuleItemProps {
10
- app: EmbeddedModule;
11
- onUpgrade?: (app: EmbeddedModule) => void;
12
- upgradable: {state: 'uptodate' | 'upgradable' | 'installable', version: string};
13
- }
14
- export function EmbeddedModuleItem(props: EmbeddedModuleItemProps) {
15
-
16
- const [updateInProgress, setUpdateInProgress] = React.useState(false);
17
-
18
- const installOrUpgrade = () => {
19
-
20
- setUpdateInProgress(true);
21
-
22
- FluxoClientSys.Instance.apps.installEmbeddedModule(props.app.getEmbeddedModule())
23
- .then(() => {
24
- showNotification({
25
- title: 'Operazione completata',
26
- message: `Il modulo (${props.app.name} - ${props.app.version}) è stata installata con successo`,
27
- color: 'green',
28
- })
29
- props.onUpgrade?.(props.app);
30
- setUpdateInProgress(false);
31
- })
32
- .catch(() => {
33
- showNotification({
34
- title: 'Operazione fallita',
35
- message: `Il modulo (${props.app.name} - ${props.app.version}) non è stata installata`,
36
- color: 'red',
37
- })
38
- setUpdateInProgress(false);
39
- })
40
- }
41
-
42
- return (
43
- <Group justify='space-between' style={{ border: '1px solid #dedede', padding: 15 }}>
44
- <Group>
45
- <Stack gap={0}>
46
- <span>{props.app.description} <small>({props.app.version})</small></span>
47
- <small>{props.app.name} - <b>{props.app.author}</b></small>
48
- </Stack>
49
- </Group>
50
- <Group>
51
- {props.upgradable?.state === 'upgradable' &&
52
- <Button loading={updateInProgress} leftSection={<IconRefresh size={18} />} onClick={installOrUpgrade} color="yellow">Aggiorna → {props.upgradable.version}</Button>
53
- }
54
- {props.upgradable?.state === 'uptodate' &&
55
- <>
56
- <Badge color="gray">Ultima versione</Badge>
57
- <Button onClick={installOrUpgrade}>Aggiorna menu</Button>
58
- </>
59
- }
60
- {props.upgradable?.state === 'installable' &&
61
- <Button loading={updateInProgress} leftSection={<IconRefresh size={18} />} onClick={installOrUpgrade} color="green">Installa → {props.upgradable.version}</Button>
62
- }
63
- </Group>
64
- </Group>
65
- )
66
- }
@@ -1,105 +0,0 @@
1
- import {Group, Text, useMantineTheme, rem, useMantineColorScheme} from '@mantine/core';
2
- import React from "react";
3
- import {IconApps, IconUpload, IconX} from '@tabler/icons-react';
4
- import {Dropzone, FileWithPath} from "@mantine/dropzone";
5
- import {FluxoClientSys} from "@fluxo-dev/api-client-base";
6
- import {showNotification} from "@mantine/notifications";
7
-
8
- export interface InstallOrUpgradeAppProps {
9
- onInstall?: () => void;
10
- mode: 'install' | 'upgrade';
11
- appIdToUpgrade?: number;
12
- }
13
-
14
- export function InstallOrUpgradeApp(props: InstallOrUpgradeAppProps) {
15
- const theme = useMantineTheme();
16
- const colorScheme = useMantineColorScheme();
17
-
18
- const installApp = (files: FileWithPath[]) => {
19
-
20
- const formData = new FormData();
21
- formData.append('file', files[0]);
22
-
23
- if(props.mode === 'install') {
24
- FluxoClientSys.Instance.apps.installApp(formData).then(() => {
25
- showNotification({
26
- title: 'Operazione completata',
27
- message: `L'applicazione è stata installata con successo`,
28
- color: 'green',
29
- })
30
- props.onInstall?.();
31
- }).catch((err) => {
32
- showNotification({
33
- title: 'Operazione fallita',
34
- message: `L'applicazione non è stata installata: ${err.message}`,
35
- color: 'red',
36
- })
37
- })
38
- } else {
39
-
40
- if(!props.appIdToUpgrade)
41
- return;
42
-
43
- FluxoClientSys.Instance.apps.upgradeApp(props.appIdToUpgrade, formData).then(() => {
44
- showNotification({
45
- title: 'Operazione completata',
46
- message: `L'applicazione è stata aggiornata con successo`,
47
- color: 'green',
48
- })
49
- props.onInstall?.();
50
- }).catch((err) => {
51
- showNotification({
52
- title: 'Operazione fallita',
53
- message: `L'applicazione non è stata aggiornata: ${err.message}`,
54
- color: 'red',
55
- })
56
- })
57
- }
58
- }
59
-
60
- return (
61
- <Dropzone
62
- onDrop={installApp}
63
- onReject={(files) => {
64
- showNotification({
65
- title: 'Operazione fallita',
66
- message: `L'applicazione non è stata installata: ${files[0].file.name} non è un file zip o la dimensione supera i 30mb`,
67
- color: 'red',
68
- })
69
- }}
70
- maxSize={1024 * 3 * 10000}
71
- multiple={false}
72
- accept={['zip']}
73
- {...props}
74
- >
75
- <Group justify="center" gap="xl" style={{ minHeight: rem(220), pointerEvents: 'none' }}>
76
- <Dropzone.Accept>
77
- <IconUpload
78
- size="3.2rem"
79
- stroke={1.5}
80
- color={theme.colors[theme.primaryColor][colorScheme.colorScheme === 'dark' ? 4 : 6]}
81
- />
82
- </Dropzone.Accept>
83
- <Dropzone.Reject>
84
- <IconX
85
- size="3.2rem"
86
- stroke={1.5}
87
- color={theme.colors.red[colorScheme.colorScheme === 'dark' ? 4 : 6]}
88
- />
89
- </Dropzone.Reject>
90
- <Dropzone.Idle>
91
- <IconApps size="3.2rem" stroke={1.5} />
92
- </Dropzone.Idle>
93
-
94
- <div>
95
- <Text size="xl" inline>
96
- Trascina il bundle dell'applicazione qui.
97
- </Text>
98
- <Text size="sm" color="dimmed" inline mt={7}>
99
- Il bundle deve essere in formato .zip e non deve superare i 30mb.
100
- </Text>
101
- </div>
102
- </Group>
103
- </Dropzone>
104
- );
105
- }
@@ -1,34 +0,0 @@
1
- .root {
2
- align-items: center;
3
- display: grid;
4
- grid-template-columns: auto auto 1fr auto;
5
- height: 32px;
6
- padding-inline-end: 8px;
7
- cursor: pointer;
8
- /*border-bottom: solid 1px #eee;*/
9
- }
10
-
11
- .root:hover {
12
- background: #e9ecef54;
13
- }
14
-
15
- .expandIconWrapper {
16
- align-items: center;
17
- font-size: 0;
18
- cursor: pointer;
19
- display: flex;
20
- height: 24px;
21
- justify-content: center;
22
- width: 32px;
23
- transition: transform linear 0.1s;
24
- transform: rotate(0deg);
25
- margin-left: 8px;
26
- }
27
-
28
- .expandIconWrapper.isOpen {
29
- transform: rotate(90deg);
30
- }
31
-
32
- .labelGridItem {
33
- padding-inline-start: 8px;
34
- }
@@ -1,160 +0,0 @@
1
- import React, {useState} from "react";
2
- import { NodeModel } from "@minoru/react-dnd-treeview";
3
- import styles from "./custom-node.module.css";
4
- import {
5
- IconBoxMultiple,
6
- IconChevronRight, IconEdit,
7
- IconExternalLink, IconEye,
8
- IconLock, IconPlus, IconSearch,
9
- IconTrash
10
- } from '@tabler/icons-react';
11
- import {ActionIcon, Badge, Group, Modal, Text, ThemeIcon, Tooltip} from "@mantine/core";
12
- import {AppMenuItem} from "@fluxo-dev/api-client-base";
13
- import {IconFactory} from "../../../utils/icon-factory";
14
- import {PermissionNavigator} from "../security/components/permission/permission-navigator";
15
-
16
- type Props = {
17
- nodes: NodeModel<AppMenuItem>[];
18
- node: NodeModel<AppMenuItem>;
19
- depth: number;
20
- isOpen: boolean;
21
- onToggle: (id: NodeModel["id"]) => void;
22
- onEditButtonClick: (item: AppMenuItem) => void;
23
- onDeleteButtonClick: (nodeId: string | number) => void;
24
- };
25
-
26
- export const CustomNode: React.FC<Props> = (props) => {
27
- const { droppable, data } = props.node;
28
- const indent = props.depth * 24;
29
-
30
- const [mouseHover, setMouseHover] = useState<boolean>(false);
31
- const [updatePermissionModalOpen, setUpdatePermissionModalOpen] = useState<boolean>(false);
32
- const [hasPermission, setHasPermission] = useState<boolean>(props.node!.data!.hasPermissions ?? false);
33
-
34
- const handleToggle = (e: React.MouseEvent) => {
35
- e.stopPropagation();
36
- props.onToggle(props.node.id);
37
- };
38
-
39
- const isLeaf = (): boolean => {
40
- const res = props.nodes.find(a => a.parent === props.node.id);
41
-
42
- return res !== undefined;
43
- }
44
-
45
- const updatePermissionButton = () => {
46
- return <ActionIcon color={!props.node.data!.id ? 'red' : hasPermission ? 'green' : undefined} onClick={() => {
47
- if(!props.node.data!.id) return;
48
- setUpdatePermissionModalOpen(true);
49
- }}><IconEye size={16} /></ActionIcon>;
50
- }
51
-
52
- return (
53
- <div
54
- id={props.node.id.toString()}
55
- className={`tree-node ${styles["root"]}`}
56
- style={{
57
- marginLeft: indent,
58
- marginBottom: 16,
59
- height: 48,
60
- border: '1px solid #e9ecef'
61
- }}
62
- >
63
- <div className={styles["expandIconWrapper"]}>
64
- <ThemeIcon variant="light" size={30}>
65
- {IconFactory.getIcon(props.node.data!.icon!)}
66
- </ThemeIcon>
67
- </div>
68
-
69
- <div className={styles["labelGridItem"]}
70
- onClick={handleToggle}>
71
- <Text variant="text" size={'xs'}>{`${props.node.text}`}</Text>
72
- </div>
73
-
74
- <div
75
- onClick={handleToggle}
76
- style={{width: isLeaf() ? 24 : 8}}
77
- className={`${styles["expandIconWrapper"]} ${
78
- props.isOpen ? styles["isOpen"] : ""
79
- }`}
80
- >
81
- {isLeaf() && (
82
- <div onClick={handleToggle}>
83
- <IconChevronRight size={16} />
84
- </div>
85
- )}
86
- </div>
87
-
88
- <div>
89
- <Group gap={8}>
90
-
91
- {props.node.data?.isProtectedByRule &&
92
- <Badge leftSection={
93
- <ActionIcon size="xs" radius="xl" variant="transparent">
94
- <IconLock size={12} />
95
- </ActionIcon>
96
- }>Regola attiva</Badge>
97
- }
98
-
99
- {!props.node.data!.id &&
100
- <Badge color={'green'} leftSection={
101
- <ActionIcon size="xs" radius="xl" variant="transparent">
102
- <IconPlus color={'green'} size={12} />
103
- </ActionIcon>
104
- }>Nuovo</Badge>
105
- }
106
-
107
- {props.node.data?.isGroup &&
108
- <Badge color={'red'} leftSection={
109
- <ActionIcon size="xs" radius="xl" variant="transparent">
110
- <IconBoxMultiple color={'red'} size={12} />
111
- </ActionIcon>
112
- }>Gruppo</Badge>
113
- }
114
-
115
- {!props.node.data?.isGroup && props.node.data?.hasIndex &&
116
- <Badge color={'yellow'} leftSection={
117
- <ActionIcon size="xs" radius="xl" variant="transparent">
118
- <IconSearch color={'orange'} size={12} />
119
- </ActionIcon>
120
- }>Indicizzato</Badge>
121
- }
122
-
123
- {props.node.data?.featureIdentifier === 'webclient.routing.externallink' &&
124
- <Badge color={'green'} leftSection={
125
- <ActionIcon size="xs" radius="xl" variant="transparent">
126
- <IconExternalLink color={'green'} size={12} />
127
- </ActionIcon>
128
- }>Esterno</Badge>
129
- }
130
-
131
- {!props.node.data?.id ?
132
- <Tooltip label={"Devi salvare il menu prima di impostare i permessi"}>
133
- {updatePermissionButton()}
134
- </Tooltip> :
135
- <>{updatePermissionButton()}</>
136
- }
137
- <ActionIcon onClick={() => props.onEditButtonClick(props.node.data!)}><IconEdit size={16} /></ActionIcon>
138
- <ActionIcon onClick={() => props.onDeleteButtonClick(props.node.id)}><IconTrash size={16} /></ActionIcon>
139
- </Group>
140
- </div>
141
-
142
- {props.node!.data!.id &&
143
- <Modal
144
- size={'60%'}
145
- centered
146
- opened={updatePermissionModalOpen}
147
- onClose={() => {
148
- setUpdatePermissionModalOpen(false);
149
- }}
150
- title={`Gestione permessi ${props.node!.data!.label}`}>
151
- <PermissionNavigator
152
- context={{type: 'menu', id: props.node!.data!.id!.toString()}}
153
- onUpdate={(pc) => setHasPermission(pc > 0)}
154
- />
155
- </Modal>
156
- }
157
-
158
- </div>
159
- );
160
- };
@@ -1,109 +0,0 @@
1
- import {Button, Group, Select, Stack, TextInput} from "@mantine/core";
2
- import {useCallback, useEffect, useState} from "react";
3
- import {AppMenuContextType, DomainRole, FluxoClientSys, User} from "@fluxo-dev/api-client-base";
4
- import {showNotification} from "@mantine/notifications";
5
-
6
- export interface MenuCreateFormProps {
7
- onCreated: () => void;
8
- onCancel: () => void;
9
- }
10
- export function MenuCreateForm(props: MenuCreateFormProps) {
11
-
12
- const [context, setContext] = useState<string | null>('1');
13
- const [user, setUser] = useState<string | null>();
14
- const [role, setRole] = useState<string | null>();
15
- const [name, setName] = useState<string>();
16
-
17
- const [roles, setRoles] = useState<DomainRole[]>([]);
18
- const [users, setUsers] = useState<User[]>([]);
19
-
20
- useEffect(() => {
21
- FluxoClientSys.Instance.security.domainRole.find(999,0).then((roles) => {
22
- setRoles(roles.results);
23
- })
24
-
25
- FluxoClientSys.Instance.security.user.getAllUsers().then((users) => {
26
- setUsers(users);
27
- })
28
- }, []);
29
-
30
- const saveButtonIsDisabled = useCallback(() => {
31
- if(context === '1' && !role) return true;
32
- if(context === '2' && !user) return true;
33
- if(!name) return true;
34
-
35
- return false;
36
- }, [context, role, user, name]);
37
-
38
- const onSubmit = () => {
39
- if(saveButtonIsDisabled()) return;
40
-
41
- FluxoClientSys.Instance.configuration.createAppMenu({
42
- contextType: context === '1' ? AppMenuContextType.DomainRole : AppMenuContextType.User,
43
- name: name!,
44
- domainRoleId: context === '1' ? +role! : 0,
45
- copyItemsFromWebMenuId: 0,
46
- userId: context === '2' ? user! : undefined,
47
- }).then(() => {
48
- props.onCreated();
49
- showNotification({
50
- title: 'Menu creato',
51
- message: 'Il menu è stato creato con successo',
52
- color: 'green',
53
- autoClose: 5000,
54
- })
55
- })
56
- .catch((err) => {
57
- showNotification({
58
- title: 'Errore',
59
- message: 'Si è verificato un errore durante la creazione del menu',
60
- color: 'red',
61
- autoClose: 5000,
62
- })
63
- })
64
- }
65
-
66
- return (
67
- <Stack>
68
- <TextInput
69
- label={'Descrizione'}
70
- value={name}
71
- onChange={(e) => setName(e.currentTarget.value)}
72
- placeholder={'Ruolo amministrazione'} />
73
- <Select
74
- allowDeselect={false}
75
- label={'Contesto'}
76
- value={context}
77
- description={'Seleziona il contesto in cui il menu sarà visibile (Ruolo o Utente)'}
78
- onChange={(value) => setContext(value)}
79
- data={[{label: 'Ruolo', value: '1'}, {label: 'Utente', value: '2'}]}
80
- />
81
-
82
- {context === '1' &&
83
- <Select
84
- label={'Ruolo'}
85
- value={role}
86
- onChange={(value) => setRole(value)}
87
- description={'Seleziona il ruolo a cui il menu sarà visibile'}
88
- data={roles.map((role) => ({label: `${role.name} (${role.identifier})`, value: role.id!.toString()}))}
89
- />
90
- }
91
-
92
- {context === '2' &&
93
- <Select
94
- label={'Utente'}
95
- value={user}
96
- onChange={(value) => setUser(value)}
97
- description={'Seleziona l\'utente a cui il menu sarà visibile'}
98
- data={users.map((user) => ({label: `${user.userData.FirstName} ${user.userData.LastName} (${user.email})`, value: user.id!.toString()}))}
99
- />
100
- }
101
-
102
- <Group justify={'end'}>
103
- <Button onClick={props.onCancel} variant={'outline'}>Annulla</Button>
104
- <Button disabled={saveButtonIsDisabled()} onClick={onSubmit}>Salva</Button>
105
- </Group>
106
-
107
- </Stack>
108
- )
109
- }
@@ -1,19 +0,0 @@
1
- .app {
2
- height: 100%;
3
- }
4
-
5
- .treeRoot {
6
- height: 100%;
7
- }
8
-
9
- .draggingSource {
10
- opacity: 0.3;
11
- }
12
-
13
- .placeholderContainer {
14
- position: relative;
15
- }
16
-
17
- .dropTarget {
18
- background-color: #e8f0fe;
19
- }