@addev-be/ui 0.2.5 → 0.2.7

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 (166) hide show
  1. package/assets/icons/arrow-down-1-9.svg +1 -0
  2. package/assets/icons/arrow-down-a-z.svg +1 -1
  3. package/assets/icons/arrow-down-big-small.svg +1 -0
  4. package/assets/icons/arrow-up-9-1.svg +1 -0
  5. package/assets/icons/arrow-up-big-small.svg +1 -0
  6. package/assets/icons/arrow-up-z-a.svg +1 -1
  7. package/assets/icons/check.svg +1 -1
  8. package/assets/icons/chevron-down.svg +1 -0
  9. package/assets/icons/down.svg +1 -1
  10. package/assets/icons/ellipsis.svg +1 -0
  11. package/assets/icons/filter-full.svg +1 -1
  12. package/assets/icons/filter.svg +1 -1
  13. package/assets/icons/hashtag.svg +1 -1
  14. package/assets/icons/image-slash.svg +1 -1
  15. package/assets/icons/left.svg +1 -1
  16. package/assets/icons/magnifier.svg +1 -1
  17. package/assets/icons/phone.svg +1 -1
  18. package/assets/icons/right.svg +1 -1
  19. package/assets/icons/sigma.svg +1 -0
  20. package/assets/icons/spinner-third.svg +1 -1
  21. package/assets/icons/table-columns.svg +1 -1
  22. package/assets/icons/table-footer-slash.svg +5 -0
  23. package/assets/icons/table-footer.svg +4 -0
  24. package/assets/icons/table.svg +1 -0
  25. package/assets/icons/tally.svg +1 -0
  26. package/assets/icons/up.svg +1 -1
  27. package/assets/icons/user-tie.svg +1 -1
  28. package/assets/icons/x-bar.svg +4 -0
  29. package/dist/Icons.d.ts +13 -1
  30. package/dist/Icons.js +25 -1
  31. package/dist/components/data/AdvancedRequestDataGrid/index.js +3 -3
  32. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +1 -2
  33. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +3 -5
  34. package/dist/components/data/DataGrid/DataGridCell.d.ts +1 -1
  35. package/dist/components/data/DataGrid/DataGridCell.js +5 -5
  36. package/dist/components/data/DataGrid/DataGridColumnsModal/hooks.js +2 -1
  37. package/dist/components/data/DataGrid/DataGridEditableCell.js +2 -7
  38. package/dist/components/data/DataGrid/DataGridFilterMenu/index.js +90 -10
  39. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.d.ts +3 -9
  40. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.js +10 -37
  41. package/dist/components/data/DataGrid/DataGridFooter.d.ts +1 -1
  42. package/dist/components/data/DataGrid/DataGridFooter.js +35 -22
  43. package/dist/components/data/DataGrid/DataGridHeader.js +1 -3
  44. package/dist/components/data/DataGrid/DataGridHeaderCell.js +8 -23
  45. package/dist/components/data/DataGrid/FilterModalContent/index.d.ts +5 -5
  46. package/dist/components/data/DataGrid/FilterModalContent/index.js +11 -9
  47. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +8 -7
  48. package/dist/components/data/DataGrid/FilterValuesScroller.js +5 -6
  49. package/dist/components/data/DataGrid/helpers/columns.d.ts +1 -1
  50. package/dist/components/data/DataGrid/helpers/columns.js +72 -20
  51. package/dist/components/data/DataGrid/helpers/filters.d.ts +4 -3
  52. package/dist/components/data/DataGrid/helpers/filters.js +13 -5
  53. package/dist/components/data/DataGrid/hooks/useDataGrid.d.ts +1 -1
  54. package/dist/components/data/DataGrid/hooks/useDataGrid.js +60 -30
  55. package/dist/components/data/DataGrid/hooks/useDataGridCopy.d.ts +2 -2
  56. package/dist/components/data/DataGrid/hooks/useDataGridCopy.js +41 -40
  57. package/dist/components/data/DataGrid/hooks/useDataGridSettings.js +0 -1
  58. package/dist/components/data/DataGrid/index.d.ts +4 -2
  59. package/dist/components/data/DataGrid/index.js +38 -17
  60. package/dist/components/data/DataGrid/styles.d.ts +12 -5
  61. package/dist/components/data/DataGrid/styles.js +31 -18
  62. package/dist/components/data/DataGrid/types.d.ts +28 -16
  63. package/dist/components/data/SqlRequestDataGrid/helpers/columns.d.ts +1 -1
  64. package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +30 -19
  65. package/dist/components/data/SqlRequestDataGrid/index.js +125 -37
  66. package/dist/components/data/SqlRequestDataGrid/types.d.ts +1 -0
  67. package/dist/components/data/index.d.ts +2 -0
  68. package/dist/components/data/index.js +2 -0
  69. package/dist/components/ui/ContextMenu/index.d.ts +11 -0
  70. package/dist/components/ui/ContextMenu/index.js +58 -0
  71. package/dist/components/ui/ContextMenu/styles.d.ts +18 -0
  72. package/dist/components/ui/ContextMenu/styles.js +56 -0
  73. package/dist/helpers/dates.d.ts +2 -0
  74. package/dist/helpers/dates.js +13 -0
  75. package/dist/services/advancedRequests.d.ts +1 -1
  76. package/dist/services/sqlRequests.d.ts +9 -4
  77. package/dist/services/sqlRequests.js +1 -0
  78. package/package.json +1 -1
  79. package/src/Icons.tsx +104 -80
  80. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +93 -93
  81. package/src/components/data/AdvancedRequestDataGrid/helpers/columns.tsx +262 -262
  82. package/src/components/data/AdvancedRequestDataGrid/helpers/index.ts +2 -2
  83. package/src/components/data/AdvancedRequestDataGrid/index.tsx +267 -269
  84. package/src/components/data/AdvancedRequestDataGrid/types.ts +47 -47
  85. package/src/components/data/DataGrid/DataGridCell.tsx +73 -73
  86. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +14 -14
  87. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -58
  88. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +181 -181
  89. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  90. package/src/components/data/DataGrid/DataGridEditableCell.tsx +43 -54
  91. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +75 -75
  92. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +364 -190
  93. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +49 -100
  94. package/src/components/data/DataGrid/DataGridFooter.tsx +42 -64
  95. package/src/components/data/DataGrid/DataGridHeader.tsx +126 -126
  96. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +132 -167
  97. package/src/components/data/DataGrid/FilterModalContent/index.tsx +124 -125
  98. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  99. package/src/components/data/DataGrid/FilterValuesScroller.tsx +133 -131
  100. package/src/components/data/DataGrid/VirtualScroller.tsx +46 -46
  101. package/src/components/data/DataGrid/helpers/columns.tsx +287 -196
  102. package/src/components/data/DataGrid/helpers/filters.ts +220 -207
  103. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  104. package/src/components/data/DataGrid/hooks/index.ts +30 -30
  105. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +305 -264
  106. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +170 -165
  107. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  108. package/src/components/data/DataGrid/index.tsx +139 -132
  109. package/src/components/data/DataGrid/styles.ts +347 -326
  110. package/src/components/data/DataGrid/types.ts +260 -240
  111. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +259 -224
  112. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  113. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  114. package/src/components/data/SqlRequestDataGrid/index.tsx +347 -252
  115. package/src/components/data/SqlRequestDataGrid/types.ts +47 -47
  116. package/src/components/data/index.ts +8 -8
  117. package/src/components/forms/Button.tsx +99 -99
  118. package/src/components/forms/IconButton.tsx +56 -56
  119. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  120. package/src/components/forms/Select.tsx +40 -40
  121. package/src/components/forms/index.ts +5 -5
  122. package/src/components/forms/styles.ts +20 -20
  123. package/src/components/index.ts +3 -3
  124. package/src/components/layout/Dropdown/index.tsx +79 -79
  125. package/src/components/layout/Dropdown/styles.ts +44 -44
  126. package/src/components/layout/Loading/index.tsx +29 -29
  127. package/src/components/layout/Loading/styles.ts +29 -29
  128. package/src/components/layout/Modal/index.tsx +51 -51
  129. package/src/components/layout/Modal/styles.ts +110 -110
  130. package/src/components/layout/index.ts +3 -3
  131. package/src/components/ui/ContextMenu/index.tsx +73 -0
  132. package/src/components/ui/ContextMenu/styles.ts +115 -0
  133. package/src/config/index.ts +14 -14
  134. package/src/helpers/dates.ts +9 -9
  135. package/src/helpers/getScrollbarSize.ts +14 -14
  136. package/src/helpers/numbers.ts +20 -20
  137. package/src/hooks/index.ts +2 -2
  138. package/src/hooks/useElementSize.ts +24 -24
  139. package/src/hooks/useWindowSize.ts +20 -20
  140. package/src/index.ts +7 -7
  141. package/src/providers/PortalsProvider/index.tsx +54 -54
  142. package/src/providers/PortalsProvider/styles.ts +27 -27
  143. package/src/providers/SettingsProvider/index.tsx +70 -70
  144. package/src/providers/ThemeProvider/ThemeProvider.ts +55 -55
  145. package/src/providers/ThemeProvider/defaultTheme.ts +444 -444
  146. package/src/providers/ThemeProvider/index.ts +3 -3
  147. package/src/providers/ThemeProvider/types.ts +123 -123
  148. package/src/providers/UiProviders/index.tsx +65 -65
  149. package/src/providers/UiProviders/styles.ts +10 -10
  150. package/src/providers/hooks.ts +8 -8
  151. package/src/providers/index.ts +5 -5
  152. package/src/services/HttpService.ts +80 -80
  153. package/src/services/WebSocketService.ts +147 -147
  154. package/src/services/advancedRequests.ts +101 -101
  155. package/src/services/base.ts +31 -31
  156. package/src/services/hooks.ts +23 -23
  157. package/src/services/index.ts +2 -2
  158. package/src/services/sqlRequests.ts +110 -99
  159. package/src/styles/animations.scss +30 -30
  160. package/src/styles/index.scss +42 -42
  161. package/src/typings.d.ts +6 -6
  162. package/tsconfig.tsbuildinfo +1 -1
  163. package/dist/components/data/DataGrid/helpers.d.ts +0 -28
  164. package/dist/components/data/DataGrid/helpers.js +0 -436
  165. package/dist/config/types.d.ts +0 -11
  166. package/dist/config/types.js +0 -2
@@ -1,165 +1,170 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
-
3
- import { DataGridColumn, DataGridColumns } from '../types';
4
-
5
- import { useCallback } from 'react';
6
-
7
- export const useDataGridCopy = <R>(
8
- rows: R[],
9
- columns: DataGridColumns<R>,
10
- loadCopyRows?: () => Promise<R[]>
11
- ) => {
12
- const generateHeadersHtml = useCallback(() => {
13
- return `<tr>
14
- ${Object.values(columns ?? {})
15
- .map(
16
- (col) =>
17
- `<th style="
18
- text-align: left;
19
- font-weight: bold;
20
- white-space: nowrap;
21
- ">
22
- ${col.name}
23
- </th>`
24
- )
25
- .join('\n')}
26
- </tr>`;
27
- }, [columns]);
28
-
29
- const generateFootersHtml = useCallback(
30
- (rowsToCopy: R[]) => {
31
- return `<tr>
32
- ${Object.values(columns ?? {})
33
- .map(
34
- (col) =>
35
- `<td style="
36
- font-weight: bold;
37
- white-space: nowrap;
38
- ">
39
- ${
40
- col.footer
41
- ? col.footer(rowsToCopy, rowsToCopy, [])
42
- : ''
43
- }
44
- </td>`
45
- )
46
- .join('\n')}
47
- </tr>`;
48
- },
49
- [columns]
50
- );
51
-
52
- const generateCellText = useCallback((col: DataGridColumn<R>, value: any) => {
53
- return col.excelValue ? col.excelValue(value) : value?.toString() ?? '';
54
- }, []);
55
-
56
- const generateCellHtml = useCallback(
57
- (col: DataGridColumn<R>, value: any) => `<td style="
58
- ${
59
- col.excelFormatter
60
- ? "mso-number-format: '" + col.excelFormatter(col) + "';"
61
- : ''
62
- }
63
- white-space: nowrap;
64
- ">
65
- ${generateCellText(col, value)}
66
- </td>`,
67
- [generateCellText]
68
- );
69
-
70
- const generateCopyHtml = useCallback(
71
- (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
72
- return `
73
- <table>
74
- ${includeHeaders ? generateHeadersHtml() : ''}
75
- ${(rowsToCopy || [])
76
- .map(
77
- (row) =>
78
- `<tr>
79
- ${Object.values(columns ?? {})
80
- .map((col) => {
81
- const value: any =
82
- col.getter && row ? col.getter(row) : '';
83
- return generateCellHtml(col, value);
84
- })
85
- .join('\n')}
86
- </tr>`
87
- )
88
- .join('\n')}
89
- ${includeFooters ? generateFootersHtml(rowsToCopy) : ''}
90
- </table>
91
- `;
92
- },
93
- [columns, generateCellHtml, generateFootersHtml, generateHeadersHtml]
94
- );
95
-
96
- const generateHeadersText = useCallback(() => {
97
- return Object.values(columns ?? {})
98
- .map((col) => col.name)
99
- .join('\t');
100
- }, [columns]);
101
-
102
- const generateFootersText = useCallback(
103
- (rowsToCopy: R[]) => {
104
- return Object.values(columns ?? {})
105
- .map((col) =>
106
- col.footer ? col.footer(rowsToCopy, rowsToCopy, []) : ''
107
- )
108
- .join('\t');
109
- },
110
- [columns]
111
- );
112
-
113
- const generateCopyText = useCallback(
114
- (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
115
- return [
116
- includeHeaders ? generateHeadersText() : '',
117
- ...(rowsToCopy || []).map((row) =>
118
- Object.values(columns ?? {})
119
- .map((col) => {
120
- const value: any = col.getter && row ? col.getter(row) : '';
121
- return col.excelValue
122
- ? col.excelValue(value)
123
- : value != null && value !== undefined
124
- ? value.toString()
125
- : '';
126
- })
127
- .join('\t')
128
- ),
129
- includeFooters ? generateFootersText(rowsToCopy) : '',
130
- ]
131
- .filter((s) => s != null)
132
- .join('\n');
133
- },
134
- [columns, generateFootersText, generateHeadersText]
135
- );
136
-
137
- const copyTable = useCallback(
138
- async (includeHeaders = true, includeFooters = true) => {
139
- const rowsToCopy = loadCopyRows ? await loadCopyRows() : rows;
140
-
141
- const copyHtml = generateCopyHtml(
142
- rowsToCopy,
143
- includeHeaders,
144
- includeFooters
145
- );
146
- const copyText = generateCopyText(
147
- rowsToCopy,
148
- includeHeaders,
149
- includeFooters
150
- );
151
-
152
- await navigator['clipboard'].write([
153
- new ClipboardItem({
154
- 'text/plain': new Blob([copyText], { type: 'text/plain' }),
155
- 'text/html': new Blob([copyHtml], { type: 'text/html' }),
156
- }),
157
- ]);
158
- },
159
- [generateCopyHtml, generateCopyText, loadCopyRows, rows]
160
- );
161
-
162
- return {
163
- copyTable,
164
- };
165
- };
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
+ white-space: nowrap;
71
+ ">
72
+ ${generateCellText(col, value)}
73
+ </td>`,
74
+ [generateCellText]
75
+ );
76
+
77
+ const generateCopyHtml = useCallback(
78
+ (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
79
+ return `
80
+ <table>
81
+ ${includeHeaders ? generateHeadersHtml() : ''}
82
+ ${(rowsToCopy || [])
83
+ .map(
84
+ (row) =>
85
+ `<tr>
86
+ ${visibleColumns
87
+ .map(([, col]) => {
88
+ const value: any =
89
+ col.getter && row ? col.getter(row) : '';
90
+ return generateCellHtml(col, value);
91
+ })
92
+ .join('\n')}
93
+ </tr>`
94
+ )
95
+ .join('\n')}
96
+ ${includeFooters ? generateFootersHtml(rowsToCopy) : ''}
97
+ </table>
98
+ `;
99
+ },
100
+ [visibleColumns, generateCellHtml, generateFootersHtml, generateHeadersHtml]
101
+ );
102
+
103
+ const generateHeadersText = useCallback(() => {
104
+ return visibleColumns.map(([, col]) => col.name).join('\t');
105
+ }, [visibleColumns]);
106
+
107
+ const generateFootersText = useCallback(
108
+ (rowsToCopy: R[]) => {
109
+ return visibleColumns
110
+ .map(
111
+ ([colKey]) => footerFunctions?.[colKey]?.(rowsToCopy, [], []) ?? ''
112
+ )
113
+ .join('\t');
114
+ },
115
+ [footerFunctions, visibleColumns]
116
+ );
117
+
118
+ const generateCopyText = useCallback(
119
+ (rowsToCopy: R[], includeHeaders: boolean, includeFooters: boolean) => {
120
+ return [
121
+ includeHeaders ? generateHeadersText() : '',
122
+ ...(rowsToCopy || []).map((row) =>
123
+ visibleColumns
124
+ .map(([, col]) => {
125
+ const value: any = col.getter && row ? col.getter(row) : '';
126
+ return col.excelValue
127
+ ? col.excelValue(value)
128
+ : value != null && value !== undefined
129
+ ? value.toString()
130
+ : '';
131
+ })
132
+ .join('\t')
133
+ ),
134
+ includeFooters ? generateFootersText(rowsToCopy) : '',
135
+ ]
136
+ .filter((s) => s != null)
137
+ .join('\n');
138
+ },
139
+ [visibleColumns, generateFootersText, generateHeadersText]
140
+ );
141
+
142
+ const copyTable = useCallback(
143
+ async (includeHeaders = true, includeFooters = true) => {
144
+ const rowsToCopy = await (loadCopyRows ?? (async () => rows))();
145
+
146
+ const copyHtml = generateCopyHtml(
147
+ rowsToCopy,
148
+ includeHeaders,
149
+ includeFooters
150
+ );
151
+ const copyText = generateCopyText(
152
+ rowsToCopy,
153
+ includeHeaders,
154
+ includeFooters
155
+ );
156
+
157
+ await navigator['clipboard'].write([
158
+ new ClipboardItem({
159
+ 'text/plain': new Blob([copyText], { type: 'text/plain' }),
160
+ 'text/html': new Blob([copyHtml], { type: 'text/html' }),
161
+ }),
162
+ ]);
163
+ },
164
+ [generateCopyHtml, generateCopyText, loadCopyRows, rows]
165
+ );
166
+
167
+ return {
168
+ copyTable,
169
+ };
170
+ };
@@ -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
+ };