@addev-be/ui 0.1.18 → 0.1.20

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 (226) hide show
  1. package/assets/icons/arrow-down-a-z.svg +1 -1
  2. package/assets/icons/arrow-up-z-a.svg +1 -1
  3. package/assets/icons/check.svg +1 -1
  4. package/assets/icons/down.svg +1 -1
  5. package/assets/icons/filter-full.svg +1 -1
  6. package/assets/icons/filter.svg +1 -1
  7. package/assets/icons/hashtag.svg +1 -1
  8. package/assets/icons/image-slash.svg +1 -1
  9. package/assets/icons/left.svg +1 -1
  10. package/assets/icons/magnifier.svg +1 -1
  11. package/assets/icons/phone.svg +1 -1
  12. package/assets/icons/right.svg +1 -1
  13. package/assets/icons/spinner-third.svg +1 -1
  14. package/assets/icons/table-columns.svg +1 -1
  15. package/assets/icons/up.svg +1 -1
  16. package/assets/icons/user-tie.svg +1 -1
  17. package/dist/Icons.d.ts +31 -0
  18. package/dist/Icons.js +92 -0
  19. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +10 -0
  20. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +173 -0
  21. package/dist/components/data/DataGrid/DataGridCell.d.ts +2 -0
  22. package/dist/components/data/DataGrid/DataGridCell.js +59 -0
  23. package/dist/components/data/DataGrid/DataGridColumnsModal/helpers.d.ts +2 -0
  24. package/dist/components/data/DataGrid/DataGridColumnsModal/helpers.js +24 -0
  25. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.d.ts +6 -0
  26. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.js +37 -0
  27. package/dist/components/data/DataGrid/DataGridColumnsModal/index.d.ts +15 -0
  28. package/dist/components/data/DataGrid/DataGridColumnsModal/index.js +111 -0
  29. package/dist/components/data/DataGrid/DataGridColumnsModal/styles.d.ts +22 -0
  30. package/dist/components/data/DataGrid/DataGridColumnsModal/styles.js +54 -0
  31. package/dist/components/data/DataGrid/DataGridEditableCell.d.ts +2 -0
  32. package/dist/components/data/DataGrid/DataGridEditableCell.js +32 -0
  33. package/dist/components/data/DataGrid/DataGridFilterMenu/hooks.d.ts +9 -0
  34. package/dist/components/data/DataGrid/DataGridFilterMenu/hooks.js +52 -0
  35. package/dist/components/data/DataGrid/DataGridFilterMenu/index.d.ts +9 -0
  36. package/dist/components/data/DataGrid/DataGridFilterMenu/index.js +140 -0
  37. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.d.ts +15 -0
  38. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.js +48 -0
  39. package/dist/components/data/DataGrid/DataGridFooter.d.ts +4 -0
  40. package/dist/components/data/DataGrid/DataGridFooter.js +31 -0
  41. package/dist/components/data/DataGrid/DataGridHeader.d.ts +4 -0
  42. package/dist/components/data/DataGrid/DataGridHeader.js +71 -0
  43. package/dist/components/data/DataGrid/DataGridHeaderCell.d.ts +2 -0
  44. package/dist/components/data/DataGrid/DataGridHeaderCell.js +99 -0
  45. package/dist/components/data/DataGrid/FilterModalContent/index.d.ts +7 -0
  46. package/dist/components/data/DataGrid/FilterModalContent/index.js +106 -0
  47. package/dist/components/data/DataGrid/FilterModalContent/styles.d.ts +3 -0
  48. package/dist/components/data/DataGrid/FilterModalContent/styles.js +15 -0
  49. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +12 -0
  50. package/dist/components/data/DataGrid/FilterValuesScroller.js +74 -0
  51. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  52. package/dist/components/data/DataGrid/VirtualScroller.js +46 -0
  53. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  54. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  55. package/dist/components/data/DataGrid/helpers/columns.d.ts +13 -0
  56. package/dist/components/data/DataGrid/helpers/columns.js +167 -0
  57. package/dist/components/data/DataGrid/helpers/filters.d.ts +16 -0
  58. package/dist/components/data/DataGrid/helpers/filters.js +249 -0
  59. package/dist/components/data/DataGrid/helpers/index.d.ts +3 -0
  60. package/dist/components/data/DataGrid/helpers/index.js +19 -0
  61. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  62. package/dist/components/data/DataGrid/helpers.js +436 -0
  63. package/dist/components/data/DataGrid/hooks/index.d.ts +7 -0
  64. package/dist/components/data/DataGrid/hooks/index.js +34 -0
  65. package/dist/components/data/DataGrid/hooks/useDataGrid.d.ts +2 -0
  66. package/dist/components/data/DataGrid/hooks/useDataGrid.js +199 -0
  67. package/dist/components/data/DataGrid/hooks/useDataGridCopy.d.ts +4 -0
  68. package/dist/components/data/DataGrid/hooks/useDataGridCopy.js +160 -0
  69. package/dist/components/data/DataGrid/hooks/useDataGridSettings.d.ts +16 -0
  70. package/dist/components/data/DataGrid/hooks/useDataGridSettings.js +44 -0
  71. package/dist/components/data/DataGrid/index.d.ts +2 -0
  72. package/dist/components/data/DataGrid/index.js +91 -0
  73. package/dist/components/data/DataGrid/styles.d.ts +55 -0
  74. package/dist/components/data/DataGrid/styles.js +121 -0
  75. package/dist/components/data/DataGrid/types.d.ts +162 -0
  76. package/dist/components/data/DataGrid/types.js +34 -0
  77. package/dist/components/data/index.d.ts +3 -0
  78. package/dist/components/data/index.js +19 -0
  79. package/dist/components/forms/Button.d.ts +10 -0
  80. package/dist/components/forms/Button.js +70 -0
  81. package/dist/components/forms/IconButton.d.ts +7 -0
  82. package/dist/components/forms/IconButton.js +64 -0
  83. package/dist/components/forms/IndeterminateCheckbox.d.ts +8 -0
  84. package/dist/components/forms/IndeterminateCheckbox.js +41 -0
  85. package/dist/components/forms/Select.d.ts +10 -0
  86. package/dist/components/forms/Select.js +49 -0
  87. package/dist/components/forms/index.d.ts +5 -0
  88. package/dist/components/forms/index.js +23 -0
  89. package/dist/components/forms/styles.d.ts +2 -0
  90. package/dist/components/forms/styles.js +34 -0
  91. package/dist/components/index.d.ts +3 -0
  92. package/dist/components/index.js +19 -0
  93. package/dist/components/layout/Dropdown/index.d.ts +11 -0
  94. package/dist/components/layout/Dropdown/index.js +85 -0
  95. package/dist/components/layout/Dropdown/styles.d.ts +11 -0
  96. package/dist/components/layout/Dropdown/styles.js +45 -0
  97. package/dist/components/layout/Loading/index.d.ts +6 -0
  98. package/dist/components/layout/Loading/index.js +42 -0
  99. package/dist/components/layout/Loading/styles.d.ts +6 -0
  100. package/dist/components/layout/Loading/styles.js +18 -0
  101. package/dist/components/layout/Modal/index.d.ts +16 -0
  102. package/dist/components/layout/Modal/index.js +67 -0
  103. package/dist/components/layout/Modal/styles.d.ts +32 -0
  104. package/dist/components/layout/Modal/styles.js +52 -0
  105. package/dist/components/layout/index.d.ts +3 -0
  106. package/dist/components/layout/index.js +19 -0
  107. package/dist/config/index.d.ts +10 -0
  108. package/dist/config/index.js +2 -0
  109. package/dist/config/types.d.ts +11 -0
  110. package/dist/config/types.js +2 -0
  111. package/dist/helpers/getScrollbarSize.d.ts +1 -0
  112. package/dist/helpers/getScrollbarSize.js +17 -0
  113. package/dist/helpers/numbers.d.ts +3 -0
  114. package/dist/helpers/numbers.js +31 -0
  115. package/dist/hooks/index.d.ts +2 -0
  116. package/dist/hooks/index.js +18 -0
  117. package/dist/hooks/useElementSize.d.ts +4 -0
  118. package/dist/hooks/useElementSize.js +23 -0
  119. package/dist/hooks/useWindowSize.d.ts +4 -0
  120. package/dist/hooks/useWindowSize.js +19 -0
  121. package/dist/index.d.ts +5 -0
  122. package/dist/index.js +21 -0
  123. package/dist/providers/PortalsProvider/index.d.ts +10 -0
  124. package/dist/providers/PortalsProvider/index.js +46 -0
  125. package/dist/providers/PortalsProvider/styles.d.ts +9 -0
  126. package/dist/providers/PortalsProvider/styles.js +21 -0
  127. package/dist/providers/SettingsProvider/index.d.ts +8 -0
  128. package/dist/providers/SettingsProvider/index.js +54 -0
  129. package/dist/providers/ThemeProvider/ThemeProvider.d.ts +7 -0
  130. package/dist/providers/ThemeProvider/ThemeProvider.js +51 -0
  131. package/dist/providers/ThemeProvider/defaultTheme.d.ts +2 -0
  132. package/dist/providers/ThemeProvider/defaultTheme.js +417 -0
  133. package/dist/providers/ThemeProvider/index.d.ts +2 -0
  134. package/dist/providers/ThemeProvider/index.js +5 -0
  135. package/dist/providers/ThemeProvider/types.d.ts +24 -0
  136. package/dist/providers/ThemeProvider/types.js +2 -0
  137. package/dist/providers/UiProviders/index.d.ts +12 -0
  138. package/dist/providers/UiProviders/index.js +62 -0
  139. package/dist/providers/UiProviders/styles.d.ts +3 -0
  140. package/dist/providers/UiProviders/styles.js +13 -0
  141. package/dist/providers/hooks.d.ts +3 -0
  142. package/dist/providers/hooks.js +13 -0
  143. package/dist/providers/index.d.ts +4 -0
  144. package/dist/providers/index.js +20 -0
  145. package/dist/services/WebSocketService.d.ts +24 -0
  146. package/dist/services/WebSocketService.js +136 -0
  147. package/dist/services/advancedRequests.d.ts +41 -0
  148. package/dist/services/advancedRequests.js +13 -0
  149. package/dist/services/base.d.ts +19 -0
  150. package/dist/services/base.js +10 -0
  151. package/dist/services/hooks.d.ts +1 -0
  152. package/dist/services/hooks.js +11 -0
  153. package/dist/services/index.d.ts +2 -0
  154. package/dist/services/index.js +18 -0
  155. package/package.json +4 -3
  156. package/src/Icons.tsx +80 -80
  157. package/src/components/data/DataGrid/AdvancedRequestDataGrid.tsx +236 -236
  158. package/src/components/data/DataGrid/DataGridCell.tsx +78 -78
  159. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +14 -14
  160. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +58 -58
  161. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +181 -181
  162. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  163. package/src/components/data/DataGrid/DataGridEditableCell.tsx +54 -54
  164. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +75 -75
  165. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +190 -190
  166. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +100 -100
  167. package/src/components/data/DataGrid/DataGridFooter.tsx +64 -64
  168. package/src/components/data/DataGrid/DataGridHeader.tsx +129 -129
  169. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +166 -166
  170. package/src/components/data/DataGrid/FilterModalContent/index.tsx +125 -125
  171. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  172. package/src/components/data/DataGrid/FilterValuesScroller.tsx +131 -131
  173. package/src/components/data/DataGrid/VirtualScroller.tsx +51 -51
  174. package/src/components/data/DataGrid/helpers/advancedRequests.tsx +61 -61
  175. package/src/components/data/DataGrid/helpers/columns.tsx +259 -259
  176. package/src/components/data/DataGrid/helpers/filters.ts +219 -219
  177. package/src/components/data/DataGrid/helpers/index.ts +3 -3
  178. package/src/components/data/DataGrid/hooks/index.ts +30 -30
  179. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +225 -225
  180. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +166 -166
  181. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +49 -49
  182. package/src/components/data/DataGrid/index.tsx +145 -145
  183. package/src/components/data/DataGrid/styles.ts +284 -284
  184. package/src/components/data/DataGrid/types.ts +232 -232
  185. package/src/components/data/index.ts +3 -3
  186. package/src/components/forms/Button.tsx +99 -99
  187. package/src/components/forms/IconButton.tsx +57 -57
  188. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  189. package/src/components/forms/Select.tsx +40 -40
  190. package/src/components/forms/index.ts +5 -5
  191. package/src/components/forms/styles.ts +20 -20
  192. package/src/components/index.ts +3 -3
  193. package/src/components/layout/Dropdown/index.tsx +79 -79
  194. package/src/components/layout/Dropdown/styles.ts +44 -44
  195. package/src/components/layout/Loading/index.tsx +29 -28
  196. package/src/components/layout/Loading/styles.ts +29 -29
  197. package/src/components/layout/Modal/index.tsx +51 -51
  198. package/src/components/layout/Modal/styles.ts +110 -110
  199. package/src/components/layout/index.ts +3 -3
  200. package/src/config/index.ts +14 -14
  201. package/src/helpers/getScrollbarSize.ts +14 -14
  202. package/src/helpers/numbers.ts +20 -20
  203. package/src/hooks/index.ts +2 -2
  204. package/src/hooks/useElementSize.ts +24 -24
  205. package/src/hooks/useWindowSize.ts +20 -20
  206. package/src/index.ts +7 -7
  207. package/src/providers/PortalsProvider/index.tsx +54 -54
  208. package/src/providers/PortalsProvider/styles.ts +27 -27
  209. package/src/providers/SettingsProvider/index.tsx +70 -70
  210. package/src/providers/ThemeProvider/ThemeProvider.ts +55 -55
  211. package/src/providers/ThemeProvider/defaultTheme.ts +444 -444
  212. package/src/providers/ThemeProvider/index.ts +3 -3
  213. package/src/providers/ThemeProvider/types.ts +123 -123
  214. package/src/providers/UiProviders/index.tsx +65 -65
  215. package/src/providers/UiProviders/styles.ts +10 -10
  216. package/src/providers/hooks.ts +8 -8
  217. package/src/providers/index.ts +5 -5
  218. package/src/services/WebSocketService.ts +147 -147
  219. package/src/services/advancedRequests.ts +100 -100
  220. package/src/services/base.ts +31 -31
  221. package/src/services/hooks.ts +13 -13
  222. package/src/services/index.ts +2 -2
  223. package/src/styles/animations.scss +30 -30
  224. package/src/styles/index.scss +42 -42
  225. package/src/typings.d.ts +6 -6
  226. package/tsconfig.tsbuildinfo +1 -0
@@ -1,236 +1,236 @@
1
- import {
2
- AdvancedRequestRow,
3
- ConditionDTO,
4
- FieldDTO,
5
- OrderByDTO,
6
- useAdvancedRequestHandler,
7
- } from '../../../services/advancedRequests';
8
- import {
9
- DataGridColumns,
10
- DataGridFilters,
11
- DataGridProps,
12
- DataGridSort,
13
- } from './types';
14
- import { convertFiltersToConditions, getAdvancedRequestDto } from './helpers';
15
- import { useCallback, useEffect, useRef, useState } from 'react';
16
-
17
- import { DataGrid } from '.';
18
- import { debounce } from 'lodash';
19
-
20
- export type AdvancedRequestDataGridProps<R> = Omit<DataGridProps<R>, 'rows'> & {
21
- type: string;
22
- orderBy?: OrderByDTO[];
23
- conditions?: ConditionDTO[];
24
- addIdColumn?: boolean;
25
- parser?: (row: AdvancedRequestRow<R>) => R;
26
- };
27
-
28
- const getColumnField = <R,>(
29
- columns: DataGridColumns<R>,
30
- columnKey: string
31
- ): FieldDTO => {
32
- return columns[columnKey].field
33
- ? {
34
- fieldName: columns[columnKey].field?.fieldName ?? columnKey,
35
- fieldAlias: columnKey,
36
- }
37
- : {
38
- fieldName: columnKey,
39
- fieldAlias: columnKey,
40
- };
41
- };
42
- const getFirstColumnField = <R,>(columns: DataGridColumns<R>): FieldDTO => {
43
- return getColumnField(columns, Object.keys(columns)[0]);
44
- };
45
-
46
- export const AdvancedRequestDataGrid = <R,>(
47
- props: AdvancedRequestDataGridProps<R>
48
- ) => {
49
- const currentRows = useRef<R[]>([]);
50
- const [rows, setRows] = useState<R[]>([]);
51
- const [start, setStart] = useState(0);
52
- const [length, setLength] = useState(50);
53
- const [total, setTotal] = useState(-1);
54
- const advancedRequest = useAdvancedRequestHandler<R>();
55
-
56
- const [conditions, setConditions] = useState<ConditionDTO[]>([]);
57
- const [orderBy, setOrderBy] = useState<OrderByDTO[]>(
58
- props.orderBy ?? [
59
- {
60
- field: getFirstColumnField(props.columns),
61
- direction: 'ASC',
62
- },
63
- ]
64
- );
65
-
66
- const refresh = useCallback(() => {
67
- setRows([]);
68
- setStart(0);
69
- setLength(50);
70
- setTotal(-1);
71
- }, []);
72
-
73
- const onFiltersChanged = useCallback((filters: DataGridFilters<R>) => {
74
- console.log('filters changed', filters);
75
- const newConditions = convertFiltersToConditions(filters);
76
- console.log('new conditions:', newConditions);
77
- setTotal(-1);
78
- setConditions(newConditions);
79
- }, []);
80
-
81
- const onSortsChanged = useCallback(
82
- (sorts: Record<string, DataGridSort>) => {
83
- console.log('sorts changed', sorts);
84
- refresh();
85
- setOrderBy(
86
- Object.entries(sorts).map(
87
- ([columnKey, direction]) =>
88
- ({
89
- field: getColumnField(props.columns, columnKey),
90
- direction: direction.toUpperCase(),
91
- } as OrderByDTO)
92
- )
93
- );
94
- },
95
- [props.columns, refresh]
96
- );
97
-
98
- const loadRows = useRef(
99
- debounce(
100
- (
101
- columns: DataGridColumns<R>,
102
- conditions: ConditionDTO[],
103
- orderBy: OrderByDTO[],
104
- start: number,
105
- length: number,
106
- getTotal = false
107
- ) => {
108
- advancedRequest(
109
- getAdvancedRequestDto({
110
- type: props.type,
111
- columns,
112
- conditions,
113
- orderBy,
114
- start,
115
- length,
116
- getTotal,
117
- })
118
- ).then((response) => {
119
- if (getTotal) {
120
- currentRows.current = Array(response.total).fill(null);
121
- if (getTotal) setTotal(response.total ?? 0);
122
- }
123
- const parsedRows = response.data.map(
124
- props.parser ?? ((row) => row as R)
125
- );
126
- currentRows.current.splice(start, length, ...parsedRows);
127
- setRows([...currentRows.current]);
128
- });
129
- },
130
- 100
131
- )
132
- );
133
-
134
- const loadFilterValues = useCallback(
135
- (columnKey: string) => {
136
- return advancedRequest({
137
- fields: [
138
- {
139
- fieldName: columnKey,
140
- },
141
- ],
142
- conditions: [
143
- ...(props.conditions ?? []),
144
- ...conditions,
145
- {
146
- field: {
147
- fieldName: 'DeletedAt',
148
- },
149
- operator: 'isNull' as const,
150
- },
151
- ].filter(
152
- (condition) =>
153
- (condition.field.fieldAlias ?? condition.field.fieldName) !==
154
- columnKey
155
- ),
156
- orderBy: [
157
- {
158
- field: { fieldName: columnKey },
159
- direction: 'ASC',
160
- },
161
- ],
162
- type: props.type,
163
- getTotal: false,
164
- unique: true,
165
- }).then((response) => {
166
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
- return response.data.map((row: any) => row[columnKey]);
168
- });
169
- },
170
- [advancedRequest, conditions, props.conditions, props.type]
171
- );
172
-
173
- useEffect(
174
- () =>
175
- loadRows.current(
176
- props.columns,
177
- [...(props.conditions ?? []), ...(conditions ?? [])],
178
- orderBy,
179
- start,
180
- length,
181
- total < 0
182
- ),
183
- [props.columns, conditions, orderBy, start, length, total, props.conditions]
184
- );
185
-
186
- const loadCopyRows = useCallback(
187
- () =>
188
- advancedRequest(
189
- getAdvancedRequestDto({
190
- type: props.type,
191
- columns: props.columns,
192
- conditions: [...(props.conditions ?? []), ...(conditions ?? [])],
193
- orderBy,
194
- start: 0,
195
- length: total,
196
- })
197
- ).then((response) =>
198
- response.data.map(props.parser ?? ((row) => row as R))
199
- ),
200
- [
201
- advancedRequest,
202
- conditions,
203
- orderBy,
204
- props.columns,
205
- props.conditions,
206
- props.parser,
207
- props.type,
208
- total,
209
- ]
210
- );
211
-
212
- const onVisibleRowsChanged = useCallback(
213
- (newStart: number, newLength: number) => {
214
- if (newStart !== start || newLength !== length) {
215
- setStart(newStart);
216
- setLength(newLength);
217
- }
218
- },
219
- [length, start]
220
- );
221
-
222
- return (
223
- <DataGrid
224
- onVisibleRowsChange={onVisibleRowsChanged}
225
- filter={false}
226
- sort={false}
227
- onFiltersChanged={onFiltersChanged}
228
- onSortsChanged={onSortsChanged}
229
- filterValuesLoader={loadFilterValues}
230
- rows={rows}
231
- loadCopyRows={loadCopyRows}
232
- refresh={refresh}
233
- {...props}
234
- />
235
- );
236
- };
1
+ import {
2
+ AdvancedRequestRow,
3
+ ConditionDTO,
4
+ FieldDTO,
5
+ OrderByDTO,
6
+ useAdvancedRequestHandler,
7
+ } from '../../../services/advancedRequests';
8
+ import {
9
+ DataGridColumns,
10
+ DataGridFilters,
11
+ DataGridProps,
12
+ DataGridSort,
13
+ } from './types';
14
+ import { convertFiltersToConditions, getAdvancedRequestDto } from './helpers';
15
+ import { useCallback, useEffect, useRef, useState } from 'react';
16
+
17
+ import { DataGrid } from '.';
18
+ import { debounce } from 'lodash';
19
+
20
+ export type AdvancedRequestDataGridProps<R> = Omit<DataGridProps<R>, 'rows'> & {
21
+ type: string;
22
+ orderBy?: OrderByDTO[];
23
+ conditions?: ConditionDTO[];
24
+ addIdColumn?: boolean;
25
+ parser?: (row: AdvancedRequestRow<R>) => R;
26
+ };
27
+
28
+ const getColumnField = <R,>(
29
+ columns: DataGridColumns<R>,
30
+ columnKey: string
31
+ ): FieldDTO => {
32
+ return columns[columnKey].field
33
+ ? {
34
+ fieldName: columns[columnKey].field?.fieldName ?? columnKey,
35
+ fieldAlias: columnKey,
36
+ }
37
+ : {
38
+ fieldName: columnKey,
39
+ fieldAlias: columnKey,
40
+ };
41
+ };
42
+ const getFirstColumnField = <R,>(columns: DataGridColumns<R>): FieldDTO => {
43
+ return getColumnField(columns, Object.keys(columns)[0]);
44
+ };
45
+
46
+ export const AdvancedRequestDataGrid = <R,>(
47
+ props: AdvancedRequestDataGridProps<R>
48
+ ) => {
49
+ const currentRows = useRef<R[]>([]);
50
+ const [rows, setRows] = useState<R[]>([]);
51
+ const [start, setStart] = useState(0);
52
+ const [length, setLength] = useState(50);
53
+ const [total, setTotal] = useState(-1);
54
+ const advancedRequest = useAdvancedRequestHandler<R>();
55
+
56
+ const [conditions, setConditions] = useState<ConditionDTO[]>([]);
57
+ const [orderBy, setOrderBy] = useState<OrderByDTO[]>(
58
+ props.orderBy ?? [
59
+ {
60
+ field: getFirstColumnField(props.columns),
61
+ direction: 'ASC',
62
+ },
63
+ ]
64
+ );
65
+
66
+ const refresh = useCallback(() => {
67
+ setRows([]);
68
+ setStart(0);
69
+ setLength(50);
70
+ setTotal(-1);
71
+ }, []);
72
+
73
+ const onFiltersChanged = useCallback((filters: DataGridFilters<R>) => {
74
+ console.log('filters changed', filters);
75
+ const newConditions = convertFiltersToConditions(filters);
76
+ console.log('new conditions:', newConditions);
77
+ setTotal(-1);
78
+ setConditions(newConditions);
79
+ }, []);
80
+
81
+ const onSortsChanged = useCallback(
82
+ (sorts: Record<string, DataGridSort>) => {
83
+ console.log('sorts changed', sorts);
84
+ refresh();
85
+ setOrderBy(
86
+ Object.entries(sorts).map(
87
+ ([columnKey, direction]) =>
88
+ ({
89
+ field: getColumnField(props.columns, columnKey),
90
+ direction: direction.toUpperCase(),
91
+ } as OrderByDTO)
92
+ )
93
+ );
94
+ },
95
+ [props.columns, refresh]
96
+ );
97
+
98
+ const loadRows = useRef(
99
+ debounce(
100
+ (
101
+ columns: DataGridColumns<R>,
102
+ conditions: ConditionDTO[],
103
+ orderBy: OrderByDTO[],
104
+ start: number,
105
+ length: number,
106
+ getTotal = false
107
+ ) => {
108
+ advancedRequest(
109
+ getAdvancedRequestDto({
110
+ type: props.type,
111
+ columns,
112
+ conditions,
113
+ orderBy,
114
+ start,
115
+ length,
116
+ getTotal,
117
+ })
118
+ ).then((response) => {
119
+ if (getTotal) {
120
+ currentRows.current = Array(response.total).fill(null);
121
+ if (getTotal) setTotal(response.total ?? 0);
122
+ }
123
+ const parsedRows = response.data.map(
124
+ props.parser ?? ((row) => row as R)
125
+ );
126
+ currentRows.current.splice(start, length, ...parsedRows);
127
+ setRows([...currentRows.current]);
128
+ });
129
+ },
130
+ 100
131
+ )
132
+ );
133
+
134
+ const loadFilterValues = useCallback(
135
+ (columnKey: string) => {
136
+ return advancedRequest({
137
+ fields: [
138
+ {
139
+ fieldName: columnKey,
140
+ },
141
+ ],
142
+ conditions: [
143
+ ...(props.conditions ?? []),
144
+ ...conditions,
145
+ {
146
+ field: {
147
+ fieldName: 'DeletedAt',
148
+ },
149
+ operator: 'isNull' as const,
150
+ },
151
+ ].filter(
152
+ (condition) =>
153
+ (condition.field.fieldAlias ?? condition.field.fieldName) !==
154
+ columnKey
155
+ ),
156
+ orderBy: [
157
+ {
158
+ field: { fieldName: columnKey },
159
+ direction: 'ASC',
160
+ },
161
+ ],
162
+ type: props.type,
163
+ getTotal: false,
164
+ unique: true,
165
+ }).then((response) => {
166
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
+ return response.data.map((row: any) => row[columnKey]);
168
+ });
169
+ },
170
+ [advancedRequest, conditions, props.conditions, props.type]
171
+ );
172
+
173
+ useEffect(
174
+ () =>
175
+ loadRows.current(
176
+ props.columns,
177
+ [...(props.conditions ?? []), ...(conditions ?? [])],
178
+ orderBy,
179
+ start,
180
+ length,
181
+ total < 0
182
+ ),
183
+ [props.columns, conditions, orderBy, start, length, total, props.conditions]
184
+ );
185
+
186
+ const loadCopyRows = useCallback(
187
+ () =>
188
+ advancedRequest(
189
+ getAdvancedRequestDto({
190
+ type: props.type,
191
+ columns: props.columns,
192
+ conditions: [...(props.conditions ?? []), ...(conditions ?? [])],
193
+ orderBy,
194
+ start: 0,
195
+ length: total,
196
+ })
197
+ ).then((response) =>
198
+ response.data.map(props.parser ?? ((row) => row as R))
199
+ ),
200
+ [
201
+ advancedRequest,
202
+ conditions,
203
+ orderBy,
204
+ props.columns,
205
+ props.conditions,
206
+ props.parser,
207
+ props.type,
208
+ total,
209
+ ]
210
+ );
211
+
212
+ const onVisibleRowsChanged = useCallback(
213
+ (newStart: number, newLength: number) => {
214
+ if (newStart !== start || newLength !== length) {
215
+ setStart(newStart);
216
+ setLength(newLength);
217
+ }
218
+ },
219
+ [length, start]
220
+ );
221
+
222
+ return (
223
+ <DataGrid
224
+ onVisibleRowsChange={onVisibleRowsChanged}
225
+ filter={false}
226
+ sort={false}
227
+ onFiltersChanged={onFiltersChanged}
228
+ onSortsChanged={onSortsChanged}
229
+ filterValuesLoader={loadFilterValues}
230
+ rows={rows}
231
+ loadCopyRows={loadCopyRows}
232
+ refresh={refresh}
233
+ {...props}
234
+ />
235
+ );
236
+ };
@@ -1,78 +1,78 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
3
-
4
- import * as styles from './styles';
5
-
6
- import { DataGridCellProps, DataGridColumn, DataGridFilterType } from './types';
7
- import { MouseEvent, useCallback } from 'react';
8
-
9
- import { DataGridEditableCell } from './DataGridEditableCell';
10
- import { join } from 'lodash';
11
- import { useDataGridContext } from './hooks';
12
-
13
- const defaultRender = <R,>(
14
- col: DataGridColumn<R, DataGridFilterType | undefined>,
15
- row: R
16
- ) => {
17
- const value = col.propertyName ? row[col.propertyName] : '';
18
- return !value ? '' : String(value);
19
- };
20
-
21
- export const DataGridCell = <R,>({
22
- row,
23
- rowIndex,
24
- columnKey,
25
- columnIndex,
26
- column,
27
- context,
28
- className,
29
- style,
30
- }: DataGridCellProps<R>) => {
31
- const {
32
- name,
33
- editable,
34
- editingCell = [-1, -1],
35
- setEditingCell,
36
- onRowDoubleClick,
37
- } = useDataGridContext(context);
38
- const isEditable =
39
- !!editable && !!column.editable && column.type && column.getter;
40
- const isEditing =
41
- isEditable && editingCell[0] === rowIndex && editingCell[1] === columnIndex;
42
-
43
- const onDoubleClick = useCallback(
44
- (e: MouseEvent) => {
45
- e.stopPropagation();
46
- e.preventDefault();
47
- if (isEditable) {
48
- setEditingCell([rowIndex, columnIndex]);
49
- } else onRowDoubleClick?.(row, e);
50
- },
51
- [columnIndex, isEditable, onRowDoubleClick, row, rowIndex, setEditingCell]
52
- );
53
-
54
- if (isEditing) {
55
- return (
56
- <DataGridEditableCell
57
- key={`${name}-${rowIndex}-${columnIndex}`}
58
- row={row}
59
- rowIndex={rowIndex}
60
- columnKey={columnKey}
61
- columnIndex={columnIndex}
62
- column={column}
63
- context={context}
64
- />
65
- );
66
- }
67
-
68
- return (
69
- <styles.DataGridCell
70
- key={`${name}-${rowIndex}-${columnIndex}`}
71
- className={join([className, column.className, column.bodyClassName], ' ')}
72
- onDoubleClick={onDoubleClick}
73
- style={style}
74
- >
75
- {(column.render ?? defaultRender)(column, row)}
76
- </styles.DataGridCell>
77
- );
78
- };
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
3
+
4
+ import * as styles from './styles';
5
+
6
+ import { DataGridCellProps, DataGridColumn, DataGridFilterType } from './types';
7
+ import { MouseEvent, useCallback } from 'react';
8
+
9
+ import { DataGridEditableCell } from './DataGridEditableCell';
10
+ import { join } from 'lodash';
11
+ import { useDataGridContext } from './hooks';
12
+
13
+ const defaultRender = <R,>(
14
+ col: DataGridColumn<R, DataGridFilterType | undefined>,
15
+ row: R
16
+ ) => {
17
+ const value = col.propertyName ? row[col.propertyName] : '';
18
+ return !value ? '' : String(value);
19
+ };
20
+
21
+ export const DataGridCell = <R,>({
22
+ row,
23
+ rowIndex,
24
+ columnKey,
25
+ columnIndex,
26
+ column,
27
+ context,
28
+ className,
29
+ style,
30
+ }: DataGridCellProps<R>) => {
31
+ const {
32
+ name,
33
+ editable,
34
+ editingCell = [-1, -1],
35
+ setEditingCell,
36
+ onRowDoubleClick,
37
+ } = useDataGridContext(context);
38
+ const isEditable =
39
+ !!editable && !!column.editable && column.type && column.getter;
40
+ const isEditing =
41
+ isEditable && editingCell[0] === rowIndex && editingCell[1] === columnIndex;
42
+
43
+ const onDoubleClick = useCallback(
44
+ (e: MouseEvent) => {
45
+ e.stopPropagation();
46
+ e.preventDefault();
47
+ if (isEditable) {
48
+ setEditingCell([rowIndex, columnIndex]);
49
+ } else onRowDoubleClick?.(row, e);
50
+ },
51
+ [columnIndex, isEditable, onRowDoubleClick, row, rowIndex, setEditingCell]
52
+ );
53
+
54
+ if (isEditing) {
55
+ return (
56
+ <DataGridEditableCell
57
+ key={`${name}-${rowIndex}-${columnIndex}`}
58
+ row={row}
59
+ rowIndex={rowIndex}
60
+ columnKey={columnKey}
61
+ columnIndex={columnIndex}
62
+ column={column}
63
+ context={context}
64
+ />
65
+ );
66
+ }
67
+
68
+ return (
69
+ <styles.DataGridCell
70
+ key={`${name}-${rowIndex}-${columnIndex}`}
71
+ className={join([className, column.className, column.bodyClassName], ' ')}
72
+ onDoubleClick={onDoubleClick}
73
+ style={style}
74
+ >
75
+ {(column.render ?? defaultRender)(column, row)}
76
+ </styles.DataGridCell>
77
+ );
78
+ };
@@ -1,14 +1,14 @@
1
- import { DataGridColumnKeyValuePair, DataGridColumns } from '../types';
2
-
3
- export const normalizeColumnsOrders = <R>(
4
- columns: DataGridColumns<R> | DataGridColumnKeyValuePair<R>[]
5
- ) =>
6
- (Array.isArray(columns) ? columns : Object.entries(columns)).map<
7
- DataGridColumnKeyValuePair<R>
8
- >(([key, column], index) => [
9
- key,
10
- {
11
- ...column,
12
- order: index,
13
- },
14
- ]);
1
+ import { DataGridColumnKeyValuePair, DataGridColumns } from '../types';
2
+
3
+ export const normalizeColumnsOrders = <R>(
4
+ columns: DataGridColumns<R> | DataGridColumnKeyValuePair<R>[]
5
+ ) =>
6
+ (Array.isArray(columns) ? columns : Object.entries(columns)).map<
7
+ DataGridColumnKeyValuePair<R>
8
+ >(([key, column], index) => [
9
+ key,
10
+ {
11
+ ...column,
12
+ order: index,
13
+ },
14
+ ]);