react-native-navigation的迁移库

platformSpecific.android.js 5.3KB

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