react-native-navigation的迁移库

Navigation.js 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import React from 'react';
  2. import {AppRegistry} from 'react-native';
  3. import platformSpecific from './deprecated/platformSpecificDeprecated';
  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 undefined;
  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. function showInAppNotification(params = {}) {
  75. return platformSpecific.showInAppNotification(params);
  76. }
  77. function dismissInAppNotification(params = {}) {
  78. return platformSpecific.dismissInAppNotification(params);
  79. }
  80. function startTabBasedApp(params) {
  81. return platformSpecific.startTabBasedApp(params);
  82. }
  83. function startSingleScreenApp(params) {
  84. return platformSpecific.startSingleScreenApp(params);
  85. }
  86. export default {
  87. registerScreen,
  88. getRegisteredScreen,
  89. registerComponent,
  90. showModal: showModal,
  91. dismissModal: dismissModal,
  92. dismissAllModals: dismissAllModals,
  93. showLightBox: showLightBox,
  94. dismissLightBox: dismissLightBox,
  95. showInAppNotification: showInAppNotification,
  96. dismissInAppNotification: dismissInAppNotification,
  97. startTabBasedApp: startTabBasedApp,
  98. startSingleScreenApp: startSingleScreenApp
  99. };