@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.
- package/README.md +7 -2
- package/__tests__/ReactUtils.ts +6 -0
- package/lib/{mu → components}/DnDList.d.ts +1 -14
- package/lib/{mu → components}/DnDList.js +1 -24
- package/lib/components/GridMethodRef.d.ts +11 -0
- package/lib/{mu → components}/GridMethodRef.js +0 -0
- package/lib/components/ScrollerGrid.d.ts +6 -6
- package/lib/components/ScrollerList.d.ts +3 -3
- package/lib/index.d.ts +2 -74
- package/lib/index.js +2 -75
- package/lib/notifier/Notifier.d.ts +2 -3
- package/lib/uses/useWindowScroll.d.ts +10 -0
- package/lib/uses/useWindowScroll.js +46 -0
- package/lib/uses/useWindowSize.js +11 -5
- package/package.json +9 -21
- package/src/{mu → components}/DnDList.tsx +11 -34
- package/src/components/GridMethodRef.ts +12 -0
- package/src/components/ScrollerGrid.tsx +6 -6
- package/src/components/ScrollerList.tsx +5 -3
- package/src/index.ts +2 -78
- package/src/notifier/Notifier.ts +2 -3
- package/src/uses/useWindowScroll.ts +60 -0
- package/src/uses/useWindowSize.ts +14 -5
- package/__tests__/mu/MUGlobalTests.tsx +0 -58
- package/__tests__/mu/NotifierMUTests.tsx +0 -213
- package/lib/app/CommonApp.d.ts +0 -39
- package/lib/app/CommonApp.js +0 -149
- package/lib/app/IServiceAppSettings.d.ts +0 -11
- package/lib/app/IServiceAppSettings.js +0 -1
- package/lib/app/IServicePage.d.ts +0 -6
- package/lib/app/IServicePage.js +0 -1
- package/lib/app/IServiceUser.d.ts +0 -14
- package/lib/app/IServiceUser.js +0 -1
- package/lib/app/ISmartERPUser.d.ts +0 -14
- package/lib/app/ISmartERPUser.js +0 -1
- package/lib/app/Labels.d.ts +0 -65
- package/lib/app/Labels.js +0 -62
- package/lib/app/ReactApp.d.ts +0 -194
- package/lib/app/ReactApp.js +0 -298
- package/lib/app/ServiceApp.d.ts +0 -78
- package/lib/app/ServiceApp.js +0 -244
- package/lib/components/ShowDataComparison.d.ts +0 -20
- package/lib/components/ShowDataComparison.js +0 -60
- package/lib/mu/AuditDisplay.d.ts +0 -33
- package/lib/mu/AuditDisplay.js +0 -52
- package/lib/mu/AutocompleteExtendedProps.d.ts +0 -66
- package/lib/mu/AutocompleteExtendedProps.js +0 -1
- package/lib/mu/BackButton.d.ts +0 -13
- package/lib/mu/BackButton.js +0 -33
- package/lib/mu/BridgeCloseButton.d.ts +0 -23
- package/lib/mu/BridgeCloseButton.js +0 -32
- package/lib/mu/ButtonLink.d.ts +0 -17
- package/lib/mu/ButtonLink.js +0 -19
- package/lib/mu/ComboBox.d.ts +0 -40
- package/lib/mu/ComboBox.js +0 -108
- package/lib/mu/CountdownButton.d.ts +0 -23
- package/lib/mu/CountdownButton.js +0 -81
- package/lib/mu/CustomFabProps.d.ts +0 -27
- package/lib/mu/CustomFabProps.js +0 -1
- package/lib/mu/DataGridEx.d.ts +0 -96
- package/lib/mu/DataGridEx.js +0 -331
- package/lib/mu/DataGridRenderers.d.ts +0 -22
- package/lib/mu/DataGridRenderers.js +0 -99
- package/lib/mu/DialogButton.d.ts +0 -54
- package/lib/mu/DialogButton.js +0 -45
- package/lib/mu/DraggablePaperComponent.d.ts +0 -8
- package/lib/mu/DraggablePaperComponent.js +0 -12
- package/lib/mu/EmailInput.d.ts +0 -11
- package/lib/mu/EmailInput.js +0 -15
- package/lib/mu/FabBox.d.ts +0 -21
- package/lib/mu/FabBox.js +0 -31
- package/lib/mu/FlexBox.d.ts +0 -14
- package/lib/mu/FlexBox.js +0 -18
- package/lib/mu/GridDataFormat.d.ts +0 -10
- package/lib/mu/GridDataFormat.js +0 -43
- package/lib/mu/GridMethodRef.d.ts +0 -11
- package/lib/mu/IconButtonLink.d.ts +0 -17
- package/lib/mu/IconButtonLink.js +0 -16
- package/lib/mu/InputField.d.ts +0 -21
- package/lib/mu/InputField.js +0 -39
- package/lib/mu/ItemList.d.ts +0 -55
- package/lib/mu/ItemList.js +0 -77
- package/lib/mu/ListItemRightIcon.d.ts +0 -4
- package/lib/mu/ListItemRightIcon.js +0 -8
- package/lib/mu/ListMoreDisplay.d.ts +0 -35
- package/lib/mu/ListMoreDisplay.js +0 -99
- package/lib/mu/LoadingButton.d.ts +0 -16
- package/lib/mu/LoadingButton.js +0 -41
- package/lib/mu/MUGlobal.d.ts +0 -102
- package/lib/mu/MUGlobal.js +0 -184
- package/lib/mu/MaskInput.d.ts +0 -34
- package/lib/mu/MaskInput.js +0 -43
- package/lib/mu/MobileListItemRenderer.d.ts +0 -17
- package/lib/mu/MobileListItemRenderer.js +0 -35
- package/lib/mu/MoreFab.d.ts +0 -45
- package/lib/mu/MoreFab.js +0 -95
- package/lib/mu/NotifierMU.d.ts +0 -47
- package/lib/mu/NotifierMU.js +0 -387
- package/lib/mu/NotifierPromptProps.d.ts +0 -22
- package/lib/mu/NotifierPromptProps.js +0 -1
- package/lib/mu/OptionGroup.d.ts +0 -62
- package/lib/mu/OptionGroup.js +0 -81
- package/lib/mu/PList.d.ts +0 -15
- package/lib/mu/PList.js +0 -12
- package/lib/mu/ProgressCount.d.ts +0 -44
- package/lib/mu/ProgressCount.js +0 -79
- package/lib/mu/PullToRefreshUI.d.ts +0 -9
- package/lib/mu/PullToRefreshUI.js +0 -18
- package/lib/mu/RLink.d.ts +0 -14
- package/lib/mu/RLink.js +0 -37
- package/lib/mu/ResponsibleContainer.d.ts +0 -89
- package/lib/mu/ResponsibleContainer.js +0 -159
- package/lib/mu/ScrollTopFab.d.ts +0 -7
- package/lib/mu/ScrollTopFab.js +0 -25
- package/lib/mu/ScrollerListEx.d.ts +0 -81
- package/lib/mu/ScrollerListEx.js +0 -167
- package/lib/mu/SearchBar.d.ts +0 -29
- package/lib/mu/SearchBar.js +0 -262
- package/lib/mu/SearchField.d.ts +0 -21
- package/lib/mu/SearchField.js +0 -39
- package/lib/mu/SearchOptionGroup.d.ts +0 -9
- package/lib/mu/SearchOptionGroup.js +0 -14
- package/lib/mu/SelectBool.d.ts +0 -14
- package/lib/mu/SelectBool.js +0 -22
- package/lib/mu/SelectEx.d.ts +0 -54
- package/lib/mu/SelectEx.js +0 -156
- package/lib/mu/Switch.d.ts +0 -29
- package/lib/mu/Switch.js +0 -34
- package/lib/mu/SwitchAnt.d.ts +0 -25
- package/lib/mu/SwitchAnt.js +0 -40
- package/lib/mu/TabBox.d.ts +0 -54
- package/lib/mu/TabBox.js +0 -31
- package/lib/mu/TableEx.d.ts +0 -68
- package/lib/mu/TableEx.js +0 -271
- package/lib/mu/TextFieldEx.d.ts +0 -101
- package/lib/mu/TextFieldEx.js +0 -127
- package/lib/mu/Tiplist.d.ts +0 -18
- package/lib/mu/Tiplist.js +0 -158
- package/lib/mu/TooltipClick.d.ts +0 -15
- package/lib/mu/TooltipClick.js +0 -40
- package/lib/mu/UserAvatar.d.ts +0 -24
- package/lib/mu/UserAvatar.js +0 -25
- package/lib/mu/UserAvatarEditor.d.ts +0 -53
- package/lib/mu/UserAvatarEditor.js +0 -129
- package/lib/mu/pages/CommonPage.d.ts +0 -11
- package/lib/mu/pages/CommonPage.js +0 -60
- package/lib/mu/pages/CommonPageProps.d.ts +0 -60
- package/lib/mu/pages/CommonPageProps.js +0 -1
- package/lib/mu/pages/DataGridPage.d.ts +0 -9
- package/lib/mu/pages/DataGridPage.js +0 -81
- package/lib/mu/pages/DataGridPageProps.d.ts +0 -17
- package/lib/mu/pages/DataGridPageProps.js +0 -1
- package/lib/mu/pages/EditPage.d.ts +0 -33
- package/lib/mu/pages/EditPage.js +0 -29
- package/lib/mu/pages/FixedListPage.d.ts +0 -15
- package/lib/mu/pages/FixedListPage.js +0 -72
- package/lib/mu/pages/ListPage.d.ts +0 -9
- package/lib/mu/pages/ListPage.js +0 -51
- package/lib/mu/pages/ListPageProps.d.ts +0 -7
- package/lib/mu/pages/ListPageProps.js +0 -1
- package/lib/mu/pages/ResponsivePage.d.ts +0 -9
- package/lib/mu/pages/ResponsivePage.js +0 -45
- package/lib/mu/pages/ResponsivePageProps.d.ts +0 -39
- package/lib/mu/pages/ResponsivePageProps.js +0 -1
- package/lib/mu/pages/SearchPageProps.d.ts +0 -30
- package/lib/mu/pages/SearchPageProps.js +0 -1
- package/lib/mu/pages/TablePage.d.ts +0 -9
- package/lib/mu/pages/TablePage.js +0 -71
- package/lib/mu/pages/TablePageProps.d.ts +0 -7
- package/lib/mu/pages/TablePageProps.js +0 -1
- package/lib/mu/pages/ViewPage.d.ts +0 -66
- package/lib/mu/pages/ViewPage.js +0 -105
- package/lib/mu/texts/DateText.d.ts +0 -34
- package/lib/mu/texts/DateText.js +0 -25
- package/lib/mu/texts/MoneyText.d.ts +0 -21
- package/lib/mu/texts/MoneyText.js +0 -14
- package/lib/mu/texts/NumberText.d.ts +0 -25
- package/lib/mu/texts/NumberText.js +0 -14
- package/src/app/CommonApp.ts +0 -225
- package/src/app/IServiceAppSettings.ts +0 -13
- package/src/app/IServicePage.ts +0 -6
- package/src/app/IServiceUser.ts +0 -17
- package/src/app/ISmartERPUser.ts +0 -16
- package/src/app/Labels.ts +0 -77
- package/src/app/ReactApp.ts +0 -500
- package/src/app/ServiceApp.ts +0 -353
- package/src/components/ShowDataComparison.tsx +0 -108
- package/src/mu/AuditDisplay.tsx +0 -117
- package/src/mu/AutocompleteExtendedProps.ts +0 -84
- package/src/mu/BackButton.tsx +0 -55
- package/src/mu/BridgeCloseButton.tsx +0 -69
- package/src/mu/ButtonLink.tsx +0 -32
- package/src/mu/ComboBox.tsx +0 -244
- package/src/mu/CountdownButton.tsx +0 -119
- package/src/mu/CustomFabProps.ts +0 -32
- package/src/mu/DataGridEx.tsx +0 -712
- package/src/mu/DataGridRenderers.tsx +0 -140
- package/src/mu/DialogButton.tsx +0 -163
- package/src/mu/DraggablePaperComponent.tsx +0 -19
- package/src/mu/EmailInput.tsx +0 -24
- package/src/mu/FabBox.tsx +0 -51
- package/src/mu/FlexBox.tsx +0 -20
- package/src/mu/GridDataFormat.tsx +0 -77
- package/src/mu/GridMethodRef.ts +0 -12
- package/src/mu/IconButtonLink.tsx +0 -29
- package/src/mu/InputField.tsx +0 -82
- package/src/mu/ItemList.tsx +0 -201
- package/src/mu/ListItemRightIcon.tsx +0 -9
- package/src/mu/ListMoreDisplay.tsx +0 -205
- package/src/mu/LoadingButton.tsx +0 -75
- package/src/mu/MUGlobal.ts +0 -220
- package/src/mu/MaskInput.tsx +0 -107
- package/src/mu/MobileListItemRenderer.tsx +0 -79
- package/src/mu/MoreFab.tsx +0 -211
- package/src/mu/NotifierMU.tsx +0 -654
- package/src/mu/NotifierPromptProps.ts +0 -26
- package/src/mu/OptionGroup.tsx +0 -218
- package/src/mu/PList.tsx +0 -27
- package/src/mu/ProgressCount.tsx +0 -166
- package/src/mu/PullToRefreshUI.tsx +0 -21
- package/src/mu/RLink.tsx +0 -64
- package/src/mu/ResponsibleContainer.tsx +0 -394
- package/src/mu/ScrollTopFab.tsx +0 -34
- package/src/mu/ScrollerListEx.tsx +0 -387
- package/src/mu/SearchBar.tsx +0 -398
- package/src/mu/SearchField.tsx +0 -82
- package/src/mu/SearchOptionGroup.tsx +0 -25
- package/src/mu/SelectBool.tsx +0 -40
- package/src/mu/SelectEx.tsx +0 -285
- package/src/mu/Switch.tsx +0 -94
- package/src/mu/SwitchAnt.tsx +0 -95
- package/src/mu/TabBox.tsx +0 -118
- package/src/mu/TableEx.tsx +0 -561
- package/src/mu/TextFieldEx.tsx +0 -250
- package/src/mu/Tiplist.tsx +0 -304
- package/src/mu/TooltipClick.tsx +0 -84
- package/src/mu/UserAvatar.tsx +0 -64
- package/src/mu/UserAvatarEditor.tsx +0 -287
- package/src/mu/pages/CommonPage.tsx +0 -128
- package/src/mu/pages/CommonPageProps.ts +0 -71
- package/src/mu/pages/DataGridPage.tsx +0 -137
- package/src/mu/pages/DataGridPageProps.ts +0 -24
- package/src/mu/pages/EditPage.tsx +0 -114
- package/src/mu/pages/FixedListPage.tsx +0 -134
- package/src/mu/pages/ListPage.tsx +0 -86
- package/src/mu/pages/ListPageProps.ts +0 -11
- package/src/mu/pages/ResponsivePage.tsx +0 -68
- package/src/mu/pages/ResponsivePageProps.ts +0 -57
- package/src/mu/pages/SearchPageProps.ts +0 -39
- package/src/mu/pages/TablePage.tsx +0 -119
- package/src/mu/pages/TablePageProps.ts +0 -11
- package/src/mu/pages/ViewPage.tsx +0 -285
- package/src/mu/texts/DateText.tsx +0 -74
- package/src/mu/texts/MoneyText.tsx +0 -49
- 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'>;
|