@etsoo/react 1.5.78 → 1.5.81

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/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 +6 -6
  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/uses/useWindowScroll.d.ts +10 -0
  13. package/lib/uses/useWindowScroll.js +46 -0
  14. package/lib/uses/useWindowSize.js +11 -5
  15. package/package.json +9 -21
  16. package/src/{mu → components}/DnDList.tsx +11 -34
  17. package/src/components/GridMethodRef.ts +12 -0
  18. package/src/components/ScrollerGrid.tsx +6 -6
  19. package/src/components/ScrollerList.tsx +5 -3
  20. package/src/index.ts +2 -78
  21. package/src/notifier/Notifier.ts +2 -3
  22. package/src/uses/useWindowScroll.ts +60 -0
  23. package/src/uses/useWindowSize.ts +14 -5
  24. package/__tests__/mu/MUGlobalTests.tsx +0 -58
  25. package/__tests__/mu/NotifierMUTests.tsx +0 -213
  26. package/lib/app/CommonApp.d.ts +0 -39
  27. package/lib/app/CommonApp.js +0 -149
  28. package/lib/app/IServiceAppSettings.d.ts +0 -11
  29. package/lib/app/IServiceAppSettings.js +0 -1
  30. package/lib/app/IServicePage.d.ts +0 -6
  31. package/lib/app/IServicePage.js +0 -1
  32. package/lib/app/IServiceUser.d.ts +0 -14
  33. package/lib/app/IServiceUser.js +0 -1
  34. package/lib/app/ISmartERPUser.d.ts +0 -14
  35. package/lib/app/ISmartERPUser.js +0 -1
  36. package/lib/app/Labels.d.ts +0 -65
  37. package/lib/app/Labels.js +0 -62
  38. package/lib/app/ReactApp.d.ts +0 -194
  39. package/lib/app/ReactApp.js +0 -298
  40. package/lib/app/ServiceApp.d.ts +0 -78
  41. package/lib/app/ServiceApp.js +0 -244
  42. package/lib/components/ShowDataComparison.d.ts +0 -20
  43. package/lib/components/ShowDataComparison.js +0 -60
  44. package/lib/mu/AuditDisplay.d.ts +0 -33
  45. package/lib/mu/AuditDisplay.js +0 -52
  46. package/lib/mu/AutocompleteExtendedProps.d.ts +0 -66
  47. package/lib/mu/AutocompleteExtendedProps.js +0 -1
  48. package/lib/mu/BackButton.d.ts +0 -13
  49. package/lib/mu/BackButton.js +0 -33
  50. package/lib/mu/BridgeCloseButton.d.ts +0 -23
  51. package/lib/mu/BridgeCloseButton.js +0 -32
  52. package/lib/mu/ButtonLink.d.ts +0 -17
  53. package/lib/mu/ButtonLink.js +0 -19
  54. package/lib/mu/ComboBox.d.ts +0 -40
  55. package/lib/mu/ComboBox.js +0 -108
  56. package/lib/mu/CountdownButton.d.ts +0 -23
  57. package/lib/mu/CountdownButton.js +0 -81
  58. package/lib/mu/CustomFabProps.d.ts +0 -27
  59. package/lib/mu/CustomFabProps.js +0 -1
  60. package/lib/mu/DataGridEx.d.ts +0 -96
  61. package/lib/mu/DataGridEx.js +0 -331
  62. package/lib/mu/DataGridRenderers.d.ts +0 -22
  63. package/lib/mu/DataGridRenderers.js +0 -99
  64. package/lib/mu/DialogButton.d.ts +0 -54
  65. package/lib/mu/DialogButton.js +0 -45
  66. package/lib/mu/DraggablePaperComponent.d.ts +0 -8
  67. package/lib/mu/DraggablePaperComponent.js +0 -12
  68. package/lib/mu/EmailInput.d.ts +0 -11
  69. package/lib/mu/EmailInput.js +0 -15
  70. package/lib/mu/FabBox.d.ts +0 -21
  71. package/lib/mu/FabBox.js +0 -31
  72. package/lib/mu/FlexBox.d.ts +0 -14
  73. package/lib/mu/FlexBox.js +0 -18
  74. package/lib/mu/GridDataFormat.d.ts +0 -10
  75. package/lib/mu/GridDataFormat.js +0 -43
  76. package/lib/mu/GridMethodRef.d.ts +0 -11
  77. package/lib/mu/IconButtonLink.d.ts +0 -17
  78. package/lib/mu/IconButtonLink.js +0 -16
  79. package/lib/mu/InputField.d.ts +0 -21
  80. package/lib/mu/InputField.js +0 -39
  81. package/lib/mu/ItemList.d.ts +0 -55
  82. package/lib/mu/ItemList.js +0 -77
  83. package/lib/mu/ListItemRightIcon.d.ts +0 -4
  84. package/lib/mu/ListItemRightIcon.js +0 -8
  85. package/lib/mu/ListMoreDisplay.d.ts +0 -35
  86. package/lib/mu/ListMoreDisplay.js +0 -99
  87. package/lib/mu/LoadingButton.d.ts +0 -16
  88. package/lib/mu/LoadingButton.js +0 -41
  89. package/lib/mu/MUGlobal.d.ts +0 -102
  90. package/lib/mu/MUGlobal.js +0 -184
  91. package/lib/mu/MaskInput.d.ts +0 -34
  92. package/lib/mu/MaskInput.js +0 -43
  93. package/lib/mu/MobileListItemRenderer.d.ts +0 -17
  94. package/lib/mu/MobileListItemRenderer.js +0 -35
  95. package/lib/mu/MoreFab.d.ts +0 -45
  96. package/lib/mu/MoreFab.js +0 -95
  97. package/lib/mu/NotifierMU.d.ts +0 -47
  98. package/lib/mu/NotifierMU.js +0 -387
  99. package/lib/mu/NotifierPromptProps.d.ts +0 -22
  100. package/lib/mu/NotifierPromptProps.js +0 -1
  101. package/lib/mu/OptionGroup.d.ts +0 -62
  102. package/lib/mu/OptionGroup.js +0 -81
  103. package/lib/mu/PList.d.ts +0 -15
  104. package/lib/mu/PList.js +0 -12
  105. package/lib/mu/ProgressCount.d.ts +0 -44
  106. package/lib/mu/ProgressCount.js +0 -79
  107. package/lib/mu/PullToRefreshUI.d.ts +0 -9
  108. package/lib/mu/PullToRefreshUI.js +0 -18
  109. package/lib/mu/RLink.d.ts +0 -14
  110. package/lib/mu/RLink.js +0 -37
  111. package/lib/mu/ResponsibleContainer.d.ts +0 -89
  112. package/lib/mu/ResponsibleContainer.js +0 -159
  113. package/lib/mu/ScrollTopFab.d.ts +0 -7
  114. package/lib/mu/ScrollTopFab.js +0 -25
  115. package/lib/mu/ScrollerListEx.d.ts +0 -81
  116. package/lib/mu/ScrollerListEx.js +0 -167
  117. package/lib/mu/SearchBar.d.ts +0 -29
  118. package/lib/mu/SearchBar.js +0 -262
  119. package/lib/mu/SearchField.d.ts +0 -21
  120. package/lib/mu/SearchField.js +0 -39
  121. package/lib/mu/SearchOptionGroup.d.ts +0 -9
  122. package/lib/mu/SearchOptionGroup.js +0 -14
  123. package/lib/mu/SelectBool.d.ts +0 -14
  124. package/lib/mu/SelectBool.js +0 -22
  125. package/lib/mu/SelectEx.d.ts +0 -54
  126. package/lib/mu/SelectEx.js +0 -156
  127. package/lib/mu/Switch.d.ts +0 -29
  128. package/lib/mu/Switch.js +0 -34
  129. package/lib/mu/SwitchAnt.d.ts +0 -25
  130. package/lib/mu/SwitchAnt.js +0 -40
  131. package/lib/mu/TabBox.d.ts +0 -54
  132. package/lib/mu/TabBox.js +0 -31
  133. package/lib/mu/TableEx.d.ts +0 -68
  134. package/lib/mu/TableEx.js +0 -271
  135. package/lib/mu/TextFieldEx.d.ts +0 -101
  136. package/lib/mu/TextFieldEx.js +0 -127
  137. package/lib/mu/Tiplist.d.ts +0 -18
  138. package/lib/mu/Tiplist.js +0 -158
  139. package/lib/mu/TooltipClick.d.ts +0 -15
  140. package/lib/mu/TooltipClick.js +0 -40
  141. package/lib/mu/UserAvatar.d.ts +0 -24
  142. package/lib/mu/UserAvatar.js +0 -25
  143. package/lib/mu/UserAvatarEditor.d.ts +0 -53
  144. package/lib/mu/UserAvatarEditor.js +0 -129
  145. package/lib/mu/pages/CommonPage.d.ts +0 -11
  146. package/lib/mu/pages/CommonPage.js +0 -60
  147. package/lib/mu/pages/CommonPageProps.d.ts +0 -60
  148. package/lib/mu/pages/CommonPageProps.js +0 -1
  149. package/lib/mu/pages/DataGridPage.d.ts +0 -9
  150. package/lib/mu/pages/DataGridPage.js +0 -81
  151. package/lib/mu/pages/DataGridPageProps.d.ts +0 -17
  152. package/lib/mu/pages/DataGridPageProps.js +0 -1
  153. package/lib/mu/pages/EditPage.d.ts +0 -33
  154. package/lib/mu/pages/EditPage.js +0 -29
  155. package/lib/mu/pages/FixedListPage.d.ts +0 -15
  156. package/lib/mu/pages/FixedListPage.js +0 -72
  157. package/lib/mu/pages/ListPage.d.ts +0 -9
  158. package/lib/mu/pages/ListPage.js +0 -51
  159. package/lib/mu/pages/ListPageProps.d.ts +0 -7
  160. package/lib/mu/pages/ListPageProps.js +0 -1
  161. package/lib/mu/pages/ResponsivePage.d.ts +0 -9
  162. package/lib/mu/pages/ResponsivePage.js +0 -45
  163. package/lib/mu/pages/ResponsivePageProps.d.ts +0 -39
  164. package/lib/mu/pages/ResponsivePageProps.js +0 -1
  165. package/lib/mu/pages/SearchPageProps.d.ts +0 -30
  166. package/lib/mu/pages/SearchPageProps.js +0 -1
  167. package/lib/mu/pages/TablePage.d.ts +0 -9
  168. package/lib/mu/pages/TablePage.js +0 -71
  169. package/lib/mu/pages/TablePageProps.d.ts +0 -7
  170. package/lib/mu/pages/TablePageProps.js +0 -1
  171. package/lib/mu/pages/ViewPage.d.ts +0 -66
  172. package/lib/mu/pages/ViewPage.js +0 -105
  173. package/lib/mu/texts/DateText.d.ts +0 -34
  174. package/lib/mu/texts/DateText.js +0 -25
  175. package/lib/mu/texts/MoneyText.d.ts +0 -21
  176. package/lib/mu/texts/MoneyText.js +0 -14
  177. package/lib/mu/texts/NumberText.d.ts +0 -25
  178. package/lib/mu/texts/NumberText.js +0 -14
  179. package/src/app/CommonApp.ts +0 -225
  180. package/src/app/IServiceAppSettings.ts +0 -13
  181. package/src/app/IServicePage.ts +0 -6
  182. package/src/app/IServiceUser.ts +0 -17
  183. package/src/app/ISmartERPUser.ts +0 -16
  184. package/src/app/Labels.ts +0 -77
  185. package/src/app/ReactApp.ts +0 -500
  186. package/src/app/ServiceApp.ts +0 -353
  187. package/src/components/ShowDataComparison.tsx +0 -108
  188. package/src/mu/AuditDisplay.tsx +0 -117
  189. package/src/mu/AutocompleteExtendedProps.ts +0 -84
  190. package/src/mu/BackButton.tsx +0 -55
  191. package/src/mu/BridgeCloseButton.tsx +0 -69
  192. package/src/mu/ButtonLink.tsx +0 -32
  193. package/src/mu/ComboBox.tsx +0 -244
  194. package/src/mu/CountdownButton.tsx +0 -119
  195. package/src/mu/CustomFabProps.ts +0 -32
  196. package/src/mu/DataGridEx.tsx +0 -712
  197. package/src/mu/DataGridRenderers.tsx +0 -140
  198. package/src/mu/DialogButton.tsx +0 -163
  199. package/src/mu/DraggablePaperComponent.tsx +0 -19
  200. package/src/mu/EmailInput.tsx +0 -24
  201. package/src/mu/FabBox.tsx +0 -51
  202. package/src/mu/FlexBox.tsx +0 -20
  203. package/src/mu/GridDataFormat.tsx +0 -77
  204. package/src/mu/GridMethodRef.ts +0 -12
  205. package/src/mu/IconButtonLink.tsx +0 -29
  206. package/src/mu/InputField.tsx +0 -82
  207. package/src/mu/ItemList.tsx +0 -201
  208. package/src/mu/ListItemRightIcon.tsx +0 -9
  209. package/src/mu/ListMoreDisplay.tsx +0 -205
  210. package/src/mu/LoadingButton.tsx +0 -75
  211. package/src/mu/MUGlobal.ts +0 -220
  212. package/src/mu/MaskInput.tsx +0 -107
  213. package/src/mu/MobileListItemRenderer.tsx +0 -79
  214. package/src/mu/MoreFab.tsx +0 -211
  215. package/src/mu/NotifierMU.tsx +0 -654
  216. package/src/mu/NotifierPromptProps.ts +0 -26
  217. package/src/mu/OptionGroup.tsx +0 -218
  218. package/src/mu/PList.tsx +0 -27
  219. package/src/mu/ProgressCount.tsx +0 -166
  220. package/src/mu/PullToRefreshUI.tsx +0 -21
  221. package/src/mu/RLink.tsx +0 -64
  222. package/src/mu/ResponsibleContainer.tsx +0 -394
  223. package/src/mu/ScrollTopFab.tsx +0 -34
  224. package/src/mu/ScrollerListEx.tsx +0 -387
  225. package/src/mu/SearchBar.tsx +0 -398
  226. package/src/mu/SearchField.tsx +0 -82
  227. package/src/mu/SearchOptionGroup.tsx +0 -25
  228. package/src/mu/SelectBool.tsx +0 -40
  229. package/src/mu/SelectEx.tsx +0 -285
  230. package/src/mu/Switch.tsx +0 -94
  231. package/src/mu/SwitchAnt.tsx +0 -95
  232. package/src/mu/TabBox.tsx +0 -118
  233. package/src/mu/TableEx.tsx +0 -561
  234. package/src/mu/TextFieldEx.tsx +0 -250
  235. package/src/mu/Tiplist.tsx +0 -304
  236. package/src/mu/TooltipClick.tsx +0 -84
  237. package/src/mu/UserAvatar.tsx +0 -64
  238. package/src/mu/UserAvatarEditor.tsx +0 -287
  239. package/src/mu/pages/CommonPage.tsx +0 -128
  240. package/src/mu/pages/CommonPageProps.ts +0 -71
  241. package/src/mu/pages/DataGridPage.tsx +0 -137
  242. package/src/mu/pages/DataGridPageProps.ts +0 -24
  243. package/src/mu/pages/EditPage.tsx +0 -114
  244. package/src/mu/pages/FixedListPage.tsx +0 -134
  245. package/src/mu/pages/ListPage.tsx +0 -86
  246. package/src/mu/pages/ListPageProps.ts +0 -11
  247. package/src/mu/pages/ResponsivePage.tsx +0 -68
  248. package/src/mu/pages/ResponsivePageProps.ts +0 -57
  249. package/src/mu/pages/SearchPageProps.ts +0 -39
  250. package/src/mu/pages/TablePage.tsx +0 -119
  251. package/src/mu/pages/TablePageProps.ts +0 -11
  252. package/src/mu/pages/ViewPage.tsx +0 -285
  253. package/src/mu/texts/DateText.tsx +0 -74
  254. package/src/mu/texts/MoneyText.tsx +0 -49
  255. package/src/mu/texts/NumberText.tsx +0 -40
@@ -1,114 +0,0 @@
1
- import { Button, Grid } from '@mui/material';
2
- import React, { FormEventHandler } from 'react';
3
- import { Labels } from '../../app/Labels';
4
- import { MUGlobal } from '../MUGlobal';
5
- import { CommonPage, CommonPageScrollContainer } from './CommonPage';
6
- import { CommonPageProps } from './CommonPageProps';
7
- import SaveIcon from '@mui/icons-material/Save';
8
- import DeleteIcon from '@mui/icons-material/Delete';
9
- import { BackButton } from '../BackButton';
10
-
11
- /**
12
- * Add / Edit page props
13
- */
14
- export interface EditPageProps extends Omit<CommonPageProps, 'onSubmit'> {
15
- /**
16
- * Is editing
17
- */
18
- isEditing?: boolean;
19
-
20
- /**
21
- * On form submit
22
- */
23
- onSubmit?: FormEventHandler<HTMLFormElement>;
24
-
25
- /**
26
- * On delete callback
27
- */
28
- onDelete?: () => Promise<void> | void;
29
-
30
- /**
31
- * Submit button disabled or not
32
- */
33
- submitDisabled?: boolean;
34
-
35
- /**
36
- * Support back click
37
- * @default true
38
- */
39
- supportBack?: boolean;
40
- }
41
-
42
- /**
43
- * Add / Edit page
44
- * @param props Props
45
- */
46
- export function EditPage(props: EditPageProps) {
47
- // Destruct
48
- const {
49
- children,
50
- isEditing,
51
- onDelete,
52
- onSubmit,
53
- paddings = MUGlobal.pagePaddings,
54
- scrollContainer = CommonPageScrollContainer,
55
- supportBack = true,
56
- submitDisabled = false,
57
- ...rest
58
- } = props;
59
-
60
- // Labels
61
- const labels = Labels.CommonPage;
62
-
63
- return (
64
- <CommonPage
65
- paddings={paddings}
66
- scrollContainer={scrollContainer}
67
- {...rest}
68
- >
69
- <form onSubmit={onSubmit}>
70
- <Grid
71
- container
72
- justifyContent="left"
73
- spacing={paddings}
74
- paddingTop={1}
75
- >
76
- {children}
77
- </Grid>
78
- <Grid
79
- container
80
- position="sticky"
81
- display="flex"
82
- gap={paddings}
83
- sx={{
84
- top: 'auto',
85
- bottom: (theme) =>
86
- MUGlobal.updateWithTheme(paddings, theme.spacing),
87
- paddingTop: paddings
88
- }}
89
- >
90
- {isEditing && onDelete && (
91
- <Button
92
- color="primary"
93
- variant="outlined"
94
- onClick={() => onDelete()}
95
- startIcon={<DeleteIcon color="warning" />}
96
- >
97
- {labels.delete}
98
- </Button>
99
- )}
100
- <Button
101
- variant="contained"
102
- type="submit"
103
- startIcon={<SaveIcon />}
104
- sx={{ flexGrow: 1 }}
105
- disabled={submitDisabled}
106
- >
107
- {labels.save}
108
- </Button>
109
- {supportBack && <BackButton title={labels.back} />}
110
- </Grid>
111
- </form>
112
- </CommonPage>
113
- );
114
- }
@@ -1,134 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { Box, Stack } from '@mui/material';
3
- import React from 'react';
4
- import { GridDataGet, GridLoadDataProps } from '../../components/GridLoader';
5
- import { ScrollerListForwardRef } from '../../components/ScrollerList';
6
- import useCombinedRefs from '../../uses/useCombinedRefs';
7
- import { useDimensions } from '../../uses/useDimensions';
8
- import { MUGlobal } from '../MUGlobal';
9
- import { ScrollerListEx } from '../ScrollerListEx';
10
- import { SearchBar } from '../SearchBar';
11
- import { CommonPage } from './CommonPage';
12
- import { ListPageProps } from './ListPageProps';
13
-
14
- /**
15
- * Fixed height list page
16
- * @param props Props
17
- * @returns Component
18
- */
19
- export function FixedListPage<
20
- T extends object,
21
- F extends DataTypes.BasicTemplate = DataTypes.BasicTemplate
22
- >(
23
- props: ListPageProps<T, F> & {
24
- /**
25
- * Height will be deducted
26
- * @param height Current calcuated height
27
- */
28
- adjustHeight?: (height: number) => number;
29
- }
30
- ) {
31
- // Destruct
32
- const {
33
- adjustHeight,
34
- fields,
35
- fieldTemplate,
36
- loadData,
37
- mRef,
38
- sizeReadyMiliseconds = 0,
39
- pageProps = {},
40
- ...rest
41
- } = props;
42
-
43
- pageProps.paddings ??= MUGlobal.pagePaddings;
44
-
45
- // States
46
- const [states] = React.useState<{
47
- data?: FormData;
48
- ref?: ScrollerListForwardRef;
49
- }>({});
50
-
51
- // Scroll container
52
- const [scrollContainer, updateScrollContainer] = React.useState<
53
- HTMLElement | undefined
54
- >();
55
-
56
- const refs = useCombinedRefs(mRef, (ref: ScrollerListForwardRef) => {
57
- if (ref == null) return;
58
-
59
- const first = states.ref == null;
60
-
61
- states.ref = ref;
62
-
63
- if (first) reset();
64
- });
65
-
66
- const reset = () => {
67
- if (states.data == null || states.ref == null) return;
68
- states.ref.reset({ data: states.data });
69
- };
70
-
71
- // On submit callback
72
- const onSubmit = (data: FormData, _reset: boolean) => {
73
- states.data = data;
74
- reset();
75
- };
76
-
77
- const localLoadData = (props: GridLoadDataProps) => {
78
- const data = GridDataGet(props, fieldTemplate);
79
- return loadData(data);
80
- };
81
-
82
- // Watch container
83
- const { dimensions } = useDimensions(1, undefined, sizeReadyMiliseconds);
84
- const rect = dimensions[0][2];
85
- const list = React.useMemo(() => {
86
- if (rect != null && rect.height > 50) {
87
- let height =
88
- document.documentElement.clientHeight -
89
- Math.round(rect.top + rect.height + 1);
90
-
91
- if (adjustHeight != null) {
92
- height -= adjustHeight(height);
93
- }
94
-
95
- return (
96
- <Box
97
- id="list-container"
98
- sx={{
99
- height: height + 'px'
100
- }}
101
- >
102
- <ScrollerListEx<T>
103
- autoLoad={false}
104
- height={height}
105
- loadData={localLoadData}
106
- mRef={refs}
107
- oRef={(element) => {
108
- if (element != null) updateScrollContainer(element);
109
- }}
110
- {...rest}
111
- />
112
- </Box>
113
- );
114
- }
115
- }, [rect]);
116
-
117
- const { paddings, ...pageRest } = pageProps;
118
-
119
- // Layout
120
- return (
121
- <CommonPage
122
- {...pageRest}
123
- paddings={{}}
124
- scrollContainer={scrollContainer}
125
- >
126
- <Stack>
127
- <Box ref={dimensions[0][0]} sx={{ padding: paddings }}>
128
- <SearchBar fields={fields} onSubmit={onSubmit} />
129
- </Box>
130
- {list}
131
- </Stack>
132
- </CommonPage>
133
- );
134
- }
@@ -1,86 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { Box, Stack } from '@mui/material';
3
- import React from 'react';
4
- import { GridDataGet, GridLoadDataProps } from '../../components/GridLoader';
5
- import { ScrollerListForwardRef } from '../../components/ScrollerList';
6
- import useCombinedRefs from '../../uses/useCombinedRefs';
7
- import { MUGlobal } from '../MUGlobal';
8
- import { ScrollerListEx } from '../ScrollerListEx';
9
- import { SearchBar } from '../SearchBar';
10
- import { CommonPage, CommonPageScrollContainer } from './CommonPage';
11
- import { ListPageProps } from './ListPageProps';
12
-
13
- /**
14
- * List page
15
- * @param props Props
16
- * @returns Component
17
- */
18
- export function ListPage<
19
- T extends object,
20
- F extends DataTypes.BasicTemplate = DataTypes.BasicTemplate
21
- >(props: ListPageProps<T, F>) {
22
- // Destruct
23
- const {
24
- fields,
25
- fieldTemplate,
26
- loadData,
27
- mRef,
28
- pageProps = {},
29
- ...rest
30
- } = props;
31
-
32
- pageProps.paddings ??= MUGlobal.pagePaddings;
33
-
34
- // States
35
- const [states] = React.useState<{
36
- data?: FormData;
37
- ref?: ScrollerListForwardRef;
38
- }>({});
39
-
40
- const refs = useCombinedRefs(mRef, (ref: ScrollerListForwardRef) => {
41
- if (ref == null) return;
42
-
43
- const first = states.ref == null;
44
-
45
- states.ref = ref;
46
-
47
- if (first) reset();
48
- });
49
-
50
- const reset = () => {
51
- if (states.data == null || states.ref == null) return;
52
- states.ref.reset({ data: states.data });
53
- };
54
-
55
- // On submit callback
56
- const onSubmit = (data: FormData, _reset: boolean) => {
57
- states.data = data;
58
- reset();
59
- };
60
-
61
- const localLoadData = (props: GridLoadDataProps) => {
62
- const data = GridDataGet(props, fieldTemplate);
63
- return loadData(data);
64
- };
65
-
66
- // Layout
67
- return (
68
- <CommonPage {...pageProps} scrollContainer={CommonPageScrollContainer}>
69
- <Stack>
70
- <Box
71
- sx={{
72
- paddingBottom: pageProps.paddings
73
- }}
74
- >
75
- <SearchBar fields={fields} onSubmit={onSubmit} />
76
- </Box>
77
- <ScrollerListEx<T>
78
- autoLoad={false}
79
- loadData={localLoadData}
80
- mRef={refs}
81
- {...rest}
82
- />
83
- </Stack>
84
- </CommonPage>
85
- );
86
- }
@@ -1,11 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { ScrollerListExProps } from '../ScrollerListEx';
3
- import { SearchPageProps } from './SearchPageProps';
4
-
5
- /**
6
- * List page props
7
- */
8
- export type ListPageProps<
9
- T extends object,
10
- F extends DataTypes.BasicTemplate
11
- > = SearchPageProps<T, F> & Omit<ScrollerListExProps<T>, 'loadData'>;
@@ -1,68 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import React from 'react';
3
- import { MUGlobal } from '../MUGlobal';
4
- import { ResponsibleContainer } from '../ResponsibleContainer';
5
- import { CommonPage } from './CommonPage';
6
- import { ResponsePageProps } from './ResponsivePageProps';
7
-
8
- /**
9
- * Fixed height list page
10
- * @param props Props
11
- * @returns Component
12
- */
13
- export function ResponsivePage<
14
- T extends object,
15
- F extends DataTypes.BasicTemplate = DataTypes.BasicTemplate,
16
- D extends DataTypes.Keys<T> = DataTypes.Keys<T>
17
- >(props: ResponsePageProps<T, F, D>) {
18
- // Destruct
19
- const { pageProps = {}, ...rest } = props;
20
-
21
- pageProps.paddings ??= MUGlobal.pagePaddings;
22
- const { paddings, fabColumnDirection, ...pageRest } = pageProps;
23
-
24
- // State
25
- const [scrollContainer, setScrollContainer] = React.useState<HTMLElement>();
26
- const [direction, setDirection] = React.useState(fabColumnDirection);
27
-
28
- // Layout
29
- return (
30
- <CommonPage
31
- {...pageRest}
32
- paddings={{}}
33
- scrollContainer={scrollContainer}
34
- fabColumnDirection={direction}
35
- >
36
- <ResponsibleContainer<T, F, D>
37
- paddings={paddings}
38
- containerBoxSx={(paddings, hasField, _dataGrid) => {
39
- // Half
40
- const half = MUGlobal.half(paddings);
41
-
42
- // .SearchBox keep the same to avoid flick when switching between DataGrid and List
43
- return {
44
- paddingTop: paddings,
45
- '& .SearchBox': {
46
- marginLeft: paddings,
47
- marginRight: paddings,
48
- marginBottom: hasField ? half : 0
49
- },
50
- '& .ListBox': {
51
- marginBottom: paddings
52
- },
53
- '& .DataGridBox': {
54
- marginLeft: paddings,
55
- marginRight: paddings,
56
- marginBottom: paddings
57
- }
58
- };
59
- }}
60
- elementReady={(element, isDataGrid) => {
61
- setDirection(!isDataGrid);
62
- setScrollContainer(element);
63
- }}
64
- {...rest}
65
- />
66
- </CommonPage>
67
- );
68
- }
@@ -1,57 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { ListChildComponentProps } from 'react-window';
3
- import { GridMethodRef } from '../GridMethodRef';
4
- import {
5
- ScrollerListExInnerItemRendererProps,
6
- ScrollerListExItemSize
7
- } from '../ScrollerListEx';
8
- import { DataGridPageProps } from './DataGridPageProps';
9
-
10
- /**
11
- * Response page props
12
- */
13
- export type ResponsePageProps<
14
- T extends object,
15
- F extends DataTypes.BasicTemplate,
16
- D extends DataTypes.Keys<T> = DataTypes.Keys<T>
17
- > = Omit<
18
- DataGridPageProps<T, F, D>,
19
- 'mRef' | 'itemKey' | 'onScroll' | 'onItemsRendered'
20
- > & {
21
- /**
22
- * Min width to show Datagrid
23
- */
24
- dataGridMinWidth?: number;
25
-
26
- /**
27
- * Inner item renderer
28
- */
29
- innerItemRenderer: (
30
- props: ScrollerListExInnerItemRendererProps<T>
31
- ) => React.ReactNode;
32
-
33
- /**
34
- * Item renderer
35
- */
36
- itemRenderer?: (props: ListChildComponentProps<T>) => React.ReactElement;
37
-
38
- /**
39
- * Item size, a function indicates its a variable size list
40
- */
41
- itemSize: ScrollerListExItemSize;
42
-
43
- /**
44
- * Methods
45
- */
46
- mRef?: React.MutableRefObject<GridMethodRef | undefined>;
47
-
48
- /**
49
- * Pull to refresh data
50
- */
51
- pullToRefresh?: boolean;
52
-
53
- /**
54
- * Quick action for double click or click under mobile
55
- */
56
- quickAction?: (data: T) => void;
57
- };
@@ -1,39 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { GridJsonData, GridLoader } from '../../components/GridLoader';
3
- import { CommonPageProps } from './CommonPageProps';
4
-
5
- /**
6
- * Search page props
7
- */
8
- export type SearchPageProps<
9
- T extends object,
10
- F extends DataTypes.BasicTemplate
11
- > = Omit<GridLoader<T>, 'loadData'> & {
12
- /**
13
- * Search fields
14
- */
15
- fields: React.ReactElement[];
16
-
17
- /**
18
- * Search field template
19
- */
20
- fieldTemplate?: F;
21
-
22
- /**
23
- * Load data callback
24
- */
25
- loadData: (
26
- data: GridJsonData & DataTypes.BasicTemplateType<F>
27
- ) => PromiseLike<T[] | null | undefined>;
28
-
29
- /**
30
- * Page props
31
- */
32
- pageProps?: CommonPageProps;
33
-
34
- /**
35
- * Size ready to read miliseconds span
36
- * @default 100
37
- */
38
- sizeReadyMiliseconds?: number;
39
- };
@@ -1,119 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { Box, Stack } from '@mui/material';
3
- import React from 'react';
4
- import { GridDataGet, GridLoadDataProps } from '../../components/GridLoader';
5
- import useCombinedRefs from '../../uses/useCombinedRefs';
6
- import { useDimensions } from '../../uses/useDimensions';
7
- import { MUGlobal } from '../MUGlobal';
8
- import { SearchBar } from '../SearchBar';
9
- import { TableEx, TableExMethodRef, TableExMinWidth } from '../TableEx';
10
- import { CommonPage, CommonPageScrollContainer } from './CommonPage';
11
- import { TablePageProps } from './TablePageProps';
12
-
13
- /**
14
- * Table page
15
- * @param props Props
16
- * @returns Component
17
- */
18
- export function TablePage<
19
- T extends object,
20
- F extends DataTypes.BasicTemplate = DataTypes.BasicTemplate
21
- >(props: TablePageProps<T, F>) {
22
- // Destruct
23
- const {
24
- columns,
25
- fields,
26
- fieldTemplate,
27
- loadData,
28
- mRef,
29
- sizeReadyMiliseconds = 0,
30
- pageProps = {},
31
- ...rest
32
- } = props;
33
-
34
- pageProps.paddings ??= MUGlobal.pagePaddings;
35
-
36
- // States
37
- const [states] = React.useState<{
38
- data?: FormData;
39
- ref?: TableExMethodRef;
40
- }>({});
41
-
42
- const refs = useCombinedRefs(mRef, (ref: TableExMethodRef) => {
43
- if (ref == null) return;
44
-
45
- const first = states.ref == null;
46
-
47
- states.ref = ref;
48
-
49
- if (first) reset();
50
- });
51
-
52
- const reset = () => {
53
- if (states.data == null || states.ref == null) return;
54
- states.ref.reset({ data: states.data });
55
- };
56
-
57
- // On submit callback
58
- const onSubmit = (data: FormData, _reset: boolean) => {
59
- states.data = data;
60
- reset();
61
- };
62
-
63
- const localLoadData = (props: GridLoadDataProps) => {
64
- const data = GridDataGet(props, fieldTemplate);
65
- return loadData(data);
66
- };
67
-
68
- // Total width
69
- const totalWidth = React.useMemo(
70
- () =>
71
- columns.reduce((previousValue, { width, minWidth }) => {
72
- return previousValue + (width ?? minWidth ?? TableExMinWidth);
73
- }, 0),
74
- [columns]
75
- );
76
-
77
- // Watch container
78
- const { dimensions } = useDimensions(1, undefined, sizeReadyMiliseconds);
79
- const rect = dimensions[0][2];
80
- const list = React.useMemo(() => {
81
- if (rect != null && rect.height > 50 && rect.width >= totalWidth) {
82
- let maxHeight =
83
- document.documentElement.clientHeight -
84
- (rect.top + rect.height + 1);
85
-
86
- const style = window.getComputedStyle(dimensions[0][1]!);
87
- const paddingBottom = parseFloat(style.paddingBottom);
88
- if (!isNaN(paddingBottom)) maxHeight -= paddingBottom;
89
-
90
- return (
91
- <TableEx<T>
92
- autoLoad={false}
93
- columns={columns}
94
- loadData={localLoadData}
95
- maxHeight={maxHeight}
96
- mRef={refs}
97
- {...rest}
98
- />
99
- );
100
- }
101
- }, [rect]);
102
-
103
- // Layout
104
- return (
105
- <CommonPage {...pageProps} scrollContainer={CommonPageScrollContainer}>
106
- <Stack>
107
- <Box
108
- ref={dimensions[0][0]}
109
- sx={{
110
- paddingBottom: pageProps.paddings
111
- }}
112
- >
113
- <SearchBar fields={fields} onSubmit={onSubmit} />
114
- </Box>
115
- {list}
116
- </Stack>
117
- </CommonPage>
118
- );
119
- }
@@ -1,11 +0,0 @@
1
- import { DataTypes } from '@etsoo/shared';
2
- import { TableExProps } from '../TableEx';
3
- import { SearchPageProps } from './SearchPageProps';
4
-
5
- /**
6
- * Table page props
7
- */
8
- export type TablePageProps<
9
- T extends object,
10
- F extends DataTypes.BasicTemplate
11
- > = SearchPageProps<T, F> & Omit<TableExProps<T>, 'loadData'>;