@etsoo/materialui 1.2.76 → 1.2.78
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/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/messages/OperationMessageContainer.d.ts +25 -0
- package/lib/messages/OperationMessageContainer.js +39 -0
- package/lib/messages/OperationMessageHandler.d.ts +6 -1
- package/lib/pages/EditPage.d.ts +2 -2
- package/lib/pages/EditPage.js +2 -9
- package/lib/pages/ResponsivePage.js +2 -9
- package/lib/pages/ResponsivePageProps.d.ts +2 -2
- package/lib/pages/ViewPage.d.ts +2 -2
- package/lib/pages/ViewPage.js +6 -15
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/messages/OperationMessageContainer.tsx +73 -0
- package/src/messages/OperationMessageHandler.ts +10 -1
- package/src/pages/EditPage.tsx +6 -13
- package/src/pages/ResponsivePage.tsx +4 -11
- package/src/pages/ResponsivePageProps.ts +2 -2
- package/src/pages/ViewPage.tsx +10 -14
package/lib/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from "./app/Labels";
|
|
|
8
8
|
export * from "./app/ReactApp";
|
|
9
9
|
export * from "./app/ServiceApp";
|
|
10
10
|
export * from "./messages/MessageUtils";
|
|
11
|
+
export * from "./messages/OperationMessageContainer";
|
|
11
12
|
export * from "./messages/OperationMessageDto";
|
|
12
13
|
export * from "./messages/OperationMessageHandler";
|
|
13
14
|
export * from "./messages/RefreshHandler";
|
package/lib/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export * from "./app/Labels";
|
|
|
8
8
|
export * from "./app/ReactApp";
|
|
9
9
|
export * from "./app/ServiceApp";
|
|
10
10
|
export * from "./messages/MessageUtils";
|
|
11
|
+
export * from "./messages/OperationMessageContainer";
|
|
11
12
|
export * from "./messages/OperationMessageDto";
|
|
12
13
|
export * from "./messages/OperationMessageHandler";
|
|
13
14
|
export * from "./messages/RefreshHandler";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { OperationMessageHandlerAll } from "./OperationMessageHandler";
|
|
3
|
+
/**
|
|
4
|
+
* Operation message container properties
|
|
5
|
+
* 操作消息容器属性
|
|
6
|
+
*/
|
|
7
|
+
export type OperationMessageContainerProps = {
|
|
8
|
+
/**
|
|
9
|
+
* Handler
|
|
10
|
+
* 处理器
|
|
11
|
+
*/
|
|
12
|
+
handler: OperationMessageHandlerAll;
|
|
13
|
+
/**
|
|
14
|
+
* Timeout miliseconds
|
|
15
|
+
* 超时毫秒
|
|
16
|
+
*/
|
|
17
|
+
timeout?: number;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Operation message container
|
|
21
|
+
* 操作消息容器
|
|
22
|
+
* @param props Props
|
|
23
|
+
* @returns Component
|
|
24
|
+
*/
|
|
25
|
+
export declare function OperationMessageContainer(props: OperationMessageContainerProps): React.JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MessageUtils } from "./MessageUtils";
|
|
3
|
+
/**
|
|
4
|
+
* Operation message container
|
|
5
|
+
* 操作消息容器
|
|
6
|
+
* @param props Props
|
|
7
|
+
* @returns Component
|
|
8
|
+
*/
|
|
9
|
+
export function OperationMessageContainer(props) {
|
|
10
|
+
const { handler, timeout = 200 } = props;
|
|
11
|
+
const refs = React.useRef({ seed: 0, mounted: false });
|
|
12
|
+
const resetSeed = () => {
|
|
13
|
+
if (refs.current.seed > 0) {
|
|
14
|
+
clearTimeout(refs.current.seed);
|
|
15
|
+
refs.current.seed = 0;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
const my = typeof handler === "function"
|
|
20
|
+
? handler
|
|
21
|
+
: (_user, _isSelf, message) => {
|
|
22
|
+
const [types, callback, id] = handler;
|
|
23
|
+
if (id == null || id === message.id) {
|
|
24
|
+
if (!types.includes(message.operationType))
|
|
25
|
+
return;
|
|
26
|
+
resetSeed();
|
|
27
|
+
refs.current.seed = window.setTimeout(callback, timeout);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
MessageUtils.onOperationMessage(my);
|
|
31
|
+
refs.current.mounted = true;
|
|
32
|
+
return () => {
|
|
33
|
+
resetSeed();
|
|
34
|
+
refs.current.mounted = false;
|
|
35
|
+
MessageUtils.offOperationMessage(my);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
return React.createElement(React.Fragment, null);
|
|
39
|
+
}
|
|
@@ -2,7 +2,7 @@ import { OperationMessageDto } from "./OperationMessageDto";
|
|
|
2
2
|
import { SignalRUser } from "./SignalRUser";
|
|
3
3
|
/**
|
|
4
4
|
* Operation message handler type
|
|
5
|
-
*
|
|
5
|
+
* 操作消息处理程序类型
|
|
6
6
|
*/
|
|
7
7
|
export type OperationMessageHandler = (
|
|
8
8
|
/**
|
|
@@ -17,3 +17,8 @@ isSelf: boolean,
|
|
|
17
17
|
* Message
|
|
18
18
|
*/
|
|
19
19
|
message: OperationMessageDto) => void | boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Operation message handler type for pages
|
|
22
|
+
* 操作消息处理程序类型(页面)
|
|
23
|
+
*/
|
|
24
|
+
export type OperationMessageHandlerAll = [types: string[], handler: () => void] | [types: string[], handler: () => void, id: number] | OperationMessageHandler;
|
package/lib/pages/EditPage.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { FormEventHandler } from "react";
|
|
2
2
|
import { CommonPageProps } from "./CommonPageProps";
|
|
3
|
-
import {
|
|
3
|
+
import { OperationMessageHandlerAll } from "../messages/OperationMessageHandler";
|
|
4
4
|
/**
|
|
5
5
|
* Add / Edit page props
|
|
6
6
|
*/
|
|
@@ -33,7 +33,7 @@ export interface EditPageProps extends Omit<CommonPageProps, "onSubmit"> {
|
|
|
33
33
|
/**
|
|
34
34
|
* Operation message handler
|
|
35
35
|
*/
|
|
36
|
-
operationMessageHandler?:
|
|
36
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Add / Edit page
|
package/lib/pages/EditPage.js
CHANGED
|
@@ -6,7 +6,7 @@ import SaveIcon from "@mui/icons-material/Save";
|
|
|
6
6
|
import DeleteIcon from "@mui/icons-material/Delete";
|
|
7
7
|
import { BackButton } from "../BackButton";
|
|
8
8
|
import { Labels } from "../app/Labels";
|
|
9
|
-
import {
|
|
9
|
+
import { OperationMessageContainer } from "../messages/OperationMessageContainer";
|
|
10
10
|
/**
|
|
11
11
|
* Add / Edit page
|
|
12
12
|
* @param props Props
|
|
@@ -16,15 +16,8 @@ export function EditPage(props) {
|
|
|
16
16
|
const { children, isEditing, onDelete, onSubmit, paddings = MUGlobal.pagePaddings, scrollContainer = CommonPageScrollContainer, supportBack = true, submitDisabled = false, topPart, operationMessageHandler, ...rest } = props;
|
|
17
17
|
// Labels
|
|
18
18
|
const labels = Labels.CommonPage;
|
|
19
|
-
React.useEffect(() => {
|
|
20
|
-
if (operationMessageHandler == null)
|
|
21
|
-
return;
|
|
22
|
-
MessageUtils.onOperationMessage(operationMessageHandler);
|
|
23
|
-
return () => {
|
|
24
|
-
MessageUtils.offOperationMessage(operationMessageHandler);
|
|
25
|
-
};
|
|
26
|
-
}, []);
|
|
27
19
|
return (React.createElement(CommonPage, { paddings: paddings, scrollContainer: scrollContainer, ...rest },
|
|
20
|
+
operationMessageHandler && (React.createElement(OperationMessageContainer, { handler: operationMessageHandler })),
|
|
28
21
|
topPart,
|
|
29
22
|
React.createElement("form", { onSubmit: onSubmit },
|
|
30
23
|
React.createElement(Grid, { container: true, justifyContent: "left", spacing: paddings, paddingTop: 1 }, children),
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { MUGlobal } from "../MUGlobal";
|
|
3
3
|
import { ResponsibleContainer } from "../ResponsibleContainer";
|
|
4
4
|
import { CommonPage } from "./CommonPage";
|
|
5
|
-
import {
|
|
5
|
+
import { OperationMessageContainer } from "../messages/OperationMessageContainer";
|
|
6
6
|
/**
|
|
7
7
|
* Fixed height list page
|
|
8
8
|
* @param props Props
|
|
@@ -17,16 +17,9 @@ export function ResponsivePage(props) {
|
|
|
17
17
|
// State
|
|
18
18
|
const [scrollContainer, setScrollContainer] = React.useState();
|
|
19
19
|
const [direction, setDirection] = React.useState(fabColumnDirection);
|
|
20
|
-
React.useEffect(() => {
|
|
21
|
-
if (operationMessageHandler == null)
|
|
22
|
-
return;
|
|
23
|
-
MessageUtils.onOperationMessage(operationMessageHandler);
|
|
24
|
-
return () => {
|
|
25
|
-
MessageUtils.offOperationMessage(operationMessageHandler);
|
|
26
|
-
};
|
|
27
|
-
}, []);
|
|
28
20
|
// Layout
|
|
29
21
|
return (React.createElement(CommonPage, { ...pageRest, paddings: {}, scrollContainer: scrollContainer, fabColumnDirection: direction },
|
|
22
|
+
operationMessageHandler && (React.createElement(OperationMessageContainer, { handler: operationMessageHandler })),
|
|
30
23
|
React.createElement(ResponsibleContainer, { paddings: paddings, containerBoxSx: (paddings, hasField, _dataGrid) => {
|
|
31
24
|
// Half
|
|
32
25
|
const half = MUGlobal.half(paddings);
|
|
@@ -4,7 +4,7 @@ import { DataTypes, IdDefaultType } from "@etsoo/shared";
|
|
|
4
4
|
import { ListChildComponentProps } from "react-window";
|
|
5
5
|
import { ScrollerListExInnerItemRendererProps, ScrollerListExItemSize } from "../ScrollerListEx";
|
|
6
6
|
import { DataGridPageProps } from "./DataGridPageProps";
|
|
7
|
-
import {
|
|
7
|
+
import { OperationMessageHandlerAll } from "../messages/OperationMessageHandler";
|
|
8
8
|
/**
|
|
9
9
|
* Response page props
|
|
10
10
|
*/
|
|
@@ -47,5 +47,5 @@ export type ResponsePageProps<T extends object, F extends DataTypes.BasicTemplat
|
|
|
47
47
|
/**
|
|
48
48
|
* Operation message handler
|
|
49
49
|
*/
|
|
50
|
-
operationMessageHandler?:
|
|
50
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
51
51
|
};
|
package/lib/pages/ViewPage.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { DataTypes } from "@etsoo/shared";
|
|
|
3
3
|
import { GridProps } from "@mui/material";
|
|
4
4
|
import React from "react";
|
|
5
5
|
import { CommonPageProps } from "./CommonPageProps";
|
|
6
|
-
import {
|
|
6
|
+
import { OperationMessageHandlerAll } from "../messages/OperationMessageHandler";
|
|
7
7
|
/**
|
|
8
8
|
* View page grid item properties
|
|
9
9
|
*/
|
|
@@ -91,7 +91,7 @@ export interface ViewPageProps<T extends DataTypes.StringRecord> extends Omit<Co
|
|
|
91
91
|
/**
|
|
92
92
|
* Operation message handler
|
|
93
93
|
*/
|
|
94
|
-
operationMessageHandler?:
|
|
94
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
97
|
* View page
|
package/lib/pages/ViewPage.js
CHANGED
|
@@ -9,6 +9,7 @@ import { MUGlobal } from "../MUGlobal";
|
|
|
9
9
|
import { PullToRefreshUI } from "../PullToRefreshUI";
|
|
10
10
|
import { CommonPage } from "./CommonPage";
|
|
11
11
|
import { MessageUtils } from "../messages/MessageUtils";
|
|
12
|
+
import { OperationMessageContainer } from "../messages/OperationMessageContainer";
|
|
12
13
|
/**
|
|
13
14
|
* View page grid item
|
|
14
15
|
* @param props Props
|
|
@@ -105,6 +106,10 @@ export function ViewPage(props) {
|
|
|
105
106
|
const { actions, children, fields, loadData, paddings = MUGlobal.pagePaddings, spacing = MUGlobal.half(MUGlobal.pagePaddings), supportRefresh = true, fabColumnDirection = true, fabTop = true, supportBack = true, pullToRefresh = true, gridRef, operationMessageHandler, ...rest } = props;
|
|
106
107
|
// Data
|
|
107
108
|
const [data, setData] = React.useState();
|
|
109
|
+
const refs = React.useRef({
|
|
110
|
+
seed: 0,
|
|
111
|
+
mounted: false
|
|
112
|
+
});
|
|
108
113
|
// Labels
|
|
109
114
|
const labels = Labels.CommonPage;
|
|
110
115
|
// Container
|
|
@@ -117,30 +122,16 @@ export function ViewPage(props) {
|
|
|
117
122
|
setData(result);
|
|
118
123
|
}, [loadData]);
|
|
119
124
|
React.useEffect(() => {
|
|
120
|
-
const handler = (user, isSelf, message) => {
|
|
121
|
-
if (operationMessageHandler == null)
|
|
122
|
-
return;
|
|
123
|
-
if (Array.isArray(operationMessageHandler)) {
|
|
124
|
-
if (!operationMessageHandler.includes(message.operationType))
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
if (operationMessageHandler(user, isSelf, message) === false)
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
refresh();
|
|
132
|
-
};
|
|
133
|
-
MessageUtils.onOperationMessage(handler);
|
|
134
125
|
const refreshHandler = async () => {
|
|
135
126
|
await refresh();
|
|
136
127
|
};
|
|
137
128
|
MessageUtils.onRefresh(refreshHandler);
|
|
138
129
|
return () => {
|
|
139
|
-
MessageUtils.offOperationMessage(handler);
|
|
140
130
|
MessageUtils.offRefresh(refreshHandler);
|
|
141
131
|
};
|
|
142
132
|
}, []);
|
|
143
133
|
return (React.createElement(CommonPage, { paddings: paddings, onRefresh: supportRefresh ? refresh : undefined, onUpdate: supportRefresh ? undefined : refresh, ...rest, scrollContainer: globalThis, fabColumnDirection: fabColumnDirection, fabTop: fabTop, supportBack: supportBack }, data == null ? (React.createElement(LinearProgress, null)) : (React.createElement(React.Fragment, null,
|
|
134
|
+
operationMessageHandler && (React.createElement(OperationMessageContainer, { handler: operationMessageHandler })),
|
|
144
135
|
React.createElement(Grid, { container: true, justifyContent: "left", spacing: spacing, className: "ET-ViewPage", ref: gridRef, sx: {
|
|
145
136
|
".MuiTypography-subtitle2": {
|
|
146
137
|
fontWeight: "bold"
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./app/ReactApp";
|
|
|
9
9
|
export * from "./app/ServiceApp";
|
|
10
10
|
|
|
11
11
|
export * from "./messages/MessageUtils";
|
|
12
|
+
export * from "./messages/OperationMessageContainer";
|
|
12
13
|
export * from "./messages/OperationMessageDto";
|
|
13
14
|
export * from "./messages/OperationMessageHandler";
|
|
14
15
|
export * from "./messages/RefreshHandler";
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
OperationMessageHandler,
|
|
4
|
+
OperationMessageHandlerAll
|
|
5
|
+
} from "./OperationMessageHandler";
|
|
6
|
+
import { MessageUtils } from "./MessageUtils";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Operation message container properties
|
|
10
|
+
* 操作消息容器属性
|
|
11
|
+
*/
|
|
12
|
+
export type OperationMessageContainerProps = {
|
|
13
|
+
/**
|
|
14
|
+
* Handler
|
|
15
|
+
* 处理器
|
|
16
|
+
*/
|
|
17
|
+
handler: OperationMessageHandlerAll;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Timeout miliseconds
|
|
21
|
+
* 超时毫秒
|
|
22
|
+
*/
|
|
23
|
+
timeout?: number;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Operation message container
|
|
28
|
+
* 操作消息容器
|
|
29
|
+
* @param props Props
|
|
30
|
+
* @returns Component
|
|
31
|
+
*/
|
|
32
|
+
export function OperationMessageContainer(
|
|
33
|
+
props: OperationMessageContainerProps
|
|
34
|
+
) {
|
|
35
|
+
const { handler, timeout = 200 } = props;
|
|
36
|
+
|
|
37
|
+
const refs = React.useRef({ seed: 0, mounted: false });
|
|
38
|
+
|
|
39
|
+
const resetSeed = () => {
|
|
40
|
+
if (refs.current.seed > 0) {
|
|
41
|
+
clearTimeout(refs.current.seed);
|
|
42
|
+
refs.current.seed = 0;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
const my: OperationMessageHandler =
|
|
48
|
+
typeof handler === "function"
|
|
49
|
+
? handler
|
|
50
|
+
: (_user, _isSelf, message) => {
|
|
51
|
+
const [types, callback, id] = handler;
|
|
52
|
+
if (id == null || id === message.id) {
|
|
53
|
+
if (!types.includes(message.operationType)) return;
|
|
54
|
+
|
|
55
|
+
resetSeed();
|
|
56
|
+
|
|
57
|
+
refs.current.seed = window.setTimeout(callback, timeout);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
MessageUtils.onOperationMessage(my);
|
|
61
|
+
|
|
62
|
+
refs.current.mounted = true;
|
|
63
|
+
|
|
64
|
+
return () => {
|
|
65
|
+
resetSeed();
|
|
66
|
+
refs.current.mounted = false;
|
|
67
|
+
|
|
68
|
+
MessageUtils.offOperationMessage(my);
|
|
69
|
+
};
|
|
70
|
+
}, []);
|
|
71
|
+
|
|
72
|
+
return <React.Fragment></React.Fragment>;
|
|
73
|
+
}
|
|
@@ -3,7 +3,7 @@ import { SignalRUser } from "./SignalRUser";
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Operation message handler type
|
|
6
|
-
*
|
|
6
|
+
* 操作消息处理程序类型
|
|
7
7
|
*/
|
|
8
8
|
export type OperationMessageHandler = (
|
|
9
9
|
/**
|
|
@@ -21,3 +21,12 @@ export type OperationMessageHandler = (
|
|
|
21
21
|
*/
|
|
22
22
|
message: OperationMessageDto
|
|
23
23
|
) => void | boolean;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Operation message handler type for pages
|
|
27
|
+
* 操作消息处理程序类型(页面)
|
|
28
|
+
*/
|
|
29
|
+
export type OperationMessageHandlerAll =
|
|
30
|
+
| [types: string[], handler: () => void]
|
|
31
|
+
| [types: string[], handler: () => void, id: number]
|
|
32
|
+
| OperationMessageHandler;
|
package/src/pages/EditPage.tsx
CHANGED
|
@@ -7,8 +7,8 @@ import SaveIcon from "@mui/icons-material/Save";
|
|
|
7
7
|
import DeleteIcon from "@mui/icons-material/Delete";
|
|
8
8
|
import { BackButton } from "../BackButton";
|
|
9
9
|
import { Labels } from "../app/Labels";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { OperationMessageHandlerAll } from "../messages/OperationMessageHandler";
|
|
11
|
+
import { OperationMessageContainer } from "../messages/OperationMessageContainer";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Add / Edit page props
|
|
@@ -48,7 +48,7 @@ export interface EditPageProps extends Omit<CommonPageProps, "onSubmit"> {
|
|
|
48
48
|
/**
|
|
49
49
|
* Operation message handler
|
|
50
50
|
*/
|
|
51
|
-
operationMessageHandler?:
|
|
51
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -74,18 +74,11 @@ export function EditPage(props: EditPageProps) {
|
|
|
74
74
|
// Labels
|
|
75
75
|
const labels = Labels.CommonPage;
|
|
76
76
|
|
|
77
|
-
React.useEffect(() => {
|
|
78
|
-
if (operationMessageHandler == null) return;
|
|
79
|
-
|
|
80
|
-
MessageUtils.onOperationMessage(operationMessageHandler);
|
|
81
|
-
|
|
82
|
-
return () => {
|
|
83
|
-
MessageUtils.offOperationMessage(operationMessageHandler);
|
|
84
|
-
};
|
|
85
|
-
}, []);
|
|
86
|
-
|
|
87
77
|
return (
|
|
88
78
|
<CommonPage paddings={paddings} scrollContainer={scrollContainer} {...rest}>
|
|
79
|
+
{operationMessageHandler && (
|
|
80
|
+
<OperationMessageContainer handler={operationMessageHandler} />
|
|
81
|
+
)}
|
|
89
82
|
{topPart}
|
|
90
83
|
<form onSubmit={onSubmit}>
|
|
91
84
|
<Grid container justifyContent="left" spacing={paddings} paddingTop={1}>
|
|
@@ -4,7 +4,7 @@ import { MUGlobal } from "../MUGlobal";
|
|
|
4
4
|
import { ResponsibleContainer } from "../ResponsibleContainer";
|
|
5
5
|
import { CommonPage } from "./CommonPage";
|
|
6
6
|
import { ResponsePageProps } from "./ResponsivePageProps";
|
|
7
|
-
import {
|
|
7
|
+
import { OperationMessageContainer } from "../messages/OperationMessageContainer";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Fixed height list page
|
|
@@ -26,16 +26,6 @@ export function ResponsivePage<
|
|
|
26
26
|
const [scrollContainer, setScrollContainer] = React.useState<HTMLElement>();
|
|
27
27
|
const [direction, setDirection] = React.useState(fabColumnDirection);
|
|
28
28
|
|
|
29
|
-
React.useEffect(() => {
|
|
30
|
-
if (operationMessageHandler == null) return;
|
|
31
|
-
|
|
32
|
-
MessageUtils.onOperationMessage(operationMessageHandler);
|
|
33
|
-
|
|
34
|
-
return () => {
|
|
35
|
-
MessageUtils.offOperationMessage(operationMessageHandler);
|
|
36
|
-
};
|
|
37
|
-
}, []);
|
|
38
|
-
|
|
39
29
|
// Layout
|
|
40
30
|
return (
|
|
41
31
|
<CommonPage
|
|
@@ -44,6 +34,9 @@ export function ResponsivePage<
|
|
|
44
34
|
scrollContainer={scrollContainer}
|
|
45
35
|
fabColumnDirection={direction}
|
|
46
36
|
>
|
|
37
|
+
{operationMessageHandler && (
|
|
38
|
+
<OperationMessageContainer handler={operationMessageHandler} />
|
|
39
|
+
)}
|
|
47
40
|
<ResponsibleContainer<T, F, D>
|
|
48
41
|
paddings={paddings}
|
|
49
42
|
containerBoxSx={(paddings, hasField, _dataGrid) => {
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
ScrollerListExItemSize
|
|
7
7
|
} from "../ScrollerListEx";
|
|
8
8
|
import { DataGridPageProps } from "./DataGridPageProps";
|
|
9
|
-
import {
|
|
9
|
+
import { OperationMessageHandlerAll } from "../messages/OperationMessageHandler";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Response page props
|
|
@@ -67,5 +67,5 @@ export type ResponsePageProps<
|
|
|
67
67
|
/**
|
|
68
68
|
* Operation message handler
|
|
69
69
|
*/
|
|
70
|
-
operationMessageHandler?:
|
|
70
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
71
71
|
};
|
package/src/pages/ViewPage.tsx
CHANGED
|
@@ -19,9 +19,10 @@ import { MUGlobal } from "../MUGlobal";
|
|
|
19
19
|
import { PullToRefreshUI } from "../PullToRefreshUI";
|
|
20
20
|
import { CommonPage } from "./CommonPage";
|
|
21
21
|
import { CommonPageProps } from "./CommonPageProps";
|
|
22
|
-
import {
|
|
22
|
+
import { OperationMessageHandlerAll } from "../messages/OperationMessageHandler";
|
|
23
23
|
import { MessageUtils } from "../messages/MessageUtils";
|
|
24
24
|
import { RefreshHandler } from "../messages/RefreshHandler";
|
|
25
|
+
import { OperationMessageContainer } from "../messages/OperationMessageContainer";
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* View page grid item properties
|
|
@@ -165,7 +166,7 @@ export interface ViewPageProps<T extends DataTypes.StringRecord>
|
|
|
165
166
|
/**
|
|
166
167
|
* Operation message handler
|
|
167
168
|
*/
|
|
168
|
-
operationMessageHandler?:
|
|
169
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
169
170
|
}
|
|
170
171
|
|
|
171
172
|
function formatItemData(fieldData: unknown): string | undefined {
|
|
@@ -271,6 +272,10 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
271
272
|
|
|
272
273
|
// Data
|
|
273
274
|
const [data, setData] = React.useState<T>();
|
|
275
|
+
const refs = React.useRef<{ seed: number; mounted: boolean }>({
|
|
276
|
+
seed: 0,
|
|
277
|
+
mounted: false
|
|
278
|
+
});
|
|
274
279
|
|
|
275
280
|
// Labels
|
|
276
281
|
const labels = Labels.CommonPage;
|
|
@@ -286,24 +291,12 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
286
291
|
}, [loadData]);
|
|
287
292
|
|
|
288
293
|
React.useEffect(() => {
|
|
289
|
-
const handler: OperationMessageHandler = (user, isSelf, message) => {
|
|
290
|
-
if (operationMessageHandler == null) return;
|
|
291
|
-
if (Array.isArray(operationMessageHandler)) {
|
|
292
|
-
if (!operationMessageHandler.includes(message.operationType)) return;
|
|
293
|
-
} else {
|
|
294
|
-
if (operationMessageHandler(user, isSelf, message) === false) return;
|
|
295
|
-
}
|
|
296
|
-
refresh();
|
|
297
|
-
};
|
|
298
|
-
MessageUtils.onOperationMessage(handler);
|
|
299
|
-
|
|
300
294
|
const refreshHandler: RefreshHandler = async () => {
|
|
301
295
|
await refresh();
|
|
302
296
|
};
|
|
303
297
|
MessageUtils.onRefresh(refreshHandler);
|
|
304
298
|
|
|
305
299
|
return () => {
|
|
306
|
-
MessageUtils.offOperationMessage(handler);
|
|
307
300
|
MessageUtils.offRefresh(refreshHandler);
|
|
308
301
|
};
|
|
309
302
|
}, []);
|
|
@@ -323,6 +316,9 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
323
316
|
<LinearProgress />
|
|
324
317
|
) : (
|
|
325
318
|
<React.Fragment>
|
|
319
|
+
{operationMessageHandler && (
|
|
320
|
+
<OperationMessageContainer handler={operationMessageHandler} />
|
|
321
|
+
)}
|
|
326
322
|
<Grid
|
|
327
323
|
container
|
|
328
324
|
justifyContent="left"
|