react-native-navigation的迁移库

platformSpecificDeprecated.android.js 7.1KB

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