@addev-be/ui 2.4.6 → 2.5.0

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 (255) 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/table.svg +1 -1
  21. package/assets/icons/up.svg +1 -1
  22. package/assets/icons/user-tie.svg +1 -1
  23. package/assets/icons/x-bar.svg +3 -3
  24. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +14 -0
  25. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +77 -0
  26. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +22 -0
  27. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +105 -0
  28. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.d.ts +2 -0
  29. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.js +18 -0
  30. package/dist/components/data/AdvancedRequestDataGrid/index.d.ts +2 -0
  31. package/dist/components/data/AdvancedRequestDataGrid/index.js +215 -0
  32. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +21 -0
  33. package/dist/components/data/AdvancedRequestDataGrid/types.js +2 -0
  34. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +10 -0
  35. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +173 -0
  36. package/dist/components/data/DataGrid/DataGridEditableCell.d.ts +2 -0
  37. package/dist/components/data/DataGrid/DataGridEditableCell.js +27 -0
  38. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +13 -0
  39. package/dist/components/data/DataGrid/FilterValuesScroller.js +73 -0
  40. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  41. package/dist/components/data/DataGrid/VirtualScroller.js +41 -0
  42. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  43. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  44. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  45. package/dist/components/data/DataGrid/helpers.js +436 -0
  46. package/dist/components/data/SmartQueryDataGrid/helpers/columns.d.ts +20 -0
  47. package/dist/components/data/SmartQueryDataGrid/helpers/columns.js +160 -0
  48. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.d.ts +5 -0
  49. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.js +41 -0
  50. package/dist/components/data/SmartQueryDataGrid/helpers/index.d.ts +2 -0
  51. package/dist/components/data/SmartQueryDataGrid/helpers/index.js +18 -0
  52. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.d.ts +3 -0
  53. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.js +15 -0
  54. package/dist/components/data/SmartQueryDataGrid/hooks.d.ts +9 -0
  55. package/dist/components/data/SmartQueryDataGrid/hooks.js +63 -0
  56. package/dist/components/data/SmartQueryDataGrid/index.d.ts +12 -0
  57. package/dist/components/data/SmartQueryDataGrid/index.js +242 -0
  58. package/dist/components/data/SmartQueryDataGrid/types.d.ts +22 -0
  59. package/dist/components/data/SmartQueryDataGrid/types.js +2 -0
  60. package/dist/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.d.ts +2 -1
  61. package/dist/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.js +2 -3
  62. package/dist/components/forms/Form/InputWithLabel.d.ts +2 -0
  63. package/dist/components/forms/Form/InputWithLabel.js +10 -0
  64. package/dist/components/forms/Form/types.d.ts +7 -0
  65. package/dist/components/forms/Form/types.js +2 -0
  66. package/dist/config/types.d.ts +11 -0
  67. package/dist/config/types.js +2 -0
  68. package/dist/helpers/react.d.ts +2 -0
  69. package/dist/helpers/react.js +8 -0
  70. package/dist/helpers/styled/index.d.ts +1 -0
  71. package/dist/helpers/styled/index.js +17 -0
  72. package/dist/services/index.js +17 -7
  73. package/dist/services/requests/printing.d.ts +2 -0
  74. package/dist/services/requests/printing.js +8 -0
  75. package/dist/services/requests/userPermissions.d.ts +4 -0
  76. package/dist/services/requests/userPermissions.js +20 -0
  77. package/dist/services/types/printing.d.ts +8 -0
  78. package/dist/services/types/printing.js +2 -0
  79. package/eslint.config.js +3 -3
  80. package/package.json +3 -2
  81. package/src/Icons.tsx +138 -138
  82. package/src/components/auth/LoginForm.tsx +86 -86
  83. package/src/components/auth/LoginPage.tsx +32 -32
  84. package/src/components/auth/PasswordRecoveryForm.tsx +53 -53
  85. package/src/components/auth/PasswordResetForm.tsx +112 -112
  86. package/src/components/auth/styles.ts +14 -14
  87. package/src/components/data/DataGrid/DataGridCell.tsx +81 -81
  88. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  89. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  90. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  91. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  92. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +37 -37
  93. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +38 -38
  94. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +71 -71
  95. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +37 -37
  96. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -106
  97. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -35
  98. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +18 -18
  99. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +129 -129
  100. package/src/components/data/DataGrid/DataGridFilterMenu/helpers.ts +23 -23
  101. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  102. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +370 -370
  103. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  104. package/src/components/data/DataGrid/DataGridFooter.tsx +47 -47
  105. package/src/components/data/DataGrid/DataGridHeader.tsx +74 -74
  106. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +112 -112
  107. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +83 -83
  108. package/src/components/data/DataGrid/DataGridToolbar.tsx +134 -134
  109. package/src/components/data/DataGrid/FilterModalContent/index.tsx +137 -137
  110. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  111. package/src/components/data/DataGrid/constants.ts +6 -6
  112. package/src/components/data/DataGrid/helpers/columns.tsx +456 -456
  113. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  114. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  115. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  116. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +383 -383
  117. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +97 -97
  118. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  119. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  120. package/src/components/data/DataGrid/hooks/useRefreshModal.tsx +48 -48
  121. package/src/components/data/DataGrid/index.tsx +111 -111
  122. package/src/components/data/DataGrid/styles.ts +434 -434
  123. package/src/components/data/DataGrid/types.ts +380 -380
  124. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +526 -526
  125. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  126. package/src/components/data/SqlRequestDataGrid/helpers/rows.ts +24 -24
  127. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  128. package/src/components/data/SqlRequestDataGrid/index.tsx +417 -417
  129. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  130. package/src/components/data/SqlRequestDataGrid/types.ts +74 -74
  131. package/src/components/data/SqlRequestForeignList/index.tsx +254 -254
  132. package/src/components/data/SqlRequestForeignList/styles.ts +43 -43
  133. package/src/components/data/SqlRequestForeignList/types.ts +32 -32
  134. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +108 -108
  135. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  136. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  137. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  138. package/src/components/data/SqlRequestGrid/index.tsx +304 -304
  139. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  140. package/src/components/data/SqlRequestGrid/types.ts +73 -73
  141. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  142. package/src/components/data/VirtualScroller/index.tsx +89 -89
  143. package/src/components/data/VirtualScroller/styles.ts +57 -57
  144. package/src/components/data/VirtualScroller/types.ts +10 -10
  145. package/src/components/forms/AutoTextArea.tsx +48 -48
  146. package/src/components/forms/Button.tsx +132 -132
  147. package/src/components/forms/Form/Checkbox.tsx +12 -12
  148. package/src/components/forms/Form/CustomSelect.tsx +86 -86
  149. package/src/components/forms/Form/FormGroup.tsx +31 -31
  150. package/src/components/forms/Form/Input.tsx +16 -16
  151. package/src/components/forms/Form/Row.tsx +32 -32
  152. package/src/components/forms/Form/Select.tsx +82 -82
  153. package/src/components/forms/Form/TextArea.tsx +17 -17
  154. package/src/components/forms/Form/index.tsx +48 -48
  155. package/src/components/forms/Form/styles.ts +184 -184
  156. package/src/components/forms/IconButton.tsx +61 -61
  157. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  158. package/src/components/forms/NumberInput.tsx +53 -53
  159. package/src/components/forms/Select.tsx +34 -34
  160. package/src/components/forms/VerticalLabel.tsx +20 -20
  161. package/src/components/forms/styles.ts +42 -42
  162. package/src/components/layout/Columns.ts +28 -28
  163. package/src/components/layout/Dropdown/index.tsx +113 -113
  164. package/src/components/layout/Dropdown/styles.ts +53 -53
  165. package/src/components/layout/Flexbox.ts +21 -21
  166. package/src/components/layout/Grid/index.tsx +8 -8
  167. package/src/components/layout/Grid/styles.ts +34 -34
  168. package/src/components/layout/Loading/index.tsx +29 -29
  169. package/src/components/layout/Loading/styles.ts +29 -29
  170. package/src/components/layout/Masonry/index.tsx +29 -29
  171. package/src/components/layout/Masonry/styles.ts +20 -20
  172. package/src/components/layout/Modal/index.tsx +51 -51
  173. package/src/components/layout/Modal/styles.ts +125 -125
  174. package/src/components/search/HighlightedText.tsx +41 -41
  175. package/src/components/search/QuickSearchBar.tsx +102 -102
  176. package/src/components/search/QuickSearchResults.tsx +86 -86
  177. package/src/components/search/styles.ts +96 -96
  178. package/src/components/search/types.ts +29 -29
  179. package/src/components/ui/Avatar/index.tsx +54 -54
  180. package/src/components/ui/Avatar/styles.ts +61 -61
  181. package/src/components/ui/Card/index.tsx +14 -14
  182. package/src/components/ui/Card/styles.ts +37 -37
  183. package/src/components/ui/ContextMenu/index.tsx +79 -79
  184. package/src/components/ui/ContextMenu/styles.ts +119 -119
  185. package/src/components/ui/Ellipsis.tsx +33 -33
  186. package/src/components/ui/Label.tsx +93 -93
  187. package/src/components/ui/Message/index.tsx +57 -57
  188. package/src/components/ui/Message/styles.ts +44 -44
  189. package/src/components/ui/TabsView/TabsList.tsx +44 -44
  190. package/src/components/ui/TabsView/TabsView.tsx +38 -38
  191. package/src/components/ui/TabsView/index.ts +3 -3
  192. package/src/components/ui/TabsView/styles.ts +76 -76
  193. package/src/components/ui/TabsView/types.ts +15 -15
  194. package/src/config/index.ts +10 -10
  195. package/src/helpers/components.ts +9 -9
  196. package/src/helpers/dates.ts +17 -17
  197. package/src/helpers/getScrollbarSize.ts +14 -14
  198. package/src/helpers/numbers.ts +63 -63
  199. package/src/helpers/responsive.ts +83 -83
  200. package/src/helpers/styled/space.ts +114 -114
  201. package/src/helpers/styled/typography.ts +25 -25
  202. package/src/helpers/text.ts +13 -13
  203. package/src/helpers/types.ts +9 -9
  204. package/src/hooks/useContainerMediaQuery.ts +7 -7
  205. package/src/hooks/useElementSize.ts +24 -24
  206. package/src/hooks/useMediaQuery.ts +9 -9
  207. package/src/hooks/useMediaQueryForWidth.ts +35 -35
  208. package/src/hooks/useMutableState.ts +25 -25
  209. package/src/hooks/useShowArchived.ts +28 -28
  210. package/src/hooks/useWindowSize.ts +20 -20
  211. package/src/index.ts +102 -102
  212. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  213. package/src/providers/AuthenticationProvider/index.tsx +303 -303
  214. package/src/providers/LoadingProvider/index.tsx +47 -47
  215. package/src/providers/PortalsProvider/index.tsx +54 -54
  216. package/src/providers/PortalsProvider/styles.ts +31 -31
  217. package/src/providers/SettingsProvider/index.tsx +70 -70
  218. package/src/providers/ThemeProvider/defaultTheme.ts +470 -470
  219. package/src/providers/ThemeProvider/helpers.ts +84 -84
  220. package/src/providers/ThemeProvider/index.ts +66 -66
  221. package/src/providers/ThemeProvider/types.ts +134 -134
  222. package/src/providers/ToastProvider/index.tsx +93 -93
  223. package/src/providers/TrackingProvider/hooks.ts +14 -14
  224. package/src/providers/TrackingProvider/index.tsx +71 -71
  225. package/src/providers/UiProviders/index.tsx +76 -76
  226. package/src/providers/UiProviders/styles.ts +10 -10
  227. package/src/providers/hooks.ts +14 -14
  228. package/src/services/HttpService.ts +92 -92
  229. package/src/services/WebSocketService.ts +155 -155
  230. package/src/services/advancedRequests.ts +102 -102
  231. package/src/services/base.ts +23 -23
  232. package/src/services/globalSearch.ts +32 -32
  233. package/src/services/hooks.ts +92 -92
  234. package/src/services/requests/auth.ts +44 -44
  235. package/src/services/requests/generic.ts +62 -62
  236. package/src/services/requests/printing.ts +12 -0
  237. package/src/services/requests/tracking.ts +12 -12
  238. package/src/services/requests/userProfiles.ts +35 -35
  239. package/src/services/requests/users.ts +28 -28
  240. package/src/services/smartQueries.ts +122 -122
  241. package/src/services/sqlRequests.ts +111 -111
  242. package/src/services/types/auth.ts +98 -98
  243. package/src/services/types/base.ts +10 -10
  244. package/src/services/types/generic.ts +82 -82
  245. package/src/services/types/printing.ts +10 -0
  246. package/src/services/types/tracking.ts +29 -29
  247. package/src/services/types/userProfiles.ts +79 -79
  248. package/src/services/types/users.ts +74 -74
  249. package/src/services/updateSqlRequests.ts +32 -32
  250. package/src/styles/animations.scss +30 -30
  251. package/src/styles/index.scss +42 -42
  252. package/src/types.ts +8 -8
  253. package/src/typings.d.ts +2 -2
  254. package/tsconfig.json +18 -18
  255. package/tsconfig.tsbuildinfo +1 -1
@@ -1,73 +1,73 @@
1
- import {
2
- ConditionDTO,
3
- FieldDTO,
4
- OrderByDTO,
5
- SqlRequestRow,
6
- } from '../../../services/sqlRequests';
7
- import {
8
- DataGridCheckboxColumn,
9
- DataGridDateColumn,
10
- DataGridFilter,
11
- DataGridFilterType,
12
- DataGridNumberColumn,
13
- DataGridSort,
14
- DataGridTextColumn,
15
- } from '../DataGrid/types';
16
-
17
- import { VirtualScrollerTemplateFC } from '../VirtualScroller/types';
18
-
19
- export type SqlRequestGridFilter<
20
- T extends DataGridFilterType = DataGridFilterType
21
- > = DataGridFilter<T> & {
22
- field?: FieldDTO;
23
- };
24
-
25
- export type SqlRequestGridFilters = Record<string, SqlRequestGridFilter>;
26
-
27
- export type SqlRequestGridCommonProps = {
28
- filter?: SqlRequestGridFilter;
29
- field?: FieldDTO;
30
- filterField?: string;
31
- sortField?: string;
32
- ignore?: boolean;
33
- };
34
-
35
- export type SqlRequestGridTextColumn<R> = DataGridTextColumn<R> &
36
- SqlRequestGridCommonProps;
37
- export type SqlRequestGridNumberColumn<R> = DataGridNumberColumn<R> &
38
- SqlRequestGridCommonProps;
39
- export type SqlRequestGridCheckboxColumn<R> = DataGridCheckboxColumn<R> &
40
- SqlRequestGridCommonProps;
41
- export type SqlRequestGridDateColumn<R> = DataGridDateColumn<R> &
42
- SqlRequestGridCommonProps;
43
-
44
- export type SqlRequestGridColumn<R> =
45
- | SqlRequestGridTextColumn<R>
46
- | SqlRequestGridNumberColumn<R>
47
- | SqlRequestGridCheckboxColumn<R>
48
- | SqlRequestGridDateColumn<R>;
49
-
50
- export type SqlRequestGridColumnWithFilter<R> = SqlRequestGridColumn<R> & {
51
- filter: SqlRequestGridFilter;
52
- };
53
-
54
- export type SqlRequestGridColumns<R> = SqlRequestGridColumn<R>[];
55
-
56
- export type SqlRequestGridProps<R, P extends object = {}> = {
57
- itemTemplate: VirtualScrollerTemplateFC<R, P>;
58
- itemsPerRow?: number;
59
- rowHeight?: number;
60
- gap?: string;
61
- fields: SqlRequestGridColumns<R>;
62
- additionalFields?: string[];
63
- type: string;
64
- orderBy?: OrderByDTO[];
65
- conditions?: ConditionDTO[];
66
- parser?: (row: SqlRequestRow<R>) => R;
67
- itemProps: P | ((item: R) => P);
68
- initialSorts?: Record<string, DataGridSort>;
69
- };
70
-
71
- export type SqlRequestGridRefProps = {
72
- refresh: () => void;
73
- };
1
+ import {
2
+ ConditionDTO,
3
+ FieldDTO,
4
+ OrderByDTO,
5
+ SqlRequestRow,
6
+ } from '../../../services/sqlRequests';
7
+ import {
8
+ DataGridCheckboxColumn,
9
+ DataGridDateColumn,
10
+ DataGridFilter,
11
+ DataGridFilterType,
12
+ DataGridNumberColumn,
13
+ DataGridSort,
14
+ DataGridTextColumn,
15
+ } from '../DataGrid/types';
16
+
17
+ import { VirtualScrollerTemplateFC } from '../VirtualScroller/types';
18
+
19
+ export type SqlRequestGridFilter<
20
+ T extends DataGridFilterType = DataGridFilterType
21
+ > = DataGridFilter<T> & {
22
+ field?: FieldDTO;
23
+ };
24
+
25
+ export type SqlRequestGridFilters = Record<string, SqlRequestGridFilter>;
26
+
27
+ export type SqlRequestGridCommonProps = {
28
+ filter?: SqlRequestGridFilter;
29
+ field?: FieldDTO;
30
+ filterField?: string;
31
+ sortField?: string;
32
+ ignore?: boolean;
33
+ };
34
+
35
+ export type SqlRequestGridTextColumn<R> = DataGridTextColumn<R> &
36
+ SqlRequestGridCommonProps;
37
+ export type SqlRequestGridNumberColumn<R> = DataGridNumberColumn<R> &
38
+ SqlRequestGridCommonProps;
39
+ export type SqlRequestGridCheckboxColumn<R> = DataGridCheckboxColumn<R> &
40
+ SqlRequestGridCommonProps;
41
+ export type SqlRequestGridDateColumn<R> = DataGridDateColumn<R> &
42
+ SqlRequestGridCommonProps;
43
+
44
+ export type SqlRequestGridColumn<R> =
45
+ | SqlRequestGridTextColumn<R>
46
+ | SqlRequestGridNumberColumn<R>
47
+ | SqlRequestGridCheckboxColumn<R>
48
+ | SqlRequestGridDateColumn<R>;
49
+
50
+ export type SqlRequestGridColumnWithFilter<R> = SqlRequestGridColumn<R> & {
51
+ filter: SqlRequestGridFilter;
52
+ };
53
+
54
+ export type SqlRequestGridColumns<R> = SqlRequestGridColumn<R>[];
55
+
56
+ export type SqlRequestGridProps<R, P extends object = {}> = {
57
+ itemTemplate: VirtualScrollerTemplateFC<R, P>;
58
+ itemsPerRow?: number;
59
+ rowHeight?: number;
60
+ gap?: string;
61
+ fields: SqlRequestGridColumns<R>;
62
+ additionalFields?: string[];
63
+ type: string;
64
+ orderBy?: OrderByDTO[];
65
+ conditions?: ConditionDTO[];
66
+ parser?: (row: SqlRequestRow<R>) => R;
67
+ itemProps: P | ((item: R) => P);
68
+ initialSorts?: Record<string, DataGridSort>;
69
+ };
70
+
71
+ export type SqlRequestGridRefProps = {
72
+ refresh: () => void;
73
+ };
@@ -1,71 +1,71 @@
1
- import { useCallback, useEffect, useState } from 'react';
2
-
3
- import { useElementSize } from '../../../hooks/useElementSize';
4
-
5
- export const VIRTUAL_SCROLL_TOLERANCE = 20;
6
-
7
- type VirtualScrollingProps<R> = {
8
- scrollableElement: HTMLElement | null;
9
- rowHeightInPx: number;
10
- items: R[];
11
- itemsPerRow?: number;
12
- tolerance?: number;
13
- };
14
-
15
- export const useVirtualScrolling = <R>({
16
- scrollableElement,
17
- rowHeightInPx,
18
- items,
19
- itemsPerRow = 1,
20
- tolerance = VIRTUAL_SCROLL_TOLERANCE,
21
- }: VirtualScrollingProps<R>) => {
22
- const { height } = useElementSize(scrollableElement);
23
-
24
- const [scrollTop, setScrollTop] = useState(0);
25
- const [rowIndex, rowLength] = [
26
- Math.floor(scrollTop / rowHeightInPx),
27
- Math.ceil(height / rowHeightInPx),
28
- ];
29
- const [index, length] = [rowIndex * itemsPerRow, rowLength * itemsPerRow];
30
- const rowTolerance = Math.ceil(tolerance / itemsPerRow);
31
-
32
- const totalRows = Math.ceil((items?.length ?? 0) / itemsPerRow);
33
- const totalHeight = totalRows * rowHeightInPx;
34
- const topPadding = Math.max(0, rowIndex - rowTolerance) * rowHeightInPx;
35
-
36
- const onScroll = useCallback(() => {
37
- if (scrollableElement) {
38
- setScrollTop(scrollableElement.scrollTop);
39
- }
40
- }, [scrollableElement]);
41
-
42
- useEffect(() => {
43
- const scrollable = scrollableElement;
44
- if (scrollable) {
45
- scrollable.addEventListener('scroll', onScroll);
46
- return () => {
47
- scrollable.removeEventListener('scroll', onScroll);
48
- };
49
- }
50
- }, [onScroll, scrollableElement]);
51
-
52
- const rowIndexWithTolerance = Math.max(0, rowIndex - rowTolerance);
53
- const rowLengthWithTolerance = rowLength + 2 * rowTolerance;
54
- const indexWithTolerance = rowIndexWithTolerance * itemsPerRow;
55
- const lengthWithTolerance = rowLengthWithTolerance * itemsPerRow;
56
-
57
- const visibleItems = items.slice(
58
- indexWithTolerance,
59
- indexWithTolerance + lengthWithTolerance
60
- );
61
-
62
- return {
63
- index,
64
- length,
65
- indexWithTolerance,
66
- lengthWithTolerance,
67
- visibleItems,
68
- totalHeight,
69
- topPadding,
70
- };
71
- };
1
+ import { useCallback, useEffect, useState } from 'react';
2
+
3
+ import { useElementSize } from '../../../hooks/useElementSize';
4
+
5
+ export const VIRTUAL_SCROLL_TOLERANCE = 20;
6
+
7
+ type VirtualScrollingProps<R> = {
8
+ scrollableElement: HTMLElement | null;
9
+ rowHeightInPx: number;
10
+ items: R[];
11
+ itemsPerRow?: number;
12
+ tolerance?: number;
13
+ };
14
+
15
+ export const useVirtualScrolling = <R>({
16
+ scrollableElement,
17
+ rowHeightInPx,
18
+ items,
19
+ itemsPerRow = 1,
20
+ tolerance = VIRTUAL_SCROLL_TOLERANCE,
21
+ }: VirtualScrollingProps<R>) => {
22
+ const { height } = useElementSize(scrollableElement);
23
+
24
+ const [scrollTop, setScrollTop] = useState(0);
25
+ const [rowIndex, rowLength] = [
26
+ Math.floor(scrollTop / rowHeightInPx),
27
+ Math.ceil(height / rowHeightInPx),
28
+ ];
29
+ const [index, length] = [rowIndex * itemsPerRow, rowLength * itemsPerRow];
30
+ const rowTolerance = Math.ceil(tolerance / itemsPerRow);
31
+
32
+ const totalRows = Math.ceil((items?.length ?? 0) / itemsPerRow);
33
+ const totalHeight = totalRows * rowHeightInPx;
34
+ const topPadding = Math.max(0, rowIndex - rowTolerance) * rowHeightInPx;
35
+
36
+ const onScroll = useCallback(() => {
37
+ if (scrollableElement) {
38
+ setScrollTop(scrollableElement.scrollTop);
39
+ }
40
+ }, [scrollableElement]);
41
+
42
+ useEffect(() => {
43
+ const scrollable = scrollableElement;
44
+ if (scrollable) {
45
+ scrollable.addEventListener('scroll', onScroll);
46
+ return () => {
47
+ scrollable.removeEventListener('scroll', onScroll);
48
+ };
49
+ }
50
+ }, [onScroll, scrollableElement]);
51
+
52
+ const rowIndexWithTolerance = Math.max(0, rowIndex - rowTolerance);
53
+ const rowLengthWithTolerance = rowLength + 2 * rowTolerance;
54
+ const indexWithTolerance = rowIndexWithTolerance * itemsPerRow;
55
+ const lengthWithTolerance = rowLengthWithTolerance * itemsPerRow;
56
+
57
+ const visibleItems = items.slice(
58
+ indexWithTolerance,
59
+ indexWithTolerance + lengthWithTolerance
60
+ );
61
+
62
+ return {
63
+ index,
64
+ length,
65
+ indexWithTolerance,
66
+ lengthWithTolerance,
67
+ visibleItems,
68
+ totalHeight,
69
+ topPadding,
70
+ };
71
+ };
@@ -1,89 +1,89 @@
1
- import * as styles from './styles';
2
-
3
- import { useEffect, useState } from 'react';
4
-
5
- import { VirtualScrollerTemplateFC } from './types';
6
- import { useVirtualScrolling } from './hooks';
7
-
8
- type VirtualScrollerProps<R, P extends object> = {
9
- gridTemplateColumns: string;
10
- items: R[];
11
- itemTemplate: VirtualScrollerTemplateFC<R, P>;
12
- rowHeightInPx: number;
13
- gap?: string;
14
- itemsPerRow?: number;
15
- tolerance?: number;
16
- itemProps: P | ((item: R, index: number) => P);
17
- onRangeChanged?: (index: number, length: number) => void;
18
- integrated?: boolean;
19
- };
20
-
21
- export const VirtualScroller = <R, P extends object>({
22
- gridTemplateColumns,
23
- items,
24
- rowHeightInPx,
25
- itemTemplate: ItemTemplate,
26
- itemProps,
27
- onRangeChanged,
28
- gap,
29
- itemsPerRow,
30
- tolerance,
31
- integrated,
32
- }: VirtualScrollerProps<R, P>) => {
33
- const [scrollableElement, setScrollableElement] =
34
- useState<HTMLElement | null>(null);
35
- const {
36
- indexWithTolerance,
37
- lengthWithTolerance,
38
- visibleItems,
39
- topPadding,
40
- totalHeight,
41
- } = useVirtualScrolling<R>({
42
- scrollableElement,
43
- rowHeightInPx,
44
- items,
45
- itemsPerRow,
46
- tolerance,
47
- });
48
-
49
- useEffect(() => {
50
- onRangeChanged?.(indexWithTolerance, lengthWithTolerance);
51
- }, [indexWithTolerance, lengthWithTolerance, onRangeChanged]);
52
-
53
- return (
54
- <styles.VirtualScrollerContainer $integrated={integrated}>
55
- <styles.VirtualScrollerFiller
56
- $height={totalHeight}
57
- ref={(element) =>
58
- setScrollableElement(
59
- (integrated
60
- ? element?.parentElement?.parentElement
61
- : element?.parentElement) ?? null
62
- )
63
- }
64
- >
65
- <styles.VirtualScrollerItemsContainer
66
- $gridTemplateColumns={gridTemplateColumns}
67
- $topPadding={topPadding}
68
- $itemHeight={rowHeightInPx}
69
- $gap={gap}
70
- >
71
- {visibleItems.map((item, currentIndex) => {
72
- const currentItemProps =
73
- typeof itemProps === 'function'
74
- ? itemProps(item, indexWithTolerance + currentIndex)
75
- : itemProps;
76
- return (
77
- <ItemTemplate
78
- key={indexWithTolerance + currentIndex}
79
- item={item}
80
- index={currentIndex}
81
- {...currentItemProps}
82
- />
83
- );
84
- })}
85
- </styles.VirtualScrollerItemsContainer>
86
- </styles.VirtualScrollerFiller>
87
- </styles.VirtualScrollerContainer>
88
- );
89
- };
1
+ import * as styles from './styles';
2
+
3
+ import { useEffect, useState } from 'react';
4
+
5
+ import { VirtualScrollerTemplateFC } from './types';
6
+ import { useVirtualScrolling } from './hooks';
7
+
8
+ type VirtualScrollerProps<R, P extends object> = {
9
+ gridTemplateColumns: string;
10
+ items: R[];
11
+ itemTemplate: VirtualScrollerTemplateFC<R, P>;
12
+ rowHeightInPx: number;
13
+ gap?: string;
14
+ itemsPerRow?: number;
15
+ tolerance?: number;
16
+ itemProps: P | ((item: R, index: number) => P);
17
+ onRangeChanged?: (index: number, length: number) => void;
18
+ integrated?: boolean;
19
+ };
20
+
21
+ export const VirtualScroller = <R, P extends object>({
22
+ gridTemplateColumns,
23
+ items,
24
+ rowHeightInPx,
25
+ itemTemplate: ItemTemplate,
26
+ itemProps,
27
+ onRangeChanged,
28
+ gap,
29
+ itemsPerRow,
30
+ tolerance,
31
+ integrated,
32
+ }: VirtualScrollerProps<R, P>) => {
33
+ const [scrollableElement, setScrollableElement] =
34
+ useState<HTMLElement | null>(null);
35
+ const {
36
+ indexWithTolerance,
37
+ lengthWithTolerance,
38
+ visibleItems,
39
+ topPadding,
40
+ totalHeight,
41
+ } = useVirtualScrolling<R>({
42
+ scrollableElement,
43
+ rowHeightInPx,
44
+ items,
45
+ itemsPerRow,
46
+ tolerance,
47
+ });
48
+
49
+ useEffect(() => {
50
+ onRangeChanged?.(indexWithTolerance, lengthWithTolerance);
51
+ }, [indexWithTolerance, lengthWithTolerance, onRangeChanged]);
52
+
53
+ return (
54
+ <styles.VirtualScrollerContainer $integrated={integrated}>
55
+ <styles.VirtualScrollerFiller
56
+ $height={totalHeight}
57
+ ref={(element) =>
58
+ setScrollableElement(
59
+ (integrated
60
+ ? element?.parentElement?.parentElement
61
+ : element?.parentElement) ?? null
62
+ )
63
+ }
64
+ >
65
+ <styles.VirtualScrollerItemsContainer
66
+ $gridTemplateColumns={gridTemplateColumns}
67
+ $topPadding={topPadding}
68
+ $itemHeight={rowHeightInPx}
69
+ $gap={gap}
70
+ >
71
+ {visibleItems.map((item, currentIndex) => {
72
+ const currentItemProps =
73
+ typeof itemProps === 'function'
74
+ ? itemProps(item, indexWithTolerance + currentIndex)
75
+ : itemProps;
76
+ return (
77
+ <ItemTemplate
78
+ key={indexWithTolerance + currentIndex}
79
+ item={item}
80
+ index={currentIndex}
81
+ {...currentItemProps}
82
+ />
83
+ );
84
+ })}
85
+ </styles.VirtualScrollerItemsContainer>
86
+ </styles.VirtualScrollerFiller>
87
+ </styles.VirtualScrollerContainer>
88
+ );
89
+ };
@@ -1,57 +1,57 @@
1
- import styled from 'styled-components';
2
-
3
- export const TopPaddingItem = styled.div``;
4
- export const BottomPaddingItem = styled.div``;
5
-
6
- export const VirtualScrollerContainer = styled.div<{
7
- $integrated?: boolean;
8
- }>`
9
- position: relative;
10
- overflow: auto;
11
- height: 100%;
12
- display: ${({ $integrated }) => ($integrated ? 'contents' : 'block')};
13
- `;
14
-
15
- export const VirtualScrollerFiller = styled.div.attrs<{
16
- $height: number;
17
- }>(({ $height }) => ({
18
- style: {
19
- height: `${$height}px`,
20
- },
21
- }))`
22
- position: relative;
23
- overflow: visible;
24
- `;
25
-
26
- export const VirtualScrollerItemsContainer = styled.div.attrs<{
27
- $gridTemplateColumns: string;
28
- $gap?: string;
29
- $topPadding: number;
30
- $itemHeight: number;
31
- }>(({ $gridTemplateColumns, $topPadding, $itemHeight }) => {
32
- const itemHeightValue = `${$itemHeight}px`;
33
- return {
34
- className: 'VirtualScrollerItemsContainer',
35
- style: {
36
- top: `${$topPadding}px`,
37
- gridTemplateColumns: $gridTemplateColumns,
38
- gridAutoItems: itemHeightValue,
39
- },
40
- };
41
- })`
42
- display: grid;
43
- position: absolute;
44
- min-width: 100%;
45
- grid-gap: ${({ $gap }) => $gap};
46
-
47
- ${TopPaddingItem} {
48
- grid-column-start: 1;
49
- grid-column-end: -1;
50
- grid-row: 1;
51
- }
52
- ${BottomPaddingItem} {
53
- grid-column-start: 1;
54
- grid-column-end: -1;
55
- grid-row: -1;
56
- }
57
- `;
1
+ import styled from 'styled-components';
2
+
3
+ export const TopPaddingItem = styled.div``;
4
+ export const BottomPaddingItem = styled.div``;
5
+
6
+ export const VirtualScrollerContainer = styled.div<{
7
+ $integrated?: boolean;
8
+ }>`
9
+ position: relative;
10
+ overflow: auto;
11
+ height: 100%;
12
+ display: ${({ $integrated }) => ($integrated ? 'contents' : 'block')};
13
+ `;
14
+
15
+ export const VirtualScrollerFiller = styled.div.attrs<{
16
+ $height: number;
17
+ }>(({ $height }) => ({
18
+ style: {
19
+ height: `${$height}px`,
20
+ },
21
+ }))`
22
+ position: relative;
23
+ overflow: visible;
24
+ `;
25
+
26
+ export const VirtualScrollerItemsContainer = styled.div.attrs<{
27
+ $gridTemplateColumns: string;
28
+ $gap?: string;
29
+ $topPadding: number;
30
+ $itemHeight: number;
31
+ }>(({ $gridTemplateColumns, $topPadding, $itemHeight }) => {
32
+ const itemHeightValue = `${$itemHeight}px`;
33
+ return {
34
+ className: 'VirtualScrollerItemsContainer',
35
+ style: {
36
+ top: `${$topPadding}px`,
37
+ gridTemplateColumns: $gridTemplateColumns,
38
+ gridAutoItems: itemHeightValue,
39
+ },
40
+ };
41
+ })`
42
+ display: grid;
43
+ position: absolute;
44
+ min-width: 100%;
45
+ grid-gap: ${({ $gap }) => $gap};
46
+
47
+ ${TopPaddingItem} {
48
+ grid-column-start: 1;
49
+ grid-column-end: -1;
50
+ grid-row: 1;
51
+ }
52
+ ${BottomPaddingItem} {
53
+ grid-column-start: 1;
54
+ grid-column-end: -1;
55
+ grid-row: -1;
56
+ }
57
+ `;
@@ -1,10 +1,10 @@
1
- import { FC } from 'react';
2
-
3
- export type VirtualScrollerTemplateProps<R, P extends object = {}> = P & {
4
- item: R | null;
5
- index: number;
6
- };
7
-
8
- export type VirtualScrollerTemplateFC<R, P extends object = {}> = FC<
9
- VirtualScrollerTemplateProps<R, P>
10
- >;
1
+ import { FC } from 'react';
2
+
3
+ export type VirtualScrollerTemplateProps<R, P extends object = {}> = P & {
4
+ item: R | null;
5
+ index: number;
6
+ };
7
+
8
+ export type VirtualScrollerTemplateFC<R, P extends object = {}> = FC<
9
+ VirtualScrollerTemplateProps<R, P>
10
+ >;