/
IonLifeCycleContext.tsx
77 lines (62 loc) · 2.23 KB
/
IonLifeCycleContext.tsx
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
import React from 'react';
export interface IonLifeCycleContextInterface {
onIonViewWillEnter: (callback: () => void) => void;
ionViewWillEnter: () => void;
onIonViewDidEnter: (callback: () => void) => void;
ionViewDidEnter: () => void;
onIonViewWillLeave: (callback: () => void) => void;
ionViewWillLeave: () => void;
onIonViewDidLeave: (callback: () => void) => void;
ionViewDidLeave: () => void;
}
export const IonLifeCycleContext = /*@__PURE__*/React.createContext<IonLifeCycleContextInterface>({
onIonViewWillEnter: () => { return; },
ionViewWillEnter: () => { return; },
onIonViewDidEnter: () => { return; },
ionViewDidEnter: () => { return; },
onIonViewWillLeave: () => { return; },
ionViewWillLeave: () => { return; },
onIonViewDidLeave: () => { return; },
ionViewDidLeave: () => { return; },
});
type LifeCycleCallback = () => void;
export const DefaultIonLifeCycleContext = class implements IonLifeCycleContextInterface {
ionViewWillEnterCallbacks: LifeCycleCallback[] = [];
ionViewDidEnterCallbacks: LifeCycleCallback[] = [];
ionViewWillLeaveCallbacks: LifeCycleCallback[] = [];
ionViewDidLeaveCallbacks: LifeCycleCallback[] = [];
componentCanBeDestroyedCallback?: () => void;
onIonViewWillEnter(callback: LifeCycleCallback) {
this.ionViewWillEnterCallbacks.push(callback);
}
ionViewWillEnter() {
this.ionViewWillEnterCallbacks.forEach(cb => cb());
}
onIonViewDidEnter(callback: LifeCycleCallback) {
this.ionViewDidEnterCallbacks.push(callback);
}
ionViewDidEnter() {
this.ionViewDidEnterCallbacks.forEach(cb => cb());
}
onIonViewWillLeave(callback: LifeCycleCallback) {
this.ionViewWillLeaveCallbacks.push(callback);
}
ionViewWillLeave() {
this.ionViewWillLeaveCallbacks.forEach(cb => cb());
}
onIonViewDidLeave(callback: LifeCycleCallback) {
this.ionViewDidLeaveCallbacks.push(callback);
}
ionViewDidLeave() {
this.ionViewDidLeaveCallbacks.forEach(cb => cb());
this.componentCanBeDestroyed();
}
onComponentCanBeDestroyed(callback: () => void) {
this.componentCanBeDestroyedCallback = callback;
}
componentCanBeDestroyed() {
if (this.componentCanBeDestroyedCallback) {
this.componentCanBeDestroyedCallback();
}
}
};