react-native-navigation的迁移库

ModalScreen.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const _ = require('lodash');
  2. const React = require('react');
  3. const Root = require('../components/Root');
  4. const Button = require('../components/Button')
  5. const Navigation = require('./../services/Navigation');
  6. const { stack } = require('../commons/Layouts');
  7. const Screens = require('./Screens');
  8. const {
  9. PUSH_BTN,
  10. MODAL_SCREEN_HEADER,
  11. MODAL_BTN,
  12. DISMISS_MODAL_BTN,
  13. DISMISS_UNKNOWN_MODAL_BTN,
  14. MODAL_LIFECYCLE_BTN,
  15. DISMISS_PREVIOUS_MODAL_BTN,
  16. DISMISS_ALL_PREVIOUS_MODAL_BTN,
  17. DISMISS_ALL_MODALS_BTN,
  18. DISMISS_FIRST_MODAL_BTN,
  19. SET_ROOT
  20. } = require('../testIDs');
  21. class ModalScreen extends React.Component {
  22. static options() {
  23. return {
  24. statusBar: {
  25. visible: false,
  26. drawBehind: true,
  27. backgroundColor: 'transparent'
  28. },
  29. topBar: {
  30. testID: MODAL_SCREEN_HEADER,
  31. title: {
  32. text: 'Modal'
  33. }
  34. }
  35. };
  36. }
  37. render() {
  38. return (
  39. <Root componentId={this.props.componentId} footer={`Modal Stack Position: ${this.getModalPosition()}`}>
  40. <Button label='Show Modal' testID={MODAL_BTN} onPress={this.showModal} />
  41. <Button label='Dismiss Modal' testID={DISMISS_MODAL_BTN} onPress={this.dismissModal} />
  42. <Button label='Dismiss Unknown Modal' testID={DISMISS_UNKNOWN_MODAL_BTN} onPress={this.dismissUnknownModal} />
  43. <Button label='Modal Lifecycle' testID={MODAL_LIFECYCLE_BTN} onPress={this.modalLifecycle} />
  44. {this.getPreviousModalId() && (<Button label='Dismiss Previous Modal' testID={DISMISS_PREVIOUS_MODAL_BTN} onPress={this.dismissPreviousModal} />)}
  45. {this.props.previousModalIds && (<Button label='Dismiss All Previous Modals' testID={DISMISS_ALL_PREVIOUS_MODAL_BTN} onPress={this.dismissAllPreviousModals} />)}
  46. <Button label='Dismiss All Modals' testID={DISMISS_ALL_MODALS_BTN} onPress={this.dismissAllModals} />
  47. {this.props.previousModalIds && (<Button label='Dismiss First Modal' testID={DISMISS_FIRST_MODAL_BTN} onPress={this.dismissFirstModal} />)}
  48. <Button label='Push screen' testID={PUSH_BTN} onPress={this.pushScreen} />
  49. <Button label='Set Root' testID={SET_ROOT} onPress={this.setRoot} />
  50. </Root>
  51. );
  52. }
  53. showModal = () => {
  54. Navigation.showModal({
  55. component: {
  56. name: Screens.Modal,
  57. passProps: {
  58. modalPosition: this.getModalPosition() + 1,
  59. previousModalIds: _.concat([], this.props.previousModalIds || [], this.props.componentId)
  60. }
  61. }
  62. });
  63. }
  64. dismissModal = async () => await Navigation.dismissModal(this.props.componentId);
  65. dismissPreviousModal = () => Navigation.dismissModal(this.getPreviousModalId());
  66. dismissUnknownModal = () => Navigation.dismissModal('unknown');
  67. dismissAllPreviousModals = () => _.forEach(this.props.previousModalIds, (id) => Navigation.dismissModal(id));
  68. dismissFirstModal = () => Navigation.dismissModal(_.head(this.props.previousModalIds));
  69. dismissAllModals = () => Navigation.dismissAllModals();
  70. modalLifecycle = () => Navigation.showModal({
  71. component: {
  72. name: Screens.Lifecycle,
  73. passProps: { isModal: true }
  74. }
  75. });
  76. pushScreen = () => Navigation.push(this, Screens.Pushed);
  77. setRoot = () => Navigation.setRoot(stack(Screens.Pushed));
  78. getModalPosition = () => this.props.modalPosition || 1;
  79. getPreviousModalId = () => _.last(this.props.previousModalIds);
  80. }
  81. module.exports = ModalScreen;