react-native-navigation的迁移库

ModalScreen.js 3.3KB

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