Router.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /**
  2. * 路由配置文件
  3. * @邠心vbe on 2021/03/22
  4. */
  5. import React, { useEffect, useRef } from 'react';
  6. import { NavigationContainer } from '@react-navigation/native';
  7. import { createStackNavigator, TransitionPresets } from '@react-navigation/stack';
  8. import { enableScreens } from 'react-native-screens';
  9. import About from './About';
  10. import Launcher from './Launch';
  11. import Login from './sign/Login';
  12. import Regist from './sign/Register'
  13. import Home from './home/Drawer';
  14. import Search from './home/Search';
  15. import ChargeDetails from './charge/Details';
  16. import QRScan from './charge/QRScan';
  17. import Feedback from './my/Feedback';
  18. import Privacy from './my/Privacy';
  19. import Profile from './my/Profile';
  20. import Condition from './my/Condition';
  21. import Summary from './charge/Summary';
  22. import Rating from './charge/Rating';
  23. import Wallet from './wallet/Wallet';
  24. import EditProfile from './my/EditProfile';
  25. import Referral from './my/Referral';
  26. import Topup from './wallet/Topup';
  27. import AddCard from './wallet/AddCard';
  28. import FormCard from './payment/FormCard';
  29. import AddVehicle from './my/AddVehicle';
  30. import PayNow from './payment/PayNow';
  31. import CreditCard from './payment/CreditCard';
  32. import EditVehicle from './my/EditVehicle';
  33. import EditAddress from './my/EditAddress';
  34. import Notify from './home/Notify';
  35. import Test from './home/maps/Test';
  36. import ResetPassword from './sign/ResetPassword';
  37. import PaymentMethod from './payment/PaymentMethod';
  38. import PayPerUse from './payment/PayPerUse';
  39. import PaymentWeb from './payment/PaymentWeb';
  40. import Settings from './Settings';
  41. export var PageList = {
  42. 'splash': {
  43. component: Launcher
  44. },
  45. 'home': {
  46. component: Home,
  47. options: TransitionPresets.FadeFromBottomAndroid
  48. },
  49. 'search': {
  50. title: 'Search',
  51. component: Search
  52. },
  53. 'login': {
  54. component: Login
  55. },
  56. 'register': {
  57. component: Regist
  58. },
  59. 'chargeDetail': {
  60. title: 'Charging Site',
  61. component: ChargeDetails
  62. },
  63. 'scanqr': {
  64. title: 'QR Scan',
  65. component: QRScan
  66. },
  67. 'feedback': {
  68. title: 'Feedback',
  69. component: Feedback
  70. },
  71. 'about': {
  72. title: 'About',
  73. component: About
  74. },
  75. 'privacy': {
  76. title: 'Privacy Policy',
  77. component: Privacy
  78. },
  79. 'profile': {
  80. title: 'Profile Settings',
  81. component: Profile
  82. },
  83. 'condition': {
  84. title: 'Terms and Use',
  85. component: Condition
  86. },
  87. 'summary': {
  88. title: 'Summary',
  89. component: Summary
  90. },
  91. 'rating': {
  92. title: 'Your Rating',
  93. component: Rating
  94. },
  95. 'wallet': {
  96. title: 'Transactions',
  97. component: Wallet
  98. },
  99. 'editProfile': {
  100. title: 'My Profile',
  101. component: EditProfile
  102. },
  103. 'editAddress': {
  104. title: 'Edit Address',
  105. component: EditAddress
  106. },
  107. 'editVehicle': {
  108. title: 'Update Vehicle',
  109. component: EditVehicle
  110. },
  111. 'referral': {
  112. title: 'Referral',
  113. component: Referral
  114. },
  115. 'topup': {
  116. title: 'Top Up',
  117. component: Topup
  118. },
  119. 'addCard': {
  120. title: 'Add Cards',
  121. component: AddCard
  122. },
  123. 'addVehicle': {
  124. title: 'Add Vehicle',
  125. component: AddVehicle
  126. },
  127. 'paynow': {
  128. title: 'PAYNOW',
  129. component: PayNow
  130. },
  131. 'paycard': {
  132. title: 'Top Up with Card',
  133. component: CreditCard
  134. },
  135. 'formCard': {
  136. title: 'Top Up with Card',
  137. component: FormCard
  138. },
  139. 'paymentMethod': {
  140. title: 'Payment Method',
  141. component: PaymentMethod
  142. },
  143. 'paymentWeb': {
  144. title: 'Make Payment',
  145. component: PaymentWeb
  146. },
  147. 'payPeruse': {
  148. title: 'Pay Per Use',
  149. component: PayPerUse
  150. },
  151. 'notify': {
  152. title: 'Notification Test',
  153. component: Notify
  154. },
  155. 'mapTest': {
  156. component: Test
  157. },
  158. 'forgotPassword': {
  159. component: ResetPassword
  160. },
  161. 'settings': {
  162. title: 'Settings',
  163. component: Settings
  164. }
  165. }
  166. const Stack = createStackNavigator();
  167. enableScreens();
  168. var bakPages = undefined;
  169. function getPages() {
  170. let pages = [], keys = {};
  171. if (bakPages == undefined) {
  172. bakPages = Object.assign({}, PageList);
  173. } else {
  174. PageList = bakPages;
  175. }
  176. for (const page in PageList) {
  177. var p = PageList[page]
  178. keys[page] = page;
  179. pages.push(
  180. <Stack.Screen
  181. key={page}
  182. name={page}
  183. component={p.component}
  184. options={p.title ? Title(p.title, p.options) : noTitle(p.options)}
  185. />
  186. );
  187. }
  188. PageList = keys;
  189. return pages;
  190. }
  191. const Router = () => {
  192. const navigation = useRef();
  193. useEffect(() => {
  194. //注入全局方法
  195. global.startPage = (name, params = {}) => {
  196. navigation.current.navigate(name, params);
  197. }
  198. global.dispatchPage = (params) => {
  199. navigation.current.dispatch(params);
  200. }
  201. global.goBack = () => {
  202. if (navigation.current.canGoBack()) {
  203. navigation.current.goBack();
  204. }
  205. }
  206. return (() => {
  207. global.startPage = null;
  208. global.goBack = null;
  209. });
  210. }, []);
  211. return (
  212. <NavigationContainer
  213. ref={navigation}>
  214. <Stack.Navigator
  215. initialRouteName='splash'
  216. screenOptions={{animationEnabled: true, ...TransitionPresets.SlideFromRightIOS }}>
  217. {getPages()}
  218. </Stack.Navigator>
  219. </NavigationContainer>
  220. )
  221. }
  222. const noTitle = (opt = {}) => {
  223. return {
  224. title: isIOS ? 'Back' : 'Juice Plus',
  225. headerShown: false,
  226. ...opt
  227. }
  228. }
  229. const Title = (title, opt = {}) => {
  230. return {
  231. title: title,
  232. headerShown: true,
  233. headerStyle: {
  234. ...titleHeight(),
  235. elevation: 0,
  236. backgroundColor: colorThemes
  237. },
  238. headerTintColor: '#232323',
  239. headerBackTitle: ' ',
  240. ...opt
  241. }
  242. }
  243. const titleHeight = () => {
  244. return isIOS ? {} : {height: toolbarSize};
  245. }
  246. export default Router;