react-native-navigation的迁移库

Navigation.js 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React from 'react';
  2. import { AppRegistry } from 'react-native';
  3. import platformSpecific from './platformSpecific';
  4. import Screen from './Screen';
  5. const registeredScreens = {};
  6. function registerScreen(screenID, generator) {
  7. registeredScreens[screenID] = generator;
  8. AppRegistry.registerComponent(screenID, generator);
  9. }
  10. function registerComponent(screenID, generator, store = undefined, Provider = undefined) {
  11. if (store && Provider) {
  12. return _registerComponentRedux(screenID, generator, store, Provider);
  13. } else {
  14. return _registerComponentNoRedux(screenID, generator);
  15. }
  16. }
  17. function _registerComponentNoRedux(screenID, generator) {
  18. const generatorWrapper = function() {
  19. const InternalComponent = generator();
  20. return class extends Screen {
  21. static navigatorStyle = InternalComponent.navigatorStyle || {};
  22. static navigatorButtons = InternalComponent.navigatorButtons || {};
  23. render() {
  24. return (
  25. <InternalComponent navigator={this.navigator} {...this.props} />
  26. );
  27. }
  28. };
  29. };
  30. registerScreen(screenID, generatorWrapper);
  31. return generatorWrapper;
  32. }
  33. function _registerComponentRedux(screenID, generator, store, Provider) {
  34. const generatorWrapper = function() {
  35. const InternalComponent = generator();
  36. return class extends Screen {
  37. static navigatorStyle = InternalComponent.navigatorStyle || {};
  38. static navigatorButtons = InternalComponent.navigatorButtons || {};
  39. render() {
  40. return (
  41. <Provider store={store}>
  42. <InternalComponent navigator={this.navigator} {...this.props} />
  43. </Provider>
  44. );
  45. }
  46. };
  47. };
  48. registerScreen(screenID, generatorWrapper);
  49. return generatorWrapper;
  50. }
  51. function getRegisteredScreen(screenID) {
  52. const generator = registeredScreens[screenID];
  53. if (!generator) {
  54. console.error('Navigation.getRegisteredScreen: ' + screenID + ' used but not yet registered');
  55. return;
  56. }
  57. return generator();
  58. }
  59. function showModal(params = {}) {
  60. return platformSpecific.showModal(params);
  61. }
  62. function dismissModal(params = {}) {
  63. return platformSpecific.dismissModal(params);
  64. }
  65. function dismissAllModals(params = {}) {
  66. return platformSpecific.dismissAllModals(params);
  67. }
  68. function showLightBox(params = {}) {
  69. return platformSpecific.showLightBox(params);
  70. }
  71. function dismissLightBox(params = {}) {
  72. return platformSpecific.dismissLightBox(params);
  73. }
  74. export default {
  75. registerScreen,
  76. getRegisteredScreen,
  77. registerComponent,
  78. showModal,
  79. dismissModal,
  80. dismissAllModals,
  81. showLightBox,
  82. dismissLightBox,
  83. startTabBasedApp: platformSpecific.startTabBasedApp,
  84. startSingleScreenApp: platformSpecific.startSingleScreenApp
  85. }