@etsoo/react 1.5.80 → 1.5.83

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 (259) hide show
  1. package/README.md +7 -2
  2. package/__tests__/ReactUtils.ts +6 -0
  3. package/lib/{mu → components}/DnDList.d.ts +1 -14
  4. package/lib/{mu → components}/DnDList.js +1 -24
  5. package/lib/components/GridMethodRef.d.ts +11 -0
  6. package/lib/{mu → components}/GridMethodRef.js +0 -0
  7. package/lib/components/ScrollerGrid.d.ts +3 -3
  8. package/lib/components/ScrollerList.d.ts +3 -3
  9. package/lib/index.d.ts +2 -74
  10. package/lib/index.js +2 -75
  11. package/lib/notifier/Notifier.d.ts +2 -3
  12. package/lib/states/UserState.d.ts +1 -1
  13. package/lib/uses/useWindowScroll.d.ts +10 -0
  14. package/lib/uses/useWindowScroll.js +46 -0
  15. package/lib/uses/useWindowSize.js +11 -5
  16. package/package.json +4 -16
  17. package/src/{mu → components}/DnDList.tsx +11 -34
  18. package/src/components/GridMethodRef.ts +12 -0
  19. package/src/components/ScrollerGrid.tsx +3 -3
  20. package/src/components/ScrollerList.tsx +5 -3
  21. package/src/index.ts +2 -78
  22. package/src/notifier/Notifier.ts +2 -3
  23. package/src/states/UserState.ts +7 -2
  24. package/src/uses/useWindowScroll.ts +60 -0
  25. package/src/uses/useWindowSize.ts +14 -5
  26. package/__tests__/mu/ComboBox.tsx +0 -30
  27. package/__tests__/mu/MUGlobalTests.tsx +0 -58
  28. package/__tests__/mu/NotifierMUTests.tsx +0 -213
  29. package/__tests__/mu/SelectEx.tsx +0 -26
  30. package/lib/app/CommonApp.d.ts +0 -39
  31. package/lib/app/CommonApp.js +0 -149
  32. package/lib/app/IServiceAppSettings.d.ts +0 -11
  33. package/lib/app/IServiceAppSettings.js +0 -1
  34. package/lib/app/IServicePage.d.ts +0 -6
  35. package/lib/app/IServicePage.js +0 -1
  36. package/lib/app/IServiceUser.d.ts +0 -14
  37. package/lib/app/IServiceUser.js +0 -1
  38. package/lib/app/ISmartERPUser.d.ts +0 -14
  39. package/lib/app/ISmartERPUser.js +0 -1
  40. package/lib/app/Labels.d.ts +0 -65
  41. package/lib/app/Labels.js +0 -62
  42. package/lib/app/ReactApp.d.ts +0 -194
  43. package/lib/app/ReactApp.js +0 -298
  44. package/lib/app/ServiceApp.d.ts +0 -78
  45. package/lib/app/ServiceApp.js +0 -244
  46. package/lib/components/ShowDataComparison.d.ts +0 -20
  47. package/lib/components/ShowDataComparison.js +0 -60
  48. package/lib/mu/AuditDisplay.d.ts +0 -33
  49. package/lib/mu/AuditDisplay.js +0 -52
  50. package/lib/mu/AutocompleteExtendedProps.d.ts +0 -64
  51. package/lib/mu/AutocompleteExtendedProps.js +0 -1
  52. package/lib/mu/BackButton.d.ts +0 -13
  53. package/lib/mu/BackButton.js +0 -33
  54. package/lib/mu/BridgeCloseButton.d.ts +0 -23
  55. package/lib/mu/BridgeCloseButton.js +0 -32
  56. package/lib/mu/ButtonLink.d.ts +0 -17
  57. package/lib/mu/ButtonLink.js +0 -19
  58. package/lib/mu/ComboBox.d.ts +0 -38
  59. package/lib/mu/ComboBox.js +0 -108
  60. package/lib/mu/CountdownButton.d.ts +0 -23
  61. package/lib/mu/CountdownButton.js +0 -81
  62. package/lib/mu/CustomFabProps.d.ts +0 -27
  63. package/lib/mu/CustomFabProps.js +0 -1
  64. package/lib/mu/DataGridEx.d.ts +0 -96
  65. package/lib/mu/DataGridEx.js +0 -331
  66. package/lib/mu/DataGridRenderers.d.ts +0 -22
  67. package/lib/mu/DataGridRenderers.js +0 -99
  68. package/lib/mu/DialogButton.d.ts +0 -54
  69. package/lib/mu/DialogButton.js +0 -45
  70. package/lib/mu/DraggablePaperComponent.d.ts +0 -8
  71. package/lib/mu/DraggablePaperComponent.js +0 -12
  72. package/lib/mu/EmailInput.d.ts +0 -11
  73. package/lib/mu/EmailInput.js +0 -15
  74. package/lib/mu/FabBox.d.ts +0 -21
  75. package/lib/mu/FabBox.js +0 -31
  76. package/lib/mu/FlexBox.d.ts +0 -14
  77. package/lib/mu/FlexBox.js +0 -18
  78. package/lib/mu/GridDataFormat.d.ts +0 -10
  79. package/lib/mu/GridDataFormat.js +0 -43
  80. package/lib/mu/GridMethodRef.d.ts +0 -11
  81. package/lib/mu/IconButtonLink.d.ts +0 -17
  82. package/lib/mu/IconButtonLink.js +0 -16
  83. package/lib/mu/InputField.d.ts +0 -21
  84. package/lib/mu/InputField.js +0 -39
  85. package/lib/mu/ItemList.d.ts +0 -56
  86. package/lib/mu/ItemList.js +0 -69
  87. package/lib/mu/ListItemRightIcon.d.ts +0 -4
  88. package/lib/mu/ListItemRightIcon.js +0 -8
  89. package/lib/mu/ListMoreDisplay.d.ts +0 -35
  90. package/lib/mu/ListMoreDisplay.js +0 -99
  91. package/lib/mu/LoadingButton.d.ts +0 -16
  92. package/lib/mu/LoadingButton.js +0 -41
  93. package/lib/mu/MUGlobal.d.ts +0 -102
  94. package/lib/mu/MUGlobal.js +0 -184
  95. package/lib/mu/MaskInput.d.ts +0 -34
  96. package/lib/mu/MaskInput.js +0 -43
  97. package/lib/mu/MobileListItemRenderer.d.ts +0 -17
  98. package/lib/mu/MobileListItemRenderer.js +0 -35
  99. package/lib/mu/MoreFab.d.ts +0 -45
  100. package/lib/mu/MoreFab.js +0 -95
  101. package/lib/mu/NotifierMU.d.ts +0 -47
  102. package/lib/mu/NotifierMU.js +0 -387
  103. package/lib/mu/NotifierPromptProps.d.ts +0 -22
  104. package/lib/mu/NotifierPromptProps.js +0 -1
  105. package/lib/mu/OptionGroup.d.ts +0 -58
  106. package/lib/mu/OptionGroup.js +0 -81
  107. package/lib/mu/PList.d.ts +0 -15
  108. package/lib/mu/PList.js +0 -12
  109. package/lib/mu/ProgressCount.d.ts +0 -44
  110. package/lib/mu/ProgressCount.js +0 -79
  111. package/lib/mu/PullToRefreshUI.d.ts +0 -9
  112. package/lib/mu/PullToRefreshUI.js +0 -18
  113. package/lib/mu/RLink.d.ts +0 -14
  114. package/lib/mu/RLink.js +0 -37
  115. package/lib/mu/ResponsibleContainer.d.ts +0 -89
  116. package/lib/mu/ResponsibleContainer.js +0 -159
  117. package/lib/mu/ScrollTopFab.d.ts +0 -7
  118. package/lib/mu/ScrollTopFab.js +0 -25
  119. package/lib/mu/ScrollerListEx.d.ts +0 -81
  120. package/lib/mu/ScrollerListEx.js +0 -167
  121. package/lib/mu/SearchBar.d.ts +0 -29
  122. package/lib/mu/SearchBar.js +0 -262
  123. package/lib/mu/SearchField.d.ts +0 -21
  124. package/lib/mu/SearchField.js +0 -39
  125. package/lib/mu/SearchOptionGroup.d.ts +0 -9
  126. package/lib/mu/SearchOptionGroup.js +0 -14
  127. package/lib/mu/SelectBool.d.ts +0 -13
  128. package/lib/mu/SelectBool.js +0 -22
  129. package/lib/mu/SelectEx.d.ts +0 -50
  130. package/lib/mu/SelectEx.js +0 -156
  131. package/lib/mu/Switch.d.ts +0 -29
  132. package/lib/mu/Switch.js +0 -34
  133. package/lib/mu/SwitchAnt.d.ts +0 -25
  134. package/lib/mu/SwitchAnt.js +0 -40
  135. package/lib/mu/TabBox.d.ts +0 -54
  136. package/lib/mu/TabBox.js +0 -31
  137. package/lib/mu/TableEx.d.ts +0 -66
  138. package/lib/mu/TableEx.js +0 -271
  139. package/lib/mu/TextFieldEx.d.ts +0 -101
  140. package/lib/mu/TextFieldEx.js +0 -127
  141. package/lib/mu/Tiplist.d.ts +0 -18
  142. package/lib/mu/Tiplist.js +0 -158
  143. package/lib/mu/TooltipClick.d.ts +0 -15
  144. package/lib/mu/TooltipClick.js +0 -40
  145. package/lib/mu/UserAvatar.d.ts +0 -24
  146. package/lib/mu/UserAvatar.js +0 -25
  147. package/lib/mu/UserAvatarEditor.d.ts +0 -53
  148. package/lib/mu/UserAvatarEditor.js +0 -129
  149. package/lib/mu/pages/CommonPage.d.ts +0 -11
  150. package/lib/mu/pages/CommonPage.js +0 -60
  151. package/lib/mu/pages/CommonPageProps.d.ts +0 -60
  152. package/lib/mu/pages/CommonPageProps.js +0 -1
  153. package/lib/mu/pages/DataGridPage.d.ts +0 -9
  154. package/lib/mu/pages/DataGridPage.js +0 -81
  155. package/lib/mu/pages/DataGridPageProps.d.ts +0 -17
  156. package/lib/mu/pages/DataGridPageProps.js +0 -1
  157. package/lib/mu/pages/EditPage.d.ts +0 -33
  158. package/lib/mu/pages/EditPage.js +0 -29
  159. package/lib/mu/pages/FixedListPage.d.ts +0 -15
  160. package/lib/mu/pages/FixedListPage.js +0 -72
  161. package/lib/mu/pages/ListPage.d.ts +0 -9
  162. package/lib/mu/pages/ListPage.js +0 -51
  163. package/lib/mu/pages/ListPageProps.d.ts +0 -7
  164. package/lib/mu/pages/ListPageProps.js +0 -1
  165. package/lib/mu/pages/ResponsivePage.d.ts +0 -9
  166. package/lib/mu/pages/ResponsivePage.js +0 -45
  167. package/lib/mu/pages/ResponsivePageProps.d.ts +0 -39
  168. package/lib/mu/pages/ResponsivePageProps.js +0 -1
  169. package/lib/mu/pages/SearchPageProps.d.ts +0 -30
  170. package/lib/mu/pages/SearchPageProps.js +0 -1
  171. package/lib/mu/pages/TablePage.d.ts +0 -9
  172. package/lib/mu/pages/TablePage.js +0 -71
  173. package/lib/mu/pages/TablePageProps.d.ts +0 -7
  174. package/lib/mu/pages/TablePageProps.js +0 -1
  175. package/lib/mu/pages/ViewPage.d.ts +0 -66
  176. package/lib/mu/pages/ViewPage.js +0 -105
  177. package/lib/mu/texts/DateText.d.ts +0 -34
  178. package/lib/mu/texts/DateText.js +0 -25
  179. package/lib/mu/texts/MoneyText.d.ts +0 -21
  180. package/lib/mu/texts/MoneyText.js +0 -14
  181. package/lib/mu/texts/NumberText.d.ts +0 -25
  182. package/lib/mu/texts/NumberText.js +0 -14
  183. package/src/app/CommonApp.ts +0 -225
  184. package/src/app/IServiceAppSettings.ts +0 -13
  185. package/src/app/IServicePage.ts +0 -6
  186. package/src/app/IServiceUser.ts +0 -17
  187. package/src/app/ISmartERPUser.ts +0 -16
  188. package/src/app/Labels.ts +0 -77
  189. package/src/app/ReactApp.ts +0 -500
  190. package/src/app/ServiceApp.ts +0 -353
  191. package/src/components/ShowDataComparison.tsx +0 -108
  192. package/src/mu/AuditDisplay.tsx +0 -117
  193. package/src/mu/AutocompleteExtendedProps.ts +0 -83
  194. package/src/mu/BackButton.tsx +0 -55
  195. package/src/mu/BridgeCloseButton.tsx +0 -69
  196. package/src/mu/ButtonLink.tsx +0 -32
  197. package/src/mu/ComboBox.tsx +0 -251
  198. package/src/mu/CountdownButton.tsx +0 -119
  199. package/src/mu/CustomFabProps.ts +0 -32
  200. package/src/mu/DataGridEx.tsx +0 -712
  201. package/src/mu/DataGridRenderers.tsx +0 -140
  202. package/src/mu/DialogButton.tsx +0 -163
  203. package/src/mu/DraggablePaperComponent.tsx +0 -19
  204. package/src/mu/EmailInput.tsx +0 -24
  205. package/src/mu/FabBox.tsx +0 -51
  206. package/src/mu/FlexBox.tsx +0 -20
  207. package/src/mu/GridDataFormat.tsx +0 -77
  208. package/src/mu/GridMethodRef.ts +0 -12
  209. package/src/mu/IconButtonLink.tsx +0 -29
  210. package/src/mu/InputField.tsx +0 -82
  211. package/src/mu/ItemList.tsx +0 -204
  212. package/src/mu/ListItemRightIcon.tsx +0 -9
  213. package/src/mu/ListMoreDisplay.tsx +0 -205
  214. package/src/mu/LoadingButton.tsx +0 -75
  215. package/src/mu/MUGlobal.ts +0 -220
  216. package/src/mu/MaskInput.tsx +0 -107
  217. package/src/mu/MobileListItemRenderer.tsx +0 -79
  218. package/src/mu/MoreFab.tsx +0 -211
  219. package/src/mu/NotifierMU.tsx +0 -654
  220. package/src/mu/NotifierPromptProps.ts +0 -26
  221. package/src/mu/OptionGroup.tsx +0 -223
  222. package/src/mu/PList.tsx +0 -27
  223. package/src/mu/ProgressCount.tsx +0 -166
  224. package/src/mu/PullToRefreshUI.tsx +0 -21
  225. package/src/mu/RLink.tsx +0 -64
  226. package/src/mu/ResponsibleContainer.tsx +0 -394
  227. package/src/mu/ScrollTopFab.tsx +0 -34
  228. package/src/mu/ScrollerListEx.tsx +0 -387
  229. package/src/mu/SearchBar.tsx +0 -398
  230. package/src/mu/SearchField.tsx +0 -82
  231. package/src/mu/SearchOptionGroup.tsx +0 -31
  232. package/src/mu/SelectBool.tsx +0 -33
  233. package/src/mu/SelectEx.tsx +0 -290
  234. package/src/mu/Switch.tsx +0 -94
  235. package/src/mu/SwitchAnt.tsx +0 -95
  236. package/src/mu/TabBox.tsx +0 -118
  237. package/src/mu/TableEx.tsx +0 -560
  238. package/src/mu/TextFieldEx.tsx +0 -250
  239. package/src/mu/Tiplist.tsx +0 -304
  240. package/src/mu/TooltipClick.tsx +0 -84
  241. package/src/mu/UserAvatar.tsx +0 -64
  242. package/src/mu/UserAvatarEditor.tsx +0 -287
  243. package/src/mu/pages/CommonPage.tsx +0 -128
  244. package/src/mu/pages/CommonPageProps.ts +0 -71
  245. package/src/mu/pages/DataGridPage.tsx +0 -137
  246. package/src/mu/pages/DataGridPageProps.ts +0 -24
  247. package/src/mu/pages/EditPage.tsx +0 -114
  248. package/src/mu/pages/FixedListPage.tsx +0 -135
  249. package/src/mu/pages/ListPage.tsx +0 -87
  250. package/src/mu/pages/ListPageProps.ts +0 -12
  251. package/src/mu/pages/ResponsivePage.tsx +0 -68
  252. package/src/mu/pages/ResponsivePageProps.ts +0 -57
  253. package/src/mu/pages/SearchPageProps.ts +0 -39
  254. package/src/mu/pages/TablePage.tsx +0 -120
  255. package/src/mu/pages/TablePageProps.ts +0 -12
  256. package/src/mu/pages/ViewPage.tsx +0 -285
  257. package/src/mu/texts/DateText.tsx +0 -74
  258. package/src/mu/texts/MoneyText.tsx +0 -49
  259. package/src/mu/texts/NumberText.tsx +0 -40
@@ -1,394 +0,0 @@
1
- import { DataTypes, IdDefaultType } from '@etsoo/shared';
2
- import { Box, Stack, SxProps, Theme } from '@mui/material';
3
- import React from 'react';
4
- import { ListChildComponentProps } from 'react-window';
5
- import { Labels } from '../app/Labels';
6
- import { ReactUtils } from '../app/ReactUtils';
7
- import { GridColumn } from '../components/GridColumn';
8
- import {
9
- GridDataGet,
10
- GridJsonData,
11
- GridLoadDataProps
12
- } from '../components/GridLoader';
13
- import useCombinedRefs from '../uses/useCombinedRefs';
14
- import { useDimensions } from '../uses/useDimensions';
15
- import {
16
- DataGridEx,
17
- DataGridExCalColumns,
18
- DataGridExProps
19
- } from './DataGridEx';
20
- import { GridMethodRef } from './GridMethodRef';
21
- import { MUGlobal } from './MUGlobal';
22
- import { PullToRefreshUI } from './PullToRefreshUI';
23
- import {
24
- ScrollerListEx,
25
- ScrollerListExInnerItemRendererProps,
26
- ScrollerListExItemSize
27
- } from './ScrollerListEx';
28
- import { SearchBar } from './SearchBar';
29
-
30
- /**
31
- * ResponsibleContainer props
32
- */
33
- export type ResponsibleContainerProps<
34
- T extends object,
35
- F extends DataTypes.BasicTemplate = DataTypes.BasicTemplate,
36
- D extends DataTypes.Keys<T> = IdDefaultType<T>
37
- > = Omit<
38
- DataGridExProps<T, D>,
39
- 'height' | 'itemKey' | 'loadData' | 'mRef' | 'onScroll' | 'onItemsRendered'
40
- > & {
41
- /**
42
- * Height will be deducted
43
- * @param height Current calcuated height
44
- */
45
- adjustHeight?: (height: number) => number;
46
-
47
- /**
48
- * Columns
49
- */
50
- columns: GridColumn<T>[];
51
-
52
- /**
53
- * Container box SX (dataGrid determines the case)
54
- */
55
- containerBoxSx?: (
56
- paddings: Record<string, string | number>,
57
- hasFields: boolean,
58
- dataGrid?: boolean
59
- ) => SxProps<Theme>;
60
-
61
- /**
62
- * Min width to show Datagrid
63
- */
64
- dataGridMinWidth?: number;
65
-
66
- /**
67
- * Search fields
68
- */
69
- fields?: React.ReactElement[];
70
-
71
- /**
72
- * Search field template
73
- */
74
- fieldTemplate?: F;
75
-
76
- /**
77
- * Grid height
78
- */
79
- height?: number;
80
-
81
- /**
82
- * Inner item renderer
83
- */
84
- innerItemRenderer: (
85
- props: ScrollerListExInnerItemRendererProps<T>
86
- ) => React.ReactNode;
87
-
88
- /**
89
- * Item renderer
90
- */
91
- itemRenderer?: (props: ListChildComponentProps<T>) => React.ReactElement;
92
-
93
- /**
94
- * Item size, a function indicates its a variable size list
95
- */
96
- itemSize: ScrollerListExItemSize;
97
-
98
- /**
99
- * Load data callback
100
- */
101
- loadData: (
102
- data: GridJsonData & DataTypes.BasicTemplateType<F>
103
- ) => PromiseLike<T[] | null | undefined>;
104
-
105
- /**
106
- * Methods
107
- */
108
- mRef?: React.MutableRefObject<GridMethodRef | undefined>;
109
-
110
- /**
111
- * Element ready callback
112
- */
113
- elementReady?: (element: HTMLElement, isDataGrid: boolean) => void;
114
-
115
- /**
116
- * Paddings
117
- */
118
- paddings?: Record<string, string | number>;
119
-
120
- /**
121
- * Pull to refresh data
122
- */
123
- pullToRefresh?: boolean;
124
-
125
- /**
126
- * Quick action for double click or click under mobile
127
- */
128
- quickAction?: (data: T) => void;
129
-
130
- /**
131
- * Size ready to read miliseconds span
132
- */
133
- sizeReadyMiliseconds?: number;
134
- };
135
-
136
- interface LocalRefs {
137
- rect?: DOMRect;
138
- ref?: GridMethodRef;
139
- mounted?: boolean;
140
- }
141
-
142
- function defaultContainerBoxSx(
143
- paddings: object,
144
- hasField: boolean,
145
- _dataGrid?: boolean
146
- ): SxProps<Theme> {
147
- const half = MUGlobal.half(paddings);
148
- return {
149
- '& .SearchBox': {
150
- marginBottom: hasField ? half : 0
151
- }
152
- };
153
- }
154
-
155
- /**
156
- * Responsible container
157
- * @param props Props
158
- * @returns Layout
159
- */
160
- export function ResponsibleContainer<
161
- T extends object,
162
- F extends DataTypes.BasicTemplate = DataTypes.BasicTemplate,
163
- D extends DataTypes.Keys<T> = IdDefaultType<T>
164
- >(props: ResponsibleContainerProps<T, F, D>) {
165
- // Destruct
166
- const {
167
- adjustHeight,
168
- columns,
169
- containerBoxSx = defaultContainerBoxSx,
170
- dataGridMinWidth = Math.max(576, DataGridExCalColumns(columns).total),
171
- elementReady,
172
- fields,
173
- fieldTemplate,
174
- height,
175
- loadData,
176
- mRef,
177
- paddings = MUGlobal.pagePaddings,
178
- pullToRefresh = true,
179
- quickAction,
180
- sizeReadyMiliseconds = 0,
181
- ...rest
182
- } = props;
183
-
184
- // Labels
185
- const labels = Labels.CommonPage;
186
-
187
- // Refs
188
- const refs = React.useRef<LocalRefs>({});
189
- const state = refs.current;
190
-
191
- const mRefs = useCombinedRefs(mRef, (ref: GridMethodRef) => {
192
- if (ref == null) return;
193
- state.ref = ref;
194
- });
195
-
196
- // Update mounted state
197
- React.useEffect(() => {
198
- return () => {
199
- state.mounted = false;
200
- };
201
- }, []);
202
-
203
- // Has fields
204
- const hasFields = fields != null && fields.length > 0;
205
-
206
- // Load data
207
- const localLoadData = (props: GridLoadDataProps) => {
208
- state.mounted = true;
209
- const data = GridDataGet(props, fieldTemplate);
210
- return loadData(data);
211
- };
212
-
213
- // On submit callback
214
- const onSubmit = (data: FormData, _reset: boolean) => {
215
- if (data == null || state.ref == null) return;
216
- state.ref.reset({ data });
217
- };
218
-
219
- // Watch container
220
- const { dimensions } = useDimensions(
221
- 1,
222
- undefined,
223
- sizeReadyMiliseconds,
224
- (_preRect, rect) => {
225
- // Check
226
- if (rect == null) return true;
227
-
228
- // Last rect
229
- const lastRect = state.rect;
230
-
231
- // 32 = scroll bar width
232
- if (
233
- lastRect != null &&
234
- state.mounted !== true &&
235
- Math.abs(rect.width - lastRect.width) <= 32 &&
236
- Math.abs(rect.height - lastRect.height) <= 32
237
- )
238
- return true;
239
-
240
- // Hold the new rect
241
- state.rect = rect;
242
-
243
- return false;
244
- }
245
- );
246
-
247
- // Rect
248
- const rect = dimensions[0][2];
249
-
250
- // Create list
251
- const [list, showDataGrid] = (() => {
252
- // No layout
253
- if (rect == null) return [null, undefined];
254
-
255
- // Width
256
- const width = rect.width;
257
-
258
- // Show DataGrid or List dependng on width
259
- const showDataGrid = width >= dataGridMinWidth;
260
-
261
- // Height
262
- let heightLocal: number;
263
- if (height != null) {
264
- heightLocal = height;
265
- } else {
266
- // Auto calculation
267
- heightLocal =
268
- document.documentElement.clientHeight -
269
- Math.round(rect.bottom + 1);
270
-
271
- const style = window.getComputedStyle(dimensions[0][1]!);
272
- const boxMargin = parseFloat(style.marginBottom);
273
- if (!isNaN(boxMargin)) heightLocal -= 3 * boxMargin; // 1 - Box, 2 - Page bottom
274
-
275
- if (adjustHeight != null) {
276
- heightLocal -= adjustHeight(heightLocal);
277
- }
278
- }
279
-
280
- if (showDataGrid) {
281
- // Delete
282
- delete rest.itemRenderer;
283
-
284
- return [
285
- <Box className="DataGridBox">
286
- <DataGridEx<T, D>
287
- autoLoad={!hasFields}
288
- height={heightLocal}
289
- width={rect.width}
290
- loadData={localLoadData}
291
- mRef={mRefs}
292
- onDoubleClick={(_, data) =>
293
- quickAction && quickAction(data)
294
- }
295
- outerRef={(element?: HTMLDivElement) => {
296
- if (element != null && elementReady)
297
- elementReady(element, true);
298
- }}
299
- columns={columns}
300
- {...rest}
301
- />
302
- </Box>,
303
- true
304
- ];
305
- }
306
-
307
- // Delete
308
- delete rest.checkable;
309
- delete rest.borderRowsCount;
310
- delete rest.bottomHeight;
311
- delete rest.footerItemRenderer;
312
- delete rest.headerHeight;
313
- delete rest.hideFooter;
314
- delete rest.hoverColor;
315
- delete rest.selectable;
316
-
317
- return [
318
- <Box className="ListBox" sx={{ height: heightLocal }}>
319
- <ScrollerListEx<T, D>
320
- autoLoad={!hasFields}
321
- height={heightLocal}
322
- loadData={localLoadData}
323
- mRef={mRefs}
324
- onClick={(event, data) =>
325
- quickAction &&
326
- ReactUtils.isSafeClick(event) &&
327
- quickAction(data)
328
- }
329
- oRef={(element) => {
330
- if (element != null && elementReady)
331
- elementReady(element, false);
332
- }}
333
- {...rest}
334
- />
335
- </Box>,
336
- false
337
- ];
338
- })();
339
-
340
- const searchBar = React.useMemo(() => {
341
- if (!hasFields || showDataGrid == null) return;
342
- return (
343
- <SearchBar
344
- fields={fields}
345
- onSubmit={onSubmit}
346
- className={`searchBar${showDataGrid ? 'Grid' : 'List'}`}
347
- />
348
- );
349
- }, [showDataGrid, hasFields]);
350
-
351
- // Pull container
352
- const pullContainer =
353
- showDataGrid == null
354
- ? undefined
355
- : showDataGrid
356
- ? '.DataGridEx-Body'
357
- : '.ScrollerListEx-Body';
358
-
359
- // Layout
360
- return (
361
- <Box
362
- sx={
363
- containerBoxSx == null
364
- ? undefined
365
- : containerBoxSx(paddings, hasFields, showDataGrid)
366
- }
367
- >
368
- <Stack>
369
- <Box
370
- ref={dimensions[0][0]}
371
- className="SearchBox"
372
- sx={{ height: hasFields ? 40 : 0 }}
373
- >
374
- {searchBar}
375
- </Box>
376
- {list}
377
- </Stack>
378
- {pullToRefresh && pullContainer && (
379
- <PullToRefreshUI
380
- mainElement={pullContainer}
381
- triggerElement={pullContainer}
382
- instructionsPullToRefresh={labels.pullToRefresh}
383
- instructionsReleaseToRefresh={labels.releaseToRefresh}
384
- instructionsRefreshing={labels.refreshing}
385
- onRefresh={() => state.ref?.reset()}
386
- shouldPullToRefresh={() => {
387
- const container = document.querySelector(pullContainer);
388
- return !container?.scrollTop;
389
- }}
390
- />
391
- )}
392
- </Box>
393
- );
394
- }
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { Fab, useScrollTrigger, Zoom } from '@mui/material';
3
- import VerticalAlignTopIcon from '@mui/icons-material/VerticalAlignTop';
4
- import { CustomFabProps } from './CustomFabProps';
5
-
6
- /**
7
- * Scroll to top fab
8
- * @returns Component
9
- */
10
- export function ScrollTopFab(props: CustomFabProps) {
11
- // Destruct
12
- const { color, size, target, title } = props;
13
-
14
- // Scroll trigger
15
- const trigger = useScrollTrigger({
16
- target,
17
- disableHysteresis: true,
18
- threshold: 120
19
- });
20
-
21
- // Icon click handler
22
- // behavior: 'smooth'
23
- const handleClick = () => {
24
- target.scrollTo({ top: 0 });
25
- };
26
-
27
- return (
28
- <Zoom in={trigger}>
29
- <Fab color={color} size={size} title={title} onClick={handleClick}>
30
- <VerticalAlignTopIcon />
31
- </Fab>
32
- </Zoom>
33
- );
34
- }