Router.js 5.4 KB

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