Router.js 5.5 KB

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