@deix/rossini-identity-management 0.1.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.
Files changed (126) hide show
  1. package/README.md +6 -0
  2. package/lib/app/[locale]/groups/page.d.ts +4 -0
  3. package/lib/app/[locale]/groups/page.d.ts.map +1 -0
  4. package/lib/app/[locale]/groups/page.js +9 -0
  5. package/lib/app/[locale]/layout.d.ts +10 -0
  6. package/lib/app/[locale]/layout.d.ts.map +1 -0
  7. package/lib/app/[locale]/layout.js +24 -0
  8. package/lib/app/[locale]/users/page.d.ts +4 -0
  9. package/lib/app/[locale]/users/page.d.ts.map +1 -0
  10. package/lib/app/[locale]/users/page.js +9 -0
  11. package/lib/app/layout.d.ts +13 -0
  12. package/lib/app/layout.d.ts.map +1 -0
  13. package/lib/app/layout.js +20 -0
  14. package/lib/components/AddItemDialog.d.ts +16 -0
  15. package/lib/components/AddItemDialog.d.ts.map +1 -0
  16. package/lib/components/AddItemDialog.js +45 -0
  17. package/lib/components/DeleteConfirmationDialog.d.ts +9 -0
  18. package/lib/components/DeleteConfirmationDialog.d.ts.map +1 -0
  19. package/lib/components/DeleteConfirmationDialog.js +35 -0
  20. package/lib/components/SearchField.d.ts +8 -0
  21. package/lib/components/SearchField.d.ts.map +1 -0
  22. package/lib/components/SearchField.js +16 -0
  23. package/lib/components/groups/CreateGroupDialog.d.ts +8 -0
  24. package/lib/components/groups/CreateGroupDialog.d.ts.map +1 -0
  25. package/lib/components/groups/CreateGroupDialog.js +24 -0
  26. package/lib/components/groups/GroupDetails.d.ts +8 -0
  27. package/lib/components/groups/GroupDetails.d.ts.map +1 -0
  28. package/lib/components/groups/GroupDetails.js +18 -0
  29. package/lib/components/groups/GroupForm.d.ts +11 -0
  30. package/lib/components/groups/GroupForm.d.ts.map +1 -0
  31. package/lib/components/groups/GroupForm.js +38 -0
  32. package/lib/components/groups/GroupTabs.d.ts +16 -0
  33. package/lib/components/groups/GroupTabs.d.ts.map +1 -0
  34. package/lib/components/groups/GroupTabs.js +29 -0
  35. package/lib/components/groups/GroupUsers.d.ts +8 -0
  36. package/lib/components/groups/GroupUsers.d.ts.map +1 -0
  37. package/lib/components/groups/GroupUsers.js +74 -0
  38. package/lib/components/groups/Groups.d.ts +9 -0
  39. package/lib/components/groups/Groups.d.ts.map +1 -0
  40. package/lib/components/groups/Groups.js +78 -0
  41. package/lib/components/groups/GroupsTable.d.ts +11 -0
  42. package/lib/components/groups/GroupsTable.d.ts.map +1 -0
  43. package/lib/components/groups/GroupsTable.js +43 -0
  44. package/lib/components/index.d.ts +3 -0
  45. package/lib/components/index.d.ts.map +1 -0
  46. package/lib/components/index.js +2 -0
  47. package/lib/components/users/CreateUserDialog.d.ts +8 -0
  48. package/lib/components/users/CreateUserDialog.d.ts.map +1 -0
  49. package/lib/components/users/CreateUserDialog.js +24 -0
  50. package/lib/components/users/UserCredentials.d.ts +8 -0
  51. package/lib/components/users/UserCredentials.d.ts.map +1 -0
  52. package/lib/components/users/UserCredentials.js +17 -0
  53. package/lib/components/users/UserDetails.d.ts +8 -0
  54. package/lib/components/users/UserDetails.d.ts.map +1 -0
  55. package/lib/components/users/UserDetails.js +18 -0
  56. package/lib/components/users/UserForm.d.ts +14 -0
  57. package/lib/components/users/UserForm.d.ts.map +1 -0
  58. package/lib/components/users/UserForm.js +62 -0
  59. package/lib/components/users/UserGroups.d.ts +8 -0
  60. package/lib/components/users/UserGroups.d.ts.map +1 -0
  61. package/lib/components/users/UserGroups.js +64 -0
  62. package/lib/components/users/Users.d.ts +9 -0
  63. package/lib/components/users/Users.d.ts.map +1 -0
  64. package/lib/components/users/Users.js +84 -0
  65. package/lib/components/users/UsersTable.d.ts +13 -0
  66. package/lib/components/users/UsersTable.d.ts.map +1 -0
  67. package/lib/components/users/UsersTable.js +62 -0
  68. package/lib/components/users/UsersTabs.d.ts +16 -0
  69. package/lib/components/users/UsersTabs.d.ts.map +1 -0
  70. package/lib/components/users/UsersTabs.js +32 -0
  71. package/lib/config/i18n.d.ts +3 -0
  72. package/lib/config/i18n.d.ts.map +1 -0
  73. package/lib/config/i18n.js +14 -0
  74. package/lib/config/index.d.ts +11 -0
  75. package/lib/config/index.d.ts.map +1 -0
  76. package/lib/config/index.js +18 -0
  77. package/lib/config/palette.d.ts +5 -0
  78. package/lib/config/palette.d.ts.map +1 -0
  79. package/lib/config/palette.js +88 -0
  80. package/lib/index.d.ts +5 -0
  81. package/lib/index.d.ts.map +1 -0
  82. package/lib/index.js +2 -0
  83. package/lib/lang/groups.d.ts +6 -0
  84. package/lib/lang/groups.d.ts.map +1 -0
  85. package/lib/lang/groups.js +71 -0
  86. package/lib/lang/home.d.ts +6 -0
  87. package/lib/lang/home.d.ts.map +1 -0
  88. package/lib/lang/home.js +11 -0
  89. package/lib/lang/users.d.ts +6 -0
  90. package/lib/lang/users.d.ts.map +1 -0
  91. package/lib/lang/users.js +123 -0
  92. package/lib/middleware.d.ts +5 -0
  93. package/lib/middleware.d.ts.map +1 -0
  94. package/lib/middleware.js +9 -0
  95. package/lib/tsconfig.tsbuildinfo +1 -0
  96. package/lib/types/config.d.ts +8 -0
  97. package/lib/types/config.d.ts.map +1 -0
  98. package/lib/types/config.js +1 -0
  99. package/lib/types/groups.d.ts +5 -0
  100. package/lib/types/groups.d.ts.map +1 -0
  101. package/lib/types/groups.js +1 -0
  102. package/lib/types/index.d.ts +1 -0
  103. package/lib/types/index.d.ts.map +1 -0
  104. package/lib/types/index.js +1 -0
  105. package/lib/types/tables.d.ts +12 -0
  106. package/lib/types/tables.d.ts.map +1 -0
  107. package/lib/types/tables.js +1 -0
  108. package/lib/types/users.d.ts +11 -0
  109. package/lib/types/users.d.ts.map +1 -0
  110. package/lib/types/users.js +1 -0
  111. package/lib/utils/helpers/index.d.ts +1 -0
  112. package/lib/utils/helpers/index.d.ts.map +1 -0
  113. package/lib/utils/helpers/index.js +1 -0
  114. package/lib/utils/hooks/groups.d.ts +10 -0
  115. package/lib/utils/hooks/groups.d.ts.map +1 -0
  116. package/lib/utils/hooks/groups.js +133 -0
  117. package/lib/utils/hooks/index.d.ts +1 -0
  118. package/lib/utils/hooks/index.d.ts.map +1 -0
  119. package/lib/utils/hooks/index.js +1 -0
  120. package/lib/utils/hooks/users.d.ts +29 -0
  121. package/lib/utils/hooks/users.d.ts.map +1 -0
  122. package/lib/utils/hooks/users.js +254 -0
  123. package/lib/utils/index.d.ts +1 -0
  124. package/lib/utils/index.d.ts.map +1 -0
  125. package/lib/utils/index.js +1 -0
  126. package/package.json +99 -0
@@ -0,0 +1,8 @@
1
+ import { Language } from '@deix/rossini-core';
2
+ export interface Config {
3
+ generalProperties: {
4
+ apiURL: string;
5
+ };
6
+ languages: Language[];
7
+ }
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,WAAW,MAAM;IACrB,iBAAiB,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface Group {
2
+ id: string;
3
+ name: string;
4
+ }
5
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/types/groups.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,12 @@
1
+ import { StringTranslation } from '@deix/rossini-core';
2
+ export interface TableColumn {
3
+ id: string;
4
+ label: string | StringTranslation;
5
+ align?: 'center' | 'inherit' | 'justify' | 'left' | 'right';
6
+ width?: string;
7
+ }
8
+ export interface TableRow {
9
+ id: string;
10
+ [key: string]: string | number | boolean;
11
+ }
12
+ //# sourceMappingURL=tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/types/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAClC,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1C"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ export interface User {
2
+ id: string;
3
+ username?: string;
4
+ firstName?: string;
5
+ lastName?: string;
6
+ groups?: string[];
7
+ enabled?: boolean;
8
+ email?: string;
9
+ emailVerified?: boolean;
10
+ }
11
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/types/users.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,10 @@
1
+ import { QueryClient, UseMutationResult, UseQueryResult } from '@tanstack/react-query';
2
+ import { AxiosInstance } from 'axios';
3
+ import { Group } from '../../types/groups';
4
+ import { User } from '../../types/users';
5
+ export declare const useGroups: (apiClient: AxiosInstance) => UseQueryResult<Group[] | undefined, Error>;
6
+ export declare const useAddGroup: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<Group, Error, Group, unknown>;
7
+ export declare const useUpdateGroup: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<Group, Error, Group, unknown>;
8
+ export declare const useDeleteGroup: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<Group | undefined, Error, string | undefined, unknown>;
9
+ export declare const useGroupUsers: (id: string | undefined, apiClient: AxiosInstance) => UseQueryResult<User[] | undefined, Error>;
10
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EAGf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAUzC,eAAO,MAAM,SAAS,cACT,aAAa,KACvB,eAAe,KAAK,EAAE,GAAG,SAAS,EAAE,KAAK,CAM3C,CAAC;AAcF,eAAO,MAAM,WAAW,gBACT,WAAW,aACb,aAAa,oDA6BzB,CAAC;AAiBF,eAAO,MAAM,cAAc,gBACZ,WAAW,aACb,aAAa,oDA8BzB,CAAC;AAkBF,eAAO,MAAM,cAAc,gBACZ,WAAW,aACb,aAAa,6EA6BzB,CAAC;AAgBF,eAAO,MAAM,aAAa,OACpB,MAAM,GAAG,SAAS,aACX,aAAa,KACvB,eAAe,IAAI,EAAE,GAAG,SAAS,EAAE,KAAK,CAM1C,CAAC"}
@@ -0,0 +1,133 @@
1
+ import { useMutation, useQuery, } from '@tanstack/react-query';
2
+ import { enqueueSnackbar } from 'notistack';
3
+ import { useLocale } from '@deix/rossini-core';
4
+ import groupsTranslations from '../../lang/groups';
5
+ // Get list of groups
6
+ const getGroups = async (apiClient) => {
7
+ const { data } = await apiClient.get(`/groups`, {
8
+ params: { max: 1000 },
9
+ });
10
+ return data;
11
+ };
12
+ export const useGroups = (apiClient) => {
13
+ return useQuery({
14
+ queryKey: ['groups'],
15
+ queryFn: () => getGroups(apiClient),
16
+ staleTime: 0,
17
+ });
18
+ };
19
+ // Add group
20
+ const addGroup = async ({ newGroup, apiClient, }) => {
21
+ const { data } = await apiClient.post(`/groups`, newGroup);
22
+ return data;
23
+ };
24
+ export const useAddGroup = (queryClient, apiClient) => {
25
+ const locale = useLocale();
26
+ return useMutation({
27
+ mutationFn: (newGroup) => addGroup({ newGroup, apiClient }),
28
+ onError: (error) => {
29
+ enqueueSnackbar(`${groupsTranslations.addGroupError[locale]}. ${error.message}`, {
30
+ variant: 'error',
31
+ });
32
+ },
33
+ onSuccess: () => {
34
+ enqueueSnackbar(groupsTranslations.addGroupSuccess[locale], {
35
+ variant: 'success',
36
+ });
37
+ },
38
+ onSettled: async () => {
39
+ await queryClient.refetchQueries({
40
+ queryKey: ['users'],
41
+ type: 'all',
42
+ });
43
+ await queryClient.refetchQueries({
44
+ queryKey: ['groups'],
45
+ type: 'all',
46
+ });
47
+ },
48
+ });
49
+ };
50
+ // Update group
51
+ const updateGroup = async ({ updatedGroup, apiClient, }) => {
52
+ const { data } = await apiClient.put(`/groups/${updatedGroup.id}`, updatedGroup);
53
+ return data;
54
+ };
55
+ export const useUpdateGroup = (queryClient, apiClient) => {
56
+ const locale = useLocale();
57
+ return useMutation({
58
+ mutationFn: (updatedGroup) => updateGroup({ updatedGroup, apiClient }),
59
+ onError: (error) => {
60
+ enqueueSnackbar(`${groupsTranslations.updateGroupError[locale]}. ${error.message}`, {
61
+ variant: 'error',
62
+ });
63
+ },
64
+ onSuccess: () => {
65
+ enqueueSnackbar(groupsTranslations.updateGroupSuccess[locale], {
66
+ variant: 'success',
67
+ });
68
+ },
69
+ onSettled: async () => {
70
+ await queryClient.refetchQueries({
71
+ queryKey: ['users'],
72
+ type: 'all',
73
+ });
74
+ await queryClient.refetchQueries({
75
+ queryKey: ['groups'],
76
+ type: 'all',
77
+ });
78
+ },
79
+ });
80
+ };
81
+ // Delete group
82
+ const deleteGroup = async ({ id, apiClient, }) => {
83
+ if (id) {
84
+ console.log('hey delete', id);
85
+ const { data } = await apiClient.delete(`/groups/${id}`);
86
+ console.log(data);
87
+ return data;
88
+ }
89
+ };
90
+ export const useDeleteGroup = (queryClient, apiClient) => {
91
+ const locale = useLocale();
92
+ return useMutation({
93
+ mutationFn: (id) => deleteGroup({ id, apiClient }),
94
+ onError: (error) => {
95
+ enqueueSnackbar(`${groupsTranslations.deleteGroupError[locale]}. ${error.message}`, {
96
+ variant: 'error',
97
+ });
98
+ },
99
+ onSuccess: () => {
100
+ enqueueSnackbar(groupsTranslations.deleteGroupSuccess[locale], {
101
+ variant: 'success',
102
+ });
103
+ },
104
+ onSettled: async () => {
105
+ await queryClient.refetchQueries({
106
+ queryKey: ['users'],
107
+ type: 'all',
108
+ });
109
+ await queryClient.refetchQueries({
110
+ queryKey: ['groups'],
111
+ type: 'all',
112
+ });
113
+ },
114
+ });
115
+ };
116
+ const getGroupUsers = async (id, apiClient) => {
117
+ if (id) {
118
+ const { data } = await apiClient.get(`/groups/${id}/members`, {
119
+ params: { briefRepresentation: true },
120
+ });
121
+ return data;
122
+ }
123
+ else {
124
+ return [];
125
+ }
126
+ };
127
+ export const useGroupUsers = (id, apiClient) => {
128
+ return useQuery({
129
+ queryKey: ['groupUsers', id],
130
+ queryFn: () => getGroupUsers(id, apiClient),
131
+ staleTime: 0,
132
+ });
133
+ };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,29 @@
1
+ import { QueryClient, UseMutationResult, UseQueryResult } from '@tanstack/react-query';
2
+ import { AxiosInstance } from 'axios';
3
+ import { User } from '../../types/users';
4
+ import { Group } from '../../types/groups';
5
+ import { UserFormFields } from '../../components/users/UserForm';
6
+ export declare const useUsers: (apiClient: AxiosInstance) => UseQueryResult<User[] | undefined, Error>;
7
+ export declare const useUser: (id: string, apiClient: AxiosInstance) => UseQueryResult<User | undefined, Error>;
8
+ export declare const useAddUser: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<null, Error, UserFormFields, unknown>;
9
+ export declare const useUpdateUser: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<User, Error, User, unknown>;
10
+ export declare const useDeleteUser: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<User | undefined, Error, string | undefined, unknown>;
11
+ export declare const useUserGroups: (id: string | undefined, apiClient: AxiosInstance) => UseQueryResult<Group[] | undefined, Error>;
12
+ export declare const useAddUserToGroup: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<{
13
+ userId: string;
14
+ groupId: string;
15
+ }, Error, {
16
+ userId: string;
17
+ groupId: string;
18
+ }, unknown>;
19
+ export declare const useRemoveUserFromGroup: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<{
20
+ userId: string;
21
+ groupId: string;
22
+ }, Error, {
23
+ userId: string;
24
+ groupId: string;
25
+ }, unknown>;
26
+ export declare const useSendUpdatePasswordEmail: (queryClient: QueryClient, apiClient: AxiosInstance) => UseMutationResult<{
27
+ userId: string;
28
+ }, Error, string, unknown>;
29
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/users.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EAGf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAUjE,eAAO,MAAM,QAAQ,cACR,aAAa,KACvB,eAAe,IAAI,EAAE,GAAG,SAAS,EAAE,KAAK,CAM1C,CAAC;AAQF,eAAO,MAAM,OAAO,OACd,MAAM,aACC,aAAa,KACvB,eAAe,IAAI,GAAG,SAAS,EAAE,KAAK,CAMxC,CAAC;AAyBF,eAAO,MAAM,UAAU,gBACR,WAAW,aACb,aAAa,4DAgCzB,CAAC;AAiBF,eAAO,MAAM,aAAa,gBACX,WAAW,aACb,aAAa,kDA6BzB,CAAC;AAgBF,eAAO,MAAM,aAAa,gBACX,WAAW,aACb,aAAa,4EA6BzB,CAAC;AAcF,eAAO,MAAM,aAAa,OACpB,MAAM,GAAG,SAAS,aACX,aAAa,KACvB,eAAe,KAAK,EAAE,GAAG,SAAS,EAAE,KAAK,CAM3C,CAAC;AAmBF,eAAO,MAAM,iBAAiB,gBACf,WAAW,aACb,aAAa;;;;YAIsB,MAAM;aAAW,MAAM;WA8BtE,CAAC;AAmBF,eAAO,MAAM,sBAAsB,gBACpB,WAAW,aACb,aAAa;;;;YAIsB,MAAM;aAAW,MAAM;WA8BtE,CAAC;AAkBF,eAAO,MAAM,0BAA0B,gBACxB,WAAW,aACb,aAAa;;0BAoBzB,CAAC"}
@@ -0,0 +1,254 @@
1
+ import { useMutation, useQuery, } from '@tanstack/react-query';
2
+ import { enqueueSnackbar } from 'notistack';
3
+ import { useLocale } from '@deix/rossini-core';
4
+ import usersTranslations from '../../lang/users';
5
+ // Get list of users
6
+ const getUsers = async (apiClient, username) => {
7
+ const { data } = await apiClient.get(`/users`, {
8
+ params: { max: 1000, username },
9
+ });
10
+ return data;
11
+ };
12
+ export const useUsers = (apiClient) => {
13
+ return useQuery({
14
+ queryKey: ['users'],
15
+ queryFn: () => getUsers(apiClient),
16
+ staleTime: 0,
17
+ });
18
+ };
19
+ // Get single user
20
+ const getUser = async (id, apiClient) => {
21
+ const { data } = await apiClient.get(`/users/${id}`);
22
+ return data;
23
+ };
24
+ export const useUser = (id, apiClient) => {
25
+ return useQuery({
26
+ queryKey: ['user', id],
27
+ queryFn: () => getUser(id, apiClient),
28
+ staleTime: 0,
29
+ });
30
+ };
31
+ // Add user
32
+ const addUser = async ({ newUser, sendEmailOnCreation, apiClient, }) => {
33
+ await apiClient.post(`/users`, newUser);
34
+ if (sendEmailOnCreation) {
35
+ // The POST does not return the newly created user, so we have to search for
36
+ // it in order to get its ID and send the email
37
+ const users = await getUsers(apiClient, newUser.username);
38
+ if (users.length > 0) {
39
+ console.log(users[0].id);
40
+ await sendUpdatePasswordEmail({ userId: users[0].id, apiClient });
41
+ }
42
+ }
43
+ return null;
44
+ };
45
+ export const useAddUser = (queryClient, apiClient) => {
46
+ const locale = useLocale();
47
+ return useMutation({
48
+ mutationFn: (data) => {
49
+ const { sendEmailOnCreation, ...newUser } = data;
50
+ return addUser({ newUser, sendEmailOnCreation, apiClient });
51
+ },
52
+ onError: (error) => {
53
+ enqueueSnackbar(`${usersTranslations.addUserError[locale]}. ${error.message}`, {
54
+ variant: 'error',
55
+ });
56
+ },
57
+ onSuccess: () => {
58
+ enqueueSnackbar(usersTranslations.addUserSuccess[locale], {
59
+ variant: 'success',
60
+ });
61
+ },
62
+ onSettled: async () => {
63
+ await queryClient.refetchQueries({
64
+ queryKey: ['users'],
65
+ type: 'all',
66
+ });
67
+ await queryClient.refetchQueries({
68
+ queryKey: ['groups'],
69
+ type: 'all',
70
+ });
71
+ },
72
+ });
73
+ };
74
+ // Update user
75
+ const updateUser = async ({ updatedUser, apiClient, }) => {
76
+ const { data } = await apiClient.put(`/users/${updatedUser.id}`, updatedUser);
77
+ return data;
78
+ };
79
+ export const useUpdateUser = (queryClient, apiClient) => {
80
+ const locale = useLocale();
81
+ return useMutation({
82
+ mutationFn: (updatedUser) => updateUser({ updatedUser, apiClient }),
83
+ onError: (error) => {
84
+ enqueueSnackbar(`${usersTranslations.updateUserError[locale]}. ${error.message}`, {
85
+ variant: 'error',
86
+ });
87
+ },
88
+ onSuccess: () => {
89
+ enqueueSnackbar(usersTranslations.updateUserSuccess[locale], {
90
+ variant: 'success',
91
+ });
92
+ },
93
+ onSettled: async () => {
94
+ await queryClient.refetchQueries({
95
+ queryKey: ['users'],
96
+ type: 'all',
97
+ });
98
+ await queryClient.refetchQueries({
99
+ queryKey: ['groups'],
100
+ type: 'all',
101
+ });
102
+ },
103
+ });
104
+ };
105
+ // Delete user
106
+ const deleteUser = async ({ id, apiClient, }) => {
107
+ if (id) {
108
+ const { data } = await apiClient.delete(`/users/${id}`);
109
+ return data;
110
+ }
111
+ };
112
+ export const useDeleteUser = (queryClient, apiClient) => {
113
+ const locale = useLocale();
114
+ return useMutation({
115
+ mutationFn: (id) => deleteUser({ id, apiClient }),
116
+ onError: (error) => {
117
+ enqueueSnackbar(`${usersTranslations.deleteUserError[locale]} ${error.message}`, {
118
+ variant: 'error',
119
+ });
120
+ },
121
+ onSuccess: () => {
122
+ enqueueSnackbar(usersTranslations.deleteUserSuccess[locale], {
123
+ variant: 'success',
124
+ });
125
+ },
126
+ onSettled: async () => {
127
+ await queryClient.refetchQueries({
128
+ queryKey: ['users'],
129
+ type: 'all',
130
+ });
131
+ await queryClient.refetchQueries({
132
+ queryKey: ['groups'],
133
+ type: 'all',
134
+ });
135
+ },
136
+ });
137
+ };
138
+ const getUserGroups = async (id, apiClient) => {
139
+ if (id) {
140
+ const { data } = await apiClient.get(`/users/${id}/groups`);
141
+ return data;
142
+ }
143
+ else {
144
+ return [];
145
+ }
146
+ };
147
+ export const useUserGroups = (id, apiClient) => {
148
+ return useQuery({
149
+ queryKey: ['userGroups', id],
150
+ queryFn: () => getUserGroups(id, apiClient),
151
+ staleTime: 0,
152
+ });
153
+ };
154
+ // Add user to group
155
+ const addUserToGroup = async ({ userId, groupId, apiClient, }) => {
156
+ await apiClient.put(`/users/${userId}/groups/${groupId}`);
157
+ return {
158
+ userId,
159
+ groupId,
160
+ };
161
+ };
162
+ export const useAddUserToGroup = (queryClient, apiClient) => {
163
+ const locale = useLocale();
164
+ return useMutation({
165
+ mutationFn: ({ userId, groupId }) => addUserToGroup({ userId, groupId, apiClient }),
166
+ onError: (error) => {
167
+ enqueueSnackbar(`${usersTranslations.addUserToGroupError[locale]}. ${error.message}`, {
168
+ variant: 'error',
169
+ });
170
+ },
171
+ onSuccess: () => {
172
+ enqueueSnackbar(usersTranslations.addUserToGroupSuccess[locale], {
173
+ variant: 'success',
174
+ });
175
+ },
176
+ onSettled: async (data) => {
177
+ await queryClient.refetchQueries({
178
+ queryKey: ['userGroups', data?.userId],
179
+ type: 'all',
180
+ });
181
+ await queryClient.refetchQueries({
182
+ queryKey: ['groupUsers', data?.groupId],
183
+ type: 'all',
184
+ });
185
+ await queryClient.refetchQueries({
186
+ queryKey: ['groups'],
187
+ type: 'all',
188
+ });
189
+ },
190
+ });
191
+ };
192
+ // Remove user from group
193
+ const removeUserFromGroup = async ({ userId, groupId, apiClient, }) => {
194
+ await apiClient.delete(`/users/${userId}/groups/${groupId}`);
195
+ return {
196
+ userId,
197
+ groupId,
198
+ };
199
+ };
200
+ export const useRemoveUserFromGroup = (queryClient, apiClient) => {
201
+ const locale = useLocale();
202
+ return useMutation({
203
+ mutationFn: ({ userId, groupId }) => removeUserFromGroup({ userId, groupId, apiClient }),
204
+ onError: (error) => {
205
+ enqueueSnackbar(`${usersTranslations.removeUserFromGroupError[locale]}. ${error.message}`, {
206
+ variant: 'error',
207
+ });
208
+ },
209
+ onSuccess: () => {
210
+ enqueueSnackbar(usersTranslations.removeUserFromGroupSuccess[locale], {
211
+ variant: 'success',
212
+ });
213
+ },
214
+ onSettled: async (data) => {
215
+ await queryClient.refetchQueries({
216
+ queryKey: ['userGroups', data?.userId],
217
+ type: 'all',
218
+ });
219
+ await queryClient.refetchQueries({
220
+ queryKey: ['groupUsers', data?.groupId],
221
+ type: 'all',
222
+ });
223
+ await queryClient.refetchQueries({
224
+ queryKey: ['groups'],
225
+ type: 'all',
226
+ });
227
+ },
228
+ });
229
+ };
230
+ // Remove user from group
231
+ const sendUpdatePasswordEmail = async ({ userId, apiClient, }) => {
232
+ await apiClient.put(`/users/${userId}/execute-actions-email`, [
233
+ 'UPDATE_PASSWORD',
234
+ ]);
235
+ return {
236
+ userId,
237
+ };
238
+ };
239
+ export const useSendUpdatePasswordEmail = (queryClient, apiClient) => {
240
+ const locale = useLocale();
241
+ return useMutation({
242
+ mutationFn: (userId) => sendUpdatePasswordEmail({ userId, apiClient }),
243
+ onError: (error) => {
244
+ enqueueSnackbar(`${usersTranslations.sendEmailError[locale]}. ${error.message}`, {
245
+ variant: 'error',
246
+ });
247
+ },
248
+ onSuccess: () => {
249
+ enqueueSnackbar(usersTranslations.sendEmailSuccess[locale], {
250
+ variant: 'success',
251
+ });
252
+ },
253
+ });
254
+ };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ "use strict";
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@deix/rossini-identity-management",
3
+ "version": "0.1.0",
4
+ "main": "lib/index.js",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/deix-ai/rossini-identity-management.git"
8
+ },
9
+ "license": "UNLICENSED",
10
+ "private": false,
11
+ "author": {
12
+ "name": "Jacopo Corno"
13
+ },
14
+ "scripts": {
15
+ "lint": "eslint src",
16
+ "build": "tsc -p tsconfig.json",
17
+ "prepare": "tsc -p tsconfig.json",
18
+ "storybook": "storybook dev -p 6006",
19
+ "build-storybook": "storybook build",
20
+ "dev": "next dev"
21
+ },
22
+ "peerDependencies": {
23
+ "@emotion/react": "^11.11.3",
24
+ "@emotion/styled": "^11.11.0",
25
+ "@fontsource/raleway": "^5.0.15",
26
+ "@mui/icons-material": "^5.11.0",
27
+ "@mui/material": "^5.11.8",
28
+ "@tanstack/react-query": "^5.12.2",
29
+ "@tanstack/react-query-devtools": "^5.12.2",
30
+ "@types/react": "^18.0.28",
31
+ "@types/react-dom": "^18.0.8",
32
+ "axios": "^1.3.2",
33
+ "next": "^14.0.3",
34
+ "react": "^18.2.0",
35
+ "react-dom": "^18.2.0"
36
+ },
37
+ "devDependencies": {
38
+ "@babel/core": "^7.23.7",
39
+ "@emotion/react": "^11.11.3",
40
+ "@emotion/styled": "^11.11.0",
41
+ "@fontsource/raleway": "^5.0.16",
42
+ "@mui/icons-material": "^5.15.4",
43
+ "@mui/material": "^5.15.4",
44
+ "@storybook/addon-essentials": "^7.6.8",
45
+ "@storybook/addon-interactions": "^7.6.8",
46
+ "@storybook/addon-links": "^7.6.8",
47
+ "@storybook/addon-onboarding": "^1.0.10",
48
+ "@storybook/blocks": "^7.6.8",
49
+ "@storybook/manager-api": "^7.6.8",
50
+ "@storybook/nextjs": "^7.6.8",
51
+ "@storybook/react": "^7.6.8",
52
+ "@storybook/test": "^7.6.8",
53
+ "@storybook/testing-library": "^0.2.2",
54
+ "@tanstack/react-query": "^5.17.12",
55
+ "@tanstack/react-query-devtools": "^5.17.12",
56
+ "@types/node": "^20.11.2",
57
+ "@types/react": "^18.2.48",
58
+ "@types/react-dom": "^18.2.18",
59
+ "@typescript-eslint/eslint-plugin": "^6.18.1",
60
+ "axios": "^1.6.5",
61
+ "babel-loader": "^9.1.3",
62
+ "commitizen": "^4.3.0",
63
+ "cz-conventional-changelog": "^3.3.0",
64
+ "eslint": "^8.56.0",
65
+ "eslint-config-next": "^14.0.4",
66
+ "eslint-config-prettier": "^9.1.0",
67
+ "eslint-plugin-prettier": "^5.1.3",
68
+ "eslint-plugin-storybook": "^0.6.15",
69
+ "json-server": "^1.0.0-alpha.21",
70
+ "next": "^14.0.4",
71
+ "react": "^18.2.0",
72
+ "react-docgen-typescript-plugin": "^1.0.5",
73
+ "react-dom": "^18.2.0",
74
+ "storybook": "^7.6.8",
75
+ "ts-loader": "^9.5.1",
76
+ "typescript": "^5.3.3"
77
+ },
78
+ "resolutions": {
79
+ "@storybook/react-docgen-typescript-plugin": "npm:react-docgen-typescript-plugin@1.0.2"
80
+ },
81
+ "files": [
82
+ "lib"
83
+ ],
84
+ "config": {
85
+ "commitizen": {
86
+ "path": "./node_modules/cz-conventional-changelog"
87
+ }
88
+ },
89
+ "dependencies": {
90
+ "@deix/rossini-form": "^2.0.0",
91
+ "@formatjs/intl-localematcher": "^0.5.2",
92
+ "@mui/icons-material": "^5.11.0",
93
+ "@mui/material": "^5.11.8",
94
+ "@types/negotiator": "^0.6.3",
95
+ "negotiator": "^0.6.3",
96
+ "notistack": "^3.0.1",
97
+ "react-hook-form": "^7.49.3"
98
+ }
99
+ }