react-native-navigation的迁移库

platformSpecific.android.js 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import React, {Component} from 'react';
  2. import {AppRegistry, NativeModules} from 'react-native';
  3. import Navigation from './Navigation';
  4. import utils from './utils';
  5. const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');
  6. function startSingleScreenApp(params) {
  7. const screen = params.screen;
  8. if (!screen.screen) {
  9. console.error('startSingleScreenApp(params): screen must include a screen property');
  10. return;
  11. }
  12. addNavigatorParams(screen);
  13. addNavigatorButtons(screen);
  14. addNavigationStyleParams(screen);
  15. screen.passProps = params.passProps;
  16. //const drawer = setupDrawer(params.drawer);
  17. NativeModules.NavigationReactModule.startApp(screen);
  18. }
  19. function startTabBasedApp(params) {
  20. if (!params.tabs) {
  21. console.error('startTabBasedApp(params): params.tabs is required');
  22. return;
  23. }
  24. params.tabs.forEach(function(tab, idx) {
  25. addNavigatorParams(tab, null, idx);
  26. addNavigatorButtons(tab);
  27. addNavigationStyleParams(tab);
  28. addTabIcon(tab);
  29. tab.passProps = params.passProps;
  30. });
  31. const drawer = setupDrawer(params.drawer);
  32. //RctActivity.startTabBasedApp(params.tabs, params.tabsStyle, drawer);
  33. }
  34. function addTabIcon(tab) {
  35. if (tab.icon) {
  36. const icon = resolveAssetSource(tab.icon);
  37. if (icon) {
  38. tab.icon = icon.uri;
  39. }
  40. }
  41. if (!tab.icon) {
  42. throw new Error("No icon defined for tab " + tab.screen);
  43. }
  44. }
  45. function navigatorPush(navigator, params) {
  46. addNavigatorParams(params, navigator);
  47. addNavigatorButtons(params);
  48. addNavigationStyleParams(params);
  49. //RctActivity.navigatorPush(params);
  50. }
  51. function navigatorSetButtons(navigator, navigatorEventID, params) {
  52. if (params.rightButtons) {
  53. params.rightButtons.forEach(function(button) {
  54. if (button.icon) {
  55. const icon = resolveAssetSource(button.icon);
  56. if (icon) {
  57. button.icon = icon.uri;
  58. }
  59. }
  60. });
  61. }
  62. //RctActivity.setNavigatorButtons(params);
  63. }
  64. function navigatorPop(navigator, params) {
  65. addNavigatorParams(params, navigator);
  66. //RctActivity.navigatorPop(params);
  67. }
  68. function navigatorPopToRoot(navigator, params) {
  69. //RctActivity.navigatorPopToRoot({
  70. // navigatorID: navigator.navigatorID,
  71. // animated: !(params.animated === false)
  72. //});
  73. }
  74. function navigatorResetTo(navigator, params) {
  75. addNavigatorParams(params, navigator);
  76. addNavigatorButtons(params);
  77. addNavigationStyleParams(params);
  78. //RctActivity.navigatorResetTo(params);
  79. }
  80. function navigatorSetTabBadge(navigator, params) {
  81. //RctActivity.setTabBadge({
  82. // tabIndex: params.tabIndex,
  83. // badge: params.badge
  84. //});
  85. }
  86. function navigatorSetTitle(navigator, params) {
  87. //RctActivity.setNavigatorTitle(params);
  88. }
  89. function navigatorSwitchToTab(navigator, params) {
  90. //RctActivity.switchToTab({
  91. // navigatorID: navigator.navigatorID,
  92. // tabIndex: params.tabIndex
  93. //});
  94. }
  95. function navigatorToggleDrawer(navigator, params) {
  96. //RctActivity.toggleDrawer({
  97. // side: params.side,
  98. // animated: !(params.animated === false),
  99. // to: params.to || ''
  100. //});
  101. }
  102. function navigatorToggleNavBar(navigator, params) {
  103. //RctActivity.toggleNavigationBar({
  104. // hidden: params.to === 'hidden',
  105. // animated: !(params.animated === false)
  106. //});
  107. }
  108. function navigatorToggleTabs(navigator, params) {
  109. //RctActivity.toggleNavigatorTabs({
  110. // hidden: params.to === 'hidden',
  111. // animated: !(params.animated === false)
  112. //});
  113. }
  114. function showModal(params) {
  115. addNavigatorParams(params);
  116. addNavigatorButtons(params);
  117. addNavigationStyleParams(params);
  118. //RctActivity.showModal(params);
  119. }
  120. function dismissModal() {
  121. //RctActivity.dismissModal();
  122. }
  123. function dismissAllModals(params) {
  124. //RctActivity.dismissAllModals(params.animationType);
  125. }
  126. function addNavigatorParams(screen, navigator = null, idx = '') {
  127. screen.navigatorID = navigator ? navigator.navigatorID : utils.getRandomId() + '_nav' + idx;
  128. screen.screenInstanceID = utils.getRandomId();
  129. screen.navigatorEventID = screen.screenInstanceID + '_events';
  130. }
  131. function addNavigatorButtons(screen) {
  132. const Screen = Navigation.getRegisteredScreen(screen.screen);
  133. Object.assign(screen, Screen.navigatorButtons);
  134. // Get image uri from image id
  135. const rightButtons = screen.rightButtons ? screen.rightButtons : screen.navigatorButtons ?
  136. screen.navigatorButtons.rightButtons : null;
  137. if (rightButtons) {
  138. rightButtons.forEach(function(button) {
  139. if (button.icon) {
  140. const icon = resolveAssetSource(button.icon);
  141. if (icon) {
  142. button.icon = icon.uri;
  143. }
  144. }
  145. });
  146. }
  147. }
  148. function addNavigationStyleParams(screen) {
  149. const Screen = Navigation.getRegisteredScreen(screen.screen);
  150. screen.navigatorStyle = Object.assign({}, screen.navigatorStyle, Screen.navigatorStyle);
  151. }
  152. function setupDrawer(drawerParams) {
  153. const drawer = Object.assign({}, drawerParams);
  154. [drawer.left, drawer.right].forEach(side => {
  155. if (!side) {
  156. return;
  157. }
  158. const icon = resolveAssetSource(side.icon);
  159. if (icon) {
  160. side.icon = icon.uri;
  161. }
  162. });
  163. if (drawer.disableOpenGesture === undefined) {
  164. drawer.disableOpenGesture = false;
  165. }
  166. ;
  167. return drawer;
  168. }
  169. function showFAB(params) {
  170. params.icon = resolveAssetSource(params.icon).uri;
  171. //RctActivity.showFAB(params);
  172. }
  173. export default {
  174. startTabBasedApp,
  175. startSingleScreenApp,
  176. navigatorPush,
  177. navigatorPop,
  178. navigatorPopToRoot,
  179. navigatorResetTo,
  180. showModal,
  181. dismissModal,
  182. dismissAllModals,
  183. showFAB,
  184. navigatorSetButtons,
  185. navigatorSetTabBadge,
  186. navigatorSetTitle,
  187. navigatorSwitchToTab,
  188. navigatorToggleDrawer,
  189. navigatorToggleTabs,
  190. navigatorToggleNavBar
  191. }