@addev-be/ui 1.1.5 → 1.1.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 (245) 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/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +8 -9
  24. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +72 -21
  25. package/dist/components/data/AdvancedRequestDataGrid/index.js +2 -2
  26. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +1 -1
  27. package/dist/components/data/DataGrid/styles.js +1 -1
  28. package/dist/components/forms/Form/CustomSelect.d.ts +13 -0
  29. package/dist/components/forms/Form/CustomSelect.js +51 -0
  30. package/dist/components/forms/Form/index.d.ts +11 -0
  31. package/dist/components/forms/Form/index.js +2 -0
  32. package/dist/components/layout/Dropdown/styles.d.ts +1 -0
  33. package/dist/components/layout/Dropdown/styles.js +5 -2
  34. package/eslint.config.js +3 -3
  35. package/package.json +2 -2
  36. package/src/Icons.tsx +138 -138
  37. package/src/components/auth/LoginForm.tsx +84 -84
  38. package/src/components/auth/LoginPage.tsx +32 -32
  39. package/src/components/auth/PasswordRecoveryForm.tsx +52 -52
  40. package/src/components/auth/PasswordResetForm.tsx +112 -112
  41. package/src/components/auth/index.ts +4 -4
  42. package/src/components/auth/styles.ts +14 -14
  43. package/src/components/data/DataGrid/DataGridCell.tsx +81 -81
  44. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  45. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  46. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  47. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  48. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +38 -38
  49. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +39 -39
  50. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +75 -75
  51. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +38 -38
  52. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -106
  53. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -35
  54. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +19 -19
  55. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +129 -129
  56. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  57. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +370 -370
  58. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  59. package/src/components/data/DataGrid/DataGridFooter.tsx +45 -45
  60. package/src/components/data/DataGrid/DataGridHeader.tsx +74 -74
  61. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +112 -112
  62. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +83 -83
  63. package/src/components/data/DataGrid/DataGridToolbar.tsx +134 -134
  64. package/src/components/data/DataGrid/FilterModalContent/index.tsx +135 -135
  65. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  66. package/src/components/data/DataGrid/constants.ts +6 -6
  67. package/src/components/data/DataGrid/helpers/columns.tsx +453 -453
  68. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  69. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  70. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  71. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +380 -380
  72. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +97 -97
  73. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  74. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  75. package/src/components/data/DataGrid/hooks/useRefreshModal.tsx +48 -48
  76. package/src/components/data/DataGrid/index.tsx +122 -122
  77. package/src/components/data/DataGrid/styles.ts +430 -430
  78. package/src/components/data/DataGrid/types.ts +380 -380
  79. package/src/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.tsx +16 -16
  80. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +526 -526
  81. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  82. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  83. package/src/components/data/SqlRequestDataGrid/index.tsx +420 -420
  84. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  85. package/src/components/data/SqlRequestDataGrid/types.ts +74 -74
  86. package/src/components/data/SqlRequestForeignList/index.tsx +257 -257
  87. package/src/components/data/SqlRequestForeignList/styles.ts +43 -43
  88. package/src/components/data/SqlRequestForeignList/types.ts +32 -32
  89. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +108 -108
  90. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  91. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  92. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  93. package/src/components/data/SqlRequestGrid/index.tsx +315 -315
  94. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  95. package/src/components/data/SqlRequestGrid/types.ts +73 -73
  96. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  97. package/src/components/data/VirtualScroller/index.tsx +89 -89
  98. package/src/components/data/VirtualScroller/styles.ts +57 -57
  99. package/src/components/data/VirtualScroller/types.ts +10 -10
  100. package/src/components/data/index.ts +16 -16
  101. package/src/components/forms/AutoTextArea.tsx +48 -48
  102. package/src/components/forms/Button.tsx +132 -132
  103. package/src/components/forms/Form/Checkbox.tsx +12 -12
  104. package/src/components/forms/Form/CustomSelect.tsx +94 -0
  105. package/src/components/forms/Form/FormGroup.tsx +31 -31
  106. package/src/components/forms/Form/Input.tsx +16 -16
  107. package/src/components/forms/Form/Row.tsx +32 -32
  108. package/src/components/forms/Form/Select.tsx +87 -87
  109. package/src/components/forms/Form/TextArea.tsx +17 -17
  110. package/src/components/forms/Form/index.tsx +48 -45
  111. package/src/components/forms/Form/styles.ts +184 -184
  112. package/src/components/forms/IconButton.tsx +67 -67
  113. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  114. package/src/components/forms/NumberInput.tsx +53 -53
  115. package/src/components/forms/Select.tsx +34 -34
  116. package/src/components/forms/VerticalLabel.tsx +20 -20
  117. package/src/components/forms/index.ts +9 -9
  118. package/src/components/forms/styles.ts +42 -42
  119. package/src/components/index.ts +6 -6
  120. package/src/components/layout/Columns.ts +28 -28
  121. package/src/components/layout/Dropdown/index.tsx +113 -113
  122. package/src/components/layout/Dropdown/styles.ts +53 -45
  123. package/src/components/layout/Flexbox.ts +21 -21
  124. package/src/components/layout/Grid/index.tsx +8 -8
  125. package/src/components/layout/Grid/styles.ts +34 -34
  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/Masonry/index.tsx +29 -29
  129. package/src/components/layout/Masonry/styles.ts +20 -20
  130. package/src/components/layout/Modal/index.tsx +51 -51
  131. package/src/components/layout/Modal/styles.ts +125 -125
  132. package/src/components/layout/index.ts +7 -7
  133. package/src/components/search/HighlightedText.tsx +41 -41
  134. package/src/components/search/QuickSearchBar.tsx +99 -99
  135. package/src/components/search/QuickSearchResults.tsx +86 -86
  136. package/src/components/search/index.ts +9 -9
  137. package/src/components/search/styles.ts +96 -96
  138. package/src/components/search/types.ts +29 -29
  139. package/src/components/ui/Avatar/index.tsx +54 -54
  140. package/src/components/ui/Card/index.tsx +14 -14
  141. package/src/components/ui/Card/styles.ts +37 -37
  142. package/src/components/ui/ContextMenu/index.tsx +79 -79
  143. package/src/components/ui/ContextMenu/styles.ts +119 -119
  144. package/src/components/ui/Ellipsis.tsx +34 -34
  145. package/src/components/ui/Label.tsx +99 -99
  146. package/src/components/ui/Message/index.tsx +57 -57
  147. package/src/components/ui/Message/styles.ts +40 -40
  148. package/src/components/ui/TabsView/TabsList.tsx +44 -44
  149. package/src/components/ui/TabsView/TabsView.tsx +38 -38
  150. package/src/components/ui/TabsView/styles.ts +73 -73
  151. package/src/components/ui/TabsView/types.ts +12 -12
  152. package/src/components/ui/index.ts +7 -7
  153. package/src/config/index.ts +14 -14
  154. package/src/helpers/dates.ts +17 -17
  155. package/src/helpers/getScrollbarSize.ts +14 -14
  156. package/src/helpers/index.ts +5 -5
  157. package/src/helpers/numbers.ts +63 -63
  158. package/src/helpers/responsive.ts +83 -83
  159. package/src/helpers/styled/typography.ts +25 -25
  160. package/src/helpers/text.ts +13 -13
  161. package/src/helpers/types.ts +9 -9
  162. package/src/hooks/index.ts +7 -7
  163. package/src/hooks/useContainerMediaQuery.ts +7 -7
  164. package/src/hooks/useElementSize.ts +24 -24
  165. package/src/hooks/useMediaQuery.ts +9 -9
  166. package/src/hooks/useMediaQueryForWidth.ts +35 -35
  167. package/src/hooks/useMutableState.ts +17 -17
  168. package/src/hooks/useShowArchived.ts +28 -28
  169. package/src/hooks/useWindowSize.ts +20 -20
  170. package/src/index.ts +13 -13
  171. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  172. package/src/providers/AuthenticationProvider/index.tsx +303 -303
  173. package/src/providers/LoadingProvider/index.tsx +47 -47
  174. package/src/providers/PortalsProvider/index.tsx +54 -54
  175. package/src/providers/PortalsProvider/styles.ts +31 -31
  176. package/src/providers/SettingsProvider/index.tsx +70 -70
  177. package/src/providers/ThemeProvider/ThemeProvider.ts +66 -66
  178. package/src/providers/ThemeProvider/defaultTheme.ts +470 -470
  179. package/src/providers/ThemeProvider/helpers.ts +84 -84
  180. package/src/providers/ThemeProvider/index.ts +5 -5
  181. package/src/providers/ThemeProvider/types.ts +134 -134
  182. package/src/providers/ToastProvider/index.tsx +93 -93
  183. package/src/providers/TrackingProvider/index.tsx +71 -71
  184. package/src/providers/UiProviders/index.tsx +76 -76
  185. package/src/providers/UiProviders/styles.ts +10 -10
  186. package/src/providers/hooks.ts +14 -14
  187. package/src/providers/index.ts +9 -9
  188. package/src/services/HttpService.ts +92 -92
  189. package/src/services/WebSocketService.ts +155 -155
  190. package/src/services/advancedRequests.ts +102 -102
  191. package/src/services/base.ts +23 -23
  192. package/src/services/globalSearch.ts +32 -32
  193. package/src/services/hooks.ts +92 -92
  194. package/src/services/index.ts +21 -21
  195. package/src/services/requests/auth.ts +44 -44
  196. package/src/services/requests/generic.ts +62 -62
  197. package/src/services/requests/tracking.ts +12 -12
  198. package/src/services/requests/userProfiles.ts +35 -35
  199. package/src/services/requests/users.ts +28 -28
  200. package/src/services/smartQueries.ts +122 -122
  201. package/src/services/sqlRequests.ts +111 -111
  202. package/src/services/types/auth.ts +98 -98
  203. package/src/services/types/base.ts +10 -10
  204. package/src/services/types/generic.ts +82 -82
  205. package/src/services/types/tracking.ts +29 -29
  206. package/src/services/types/userProfiles.ts +79 -79
  207. package/src/services/types/users.ts +74 -74
  208. package/src/services/updateSqlRequests.ts +32 -32
  209. package/src/styles/animations.scss +30 -30
  210. package/src/styles/index.scss +42 -42
  211. package/src/typings.d.ts +17 -17
  212. package/tsconfig.json +18 -18
  213. package/tsconfig.tsbuildinfo +1 -1
  214. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +0 -10
  215. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +0 -173
  216. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +0 -13
  217. package/dist/components/data/DataGrid/FilterValuesScroller.js +0 -73
  218. package/dist/components/data/DataGrid/VirtualScroller.d.ts +0 -11
  219. package/dist/components/data/DataGrid/VirtualScroller.js +0 -41
  220. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +0 -12
  221. package/dist/components/data/DataGrid/helpers/advancedRequests.js +0 -53
  222. package/dist/components/data/DataGrid/helpers.d.ts +0 -28
  223. package/dist/components/data/DataGrid/helpers.js +0 -436
  224. package/dist/components/data/SmartQueryDataGrid/helpers/columns.d.ts +0 -20
  225. package/dist/components/data/SmartQueryDataGrid/helpers/columns.js +0 -160
  226. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.d.ts +0 -5
  227. package/dist/components/data/SmartQueryDataGrid/helpers/hooks.js +0 -41
  228. package/dist/components/data/SmartQueryDataGrid/helpers/index.d.ts +0 -2
  229. package/dist/components/data/SmartQueryDataGrid/helpers/index.js +0 -18
  230. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.d.ts +0 -3
  231. package/dist/components/data/SmartQueryDataGrid/helpers/smartQueries.js +0 -15
  232. package/dist/components/data/SmartQueryDataGrid/hooks.d.ts +0 -9
  233. package/dist/components/data/SmartQueryDataGrid/hooks.js +0 -63
  234. package/dist/components/data/SmartQueryDataGrid/index.d.ts +0 -12
  235. package/dist/components/data/SmartQueryDataGrid/index.js +0 -242
  236. package/dist/components/data/SmartQueryDataGrid/types.d.ts +0 -22
  237. package/dist/components/data/SmartQueryDataGrid/types.js +0 -2
  238. package/dist/components/forms/Form/InputWithLabel.d.ts +0 -2
  239. package/dist/components/forms/Form/InputWithLabel.js +0 -10
  240. package/dist/components/forms/Form/types.d.ts +0 -7
  241. package/dist/components/forms/Form/types.js +0 -2
  242. package/dist/config/types.d.ts +0 -11
  243. package/dist/config/types.js +0 -2
  244. package/dist/services/requests/userPermissions.d.ts +0 -4
  245. package/dist/services/requests/userPermissions.js +0 -20
@@ -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';
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';
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
+ >;
@@ -1,16 +1,16 @@
1
- export * from './DataGrid';
2
- export * from './DataGrid/helpers';
3
- export * from './DataGrid/styles';
4
- export * from './DataGrid/types';
5
-
6
- export * from './SqlRequestDataGrid';
7
- export * from './SqlRequestDataGrid/helpers';
8
- export * from './SqlRequestDataGrid/types';
9
-
10
- export * from './SqlRequestGrid';
11
- export * from './SqlRequestGrid/types';
12
-
13
- export * from './SqlRequestForeignList';
14
-
15
- export * from './VirtualScroller';
16
- export * from './VirtualScroller/types';
1
+ export * from './DataGrid';
2
+ export * from './DataGrid/helpers';
3
+ export * from './DataGrid/styles';
4
+ export * from './DataGrid/types';
5
+
6
+ export * from './SqlRequestDataGrid';
7
+ export * from './SqlRequestDataGrid/helpers';
8
+ export * from './SqlRequestDataGrid/types';
9
+
10
+ export * from './SqlRequestGrid';
11
+ export * from './SqlRequestGrid/types';
12
+
13
+ export * from './SqlRequestForeignList';
14
+
15
+ export * from './VirtualScroller';
16
+ export * from './VirtualScroller/types';