@addev-be/ui 0.14.5 → 0.15.1

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 (215) 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 +134 -134
  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 +83 -77
  56. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  57. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  58. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  59. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  60. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +38 -38
  61. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +39 -39
  62. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +68 -68
  63. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +38 -38
  64. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -60
  65. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -0
  66. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +17 -14
  67. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +131 -131
  68. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  69. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +376 -376
  70. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  71. package/src/components/data/DataGrid/DataGridFooter.tsx +45 -45
  72. package/src/components/data/DataGrid/DataGridHeader.tsx +173 -173
  73. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +115 -115
  74. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +80 -78
  75. package/src/components/data/DataGrid/FilterModalContent/index.tsx +136 -136
  76. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  77. package/src/components/data/DataGrid/constants.ts +6 -6
  78. package/src/components/data/DataGrid/helpers/columns.tsx +384 -383
  79. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  80. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  81. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  82. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +378 -411
  83. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +56 -56
  84. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  85. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  86. package/src/components/data/DataGrid/index.tsx +110 -110
  87. package/src/components/data/DataGrid/styles.ts +369 -390
  88. package/src/components/data/DataGrid/types.ts +367 -355
  89. package/src/components/data/SmartQueryDataGrid/helpers/columns.tsx +333 -333
  90. package/src/components/data/SmartQueryDataGrid/helpers/hooks.ts +41 -41
  91. package/src/components/data/SmartQueryDataGrid/helpers/index.ts +2 -2
  92. package/src/components/data/SmartQueryDataGrid/helpers/smartQueries.ts +17 -17
  93. package/src/components/data/SmartQueryDataGrid/hooks.ts +75 -75
  94. package/src/components/data/SmartQueryDataGrid/index.tsx +338 -338
  95. package/src/components/data/SmartQueryDataGrid/types.ts +45 -45
  96. package/src/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.tsx +16 -0
  97. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +478 -366
  98. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  99. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  100. package/src/components/data/SqlRequestDataGrid/index.tsx +402 -402
  101. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  102. package/src/components/data/SqlRequestDataGrid/types.ts +74 -63
  103. package/src/components/data/SqlRequestForeignList/index.tsx +259 -157
  104. package/src/components/data/SqlRequestForeignList/styles.ts +42 -38
  105. package/src/components/data/SqlRequestForeignList/types.ts +34 -0
  106. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +110 -110
  107. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  108. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  109. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  110. package/src/components/data/SqlRequestGrid/index.tsx +316 -316
  111. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  112. package/src/components/data/SqlRequestGrid/types.ts +75 -75
  113. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  114. package/src/components/data/VirtualScroller/index.tsx +91 -89
  115. package/src/components/data/VirtualScroller/styles.ts +58 -58
  116. package/src/components/data/VirtualScroller/types.ts +12 -12
  117. package/src/components/data/index.ts +23 -23
  118. package/src/components/forms/AutoTextArea.tsx +41 -41
  119. package/src/components/forms/Button.tsx +133 -133
  120. package/src/components/forms/Form/Checkbox.tsx +13 -13
  121. package/src/components/forms/Form/FormGroup.tsx +27 -27
  122. package/src/components/forms/Form/Input.tsx +13 -13
  123. package/src/components/forms/Form/InputWithLabel.tsx +18 -18
  124. package/src/components/forms/Form/Select.tsx +76 -65
  125. package/src/components/forms/Form/TextArea.tsx +13 -13
  126. package/src/components/forms/Form/index.tsx +37 -37
  127. package/src/components/forms/Form/styles.ts +101 -101
  128. package/src/components/forms/Form/types.ts +7 -7
  129. package/src/components/forms/IconButton.tsx +57 -57
  130. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  131. package/src/components/forms/Select.tsx +35 -35
  132. package/src/components/forms/VerticalLabel.tsx +20 -20
  133. package/src/components/forms/index.ts +8 -8
  134. package/src/components/forms/styles.ts +31 -31
  135. package/src/components/index.ts +6 -6
  136. package/src/components/layout/Columns.ts +20 -20
  137. package/src/components/layout/Dropdown/index.tsx +113 -112
  138. package/src/components/layout/Dropdown/styles.ts +45 -45
  139. package/src/components/layout/Grid/index.tsx +8 -8
  140. package/src/components/layout/Grid/styles.ts +34 -34
  141. package/src/components/layout/Loading/index.tsx +29 -29
  142. package/src/components/layout/Loading/styles.ts +29 -29
  143. package/src/components/layout/Masonry/index.tsx +29 -29
  144. package/src/components/layout/Masonry/styles.ts +20 -20
  145. package/src/components/layout/Modal/index.tsx +51 -51
  146. package/src/components/layout/Modal/styles.ts +121 -121
  147. package/src/components/layout/index.ts +6 -6
  148. package/src/components/search/HighlightedText.tsx +37 -37
  149. package/src/components/search/QuickSearchBar.tsx +86 -86
  150. package/src/components/search/QuickSearchResults.tsx +86 -86
  151. package/src/components/search/index.ts +9 -9
  152. package/src/components/search/styles.ts +96 -96
  153. package/src/components/search/types.ts +26 -26
  154. package/src/components/ui/Avatar/index.tsx +54 -54
  155. package/src/components/ui/Card/index.tsx +14 -14
  156. package/src/components/ui/Card/styles.ts +37 -37
  157. package/src/components/ui/ContextMenu/index.tsx +79 -79
  158. package/src/components/ui/ContextMenu/styles.ts +119 -119
  159. package/src/components/ui/Ellipsis.tsx +32 -0
  160. package/src/components/ui/Label.tsx +90 -90
  161. package/src/components/ui/Message/index.tsx +57 -57
  162. package/src/components/ui/Message/styles.ts +40 -40
  163. package/src/components/ui/index.ts +6 -5
  164. package/src/config/index.ts +14 -14
  165. package/src/helpers/dates.ts +17 -17
  166. package/src/helpers/getScrollbarSize.ts +14 -14
  167. package/src/helpers/index.ts +3 -3
  168. package/src/helpers/numbers.ts +63 -63
  169. package/src/helpers/text.ts +13 -13
  170. package/src/hooks/index.ts +3 -3
  171. package/src/hooks/useElementSize.ts +24 -24
  172. package/src/hooks/useShowArchived.ts +28 -28
  173. package/src/hooks/useWindowSize.ts +20 -20
  174. package/src/index.ts +9 -9
  175. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  176. package/src/providers/AuthenticationProvider/index.tsx +243 -243
  177. package/src/providers/LoadingProvider/index.tsx +47 -47
  178. package/src/providers/PortalsProvider/index.tsx +54 -54
  179. package/src/providers/PortalsProvider/styles.ts +31 -31
  180. package/src/providers/SettingsProvider/index.tsx +70 -70
  181. package/src/providers/ThemeProvider/ThemeProvider.ts +63 -63
  182. package/src/providers/ThemeProvider/defaultTheme.ts +457 -457
  183. package/src/providers/ThemeProvider/helpers.ts +11 -11
  184. package/src/providers/ThemeProvider/index.ts +4 -4
  185. package/src/providers/ThemeProvider/types.ts +131 -131
  186. package/src/providers/TrackingProvider/index.tsx +71 -71
  187. package/src/providers/UiProviders/index.tsx +68 -68
  188. package/src/providers/UiProviders/styles.ts +10 -10
  189. package/src/providers/hooks.ts +12 -12
  190. package/src/providers/index.ts +8 -8
  191. package/src/services/HttpService.ts +92 -92
  192. package/src/services/WebSocketService.ts +137 -137
  193. package/src/services/advancedRequests.ts +102 -102
  194. package/src/services/base.ts +23 -23
  195. package/src/services/globalSearch.ts +29 -29
  196. package/src/services/hooks.ts +44 -44
  197. package/src/services/index.ts +21 -21
  198. package/src/services/requests/auth.ts +44 -44
  199. package/src/services/requests/generic.ts +62 -62
  200. package/src/services/requests/tracking.ts +12 -12
  201. package/src/services/requests/userProfiles.ts +35 -35
  202. package/src/services/requests/users.ts +28 -28
  203. package/src/services/smartQueries.ts +122 -122
  204. package/src/services/sqlRequests.ts +111 -111
  205. package/src/services/types/auth.ts +131 -131
  206. package/src/services/types/base.ts +10 -10
  207. package/src/services/types/generic.ts +96 -96
  208. package/src/services/types/tracking.ts +39 -39
  209. package/src/services/types/userProfiles.ts +107 -107
  210. package/src/services/types/users.ts +106 -106
  211. package/src/services/updateSqlRequests.ts +34 -34
  212. package/src/styles/animations.scss +30 -30
  213. package/src/styles/index.scss +42 -42
  214. package/src/typings.d.ts +13 -13
  215. package/tsconfig.json +18 -18
@@ -1,97 +1,97 @@
1
- import styled from 'styled-components';
2
-
3
- export const DEFAULT_FILTER_ROW_HEIGHT = 24;
4
-
5
- export const InputContainer = styled.div.attrs({
6
- className: 'InputContainer',
7
- })`
8
- position: relative;
9
- border-radius: var(--rounded-md);
10
- padding: 0 var(--space-1);
11
-
12
- svg {
13
- position: absolute;
14
- top: 50%;
15
- transform: translateY(-50%);
16
- left: var(--space-4);
17
- display: flex;
18
- align-items: center;
19
- fill: var(--color-neutral-400);
20
- width: var(--space-4);
21
- height: var(--space-4);
22
- }
23
-
24
- input {
25
- padding-left: var(--space-8);
26
- }
27
- `;
28
-
29
- export const CheckboxesContainer = styled.div.attrs({
30
- className: 'CheckboxesContainer',
31
- })`
32
- font-weight: normal;
33
- user-select: none;
34
- padding: var(--space-2);
35
- margin: var(--space-1);
36
- margin-bottom: 0;
37
- border: 1px solid var(--color-neutral-300);
38
- border-radius: var(--rounded-md);
39
- box-shadow: var(--shadow-inner);
40
- background-color: var(--color-neutral-0);
41
- height: 20em;
42
- overflow-y: hidden;
43
- white-space: nowrap;
44
- `;
45
-
46
- export const Separator = styled.div.attrs({
47
- className: 'Separator',
48
- })`
49
- border-top: 1px solid var(--color-neutral-200);
50
- margin: var(--space-1) 0;
51
- `;
52
-
53
- export const FilterValueContainer = styled.div.attrs({
54
- className: 'FilterValueContainer',
55
- })`
56
- position: absolute;
57
- left: 0;
58
- right: 0;
59
- display: flex;
60
- flex-direction: row;
61
- align-items: center;
62
- cursor: pointer;
63
- &:hover {
64
- background-color: var(--color-neutral-50);
65
- }
66
- `;
67
-
68
- export const FilterValuesScrollerContainer = styled.div.attrs({
69
- className: 'FilterValuesScrollerContainer',
70
- })<{
71
- $rowHeight?: number;
72
- }>`
73
- display: block;
74
- font-size: var(--text-base);
75
- background-color: var(--color-neutral-0);
76
- overflow-y: scroll;
77
- overflow-x: hidden;
78
- height: 100%;
79
-
80
- & > div {
81
- position: relative;
82
- }
83
-
84
- & ${FilterValueContainer} {
85
- position: absolute;
86
- display: flex;
87
- flex-direction: row;
88
- align-items: center;
89
- height: ${({ $rowHeight = DEFAULT_FILTER_ROW_HEIGHT }) =>
90
- `${$rowHeight}px`};
91
-
92
- input[type='checkbox'] {
93
- margin-right: var(--space-1);
94
- flex-shrink: 0;
95
- }
96
- }
97
- `;
1
+ import styled from 'styled-components';
2
+
3
+ export const DEFAULT_FILTER_ROW_HEIGHT = 24;
4
+
5
+ export const InputContainer = styled.div.attrs({
6
+ className: 'InputContainer',
7
+ })`
8
+ position: relative;
9
+ border-radius: var(--rounded-md);
10
+ padding: 0 var(--space-1);
11
+
12
+ svg {
13
+ position: absolute;
14
+ top: 50%;
15
+ transform: translateY(-50%);
16
+ left: var(--space-4);
17
+ display: flex;
18
+ align-items: center;
19
+ fill: var(--color-neutral-400);
20
+ width: var(--space-4);
21
+ height: var(--space-4);
22
+ }
23
+
24
+ input {
25
+ padding-left: var(--space-8);
26
+ }
27
+ `;
28
+
29
+ export const CheckboxesContainer = styled.div.attrs({
30
+ className: 'CheckboxesContainer',
31
+ })`
32
+ font-weight: normal;
33
+ user-select: none;
34
+ padding: var(--space-2);
35
+ margin: var(--space-1);
36
+ margin-bottom: 0;
37
+ border: 1px solid var(--color-neutral-300);
38
+ border-radius: var(--rounded-md);
39
+ box-shadow: var(--shadow-inner);
40
+ background-color: var(--color-neutral-0);
41
+ height: 20em;
42
+ overflow-y: hidden;
43
+ white-space: nowrap;
44
+ `;
45
+
46
+ export const Separator = styled.div.attrs({
47
+ className: 'Separator',
48
+ })`
49
+ border-top: 1px solid var(--color-neutral-200);
50
+ margin: var(--space-1) 0;
51
+ `;
52
+
53
+ export const FilterValueContainer = styled.div.attrs({
54
+ className: 'FilterValueContainer',
55
+ })`
56
+ position: absolute;
57
+ left: 0;
58
+ right: 0;
59
+ display: flex;
60
+ flex-direction: row;
61
+ align-items: center;
62
+ cursor: pointer;
63
+ &:hover {
64
+ background-color: var(--color-neutral-50);
65
+ }
66
+ `;
67
+
68
+ export const FilterValuesScrollerContainer = styled.div.attrs({
69
+ className: 'FilterValuesScrollerContainer',
70
+ })<{
71
+ $rowHeight?: number;
72
+ }>`
73
+ display: block;
74
+ font-size: var(--text-base);
75
+ background-color: var(--color-neutral-0);
76
+ overflow-y: scroll;
77
+ overflow-x: hidden;
78
+ height: 100%;
79
+
80
+ & > div {
81
+ position: relative;
82
+ }
83
+
84
+ & ${FilterValueContainer} {
85
+ position: absolute;
86
+ display: flex;
87
+ flex-direction: row;
88
+ align-items: center;
89
+ height: ${({ $rowHeight = DEFAULT_FILTER_ROW_HEIGHT }) =>
90
+ `${$rowHeight}px`};
91
+
92
+ input[type='checkbox'] {
93
+ margin-right: var(--space-1);
94
+ flex-shrink: 0;
95
+ }
96
+ }
97
+ `;
@@ -1,45 +1,45 @@
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 { DEFAULT_COLUMN_WIDTH } from './constants';
7
- import { DataGridContext } from './types';
8
- import { useDataGridContext } from './hooks';
9
-
10
- export const DataGridFooter = <R,>({
11
- context,
12
- }: {
13
- context: DataGridContext<R>;
14
- }) => {
15
- const {
16
- visibleColumns,
17
- rows,
18
- selectedRows,
19
- sortedRows,
20
- selectable,
21
- headerColor,
22
- footers = {},
23
- gridTemplateColumns,
24
- footerFunctions,
25
- } = useDataGridContext(context);
26
-
27
- if (!Object.keys(footers).length) {
28
- return null;
29
- }
30
-
31
- return (
32
- <styles.DataGridFooterRow $gridTemplateColumns={gridTemplateColumns}>
33
- {!!selectable && <styles.HeaderSelectionCell />}
34
- {visibleColumns.map((col) => (
35
- <styles.DataGridHeaderCellContainer
36
- key={col.key}
37
- style={{ width: (col.width ?? DEFAULT_COLUMN_WIDTH) + 'px' }}
38
- $headerColor={col.color ?? headerColor}
39
- >
40
- {footerFunctions?.[col.key]?.(rows, sortedRows, selectedRows)}
41
- </styles.DataGridHeaderCellContainer>
42
- ))}
43
- </styles.DataGridFooterRow>
44
- );
45
- };
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 { DEFAULT_COLUMN_WIDTH } from './constants';
7
+ import { DataGridContext } from './types';
8
+ import { useDataGridContext } from './hooks';
9
+
10
+ export const DataGridFooter = <R,>({
11
+ context,
12
+ }: {
13
+ context: DataGridContext<R>;
14
+ }) => {
15
+ const {
16
+ visibleColumns,
17
+ rows,
18
+ selectedRows,
19
+ sortedRows,
20
+ selectable,
21
+ headerColor,
22
+ footers = {},
23
+ gridTemplateColumns,
24
+ footerFunctions,
25
+ } = useDataGridContext(context);
26
+
27
+ if (!Object.keys(footers).length) {
28
+ return null;
29
+ }
30
+
31
+ return (
32
+ <styles.DataGridFooterRow $gridTemplateColumns={gridTemplateColumns}>
33
+ {!!selectable && <styles.HeaderSelectionCell />}
34
+ {visibleColumns.map((col) => (
35
+ <styles.DataGridHeaderCellContainer
36
+ key={col.key}
37
+ style={{ width: (col.width ?? DEFAULT_COLUMN_WIDTH) + 'px' }}
38
+ $headerColor={col.color ?? headerColor}
39
+ >
40
+ {footerFunctions?.[col.key]?.(rows, sortedRows, selectedRows)}
41
+ </styles.DataGridHeaderCellContainer>
42
+ ))}
43
+ </styles.DataGridFooterRow>
44
+ );
45
+ };
@@ -1,173 +1,173 @@
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 {
7
- ArrowsRotateIcon,
8
- CopyIcon,
9
- FilterSlashIcon,
10
- FloppyDiskIcon,
11
- PlusIcon,
12
- TableColumnsIcon,
13
- } from '../../../Icons';
14
- import { useCallback, useState } from 'react';
15
-
16
- import { Button } from '../../forms';
17
- import { DataGridContext } from './types';
18
- import { DataGridHeaderCell } from './DataGridHeaderCell';
19
- import { IndeterminateCheckbox } from '../../forms/IndeterminateCheckbox';
20
- import { Loading } from '../../layout';
21
- import { useDataGridColumnsModal } from './DataGridColumnsModal/hooks';
22
- import { useDataGridContext } from './hooks';
23
-
24
- export const DataGridHeader = <R,>({
25
- context,
26
- }: {
27
- context: DataGridContext<R>;
28
- }) => {
29
- const {
30
- name,
31
- visibleColumns,
32
- selectable,
33
- rows,
34
- selectedKeys,
35
- setSelectedKeys,
36
- copyTable,
37
- setFilters,
38
- refresh,
39
- headerColor,
40
- rowKeyGetter,
41
- gridTemplateColumns,
42
- getAllIds,
43
- editable,
44
- onSaveClicked,
45
- onAddClicked,
46
- addedRows,
47
- updatedRows,
48
- addRow,
49
- clearChangedRows,
50
- } = useDataGridContext(context);
51
- const [visibleFilter, setVisibleFilter] = useState<string | undefined>();
52
-
53
- const { openModal, modal } = useDataGridColumnsModal<R>(context);
54
-
55
- const checkboxStatus =
56
- selectedKeys.length === 0
57
- ? false
58
- : selectedKeys.length === rows.length
59
- ? true
60
- : undefined;
61
- const toggleAll = useCallback(
62
- async (newStatus: boolean) => {
63
- const allIds = getAllIds ? await getAllIds() : rows.map(rowKeyGetter);
64
- setSelectedKeys(newStatus ? allIds : []);
65
- },
66
- [getAllIds, rowKeyGetter, rows, setSelectedKeys]
67
- );
68
-
69
- const onFilterButtonClicked = useCallback((columnKey: string) => {
70
- setVisibleFilter((prev) => (prev === columnKey ? undefined : columnKey));
71
- }, []);
72
-
73
- const [isLoadingVisible, setIsLoadingVisible] = useState(false);
74
- const runCopyTable = useCallback(() => {
75
- setIsLoadingVisible(true);
76
- copyTable().then(() => setIsLoadingVisible(false));
77
- }, [copyTable]);
78
-
79
- const save = useCallback(async () => {
80
- if (
81
- Object.keys(addedRows).length + Object.keys(updatedRows).length > 0 &&
82
- onSaveClicked
83
- ) {
84
- const savedIds = await onSaveClicked(addedRows, updatedRows);
85
- clearChangedRows(savedIds);
86
- }
87
- }, [addedRows, clearChangedRows, onSaveClicked, updatedRows]);
88
-
89
- const add = useCallback(async () => {
90
- if (onAddClicked) {
91
- const row = await onAddClicked();
92
- const key = rowKeyGetter(row);
93
- addRow(key, row);
94
- }
95
- }, [addRow, onAddClicked, rowKeyGetter]);
96
-
97
- const onRefreshClicked = useCallback(() => {
98
- refresh?.();
99
- clearChangedRows();
100
- setSelectedKeys([]);
101
- }, [clearChangedRows, refresh, setSelectedKeys]);
102
-
103
- const toolsRow = (
104
- <styles.DataGridToolsRow>
105
- <styles.DataGridToolsRowButtonsContainer>
106
- <Loading visible={isLoadingVisible} />
107
- {editable && onSaveClicked && (
108
- <Button size="small" $color="primary" onClick={save}>
109
- <FloppyDiskIcon />
110
- Enregistrer
111
- </Button>
112
- )}
113
- {editable && onAddClicked && (
114
- <Button size="small" $color="success" onClick={add}>
115
- <PlusIcon />
116
- Ajouter
117
- </Button>
118
- )}
119
- {
120
- <Button size="small" onClick={onRefreshClicked}>
121
- <ArrowsRotateIcon />
122
- Rafraîchir
123
- </Button>
124
- }
125
- <Button $color="emerald" size="small" onClick={runCopyTable}>
126
- <CopyIcon />
127
- Copier la table
128
- </Button>
129
- <Button size="small" $color="danger" onClick={() => setFilters({})}>
130
- <FilterSlashIcon />
131
- Supprimer les filtres
132
- </Button>
133
- {name && (
134
- <Button $color="info" size="small" onClick={openModal}>
135
- <TableColumnsIcon />
136
- Paramètres des colonnes
137
- </Button>
138
- )}
139
- </styles.DataGridToolsRowButtonsContainer>
140
- </styles.DataGridToolsRow>
141
- );
142
-
143
- return (
144
- <>
145
- {modal}
146
- {toolsRow}
147
- <styles.DataGridHeaderRow
148
- $gridTemplateColumns={gridTemplateColumns}
149
- $headerColor={headerColor}
150
- >
151
- {!!selectable && (
152
- <styles.HeaderSelectionCell
153
- $headerColor={headerColor}
154
- onClick={() => toggleAll(!(checkboxStatus ?? true))}
155
- >
156
- <IndeterminateCheckbox checked={checkboxStatus} readOnly />
157
- </styles.HeaderSelectionCell>
158
- )}
159
- {visibleColumns.map((col, index) => (
160
- <DataGridHeaderCell
161
- key={col.key}
162
- columnKey={col.key}
163
- column={col}
164
- context={context}
165
- columnIndex={index}
166
- isFilterOpen={visibleFilter === col.key}
167
- onFilterButtonClicked={onFilterButtonClicked}
168
- />
169
- ))}
170
- </styles.DataGridHeaderRow>
171
- </>
172
- );
173
- };
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 {
7
+ ArrowsRotateIcon,
8
+ CopyIcon,
9
+ FilterSlashIcon,
10
+ FloppyDiskIcon,
11
+ PlusIcon,
12
+ TableColumnsIcon,
13
+ } from '../../../Icons';
14
+ import { useCallback, useState } from 'react';
15
+
16
+ import { Button } from '../../forms';
17
+ import { DataGridContext } from './types';
18
+ import { DataGridHeaderCell } from './DataGridHeaderCell';
19
+ import { IndeterminateCheckbox } from '../../forms/IndeterminateCheckbox';
20
+ import { Loading } from '../../layout';
21
+ import { useDataGridColumnsModal } from './DataGridColumnsModal/hooks';
22
+ import { useDataGridContext } from './hooks';
23
+
24
+ export const DataGridHeader = <R,>({
25
+ context,
26
+ }: {
27
+ context: DataGridContext<R>;
28
+ }) => {
29
+ const {
30
+ name,
31
+ visibleColumns,
32
+ selectable,
33
+ rows,
34
+ selectedKeys,
35
+ setSelectedKeys,
36
+ copyTable,
37
+ setFilters,
38
+ refresh,
39
+ headerColor,
40
+ rowKeyGetter,
41
+ gridTemplateColumns,
42
+ getAllIds,
43
+ editable,
44
+ onSaveClicked,
45
+ onAddClicked,
46
+ addedRows,
47
+ updatedRows,
48
+ addRow,
49
+ clearChangedRows,
50
+ } = useDataGridContext(context);
51
+ const [visibleFilter, setVisibleFilter] = useState<string | undefined>();
52
+
53
+ const { openModal, modal } = useDataGridColumnsModal<R>(context);
54
+
55
+ const checkboxStatus =
56
+ selectedKeys.length === 0
57
+ ? false
58
+ : selectedKeys.length === rows.length
59
+ ? true
60
+ : undefined;
61
+ const toggleAll = useCallback(
62
+ async (newStatus: boolean) => {
63
+ const allIds = getAllIds ? await getAllIds() : rows.map(rowKeyGetter);
64
+ setSelectedKeys(newStatus ? allIds : []);
65
+ },
66
+ [getAllIds, rowKeyGetter, rows, setSelectedKeys]
67
+ );
68
+
69
+ const onFilterButtonClicked = useCallback((columnKey: string) => {
70
+ setVisibleFilter((prev) => (prev === columnKey ? undefined : columnKey));
71
+ }, []);
72
+
73
+ const [isLoadingVisible, setIsLoadingVisible] = useState(false);
74
+ const runCopyTable = useCallback(() => {
75
+ setIsLoadingVisible(true);
76
+ copyTable().then(() => setIsLoadingVisible(false));
77
+ }, [copyTable]);
78
+
79
+ const save = useCallback(async () => {
80
+ if (
81
+ Object.keys(addedRows).length + Object.keys(updatedRows).length > 0 &&
82
+ onSaveClicked
83
+ ) {
84
+ const savedIds = await onSaveClicked(addedRows, updatedRows);
85
+ clearChangedRows(savedIds);
86
+ }
87
+ }, [addedRows, clearChangedRows, onSaveClicked, updatedRows]);
88
+
89
+ const add = useCallback(async () => {
90
+ if (onAddClicked) {
91
+ const row = await onAddClicked();
92
+ const key = rowKeyGetter(row);
93
+ addRow(key, row);
94
+ }
95
+ }, [addRow, onAddClicked, rowKeyGetter]);
96
+
97
+ const onRefreshClicked = useCallback(() => {
98
+ refresh?.();
99
+ clearChangedRows();
100
+ setSelectedKeys([]);
101
+ }, [clearChangedRows, refresh, setSelectedKeys]);
102
+
103
+ const toolsRow = (
104
+ <styles.DataGridToolsRow>
105
+ <styles.DataGridToolsRowButtonsContainer>
106
+ <Loading visible={isLoadingVisible} />
107
+ {editable && onSaveClicked && (
108
+ <Button size="small" $color="primary" onClick={save}>
109
+ <FloppyDiskIcon />
110
+ Enregistrer
111
+ </Button>
112
+ )}
113
+ {editable && onAddClicked && (
114
+ <Button size="small" $color="success" onClick={add}>
115
+ <PlusIcon />
116
+ Ajouter
117
+ </Button>
118
+ )}
119
+ {
120
+ <Button size="small" onClick={onRefreshClicked}>
121
+ <ArrowsRotateIcon />
122
+ Rafraîchir
123
+ </Button>
124
+ }
125
+ <Button $color="emerald" size="small" onClick={runCopyTable}>
126
+ <CopyIcon />
127
+ Copier la table
128
+ </Button>
129
+ <Button size="small" $color="danger" onClick={() => setFilters({})}>
130
+ <FilterSlashIcon />
131
+ Supprimer les filtres
132
+ </Button>
133
+ {name && (
134
+ <Button $color="info" size="small" onClick={openModal}>
135
+ <TableColumnsIcon />
136
+ Paramètres des colonnes
137
+ </Button>
138
+ )}
139
+ </styles.DataGridToolsRowButtonsContainer>
140
+ </styles.DataGridToolsRow>
141
+ );
142
+
143
+ return (
144
+ <>
145
+ {modal}
146
+ {toolsRow}
147
+ <styles.DataGridHeaderRow
148
+ $gridTemplateColumns={gridTemplateColumns}
149
+ $headerColor={headerColor}
150
+ >
151
+ {!!selectable && (
152
+ <styles.HeaderSelectionCell
153
+ $headerColor={headerColor}
154
+ onClick={() => toggleAll(!(checkboxStatus ?? true))}
155
+ >
156
+ <IndeterminateCheckbox checked={checkboxStatus} readOnly />
157
+ </styles.HeaderSelectionCell>
158
+ )}
159
+ {visibleColumns.map((col, index) => (
160
+ <DataGridHeaderCell
161
+ key={col.key}
162
+ columnKey={col.key}
163
+ column={col}
164
+ context={context}
165
+ columnIndex={index}
166
+ isFilterOpen={visibleFilter === col.key}
167
+ onFilterButtonClicked={onFilterButtonClicked}
168
+ />
169
+ ))}
170
+ </styles.DataGridHeaderRow>
171
+ </>
172
+ );
173
+ };