@addev-be/ui 0.6.11 → 0.6.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@addev-be/ui",
3
- "version": "0.6.11",
3
+ "version": "0.6.13",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "watch": "tsc -b --watch",
@@ -90,6 +90,8 @@ export const dateColumn = <R extends Record<string, any>>(
90
90
  name: title,
91
91
  type: 'date',
92
92
  render: (row) => moment(row[key]).format('DD/MM/YYYY') ?? '',
93
+ excelFormatter: () => 'dd/mm/yyyy',
94
+ excelValue: (date) => moment(date).format('DD/MM/YYYY') ?? '',
93
95
  getter: (row) => row[key] ?? '',
94
96
  sortGetter: (row) => row[key] ?? '',
95
97
  footer: (_, filteredRows) => `${filteredRows.length} éléments`,
@@ -101,6 +103,28 @@ export const dateColumn = <R extends Record<string, any>>(
101
103
  },
102
104
  });
103
105
 
106
+ export const dateTimeColumn = <R extends Record<string, any>>(
107
+ key: string,
108
+ title: string,
109
+ options?: Partial<DataGridColumn<R>>
110
+ ): DataGridColumns<R> => ({
111
+ [key]: {
112
+ name: title,
113
+ type: 'date',
114
+ render: (row) => moment(row[key]).format('DD/MM/YYYY HH:mm:ss') ?? '',
115
+ excelFormatter: () => 'dd/mm/yyyy hh:mm:ss',
116
+ excelValue: (date) => moment(date).format('DD/MM/YYYY HH:mm:ss') ?? '',
117
+ getter: (row) => row[key] ?? '',
118
+ sortGetter: (row) => row[key] ?? '',
119
+ footer: (_, filteredRows) => `${filteredRows.length} éléments`,
120
+ filter: {
121
+ ...dateFilter(key),
122
+ renderer: (value) => moment(value).format('DD/MM/YYYY HH:mm:ss') ?? '',
123
+ },
124
+ ...options,
125
+ },
126
+ });
127
+
104
128
  export const monthColumn = <R extends Record<string, any>>(
105
129
  key: string,
106
130
  title: string,
@@ -58,7 +58,7 @@ export const useDataGrid = <R,>(
58
58
  const gridTemplateColumns = useMemo(
59
59
  () =>
60
60
  [
61
- ...(selectable ? ['var(--space-10)'] : []),
61
+ ...(selectable ? ['var(--space-8)'] : []),
62
62
  ...visibleColumns.map(([, col]) => `${col.width ?? 150}px`),
63
63
  ].join(' '),
64
64
  [selectable, visibleColumns]
@@ -38,14 +38,16 @@ export const DataGridInner = <R,>(
38
38
  sortedRows,
39
39
  onVisibleRowsChange,
40
40
  refresh,
41
+ setSelectedKeys,
41
42
  } = contextProps;
42
43
 
43
44
  useImperativeHandle(
44
45
  ref,
45
46
  () => ({
46
47
  refresh,
48
+ setSelectedKeys,
47
49
  }),
48
- [refresh]
50
+ [refresh, setSelectedKeys]
49
51
  );
50
52
 
51
53
  const hasFooter = Object.values(columns).some((col) => col.footer);
@@ -270,4 +270,7 @@ export type DataGridRowTemplateProps<R> = {
270
270
  context: DataGridContext<R>;
271
271
  };
272
272
 
273
- export type DataGridRefProps<R> = Pick<DataGridContextProps<R>, 'refresh'>;
273
+ export type DataGridRefProps<R> = Pick<
274
+ DataGridContextProps<R>,
275
+ 'refresh' | 'setSelectedKeys'
276
+ >;
@@ -6,6 +6,7 @@ import {
6
6
  numberFilter,
7
7
  textFilter,
8
8
  } from '../../DataGrid/helpers';
9
+ import { formatDate, formatDateTime } from '../../../../helpers/dates';
9
10
  import {
10
11
  formatMoney,
11
12
  formatNumber,
@@ -13,8 +14,6 @@ import {
13
14
  formatPercentage,
14
15
  } from '../../../../helpers/numbers';
15
16
 
16
- import { formatDate } from '../../../../helpers/dates';
17
-
18
17
  export const sqlTextColumn = <R extends Record<string, any>>(
19
18
  key: string,
20
19
  title: string,
@@ -121,6 +120,30 @@ export const sqlDateColumn = <R extends Record<string, any>>(
121
120
  },
122
121
  });
123
122
 
123
+ export const sqlDateTimeColumn = <R extends Record<string, any>>(
124
+ key: string,
125
+ title: string,
126
+ options?: Partial<SqlRequestDataGridColumn<R>>
127
+ ): SqlRequestDataGridColumns<R> => ({
128
+ [key]: {
129
+ name: title,
130
+ type: 'date',
131
+ render: (row) => formatDateTime(row[key]),
132
+ getter: (row) => row[key] ?? '',
133
+ sortGetter: (row) => row[key] ?? '',
134
+ excelFormatter: () => 'dd/mm/yyyy hh:mm:ss',
135
+ excelValue: (value) => formatDateTime(value, 'YYYY-MM-DD HH:mm:ss'),
136
+ filter: {
137
+ ...textFilter(key),
138
+ getter: (value) => value[key] ?? '',
139
+ formatter: (value) => formatDateTime(value),
140
+ renderer: (value) => formatDateTime(value),
141
+ },
142
+ footer: (rows) => `${rows[0][key]} éléments`,
143
+ ...options,
144
+ },
145
+ });
146
+
124
147
  export const sqlMonthColumn = <R extends Record<string, any>>(
125
148
  key: string,
126
149
  title: string,
@@ -43,6 +43,7 @@ export const SqlRequestDataGridInner = <R,>(
43
43
  const [sqlRequest, sqlIdRequest, sqlPartialRequest] = useSqlRequestHandler<R>(
44
44
  props.type
45
45
  );
46
+ const gridRef = useRef<DataGridRefProps<R>>(null);
46
47
 
47
48
  const [conditions, setConditions] = useState<Record<string, ConditionDTO>>(
48
49
  {}
@@ -348,12 +349,14 @@ export const SqlRequestDataGridInner = <R,>(
348
349
  ref,
349
350
  () => ({
350
351
  refresh,
352
+ setSelectedKeys: gridRef.current?.setSelectedKeys ?? (() => {}),
351
353
  }),
352
354
  [refresh]
353
355
  );
354
356
 
355
357
  return (
356
358
  <DataGrid
359
+ ref={gridRef}
357
360
  onVisibleRowsChange={onVisibleRowsChanged}
358
361
  filter={false}
359
362
  sort={false}
@@ -1,12 +1,17 @@
1
1
  export * from './DataGrid';
2
2
  export * from './DataGrid/helpers';
3
3
  export * from './DataGrid/styles';
4
+ export * from './DataGrid/types';
5
+
4
6
  export * from './AdvancedRequestDataGrid';
7
+ export * from './AdvancedRequestDataGrid/helpers';
8
+
5
9
  export * from './SqlRequestDataGrid';
6
10
  export * from './SqlRequestDataGrid/helpers';
7
11
  export * from './SqlRequestDataGrid/types';
12
+
8
13
  export * from './SqlRequestGrid';
9
14
  export * from './SqlRequestGrid/types';
15
+
10
16
  export * from './VirtualScroller';
11
17
  export * from './VirtualScroller/types';
12
- export * from './AdvancedRequestDataGrid/helpers';
@@ -1,5 +1,7 @@
1
1
  import styled, { css } from 'styled-components';
2
2
 
3
+ import { ThemeColor } from '../../../providers';
4
+
3
5
  export const ModalBackdrop = styled.div.attrs({
4
6
  className: 'ModalBackdrop',
5
7
  })`
@@ -20,6 +22,7 @@ export type ModalContainerProps = {
20
22
  $height?: number;
21
23
  $zIndex?: number;
22
24
  $fullscreen?: boolean;
25
+ $color?: ThemeColor;
23
26
  };
24
27
 
25
28
  export const ModalContainer = styled.div.attrs({
@@ -51,6 +54,14 @@ export const ModalContainer = styled.div.attrs({
51
54
  width: ${$width ? `${$width}px` : 'auto'};
52
55
  height: ${$height ? `${$height}px` : 'auto'};
53
56
  `}
57
+
58
+ ${({ $color }) =>
59
+ $color
60
+ ? css`
61
+ border: 1px solid var(--color-${$color}-500);
62
+ box-shadow: 0 0 var(--space-3) var(--color-${$color}-500);
63
+ `
64
+ : null}
54
65
  `;
55
66
 
56
67
  export const ModalHeader = styled.div.attrs({ className: 'ModalHeader' })`
@@ -7,3 +7,11 @@ export const formatDate = (
7
7
  const m = moment.utc(date);
8
8
  return m.isValid() ? m.format(format) : '';
9
9
  };
10
+
11
+ export const formatDateTime = (
12
+ date: moment.MomentInput,
13
+ format: string = 'DD/MM/YYYY HH:mm:ss'
14
+ ): string => {
15
+ const m = moment.utc(date);
16
+ return m.isValid() ? m.format(format) : '';
17
+ };
@@ -1,10 +1,15 @@
1
1
  export * from './WebSocketService';
2
2
  export * from './HttpService';
3
3
  export * from './hooks';
4
+ export * from './globalSearch';
4
5
 
5
6
  export * from './requests/auth';
6
- export * from './globalSearch';
7
+ export * from './requests/users';
8
+ export * from './requests/userProfiles';
9
+ export * from './requests/userPermissions';
7
10
 
8
11
  export * from './types/auth';
9
12
  export * from './types/base';
10
13
  export * from './types/users';
14
+ export * from './types/userProfiles';
15
+ export * from './types/userPermissions';
@@ -0,0 +1,36 @@
1
+ import {
2
+ DeleteUserPermissionRequestDTO,
3
+ DeleteUserPermissionResponseDTO,
4
+ GetAllUserPermissionsRequestDTO,
5
+ GetAllUserPermissionsResponseDTO,
6
+ GetUserPermissionRequestDTO,
7
+ GetUserPermissionResponseDTO,
8
+ SaveUserPermissionRequestDTO,
9
+ SaveUserPermissionResponseDTO,
10
+ } from '../types/userPermissions';
11
+
12
+ import { useLoadingRequestHandler } from '../hooks';
13
+
14
+ export const useGetUserPermissionRequestHandler = () =>
15
+ useLoadingRequestHandler<
16
+ GetUserPermissionRequestDTO,
17
+ GetUserPermissionResponseDTO
18
+ >('GetUserPermission');
19
+
20
+ export const useGetAllUserPermissionsRequestHandler = () =>
21
+ useLoadingRequestHandler<
22
+ GetAllUserPermissionsRequestDTO,
23
+ GetAllUserPermissionsResponseDTO
24
+ >('GetAllUserPermissions');
25
+
26
+ export const useSaveUserPermissionRequestHandler = () =>
27
+ useLoadingRequestHandler<
28
+ SaveUserPermissionRequestDTO,
29
+ SaveUserPermissionResponseDTO
30
+ >('SaveUserPermission');
31
+
32
+ export const useDeleteUserPermissionRequestHandler = () =>
33
+ useLoadingRequestHandler<
34
+ DeleteUserPermissionRequestDTO,
35
+ DeleteUserPermissionResponseDTO
36
+ >('DeleteUserPermission');
@@ -0,0 +1,35 @@
1
+ import {
2
+ DeleteUserProfileRequestDTO,
3
+ DeleteUserProfileResponseDTO,
4
+ GetAllUserProfilesRequestDTO,
5
+ GetAllUserProfilesResponseDTO,
6
+ GetUserProfileRequestDTO,
7
+ GetUserProfileResponseDTO,
8
+ SaveUserProfileRequestDTO,
9
+ SaveUserProfileResponseDTO,
10
+ } from '../types/userProfiles';
11
+
12
+ import { useLoadingRequestHandler } from '../hooks';
13
+
14
+ export const useGetUserProfileRequestHandler = () =>
15
+ useLoadingRequestHandler<GetUserProfileRequestDTO, GetUserProfileResponseDTO>(
16
+ 'GetUserProfile'
17
+ );
18
+
19
+ export const useGetAllUserProfilesRequestHandler = () =>
20
+ useLoadingRequestHandler<
21
+ GetAllUserProfilesRequestDTO,
22
+ GetAllUserProfilesResponseDTO
23
+ >('GetAllUserProfiles');
24
+
25
+ export const useSaveUserProfileRequestHandler = () =>
26
+ useLoadingRequestHandler<
27
+ SaveUserProfileRequestDTO,
28
+ SaveUserProfileResponseDTO
29
+ >('SaveUserProfile');
30
+
31
+ export const useDeleteUserProfileRequestHandler = () =>
32
+ useLoadingRequestHandler<
33
+ DeleteUserProfileRequestDTO,
34
+ DeleteUserProfileResponseDTO
35
+ >('DeleteUserProfile');
@@ -0,0 +1,28 @@
1
+ import {
2
+ DeleteUserRequestDTO,
3
+ DeleteUserResponseDTO,
4
+ GetAllUsersRequestDTO,
5
+ GetAllUsersResponseDTO,
6
+ GetUserRequestDTO,
7
+ GetUserResponseDTO,
8
+ SaveUserRequestDTO,
9
+ SaveUserResponseDTO,
10
+ } from '../types/users';
11
+
12
+ import { useLoadingRequestHandler } from '../hooks';
13
+
14
+ export const useGetUserRequestHandler = () =>
15
+ useLoadingRequestHandler<GetUserRequestDTO, GetUserResponseDTO>('GetUser');
16
+
17
+ export const useGetAllUsersRequestHandler = () =>
18
+ useLoadingRequestHandler<GetAllUsersRequestDTO, GetAllUsersResponseDTO>(
19
+ 'GetAllUsers'
20
+ );
21
+
22
+ export const useSaveUserRequestHandler = () =>
23
+ useLoadingRequestHandler<SaveUserRequestDTO, SaveUserResponseDTO>('SaveUser');
24
+
25
+ export const useDeleteUserRequestHandler = () =>
26
+ useLoadingRequestHandler<DeleteUserRequestDTO, DeleteUserResponseDTO>(
27
+ 'DeleteUser'
28
+ );
@@ -0,0 +1,104 @@
1
+ import * as t from 'io-ts';
2
+
3
+ import { baseModelDtoCodec } from './base';
4
+
5
+ export const userPermissionDtoCodec = t.type(
6
+ {
7
+ ...baseModelDtoCodec.props,
8
+ name: t.string,
9
+ },
10
+ 'UserPermissionDTO'
11
+ );
12
+
13
+ export type UserPermissionDTO = t.TypeOf<typeof userPermissionDtoCodec>;
14
+
15
+ /*****/
16
+
17
+ export const getUserPermissionRequestDtoCodec = t.type(
18
+ {
19
+ id: t.string,
20
+ },
21
+ 'GetUserPermissionRequestDTO'
22
+ );
23
+
24
+ export const getUserPermissionResponseDtoCodec = t.type(
25
+ {
26
+ data: userPermissionDtoCodec,
27
+ },
28
+ 'GetUserPermissionResponseDTO'
29
+ );
30
+
31
+ export type GetUserPermissionRequestDTO = t.TypeOf<
32
+ typeof getUserPermissionRequestDtoCodec
33
+ >;
34
+ export type GetUserPermissionResponseDTO = t.TypeOf<
35
+ typeof getUserPermissionResponseDtoCodec
36
+ >;
37
+
38
+ /*****/
39
+
40
+ export const getAllUserPermissionsRequestDtoCodec = t.type(
41
+ {},
42
+ 'GetAllUserPermissionsRequestDTO'
43
+ );
44
+
45
+ export const getAllUserPermissionsResponseDtoCodec = t.type(
46
+ {
47
+ data: t.array(userPermissionDtoCodec),
48
+ },
49
+ 'GetAllUserPermissionsResponseDTO'
50
+ );
51
+
52
+ export type GetAllUserPermissionsRequestDTO = t.TypeOf<
53
+ typeof getAllUserPermissionsRequestDtoCodec
54
+ >;
55
+ export type GetAllUserPermissionsResponseDTO = t.TypeOf<
56
+ typeof getAllUserPermissionsResponseDtoCodec
57
+ >;
58
+
59
+ /*****/
60
+
61
+ export const saveUserPermissionRequestDtoCodec = t.type(
62
+ {
63
+ id: t.string,
64
+ },
65
+ 'SaveUserPermissionRequestDTO'
66
+ );
67
+
68
+ export const saveUserPermissionResponseDtoCodec = t.type(
69
+ {
70
+ status: t.number,
71
+ data: userPermissionDtoCodec,
72
+ },
73
+ 'SaveUserPermissionResponseDTO'
74
+ );
75
+
76
+ export type SaveUserPermissionRequestDTO = t.TypeOf<
77
+ typeof saveUserPermissionRequestDtoCodec
78
+ >;
79
+ export type SaveUserPermissionResponseDTO = t.TypeOf<
80
+ typeof saveUserPermissionResponseDtoCodec
81
+ >;
82
+
83
+ /*****/
84
+
85
+ export const deleteUserPermissionRequestDtoCodec = t.type(
86
+ {
87
+ id: t.string,
88
+ },
89
+ 'DeleteUserPermissionRequestDTO'
90
+ );
91
+
92
+ export const deleteUserPermissionResponseDtoCodec = t.type(
93
+ {
94
+ status: t.number,
95
+ },
96
+ 'DeleteUserPermissionResponseDTO'
97
+ );
98
+
99
+ export type DeleteUserPermissionRequestDTO = t.TypeOf<
100
+ typeof deleteUserPermissionRequestDtoCodec
101
+ >;
102
+ export type DeleteUserPermissionResponseDTO = t.TypeOf<
103
+ typeof deleteUserPermissionResponseDtoCodec
104
+ >;
@@ -0,0 +1,105 @@
1
+ import * as t from 'io-ts';
2
+
3
+ import { baseModelDtoCodec } from './base';
4
+
5
+ export const userProfileDtoCodec = t.type(
6
+ {
7
+ ...baseModelDtoCodec.props,
8
+ name: t.string,
9
+ isAdmin: t.string,
10
+ },
11
+ 'UserProfileDTO'
12
+ );
13
+
14
+ export type UserProfileDTO = t.TypeOf<typeof userProfileDtoCodec>;
15
+
16
+ /*****/
17
+
18
+ export const getUserProfileRequestDtoCodec = t.type(
19
+ {
20
+ id: t.string,
21
+ },
22
+ 'GetUserProfileRequestDTO'
23
+ );
24
+
25
+ export const getUserProfileResponseDtoCodec = t.type(
26
+ {
27
+ data: userProfileDtoCodec,
28
+ },
29
+ 'GetUserProfileResponseDTO'
30
+ );
31
+
32
+ export type GetUserProfileRequestDTO = t.TypeOf<
33
+ typeof getUserProfileRequestDtoCodec
34
+ >;
35
+ export type GetUserProfileResponseDTO = t.TypeOf<
36
+ typeof getUserProfileResponseDtoCodec
37
+ >;
38
+
39
+ /*****/
40
+
41
+ export const getAllUserProfilesRequestDtoCodec = t.type(
42
+ {},
43
+ 'GetAllUserProfilesRequestDTO'
44
+ );
45
+
46
+ export const getAllUserProfilesResponseDtoCodec = t.type(
47
+ {
48
+ data: t.array(userProfileDtoCodec),
49
+ },
50
+ 'GetAllUserProfilesResponseDTO'
51
+ );
52
+
53
+ export type GetAllUserProfilesRequestDTO = t.TypeOf<
54
+ typeof getAllUserProfilesRequestDtoCodec
55
+ >;
56
+ export type GetAllUserProfilesResponseDTO = t.TypeOf<
57
+ typeof getAllUserProfilesResponseDtoCodec
58
+ >;
59
+
60
+ /*****/
61
+
62
+ export const saveUserProfileRequestDtoCodec = t.type(
63
+ {
64
+ id: t.string,
65
+ },
66
+ 'SaveUserProfileRequestDTO'
67
+ );
68
+
69
+ export const saveUserProfileResponseDtoCodec = t.type(
70
+ {
71
+ status: t.number,
72
+ data: userProfileDtoCodec,
73
+ },
74
+ 'SaveUserProfileResponseDTO'
75
+ );
76
+
77
+ export type SaveUserProfileRequestDTO = t.TypeOf<
78
+ typeof saveUserProfileRequestDtoCodec
79
+ >;
80
+ export type SaveUserProfileResponseDTO = t.TypeOf<
81
+ typeof saveUserProfileResponseDtoCodec
82
+ >;
83
+
84
+ /*****/
85
+
86
+ export const deleteUserProfileRequestDtoCodec = t.type(
87
+ {
88
+ id: t.string,
89
+ },
90
+ 'DeleteUserProfileRequestDTO'
91
+ );
92
+
93
+ export const deleteUserProfileResponseDtoCodec = t.type(
94
+ {
95
+ status: t.number,
96
+ },
97
+ 'DeleteUserProfileResponseDTO'
98
+ );
99
+
100
+ export type DeleteUserProfileRequestDTO = t.TypeOf<
101
+ typeof deleteUserProfileRequestDtoCodec
102
+ >;
103
+ export type DeleteUserProfileResponseDTO = t.TypeOf<
104
+ typeof deleteUserProfileResponseDtoCodec
105
+ >;
@@ -7,6 +7,7 @@ export const userDtoCodec = t.intersection(
7
7
  t.type({
8
8
  ...baseModelDtoCodec.props,
9
9
  username: t.string,
10
+ isAdmin: t.boolean,
10
11
  }),
11
12
  t.partial({
12
13
  name: t.string,
@@ -18,3 +19,77 @@ export const userDtoCodec = t.intersection(
18
19
  );
19
20
 
20
21
  export type UserDTO = t.TypeOf<typeof userDtoCodec>;
22
+
23
+ /*****/
24
+
25
+ export const getUserRequestDtoCodec = t.type(
26
+ {
27
+ id: t.string,
28
+ },
29
+ 'GetUserRequestDTO'
30
+ );
31
+
32
+ export const getUserResponseDtoCodec = t.type(
33
+ {
34
+ data: userDtoCodec,
35
+ },
36
+ 'GetUserResponseDTO'
37
+ );
38
+
39
+ export type GetUserRequestDTO = t.TypeOf<typeof getUserRequestDtoCodec>;
40
+ export type GetUserResponseDTO = t.TypeOf<typeof getUserResponseDtoCodec>;
41
+
42
+ /*****/
43
+
44
+ export const getAllUsersRequestDtoCodec = t.type({}, 'GetAllUsersRequestDTO');
45
+
46
+ export const getAllUsersResponseDtoCodec = t.type(
47
+ {
48
+ data: t.array(userDtoCodec),
49
+ },
50
+ 'GetAllUsersResponseDTO'
51
+ );
52
+
53
+ export type GetAllUsersRequestDTO = t.TypeOf<typeof getAllUsersRequestDtoCodec>;
54
+ export type GetAllUsersResponseDTO = t.TypeOf<
55
+ typeof getAllUsersResponseDtoCodec
56
+ >;
57
+
58
+ /*****/
59
+
60
+ export const saveUserRequestDtoCodec = t.type(
61
+ {
62
+ id: t.string,
63
+ },
64
+ 'SaveUserRequestDTO'
65
+ );
66
+
67
+ export const saveUserResponseDtoCodec = t.type(
68
+ {
69
+ status: t.number,
70
+ data: userDtoCodec,
71
+ },
72
+ 'SaveUserResponseDTO'
73
+ );
74
+
75
+ export type SaveUserRequestDTO = t.TypeOf<typeof saveUserRequestDtoCodec>;
76
+ export type SaveUserResponseDTO = t.TypeOf<typeof saveUserResponseDtoCodec>;
77
+
78
+ /*****/
79
+
80
+ export const deleteUserRequestDtoCodec = t.type(
81
+ {
82
+ id: t.string,
83
+ },
84
+ 'DeleteUserRequestDTO'
85
+ );
86
+
87
+ export const deleteUserResponseDtoCodec = t.type(
88
+ {
89
+ status: t.number,
90
+ },
91
+ 'DeleteUserResponseDTO'
92
+ );
93
+
94
+ export type DeleteUserRequestDTO = t.TypeOf<typeof deleteUserRequestDtoCodec>;
95
+ export type DeleteUserResponseDTO = t.TypeOf<typeof deleteUserResponseDtoCodec>;