This repository has been archived by the owner on Mar 7, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 366
/
Copy pathcreatePageConfig.ts
113 lines (91 loc) · 2.53 KB
/
createPageConfig.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import * as React from 'react';
import createPageWrapper from './createPageWrapper';
import render from './render';
import { Lifecycle, callbackName } from './lifecycle';
import Container from './Container';
export default function createPageConfig(Page: React.ComponentType<any>) {
return {
data: {
action: {},
},
wrapper: null as any,
lifecycleCallback: {} as any,
onLoad(this: any, query: any) {
const PageWrapper = createPageWrapper(Page, query);
this.container = new Container(this);
this.wrapper = render(
React.createElement(PageWrapper, { page: this }),
this.container
);
},
onUnload(this: any) {
this.unloaded = true;
if (this.requestUpdate) {
this.requestUpdate.clear();
}
render(null, this.container);
this.wrapper = null;
},
/**
* Lifecycle start
*/
registerLifecycle(lifecycle: Lifecycle, callback: () => any) {
this.lifecycleCallback[lifecycle] =
this.lifecycleCallback[lifecycle] || [];
this.lifecycleCallback[lifecycle].push(callback);
return () => {
this.lifecycleCallback[lifecycle].splice(
this.lifecycleCallback[lifecycle].indexOf(callback),
1
);
};
},
callLifecycle(lifecycle: Lifecycle) {
const callbacks = this.lifecycleCallback[lifecycle] || [];
let result;
callbacks.forEach((callback: any) => {
result = callback();
});
if (result) {
return result;
}
const callback = callbackName(lifecycle);
if (this.wrapper[callback]) {
return this.wrapper[callback]();
}
},
onShow() {
return this.callLifecycle(Lifecycle.show);
},
onHide() {
return this.callLifecycle(Lifecycle.hide);
},
onPullDownRefresh() {
return this.callLifecycle(Lifecycle.pullDownRefresh);
},
onReachBottom() {
return this.callLifecycle(Lifecycle.reachBottom);
},
onPageScroll() {
return this.callLifecycle(Lifecycle.pageScroll);
},
onShareAppMessage() {
return this.callLifecycle(Lifecycle.shareAppMessage);
},
onTitleClick() {
return this.callLifecycle(Lifecycle.titleClick);
},
onOptionMenuClick() {
return this.callLifecycle(Lifecycle.optionMenuClick);
},
onPopMenuClick() {
return this.callLifecycle(Lifecycle.popMenuClick);
},
onPullIntercept() {
return this.callLifecycle(Lifecycle.pullIntercept);
},
/**
* lifecycle end
*/
};
}