@addev-be/ui 0.10.10 → 0.10.12

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 (177) hide show
  1. package/assets/icons/arrow-down-1-9.svg +1 -1
  2. package/assets/icons/arrow-down-a-z.svg +1 -1
  3. package/assets/icons/arrow-up-z-a.svg +1 -1
  4. package/assets/icons/check.svg +1 -1
  5. package/assets/icons/circle-check.svg +1 -1
  6. package/assets/icons/down.svg +1 -1
  7. package/assets/icons/filter-full.svg +1 -1
  8. package/assets/icons/filter.svg +1 -1
  9. package/assets/icons/hashtag.svg +1 -1
  10. package/assets/icons/image-slash.svg +1 -1
  11. package/assets/icons/left.svg +1 -1
  12. package/assets/icons/magnifier.svg +1 -1
  13. package/assets/icons/phone.svg +1 -1
  14. package/assets/icons/right.svg +1 -1
  15. package/assets/icons/sort-calendar-ascending.svg +5 -5
  16. package/assets/icons/spinner-third.svg +1 -1
  17. package/assets/icons/table-columns.svg +1 -1
  18. package/assets/icons/table-footer-slash.svg +4 -4
  19. package/assets/icons/table-footer.svg +3 -3
  20. package/assets/icons/up.svg +1 -1
  21. package/assets/icons/user-tie.svg +1 -1
  22. package/assets/icons/x-bar.svg +3 -3
  23. package/dist/components/auth/LoginForm.js +0 -1
  24. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +10 -0
  25. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +173 -0
  26. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +13 -0
  27. package/dist/components/data/DataGrid/FilterValuesScroller.js +73 -0
  28. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  29. package/dist/components/data/DataGrid/VirtualScroller.js +41 -0
  30. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  31. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  32. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  33. package/dist/components/data/DataGrid/helpers.js +436 -0
  34. package/dist/config/types.d.ts +11 -0
  35. package/dist/config/types.js +2 -0
  36. package/dist/providers/AuthenticationProvider/index.d.ts +0 -1
  37. package/dist/providers/AuthenticationProvider/index.js +14 -28
  38. package/dist/services/advancedRequests.d.ts +1 -1
  39. package/dist/services/requests/userPermissions.d.ts +4 -0
  40. package/dist/services/requests/userPermissions.js +20 -0
  41. package/dist/services/sqlRequests.d.ts +1 -1
  42. package/package.json +1 -1
  43. package/src/Icons.tsx +128 -128
  44. package/src/components/auth/LoginForm.tsx +84 -84
  45. package/src/components/auth/LoginPage.tsx +32 -32
  46. package/src/components/auth/PasswordRecoveryForm.tsx +52 -52
  47. package/src/components/auth/PasswordResetForm.tsx +112 -112
  48. package/src/components/auth/index.ts +4 -4
  49. package/src/components/auth/styles.ts +14 -14
  50. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +93 -93
  51. package/src/components/data/AdvancedRequestDataGrid/helpers/columns.tsx +262 -262
  52. package/src/components/data/AdvancedRequestDataGrid/helpers/index.ts +2 -2
  53. package/src/components/data/AdvancedRequestDataGrid/index.tsx +267 -267
  54. package/src/components/data/AdvancedRequestDataGrid/types.ts +47 -47
  55. package/src/components/data/DataGrid/DataGridCell.tsx +73 -73
  56. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +14 -14
  57. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  58. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +181 -181
  59. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  60. package/src/components/data/DataGrid/DataGridEditableCell.tsx +43 -43
  61. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +120 -120
  62. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +75 -75
  63. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +378 -378
  64. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  65. package/src/components/data/DataGrid/DataGridFooter.tsx +42 -42
  66. package/src/components/data/DataGrid/DataGridHeader.tsx +126 -126
  67. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +132 -132
  68. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +70 -70
  69. package/src/components/data/DataGrid/FilterModalContent/index.tsx +136 -136
  70. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  71. package/src/components/data/DataGrid/helpers/columns.tsx +319 -319
  72. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  73. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  74. package/src/components/data/DataGrid/hooks/index.ts +30 -30
  75. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +287 -287
  76. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +175 -175
  77. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  78. package/src/components/data/DataGrid/index.tsx +83 -83
  79. package/src/components/data/DataGrid/styles.ts +285 -285
  80. package/src/components/data/DataGrid/types.ts +276 -276
  81. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +306 -306
  82. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  83. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  84. package/src/components/data/SqlRequestDataGrid/index.tsx +385 -385
  85. package/src/components/data/SqlRequestDataGrid/types.ts +48 -48
  86. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +106 -106
  87. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  88. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  89. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  90. package/src/components/data/SqlRequestGrid/index.tsx +308 -308
  91. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  92. package/src/components/data/SqlRequestGrid/types.ts +53 -53
  93. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  94. package/src/components/data/VirtualScroller/index.tsx +85 -85
  95. package/src/components/data/VirtualScroller/styles.ts +60 -60
  96. package/src/components/data/VirtualScroller/types.ts +12 -12
  97. package/src/components/data/index.ts +17 -17
  98. package/src/components/forms/AutoTextArea.tsx +41 -41
  99. package/src/components/forms/Button.tsx +133 -133
  100. package/src/components/forms/IconButton.tsx +57 -57
  101. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  102. package/src/components/forms/Select.tsx +40 -40
  103. package/src/components/forms/VerticalLabel.tsx +20 -20
  104. package/src/components/forms/index.ts +6 -6
  105. package/src/components/forms/styles.ts +31 -31
  106. package/src/components/index.ts +6 -6
  107. package/src/components/layout/Dropdown/index.tsx +112 -112
  108. package/src/components/layout/Dropdown/styles.ts +45 -45
  109. package/src/components/layout/Loading/index.tsx +29 -29
  110. package/src/components/layout/Loading/styles.ts +29 -29
  111. package/src/components/layout/Modal/index.tsx +51 -51
  112. package/src/components/layout/Modal/styles.ts +121 -121
  113. package/src/components/layout/index.ts +3 -3
  114. package/src/components/search/HighlightedText.tsx +37 -37
  115. package/src/components/search/QuickSearchBar.tsx +86 -86
  116. package/src/components/search/QuickSearchResults.tsx +86 -86
  117. package/src/components/search/index.ts +9 -9
  118. package/src/components/search/styles.ts +96 -96
  119. package/src/components/search/types.ts +26 -26
  120. package/src/components/ui/Avatar/index.tsx +54 -54
  121. package/src/components/ui/Card/index.tsx +14 -14
  122. package/src/components/ui/Card/styles.ts +37 -37
  123. package/src/components/ui/ContextMenu/index.tsx +79 -79
  124. package/src/components/ui/ContextMenu/styles.ts +119 -119
  125. package/src/components/ui/Label.tsx +90 -90
  126. package/src/components/ui/Message/index.tsx +57 -57
  127. package/src/components/ui/Message/styles.ts +40 -40
  128. package/src/components/ui/index.ts +5 -5
  129. package/src/config/index.ts +14 -14
  130. package/src/helpers/dates.ts +17 -17
  131. package/src/helpers/getScrollbarSize.ts +14 -14
  132. package/src/helpers/index.ts +3 -3
  133. package/src/helpers/numbers.ts +26 -26
  134. package/src/helpers/text.ts +13 -13
  135. package/src/hooks/index.ts +3 -3
  136. package/src/hooks/useElementSize.ts +24 -24
  137. package/src/hooks/useShowArchived.ts +16 -9
  138. package/src/hooks/useWindowSize.ts +20 -20
  139. package/src/index.ts +9 -9
  140. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  141. package/src/providers/AuthenticationProvider/index.tsx +240 -240
  142. package/src/providers/LoadingProvider/index.tsx +47 -47
  143. package/src/providers/PortalsProvider/index.tsx +54 -54
  144. package/src/providers/PortalsProvider/styles.ts +27 -27
  145. package/src/providers/SettingsProvider/index.tsx +70 -70
  146. package/src/providers/ThemeProvider/ThemeProvider.ts +63 -63
  147. package/src/providers/ThemeProvider/defaultTheme.ts +457 -457
  148. package/src/providers/ThemeProvider/index.ts +4 -4
  149. package/src/providers/ThemeProvider/types.ts +131 -131
  150. package/src/providers/TrackingProvider/index.tsx +71 -71
  151. package/src/providers/UiProviders/index.tsx +68 -68
  152. package/src/providers/UiProviders/styles.ts +10 -10
  153. package/src/providers/hooks.ts +12 -12
  154. package/src/providers/index.ts +8 -8
  155. package/src/services/HttpService.ts +92 -92
  156. package/src/services/WebSocketService.ts +137 -137
  157. package/src/services/advancedRequests.ts +102 -102
  158. package/src/services/base.ts +23 -23
  159. package/src/services/globalSearch.ts +29 -29
  160. package/src/services/hooks.ts +44 -44
  161. package/src/services/index.ts +19 -17
  162. package/src/services/requests/auth.ts +44 -44
  163. package/src/services/requests/generic.ts +62 -62
  164. package/src/services/requests/tracking.ts +12 -12
  165. package/src/services/requests/userProfiles.ts +35 -35
  166. package/src/services/requests/users.ts +28 -28
  167. package/src/services/sqlRequests.ts +111 -111
  168. package/src/services/types/auth.ts +131 -131
  169. package/src/services/types/base.ts +10 -10
  170. package/src/services/types/generic.ts +92 -92
  171. package/src/services/types/tracking.ts +39 -39
  172. package/src/services/types/userProfiles.ts +107 -107
  173. package/src/services/types/users.ts +106 -106
  174. package/src/styles/animations.scss +30 -30
  175. package/src/styles/index.scss +42 -42
  176. package/src/typings.d.ts +13 -13
  177. package/tsconfig.json +18 -18
@@ -1,175 +1,175 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
-
3
- import { DataGridColumn, DataGridContextProps } from '../types';
4
-
5
- import { useCallback } from 'react';
6
-
7
- export const useDataGridCopy = <R>({
8
- rows,
9
- visibleColumns = [],
10
- loadCopyRows,
11
- footerFunctions,
12
- }: Pick<
13
- DataGridContextProps<R>,
14
- 'rows' | 'visibleColumns' | 'loadCopyRows' | 'footerFunctions'
15
- >) => {
16
- const generateHeadersHtml = useCallback(() => {
17
- return `<tr>
18
- ${visibleColumns
19
- .map(
20
- ([, col]) =>
21
- `<th style="
22
- text-align: left;
23
- font-weight: bold;
24
- white-space: nowrap;
25
- ">
26
- ${col.name}
27
- </th>`
28
- )
29
- .join('\n')}
30
- </tr>`;
31
- }, [visibleColumns]);
32
-
33
- const generateFootersHtml = useCallback(
34
- (rowsToCopy: R[]) => {
35
- console.log('generate footers html');
36
- return `<tr>
37
- ${visibleColumns
38
- .map(
39
- ([colKey]) =>
40
- `<td style="
41
- font-weight: bold;
42
- white-space: nowrap;
43
- ">
44
- ${
45
- footerFunctions?.[colKey]?.(
46
- rowsToCopy,
47
- rowsToCopy,
48
- []
49
- ) ?? ''
50
- }
51
- </td>`
52
- )
53
- .join('\n')}
54
- </tr>`;
55
- },
56
- [footerFunctions, visibleColumns]
57
- );
58
-
59
- const generateCellText = useCallback((col: DataGridColumn<R>, value: any) => {
60
- return col.excelValue ? col.excelValue(value) : value?.toString() ?? '';
61
- }, []);
62
-
63
- const generateCellHtml = useCallback(
64
- (col: DataGridColumn<R>, value: any) => `<td style="
65
- ${
66
- col.excelFormatter
67
- ? "mso-number-format: '" + col.excelFormatter(col) + "';"
68
- : ''
69
- }
70
- ${
71
- col.excelBackgroundColor
72
- ? "background-color: '" + col.excelBackgroundColor(value) + "';"
73
- : ''
74
- }
75
- white-space: nowrap;
76
- ">
77
- ${generateCellText(col, value)}
78
- </td>`,
79
- [generateCellText]
80
- );
81
-
82
- const generateCopyHtml = useCallback(
83
- (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
84
- return `
85
- <table>
86
- ${includeHeaders ? generateHeadersHtml() : ''}
87
- ${(rowsToCopy || [])
88
- .map(
89
- (row) =>
90
- `<tr>
91
- ${visibleColumns
92
- .map(([, col]) => {
93
- const value: any =
94
- col.getter && row ? col.getter(row) : '';
95
- return generateCellHtml(col, value);
96
- })
97
- .join('\n')}
98
- </tr>`
99
- )
100
- .join('\n')}
101
- ${includeFooters ? generateFootersHtml(rowsToCopy) : ''}
102
- </table>
103
- `;
104
- },
105
- [visibleColumns, generateCellHtml, generateFootersHtml, generateHeadersHtml]
106
- );
107
-
108
- const generateHeadersText = useCallback(() => {
109
- return visibleColumns.map(([, col]) => col.name).join('\t');
110
- }, [visibleColumns]);
111
-
112
- const generateFootersText = useCallback(
113
- (rowsToCopy: R[]) => {
114
- return visibleColumns
115
- .map(
116
- ([colKey]) => footerFunctions?.[colKey]?.(rowsToCopy, [], []) ?? ''
117
- )
118
- .join('\t');
119
- },
120
- [footerFunctions, visibleColumns]
121
- );
122
-
123
- const generateCopyText = useCallback(
124
- (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
125
- return [
126
- includeHeaders ? generateHeadersText() : '',
127
- ...(rowsToCopy || []).map((row) =>
128
- visibleColumns
129
- .map(([, col]) => {
130
- const value: any = col.getter && row ? col.getter(row) : '';
131
- return col.excelValue
132
- ? col.excelValue(value)
133
- : value != null && value !== undefined
134
- ? value.toString()
135
- : '';
136
- })
137
- .join('\t')
138
- ),
139
- includeFooters ? generateFootersText(rowsToCopy) : '',
140
- ]
141
- .filter((s) => s != null)
142
- .join('\n');
143
- },
144
- [visibleColumns, generateFootersText, generateHeadersText]
145
- );
146
-
147
- const copyTable = useCallback(
148
- async (includeHeaders = true, includeFooters = true) => {
149
- const rowsToCopy = await (loadCopyRows ?? (async () => rows))();
150
-
151
- const copyHtml = generateCopyHtml(
152
- rowsToCopy,
153
- includeHeaders,
154
- includeFooters
155
- );
156
- const copyText = generateCopyText(
157
- rowsToCopy,
158
- includeHeaders,
159
- includeFooters
160
- );
161
-
162
- await navigator['clipboard'].write([
163
- new ClipboardItem({
164
- 'text/plain': new Blob([copyText], { type: 'text/plain' }),
165
- 'text/html': new Blob([copyHtml], { type: 'text/html' }),
166
- }),
167
- ]);
168
- },
169
- [generateCopyHtml, generateCopyText, loadCopyRows, rows]
170
- );
171
-
172
- return {
173
- copyTable,
174
- };
175
- };
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import { DataGridColumn, DataGridContextProps } from '../types';
4
+
5
+ import { useCallback } from 'react';
6
+
7
+ export const useDataGridCopy = <R>({
8
+ rows,
9
+ visibleColumns = [],
10
+ loadCopyRows,
11
+ footerFunctions,
12
+ }: Pick<
13
+ DataGridContextProps<R>,
14
+ 'rows' | 'visibleColumns' | 'loadCopyRows' | 'footerFunctions'
15
+ >) => {
16
+ const generateHeadersHtml = useCallback(() => {
17
+ return `<tr>
18
+ ${visibleColumns
19
+ .map(
20
+ ([, col]) =>
21
+ `<th style="
22
+ text-align: left;
23
+ font-weight: bold;
24
+ white-space: nowrap;
25
+ ">
26
+ ${col.name}
27
+ </th>`
28
+ )
29
+ .join('\n')}
30
+ </tr>`;
31
+ }, [visibleColumns]);
32
+
33
+ const generateFootersHtml = useCallback(
34
+ (rowsToCopy: R[]) => {
35
+ console.log('generate footers html');
36
+ return `<tr>
37
+ ${visibleColumns
38
+ .map(
39
+ ([colKey]) =>
40
+ `<td style="
41
+ font-weight: bold;
42
+ white-space: nowrap;
43
+ ">
44
+ ${
45
+ footerFunctions?.[colKey]?.(
46
+ rowsToCopy,
47
+ rowsToCopy,
48
+ []
49
+ ) ?? ''
50
+ }
51
+ </td>`
52
+ )
53
+ .join('\n')}
54
+ </tr>`;
55
+ },
56
+ [footerFunctions, visibleColumns]
57
+ );
58
+
59
+ const generateCellText = useCallback((col: DataGridColumn<R>, value: any) => {
60
+ return col.excelValue ? col.excelValue(value) : value?.toString() ?? '';
61
+ }, []);
62
+
63
+ const generateCellHtml = useCallback(
64
+ (col: DataGridColumn<R>, value: any) => `<td style="
65
+ ${
66
+ col.excelFormatter
67
+ ? "mso-number-format: '" + col.excelFormatter(col) + "';"
68
+ : ''
69
+ }
70
+ ${
71
+ col.excelBackgroundColor
72
+ ? "background-color: '" + col.excelBackgroundColor(value) + "';"
73
+ : ''
74
+ }
75
+ white-space: nowrap;
76
+ ">
77
+ ${generateCellText(col, value)}
78
+ </td>`,
79
+ [generateCellText]
80
+ );
81
+
82
+ const generateCopyHtml = useCallback(
83
+ (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
84
+ return `
85
+ <table>
86
+ ${includeHeaders ? generateHeadersHtml() : ''}
87
+ ${(rowsToCopy || [])
88
+ .map(
89
+ (row) =>
90
+ `<tr>
91
+ ${visibleColumns
92
+ .map(([, col]) => {
93
+ const value: any =
94
+ col.getter && row ? col.getter(row) : '';
95
+ return generateCellHtml(col, value);
96
+ })
97
+ .join('\n')}
98
+ </tr>`
99
+ )
100
+ .join('\n')}
101
+ ${includeFooters ? generateFootersHtml(rowsToCopy) : ''}
102
+ </table>
103
+ `;
104
+ },
105
+ [visibleColumns, generateCellHtml, generateFootersHtml, generateHeadersHtml]
106
+ );
107
+
108
+ const generateHeadersText = useCallback(() => {
109
+ return visibleColumns.map(([, col]) => col.name).join('\t');
110
+ }, [visibleColumns]);
111
+
112
+ const generateFootersText = useCallback(
113
+ (rowsToCopy: R[]) => {
114
+ return visibleColumns
115
+ .map(
116
+ ([colKey]) => footerFunctions?.[colKey]?.(rowsToCopy, [], []) ?? ''
117
+ )
118
+ .join('\t');
119
+ },
120
+ [footerFunctions, visibleColumns]
121
+ );
122
+
123
+ const generateCopyText = useCallback(
124
+ (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
125
+ return [
126
+ includeHeaders ? generateHeadersText() : '',
127
+ ...(rowsToCopy || []).map((row) =>
128
+ visibleColumns
129
+ .map(([, col]) => {
130
+ const value: any = col.getter && row ? col.getter(row) : '';
131
+ return col.excelValue
132
+ ? col.excelValue(value)
133
+ : value != null && value !== undefined
134
+ ? value.toString()
135
+ : '';
136
+ })
137
+ .join('\t')
138
+ ),
139
+ includeFooters ? generateFootersText(rowsToCopy) : '',
140
+ ]
141
+ .filter((s) => s != null)
142
+ .join('\n');
143
+ },
144
+ [visibleColumns, generateFootersText, generateHeadersText]
145
+ );
146
+
147
+ const copyTable = useCallback(
148
+ async (includeHeaders = true, includeFooters = true) => {
149
+ const rowsToCopy = await (loadCopyRows ?? (async () => rows))();
150
+
151
+ const copyHtml = generateCopyHtml(
152
+ rowsToCopy,
153
+ includeHeaders,
154
+ includeFooters
155
+ );
156
+ const copyText = generateCopyText(
157
+ rowsToCopy,
158
+ includeHeaders,
159
+ includeFooters
160
+ );
161
+
162
+ await navigator['clipboard'].write([
163
+ new ClipboardItem({
164
+ 'text/plain': new Blob([copyText], { type: 'text/plain' }),
165
+ 'text/html': new Blob([copyHtml], { type: 'text/html' }),
166
+ }),
167
+ ]);
168
+ },
169
+ [generateCopyHtml, generateCopyText, loadCopyRows, rows]
170
+ );
171
+
172
+ return {
173
+ copyTable,
174
+ };
175
+ };
@@ -1,48 +1,48 @@
1
- import { useCallback, useEffect, useState } from 'react';
2
-
3
- import { DataGridSettings } from '../types';
4
- import { useSettings } from '../../../../providers';
5
-
6
- export const useDataGridSettings = (name?: string) => {
7
- // TODO: Implement settings context
8
- const { settings, updateSettings } = useSettings();
9
- const [dataGridSettings, setDataGridSettings] = useState<DataGridSettings>(
10
- {}
11
- );
12
-
13
- useEffect(() => {
14
- if (name) {
15
- const settingName = `user.datagrid.settings.${name}`;
16
- const gridSettingsJson = settings?.[settingName] || '{}';
17
- let gridSettings: DataGridSettings = {};
18
- try {
19
- gridSettings = JSON.parse(gridSettingsJson);
20
- } catch (error) {
21
- console.error('[GRID] cannot decode datagrid settings for', {
22
- name,
23
- gridSettingsJson,
24
- error,
25
- });
26
- }
27
- setDataGridSettings(gridSettings);
28
- }
29
- }, [name, settings]);
30
-
31
- const saveSettings = useCallback(
32
- (newValue?: DataGridSettings) => {
33
- if (name) {
34
- const settingName = `user.datagrid.settings.${name}`;
35
- const newSettings = newValue ?? dataGridSettings;
36
- const newSettingsJson = JSON.stringify(newSettings);
37
- updateSettings({ [settingName]: newSettingsJson });
38
- }
39
- },
40
- [dataGridSettings, name, updateSettings]
41
- );
42
-
43
- return {
44
- settings: dataGridSettings,
45
- setSettings: setDataGridSettings,
46
- saveSettings,
47
- };
48
- };
1
+ import { useCallback, useEffect, useState } from 'react';
2
+
3
+ import { DataGridSettings } from '../types';
4
+ import { useSettings } from '../../../../providers';
5
+
6
+ export const useDataGridSettings = (name?: string) => {
7
+ // TODO: Implement settings context
8
+ const { settings, updateSettings } = useSettings();
9
+ const [dataGridSettings, setDataGridSettings] = useState<DataGridSettings>(
10
+ {}
11
+ );
12
+
13
+ useEffect(() => {
14
+ if (name) {
15
+ const settingName = `user.datagrid.settings.${name}`;
16
+ const gridSettingsJson = settings?.[settingName] || '{}';
17
+ let gridSettings: DataGridSettings = {};
18
+ try {
19
+ gridSettings = JSON.parse(gridSettingsJson);
20
+ } catch (error) {
21
+ console.error('[GRID] cannot decode datagrid settings for', {
22
+ name,
23
+ gridSettingsJson,
24
+ error,
25
+ });
26
+ }
27
+ setDataGridSettings(gridSettings);
28
+ }
29
+ }, [name, settings]);
30
+
31
+ const saveSettings = useCallback(
32
+ (newValue?: DataGridSettings) => {
33
+ if (name) {
34
+ const settingName = `user.datagrid.settings.${name}`;
35
+ const newSettings = newValue ?? dataGridSettings;
36
+ const newSettingsJson = JSON.stringify(newSettings);
37
+ updateSettings({ [settingName]: newSettingsJson });
38
+ }
39
+ },
40
+ [dataGridSettings, name, updateSettings]
41
+ );
42
+
43
+ return {
44
+ settings: dataGridSettings,
45
+ setSettings: setDataGridSettings,
46
+ saveSettings,
47
+ };
48
+ };
@@ -1,83 +1,83 @@
1
- import * as styles from './styles';
2
-
3
- import {
4
- Context,
5
- ForwardedRef,
6
- forwardRef,
7
- useImperativeHandle,
8
- useRef,
9
- } from 'react';
10
- import { DataGridContextProps, DataGridProps, DataGridRefProps } from './types';
11
-
12
- import { DataGridFooter } from './DataGridFooter';
13
- import { DataGridHeader } from './DataGridHeader';
14
- import { DataGridRowTemplate } from './DataGridRowTemplate';
15
- import { VirtualScroller } from '../VirtualScroller';
16
- import { useDataGrid } from './hooks';
17
-
18
- /* eslint-disable @typescript-eslint/no-explicit-any */
19
- /* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
20
-
21
- export const DataGridInner = <R,>(
22
- {
23
- contextOverride,
24
- ...props
25
- }: DataGridProps<R> & {
26
- contextOverride?: Partial<DataGridContextProps<R>>;
27
- },
28
- ref: ForwardedRef<DataGridRefProps>
29
- ) => {
30
- const scrollableRef = useRef<HTMLDivElement>(null);
31
- const { className } = props;
32
- const [contextProps, DataGridContext] = useDataGrid(props, contextOverride);
33
- const {
34
- columns,
35
- rowHeight = 32,
36
- headerRowHeight = 40,
37
- gridTemplateColumns,
38
- sortedRows,
39
- onVisibleRowsChange,
40
- refresh,
41
- setSelectedKeys,
42
- } = contextProps;
43
-
44
- useImperativeHandle(
45
- ref,
46
- () => ({
47
- refresh: refresh ?? (() => {}),
48
- setSelectedKeys,
49
- }),
50
- [refresh, setSelectedKeys]
51
- );
52
-
53
- const hasFooter = Object.values(columns).some((col) => col.footer);
54
-
55
- const rowTemplate = DataGridRowTemplate;
56
-
57
- return (
58
- <DataGridContext.Provider value={contextProps}>
59
- <styles.DataGridContainer
60
- ref={scrollableRef}
61
- $headerRowHeight={headerRowHeight}
62
- $rowHeight={rowHeight}
63
- $rowsCount={contextProps.sortedRows.length}
64
- $withFooter={hasFooter}
65
- className={className}
66
- >
67
- <DataGridHeader context={DataGridContext} />
68
- <VirtualScroller<R, { context: Context<DataGridContextProps<R>> }>
69
- integrated
70
- gridTemplateColumns={gridTemplateColumns}
71
- items={sortedRows}
72
- itemTemplate={rowTemplate}
73
- itemProps={{ context: DataGridContext }}
74
- rowHeightInPx={styles.DEFAULT_ROW_HEIGHT}
75
- onRangeChanged={onVisibleRowsChange}
76
- />
77
- {hasFooter && <DataGridFooter context={DataGridContext} />}
78
- </styles.DataGridContainer>
79
- </DataGridContext.Provider>
80
- );
81
- };
82
-
83
- export const DataGrid = forwardRef(DataGridInner);
1
+ import * as styles from './styles';
2
+
3
+ import {
4
+ Context,
5
+ ForwardedRef,
6
+ forwardRef,
7
+ useImperativeHandle,
8
+ useRef,
9
+ } from 'react';
10
+ import { DataGridContextProps, DataGridProps, DataGridRefProps } from './types';
11
+
12
+ import { DataGridFooter } from './DataGridFooter';
13
+ import { DataGridHeader } from './DataGridHeader';
14
+ import { DataGridRowTemplate } from './DataGridRowTemplate';
15
+ import { VirtualScroller } from '../VirtualScroller';
16
+ import { useDataGrid } from './hooks';
17
+
18
+ /* eslint-disable @typescript-eslint/no-explicit-any */
19
+ /* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
20
+
21
+ export const DataGridInner = <R,>(
22
+ {
23
+ contextOverride,
24
+ ...props
25
+ }: DataGridProps<R> & {
26
+ contextOverride?: Partial<DataGridContextProps<R>>;
27
+ },
28
+ ref: ForwardedRef<DataGridRefProps>
29
+ ) => {
30
+ const scrollableRef = useRef<HTMLDivElement>(null);
31
+ const { className } = props;
32
+ const [contextProps, DataGridContext] = useDataGrid(props, contextOverride);
33
+ const {
34
+ columns,
35
+ rowHeight = 32,
36
+ headerRowHeight = 40,
37
+ gridTemplateColumns,
38
+ sortedRows,
39
+ onVisibleRowsChange,
40
+ refresh,
41
+ setSelectedKeys,
42
+ } = contextProps;
43
+
44
+ useImperativeHandle(
45
+ ref,
46
+ () => ({
47
+ refresh: refresh ?? (() => {}),
48
+ setSelectedKeys,
49
+ }),
50
+ [refresh, setSelectedKeys]
51
+ );
52
+
53
+ const hasFooter = Object.values(columns).some((col) => col.footer);
54
+
55
+ const rowTemplate = DataGridRowTemplate;
56
+
57
+ return (
58
+ <DataGridContext.Provider value={contextProps}>
59
+ <styles.DataGridContainer
60
+ ref={scrollableRef}
61
+ $headerRowHeight={headerRowHeight}
62
+ $rowHeight={rowHeight}
63
+ $rowsCount={contextProps.sortedRows.length}
64
+ $withFooter={hasFooter}
65
+ className={className}
66
+ >
67
+ <DataGridHeader context={DataGridContext} />
68
+ <VirtualScroller<R, { context: Context<DataGridContextProps<R>> }>
69
+ integrated
70
+ gridTemplateColumns={gridTemplateColumns}
71
+ items={sortedRows}
72
+ itemTemplate={rowTemplate}
73
+ itemProps={{ context: DataGridContext }}
74
+ rowHeightInPx={styles.DEFAULT_ROW_HEIGHT}
75
+ onRangeChanged={onVisibleRowsChange}
76
+ />
77
+ {hasFooter && <DataGridFooter context={DataGridContext} />}
78
+ </styles.DataGridContainer>
79
+ </DataGridContext.Provider>
80
+ );
81
+ };
82
+
83
+ export const DataGrid = forwardRef(DataGridInner);