react-native-navigation的迁移库

ModalScreen.js 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. const _ = require('lodash');
  2. const React = require('react');
  3. const { Component } = require('react');
  4. const { View, Text, Button } = require('react-native');
  5. const { Navigation } = require('react-native-navigation');
  6. const testIDs = require('../testIDs');
  7. class ModalScreen extends Component {
  8. static get options() {
  9. return {
  10. orientation: ['portrait']
  11. };
  12. }
  13. constructor(props) {
  14. super(props);
  15. this.onClickShowModal = this.onClickShowModal.bind(this);
  16. this.onClickDismissModal = this.onClickDismissModal.bind(this);
  17. this.onClickDismissPreviousModal = this.onClickDismissPreviousModal.bind(this);
  18. this.onClickDismissUnknownModal = this.onClickDismissUnknownModal.bind(this);
  19. this.onClickDismissAllPreviousModals = this.onClickDismissAllPreviousModals.bind(this);
  20. this.onClickDismissFirstInStack = this.onClickDismissFirstInStack.bind(this);
  21. this.onClickDismissAllModals = this.onClickDismissAllModals.bind(this);
  22. this.onClickPushScreen = this.onClickPushScreen.bind(this);
  23. this.onShowModalWithDeepStack = this.onShowModalWithDeepStack.bind(this);
  24. }
  25. render() {
  26. return (
  27. <View style={styles.root}>
  28. <Text style={styles.h1} testID={testIDs.MODAL_SCREEN}>{`Modal Screen`}</Text>
  29. <Text style={styles.footer}>{`Modal Stack Position: ${this.getModalPosition()}`}</Text>
  30. <Button title='Show Modal' testID={testIDs.SHOW_MODAL_BUTTON} onPress={this.onClickShowModal} />
  31. <Button title='Dismiss Modal' testID={testIDs.DISMISS_MODAL_BUTTON} onPress={this.onClickDismissModal} />
  32. <Button title='Dismiss Unknown Modal' testID={testIDs.DISMISS_UNKNOWN_MODAL_BUTTON} onPress={this.onClickDismissUnknownModal} />
  33. <Button title='Dismiss All Modals' testID={testIDs.DISMISS_ALL_MODALS_BUTTON} onPress={this.onClickDismissAllModals} />
  34. <Button title='Push screen' testID={testIDs.PUSH_BUTTON} onPress={this.onClickPushScreen} />
  35. <Button title='Show Modal With Stack' testID={testIDs.MODAL_WITH_STACK_BUTTON} onPress={this.onShowModalWithDeepStack} />
  36. {this.getPreviousModalId() ? (<Button title='Dismiss Previous Modal' testID={testIDs.DISMISS_PREVIOUS_MODAL_BUTTON}
  37. onPress={this.onClickDismissPreviousModal} />) : undefined}
  38. {this.props.previousModalIds ? (<Button title='Dismiss ALL Previous Modals' testID={testIDs.DISMISS_ALL_PREVIOUS_MODAL_BUTTON}
  39. onPress={this.onClickDismissAllPreviousModals} />) : undefined}
  40. {this.props.previousModalIds ? (<Button title='Dismiss First In Stack' testID={testIDs.DISMISS_FIRST_MODAL_BUTTON}
  41. onPress={this.onClickDismissFirstInStack} />) : undefined}
  42. <Text style={styles.footer}>{`this.props.componentId = ${this.props.componentId}`}</Text>
  43. </View>
  44. );
  45. }
  46. onClickShowModal() {
  47. Navigation.showModal({
  48. component: {
  49. name: 'navigation.playground.ModalScreen',
  50. passProps: {
  51. modalPosition: this.getModalPosition() + 1,
  52. previousModalIds: _.concat([], this.props.previousModalIds || [], this.props.componentId)
  53. },
  54. options: {
  55. animated: false
  56. }
  57. }
  58. });
  59. }
  60. async onClickDismissModal() {
  61. await Navigation.dismissModal(this.props.componentId);
  62. }
  63. onClickDismissPreviousModal() {
  64. Navigation.dismissModal(this.getPreviousModalId());
  65. }
  66. onClickDismissUnknownModal() {
  67. Navigation.dismissModal('unknown');
  68. }
  69. onClickDismissAllPreviousModals() {
  70. _.forEach(this.props.previousModalIds, (id) => Navigation.dismissModal(id));
  71. }
  72. onClickDismissFirstInStack() {
  73. Navigation.dismissModal(_.head(this.props.previousModalIds));
  74. }
  75. onClickDismissAllModals() {
  76. Navigation.dismissAllModals();
  77. }
  78. onClickPushScreen() {
  79. Navigation.push(this.props.componentId, {
  80. component: {
  81. name: `navigation.playground.PushedScreen`,
  82. passProps: {
  83. text: 'Pushed from modal'
  84. }
  85. }
  86. });
  87. }
  88. onShowModalWithDeepStack() {
  89. Navigation.showModal({
  90. stack: {
  91. children: [
  92. {
  93. component: {
  94. name: `navigation.playground.TextScreen`,
  95. passProps: {
  96. text: 'Screen 1'
  97. }
  98. }
  99. },
  100. {
  101. component: {
  102. name: `navigation.playground.TextScreen`,
  103. passProps: {
  104. text: 'Screen 2'
  105. }
  106. }
  107. }
  108. ]
  109. }
  110. });
  111. }
  112. getModalPosition() {
  113. return (this.props.modalPosition || 1);
  114. }
  115. getPreviousModalId() {
  116. return _.last(this.props.previousModalIds);
  117. }
  118. }
  119. const styles = {
  120. root: {
  121. flexGrow: 1,
  122. justifyContent: 'center',
  123. alignItems: 'center',
  124. backgroundColor: '#f5fcff'
  125. },
  126. h1: {
  127. fontSize: 24,
  128. textAlign: 'center',
  129. margin: 10
  130. },
  131. h2: {
  132. fontSize: 12,
  133. textAlign: 'center',
  134. margin: 10
  135. },
  136. footer: {
  137. fontSize: 10,
  138. color: '#888',
  139. marginTop: 10
  140. }
  141. };
  142. module.exports = ModalScreen;