react-native-navigation的迁移库

platformSpecific.android.js 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. addTabIcon(tab);
  30. tab.passProps = params.passProps;
  31. });
  32. const drawer = setupDrawer(params.drawer);
  33. RctActivity.startTabBasedApp(params.tabs, params.tabsStyle, drawer);
  34. }
  35. function addTabIcon(tab) {
  36. if (tab.icon) {
  37. const icon = resolveAssetSource(tab.icon);
  38. if (icon) {
  39. tab.icon = icon.uri;
  40. }
  41. }
  42. if (!tab.icon) {
  43. throw new Error("No icon defined for tab " + tab.screen);
  44. }
  45. }
  46. function navigatorPush(navigator, params) {
  47. addNavigatorParams(params, navigator);
  48. addNavigatorButtons(params);
  49. addNavigationStyleParams(params);
  50. RctActivity.navigatorPush(params);
  51. }
  52. function navigatorSetButtons(navigator, navigatorEventID, params) {
  53. if (params.rightButtons) {
  54. params.rightButtons.forEach(function(button) {
  55. if (button.icon) {
  56. const icon = resolveAssetSource(button.icon);
  57. if (icon) {
  58. button.icon = icon.uri;
  59. }
  60. }
  61. });
  62. }
  63. RctActivity.setNavigatorButtons(params);
  64. }
  65. function navigatorPop(navigator, params) {
  66. addNavigatorParams(params, navigator);
  67. RctActivity.navigatorPop(params);
  68. }
  69. function navigatorPopToRoot(navigator, params) {
  70. RctActivity.navigatorPopToRoot({
  71. navigatorID: navigator.navigatorID,
  72. animated: !(params.animated === false)
  73. });
  74. }
  75. function navigatorResetTo(navigator, params) {
  76. addNavigatorParams(params, navigator);
  77. addNavigatorButtons(params);
  78. addNavigationStyleParams(params);
  79. RctActivity.navigatorResetTo(params);
  80. }
  81. function navigatorSetTabBadge(navigator, params) {
  82. RctActivity.setTabBadge({
  83. tabIndex: params.tabIndex,
  84. badge: params.badge
  85. });
  86. }
  87. function navigatorSetTitle(navigator, params) {
  88. RctActivity.setNavigatorTitle(params);
  89. }
  90. function navigatorSwitchToTab(navigator, params) {
  91. RctActivity.switchToTab({
  92. navigatorID: navigator.navigatorID,
  93. tabIndex: params.tabIndex
  94. });
  95. }
  96. function navigatorToggleDrawer(navigator, params) {
  97. RctActivity.toggleDrawer({
  98. side: params.side,
  99. animated: !(params.animated === false),
  100. to: params.to || ''
  101. });
  102. }
  103. function navigatorToggleNavBar(navigator, params) {
  104. RctActivity.toggleNavigationBar({
  105. hidden: params.to === 'hidden',
  106. animated: !(params.animated === false)
  107. });
  108. }
  109. function navigatorToggleTabs(navigator, params) {
  110. RctActivity.toggleNavigatorTabs({
  111. hidden: params.to === 'hidden',
  112. animated: !(params.animated === false)
  113. });
  114. }
  115. function showModal(params) {
  116. addNavigatorParams(params);
  117. addNavigatorButtons(params);
  118. addNavigationStyleParams(params);
  119. RctActivity.showModal(params);
  120. }
  121. function dismissModal() {
  122. RctActivity.dismissModal();
  123. }
  124. function dismissAllModals(params) {
  125. RctActivity.dismissAllModals(params.animationType);
  126. }
  127. function addNavigatorParams(screen, navigator = null, idx = '') {
  128. screen.navigatorID = navigator ? navigator.navigatorID : utils.getRandomId() + '_nav' + idx;
  129. screen.screenInstanceID = utils.getRandomId();
  130. screen.navigatorEventID = screen.screenInstanceID + '_events';
  131. }
  132. function addNavigatorButtons(screen) {
  133. const Screen = Navigation.getRegisteredScreen(screen.screen);
  134. Object.assign(screen, Screen.navigatorButtons);
  135. // Get image uri from image id
  136. const rightButtons = screen.rightButtons ? screen.rightButtons : screen.navigatorButtons ?
  137. screen.navigatorButtons.rightButtons : null;
  138. if (rightButtons) {
  139. rightButtons.forEach(function(button) {
  140. if (button.icon) {
  141. const icon = resolveAssetSource(button.icon);
  142. if (icon) {
  143. button.icon = icon.uri;
  144. }
  145. }
  146. });
  147. }
  148. }
  149. function addNavigationStyleParams(screen) {
  150. const Screen = Navigation.getRegisteredScreen(screen.screen);
  151. screen.navigatorStyle = Object.assign({}, screen.navigatorStyle, Screen.navigatorStyle);
  152. }
  153. function setupDrawer(drawerParams) {
  154. const drawer = Object.assign({}, drawerParams);
  155. [drawer.left, drawer.right].forEach(side => {
  156. if (!side) {
  157. return;
  158. }
  159. const icon = resolveAssetSource(side.icon);
  160. if (icon) {
  161. side.icon = icon.uri;
  162. }
  163. });
  164. if (drawer.disableOpenGesture === undefined) {
  165. drawer.disableOpenGesture = false;
  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. }