Router.js 5.7 KB

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