@etsoo/materialui 1.2.77 → 1.2.79
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 +7 -2
- 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 +5 -5
- package/lib/pages/ViewPage.js +8 -18
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/messages/OperationMessageContainer.tsx +73 -0
- package/src/messages/OperationMessageHandler.ts +11 -2
- 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 +18 -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
|
/**
|
|
@@ -16,4 +16,9 @@ isSelf: boolean,
|
|
|
16
16
|
/**
|
|
17
17
|
* Message
|
|
18
18
|
*/
|
|
19
|
-
message: OperationMessageDto) => void
|
|
19
|
+
message: OperationMessageDto) => void;
|
|
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,10 @@ export interface ViewPageProps<T extends DataTypes.StringRecord> extends Omit<Co
|
|
|
91
91
|
/**
|
|
92
92
|
* Operation message handler
|
|
93
93
|
*/
|
|
94
|
-
operationMessageHandler?:
|
|
95
|
-
id: number
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
operationMessageHandler?: OperationMessageHandlerAll | {
|
|
95
|
+
id: number;
|
|
96
|
+
types: string[];
|
|
97
|
+
};
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
100
|
* 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
|
|
@@ -117,33 +118,22 @@ export function ViewPage(props) {
|
|
|
117
118
|
setData(result);
|
|
118
119
|
}, [loadData]);
|
|
119
120
|
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
121
|
const refreshHandler = async () => {
|
|
138
122
|
await refresh();
|
|
139
123
|
};
|
|
140
124
|
MessageUtils.onRefresh(refreshHandler);
|
|
141
125
|
return () => {
|
|
142
|
-
MessageUtils.offOperationMessage(handler);
|
|
143
126
|
MessageUtils.offRefresh(refreshHandler);
|
|
144
127
|
};
|
|
145
128
|
}, []);
|
|
146
129
|
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,
|
|
130
|
+
operationMessageHandler && (React.createElement(OperationMessageContainer, { handler: "id" in operationMessageHandler
|
|
131
|
+
? [
|
|
132
|
+
operationMessageHandler.types,
|
|
133
|
+
refresh,
|
|
134
|
+
operationMessageHandler.id
|
|
135
|
+
]
|
|
136
|
+
: operationMessageHandler })),
|
|
147
137
|
React.createElement(Grid, { container: true, justifyContent: "left", spacing: spacing, className: "ET-ViewPage", ref: gridRef, sx: {
|
|
148
138
|
".MuiTypography-subtitle2": {
|
|
149
139
|
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
|
/**
|
|
@@ -20,4 +20,13 @@ export type OperationMessageHandler = (
|
|
|
20
20
|
* Message
|
|
21
21
|
*/
|
|
22
22
|
message: OperationMessageDto
|
|
23
|
-
) => void
|
|
23
|
+
) => void;
|
|
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,9 @@ export interface ViewPageProps<T extends DataTypes.StringRecord>
|
|
|
165
166
|
/**
|
|
166
167
|
* Operation message handler
|
|
167
168
|
*/
|
|
168
|
-
operationMessageHandler?:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
];
|
|
169
|
+
operationMessageHandler?:
|
|
170
|
+
| OperationMessageHandlerAll
|
|
171
|
+
| { id: number; types: string[] };
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
function formatItemData(fieldData: unknown): string | undefined {
|
|
@@ -289,28 +289,12 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
289
289
|
}, [loadData]);
|
|
290
290
|
|
|
291
291
|
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
292
|
const refreshHandler: RefreshHandler = async () => {
|
|
308
293
|
await refresh();
|
|
309
294
|
};
|
|
310
295
|
MessageUtils.onRefresh(refreshHandler);
|
|
311
296
|
|
|
312
297
|
return () => {
|
|
313
|
-
MessageUtils.offOperationMessage(handler);
|
|
314
298
|
MessageUtils.offRefresh(refreshHandler);
|
|
315
299
|
};
|
|
316
300
|
}, []);
|
|
@@ -330,6 +314,19 @@ export function ViewPage<T extends DataTypes.StringRecord>(
|
|
|
330
314
|
<LinearProgress />
|
|
331
315
|
) : (
|
|
332
316
|
<React.Fragment>
|
|
317
|
+
{operationMessageHandler && (
|
|
318
|
+
<OperationMessageContainer
|
|
319
|
+
handler={
|
|
320
|
+
"id" in operationMessageHandler
|
|
321
|
+
? [
|
|
322
|
+
operationMessageHandler.types,
|
|
323
|
+
refresh,
|
|
324
|
+
operationMessageHandler.id
|
|
325
|
+
]
|
|
326
|
+
: operationMessageHandler
|
|
327
|
+
}
|
|
328
|
+
/>
|
|
329
|
+
)}
|
|
333
330
|
<Grid
|
|
334
331
|
container
|
|
335
332
|
justifyContent="left"
|