forked from wix/react-native-navigation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModalScreen.js
93 lines (79 loc) · 3.33 KB
/
ModalScreen.js
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
const last = require('lodash/last');
const concat = require('lodash/concat');
const forEach = require('lodash/forEach');
const head = require('lodash/head');
const React = require('react');
const Root = require('../components/Root');
const Button = require('../components/Button')
const Navigation = require('./../services/Navigation');
const { stack } = require('../commons/Layouts');
const Screens = require('./Screens');
const {
PUSH_BTN,
MODAL_SCREEN_HEADER,
MODAL_BTN,
DISMISS_MODAL_BTN,
DISMISS_UNKNOWN_MODAL_BTN,
MODAL_LIFECYCLE_BTN,
DISMISS_PREVIOUS_MODAL_BTN,
DISMISS_ALL_PREVIOUS_MODAL_BTN,
DISMISS_ALL_MODALS_BTN,
DISMISS_FIRST_MODAL_BTN,
SET_ROOT
} = require('../testIDs');
class ModalScreen extends React.Component {
static options() {
return {
topBar: {
testID: MODAL_SCREEN_HEADER,
title: {
text: 'Modal'
}
}
};
}
render() {
return (
<Root componentId={this.props.componentId} footer={`Modal Stack Position: ${this.getModalPosition()}`}>
<Button label='Show Modal' testID={MODAL_BTN} onPress={this.showModal} />
<Button label='Dismiss Modal' testID={DISMISS_MODAL_BTN} onPress={this.dismissModal} />
<Button label='Dismiss Unknown Modal' testID={DISMISS_UNKNOWN_MODAL_BTN} onPress={this.dismissUnknownModal} />
<Button label='Modal Lifecycle' testID={MODAL_LIFECYCLE_BTN} onPress={this.modalLifecycle} />
{this.getPreviousModalId() && (<Button label='Dismiss Previous Modal' testID={DISMISS_PREVIOUS_MODAL_BTN} onPress={this.dismissPreviousModal} />)}
{this.props.previousModalIds && (<Button label='Dismiss All Previous Modals' testID={DISMISS_ALL_PREVIOUS_MODAL_BTN} onPress={this.dismissAllPreviousModals} />)}
<Button label='Dismiss All Modals' testID={DISMISS_ALL_MODALS_BTN} onPress={this.dismissAllModals} />
{this.props.previousModalIds && (<Button label='Dismiss First Modal' testID={DISMISS_FIRST_MODAL_BTN} onPress={this.dismissFirstModal} />)}
<Button label='Push' testID={PUSH_BTN} onPress={this.push} />
<Button label='Set Root' testID={SET_ROOT} onPress={this.setRoot} />
</Root>
);
}
showModal = () => {
Navigation.showModal({
component: {
name: Screens.Modal,
passProps: {
modalPosition: this.getModalPosition() + 1,
previousModalIds: concat([], this.props.previousModalIds || [], this.props.componentId)
}
}
});
}
dismissModal = async () => await Navigation.dismissModal(this.props.componentId);
dismissPreviousModal = () => Navigation.dismissModal(this.getPreviousModalId());
dismissUnknownModal = () => Navigation.dismissModal('unknown');
dismissAllPreviousModals = () => forEach(this.props.previousModalIds, (id) => Navigation.dismissModal(id));
dismissFirstModal = () => Navigation.dismissModal(head(this.props.previousModalIds));
dismissAllModals = () => Navigation.dismissAllModals();
modalLifecycle = () => Navigation.showModal({
component: {
name: Screens.Lifecycle,
passProps: { isModal: true }
}
});
push = () => Navigation.push(this, Screens.Pushed);
setRoot = () => Navigation.setRoot(stack(Screens.Pushed));
getModalPosition = () => this.props.modalPosition || 1;
getPreviousModalId = () => last(this.props.previousModalIds);
}
module.exports = ModalScreen;