@etsoo/materialui 1.2.77 → 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 -5
- package/lib/pages/ViewPage.js +6 -18
- 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 -21
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,10 +91,7 @@ export interface ViewPageProps<T extends DataTypes.StringRecord> extends Omit<Co
|
|
|
91
91
|
/**
|
|
92
92
|
* Operation message handler
|
|
93
93
|
*/
|
|
94
|
-
operationMessageHandler?:
|
|
95
|
-
id: number | undefined,
|
|
96
|
-
handler: OperationMessageHandler | string[]
|
|
97
|
-
];
|
|
94
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
98
95
|
}
|
|
99
96
|
/**
|
|
100
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,33 +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
|
-
const [id, handler] = operationMessageHandler;
|
|
124
|
-
if ((id == null && message.id == null) || id === message.id) {
|
|
125
|
-
if (Array.isArray(handler)) {
|
|
126
|
-
if (!handler.includes(message.operationType))
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
if (handler(user, isSelf, message) === false)
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
refresh();
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
MessageUtils.onOperationMessage(handler);
|
|
137
125
|
const refreshHandler = async () => {
|
|
138
126
|
await refresh();
|
|
139
127
|
};
|
|
140
128
|
MessageUtils.onRefresh(refreshHandler);
|
|
141
129
|
return () => {
|
|
142
|
-
MessageUtils.offOperationMessage(handler);
|
|
143
130
|
MessageUtils.offRefresh(refreshHandler);
|
|
144
131
|
};
|
|
145
132
|
}, []);
|
|
146
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 })),
|
|
147
135
|
React.createElement(Grid, { container: true, justifyContent: "left", spacing: spacing, className: "ET-ViewPage", ref: gridRef, sx: {
|
|
148
136
|
".MuiTypography-subtitle2": {
|
|
149
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,10 +166,7 @@ export interface ViewPageProps<T extends DataTypes.StringRecord>
|
|
|
165
166
|
/**
|
|
166
167
|
* Operation message handler
|
|
167
168
|
*/
|
|
168
|
-
operationMessageHandler?:
|
|
169
|
-
id: number | undefined,
|
|
170
|
-
handler: OperationMessageHandler | string[]
|
|
171
|
-
];
|
|
169
|
+
operationMessageHandler?: OperationMessageHandlerAll;
|
|
172
170
|
}
|
|
173
171
|
|
|
174
172
|
function formatItemData(fieldData: unknown): string | undefined {
|
|
@@ -274,6 +272,10 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
274
272
|
|
|
275
273
|
// Data
|
|
276
274
|
const [data, setData] = React.useState<T>();
|
|
275
|
+
const refs = React.useRef<{ seed: number; mounted: boolean }>({
|
|
276
|
+
seed: 0,
|
|
277
|
+
mounted: false
|
|
278
|
+
});
|
|
277
279
|
|
|
278
280
|
// Labels
|
|
279
281
|
const labels = Labels.CommonPage;
|
|
@@ -289,28 +291,12 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
289
291
|
}, [loadData]);
|
|
290
292
|
|
|
291
293
|
React.useEffect(() => {
|
|
292
|
-
const handler: OperationMessageHandler = (user, isSelf, message) => {
|
|
293
|
-
if (operationMessageHandler == null) return;
|
|
294
|
-
|
|
295
|
-
const [id, handler] = operationMessageHandler;
|
|
296
|
-
if ((id == null && message.id == null) || id === message.id) {
|
|
297
|
-
if (Array.isArray(handler)) {
|
|
298
|
-
if (!handler.includes(message.operationType)) return;
|
|
299
|
-
} else {
|
|
300
|
-
if (handler(user, isSelf, message) === false) return;
|
|
301
|
-
}
|
|
302
|
-
refresh();
|
|
303
|
-
}
|
|
304
|
-
};
|
|
305
|
-
MessageUtils.onOperationMessage(handler);
|
|
306
|
-
|
|
307
294
|
const refreshHandler: RefreshHandler = async () => {
|
|
308
295
|
await refresh();
|
|
309
296
|
};
|
|
310
297
|
MessageUtils.onRefresh(refreshHandler);
|
|
311
298
|
|
|
312
299
|
return () => {
|
|
313
|
-
MessageUtils.offOperationMessage(handler);
|
|
314
300
|
MessageUtils.offRefresh(refreshHandler);
|
|
315
301
|
};
|
|
316
302
|
}, []);
|
|
@@ -330,6 +316,9 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
330
316
|
<LinearProgress />
|
|
331
317
|
) : (
|
|
332
318
|
<React.Fragment>
|
|
319
|
+
{operationMessageHandler && (
|
|
320
|
+
<OperationMessageContainer handler={operationMessageHandler} />
|
|
321
|
+
)}
|
|
333
322
|
<Grid
|
|
334
323
|
container
|
|
335
324
|
justifyContent="left"
|