/** * 路由配置文件 * @邠心vbe on 2021/03/22 */ import React, { useEffect, useRef } from 'react'; import { Pressable } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'; import { enableScreens } from 'react-native-screens'; import Toolbar, { BackButton, Styles } from '../components/Toolbar'; import app from '../../app.json'; import About from './about/AboutV2'; import Launcher from './Launch'; import Login from './sign/Login'; import Regist from './sign/RegisterV2'; import RegisterV3 from './sign/RegisterV3'; import RegisterV4 from './sign/RegisterV4'; import RegisterPublic from './sign/RegisterPublic'; import RegisterDriver from './sign/RegisterDriver'; import Home from './home/Index'; import Search from './search/SearchV2'; import SearchV3 from './search/SearchV3'; import ChargeDetails from './charge/Details'; import QRScan from './charge/QRScan'; import Feedback from './my/Feedback'; import Privacy from './my/Privacy'; import Profile from './my/ProfileV2'; import ProfileV3 from './my/ProfileV3'; import Condition from './my/Condition'; import Summary from './chargeV2/SummaryV2'; import SummaryV3 from './chargeV2/SummaryV3'; import Rating from './charge/Rating'; import Wallet from './wallet/Wallet'; import EditProfile from './my/EditProfile'; import Referral from './my/Referral'; import Topup from './wallet/Topup'; //not 2C2P import TopupV2 from './wallet/TopupV2'; //2C2P payment import TopupNew from './wallet/TopupNew'; import AddCard from './wallet/AddCard'; import FormCard from './payment/FormCard'; import VehicleList from './vehicles/VehicleList'; import AddVehicle from './vehicles/AddVehicle'; import EditVehicle from './vehicles/EditVehicle'; import VehicleDetail from './vehicles/VehicleDetail'; import PayNow from './payment/PayNow'; import CreditCard from './payment/CreditCard'; import EditAddress from './my/EditAddress'; import Notify from './home/Notify'; import Test from './home/maps/Test'; import ResetPassword from './sign/ResetPasswordV2'; import PaymentMethod from './payment/PaymentMethod'; import PayPerUse from './payment/PayPerUse'; import PaymentWeb from './payment/PaymentWeb'; import Settings from './Settings'; import ChargeAdapter from './chargeV2/ChargeAdapter'; import ChargingPage from './chargingV2/ChargingPage'; import ChargingPageV4 from './chargingV3/ChargingPage'; import { BridgePage } from '../utils/routeUtil'; import HeaderTitle from '../components/HeaderTitle'; import Bookmarks from './bookmark/Bookmarks'; import MembersList from './member/MembersList'; import ApplyMember from './member/ApplyMember'; import Contact from './about/Contact'; import Notification from './alert/Notification'; import ViewAlerts from './alert/ViewAlerts'; import ViewCampaign from './alert/ViewCampaign'; import RefundPolicy from './payment/RefundPolicy'; import ViewArticle from './alert/ViewArticle'; import VehicleListV2 from './vehicles/VehicleListV2'; import HistoryList from './wallet/HistoryList'; import VoucherPage from './vouchers/VoucherPage'; import VoucherSelect from './vouchers/VoucherSelect'; import VoucherDetails from './vouchers/VoucherDetails'; import PointsHistory from './vouchers/PointsHistory'; import Transaction from './transaction/Transaction'; import LoginVL from './signLumi/LoginVL'; import RegisterVL from './signLumi/RegisterVL'; import ForgotPwdVL from './signLumi/ForgotPwdVL'; import Wallets from './wallets/Wallets'; import utils from '../utils/utils'; import DeleteAccount from './my/DeleteAccount'; export var PageList = { 'splash': { component: Launcher }, 'home': { component: Home, options: TransitionPresets.FadeFromBottomAndroid }, 'bridge': { component: BridgePage }, 'search': { title: 'Search', titleScope: 'route.search', component: app.isLumiWhitelabel ? SearchV3 : Search }, 'login': { component: app.isLumiWhitelabel ? LoginVL : Login }, 'register': { component: RegisterV4, title: 'Public Registration', titleScope: 'route.publicRegister' }, 'registerLumi': { component: RegisterVL, title: 'Registration', titleScope: 'sign.btnRegister' }, 'registerPublic': { component: RegisterPublic, title: 'Public Registration', titleScope: 'route.publicRegister' }, 'registerFleet': { component: RegisterDriver, title: 'Fleet / PHV Registration', titleScope: 'route.driverRegister' }, 'chargeDetail': { title: 'Charging Site', titleScope: 'route.chargingSite', component: ChargeDetails }, 'chargeDetailPage': { //title: 'Charging Site', //titleScope: 'route.chargingSite', component: ChargeAdapter }, 'chargingPage': { title: 'Charging', titleScope: 'route.charging', component: ChargingPage }, 'chargingPageV4': { title: 'Charging', titleScope: 'route.charging', component: ChargingPageV4 }, 'scanqr': { title: 'QR Scan', titleScope: 'route.qrScan', component: QRScan }, 'feedback': { title: 'Feedback', titleScope: 'route.feedback', component: Feedback }, 'about': { title: 'About', titleScope: 'route.about', component: About }, 'supportContact': { title: 'Support Hotline', titleScope: 'support.supportHotline', component: Contact }, 'privacy': { title: 'Privacy Policy', titleScope: 'route.privacyPolicy', component: Privacy }, 'condition': { title: 'Terms of Use', titleScope: 'route.termsOfUse', component: Condition }, 'profile': { title: 'Profile Settings', titleScope: 'route.profileSettings', component: Profile }, 'profileV3': { component: ProfileV3 }, 'summary': { title: 'Summary', titleScope: 'receipt.receipt', component: app.charge.newSummary ? SummaryV3 : Summary }, 'rating': { title: 'Your Rating', titleScope: 'route.rating', component: Rating }, 'wallet': { title: 'Transactions', titleScope: 'route.wallet', component: Wallet }, 'wallets': { title: 'Wallets', titleScope: 'route.wallets', component: Wallets }, 'history': { title: 'History', titleScope: 'route.history', component: HistoryList }, 'transaction': { title: 'Transactions', titleScope: 'route.wallet', component: Transaction }, 'editProfile': { title: 'My Profile', titleScope: 'route.editProfile', component: EditProfile }, 'editAddress': { title: 'Edit Address', titleScope: 'route.editAddress', component: EditAddress }, 'referral': { title: 'Referral', titleScope: 'route.referral', component: Referral }, 'topup': { title: 'Top Up', titleScope: 'route.topUp', component: Topup }, 'topupV2': { title: 'Top Up', titleScope: 'route.topUp', component: TopupV2 }, 'topupNew': { title: 'Top Up', titleScope: 'route.topUp', component: TopupNew }, 'addCard': { title: 'Add Cards', titleScope: 'route.addCards', component: AddCard }, 'myVehicles': { title: 'My Vehicles', titleScope: 'route.myVehicles', component: VehicleList, options: { headerRight: () => ( startPage(PageList.addVehicle)}> ) } }, 'vehiclesListV2': { title: 'My Vehicles', titleScope: 'route.myVehicles', component: VehicleListV2 }, 'addVehicle': { title: 'Add Vehicle', titleScope: 'route.addVehicle', component: AddVehicle }, 'editVehicle': { title: 'Update Vehicle', titleScope: 'route.editVehicle', component: EditVehicle }, 'addVehicleV2': { title: 'Add Vehicle', titleScope: 'route.addVehicle', component: VehicleDetail }, 'editVehicleV2': { title: 'Update Detail', titleScope: 'route.editVehicle', component: VehicleDetail }, 'paynow': { title: 'PAYNOW', titleScope: 'route.paynow', component: PayNow }, 'paycard': { title: 'Top Up with Card', titleScope: 'route.topUpWithCard', component: CreditCard }, 'formCard': { title: 'Top Up with Card', titleScope: 'route.topUpWithCard', component: FormCard }, 'paymentMethod': { title: 'Payment Method', titleScope: 'route.paymentMethod', component: PaymentMethod }, 'paymentWeb': { title: 'Make Payment', titleScope: 'route.makePayment', component: PaymentWeb }, 'payPeruse': { title: 'Pay Per Use', titleScope: 'route.payPerUse', component: PayPerUse }, 'notification': { title: 'Notification', titleScope: 'route.notifications', component: Notification }, 'viewMessage': { title: 'View Message', titleScope: 'notification.viewMessage', component: ViewAlerts }, 'viewArticle': { //title: 'View Article', //titleScope: 'notification.viewMessage', component: ViewArticle }, 'viewCampaign': { //title: 'View Campaign', //titleScope: 'notification.viewMessage', component: ViewCampaign }, 'notify': { title: 'Notification Test', titleScope: 'route.notificationTest', component: Notify }, 'mapTest': { component: Test }, 'forgotPassword': { title: 'Forgot Password', titleScope: 'route.forgotPassword', component: ResetPassword }, 'forgotPasswordLumi': { title: 'Forgot Password', titleScope: 'route.forgotPassword', component: ForgotPwdVL }, 'changePassword': { title: 'Account Security', titleScope: 'route.changePassword', component: ResetPassword }, 'bookmarks': { title: "Bookmarks", titleScope: 'route.bookmarks', component: Bookmarks }, 'membersList': { title: "Your Membership", titleScope: 'route.yourMembers', component: MembersList, options: { headerRight: () => ( startPage(PageList.applyMember)}> ) } }, 'applyMember': { title: "Apply Membership", titleScope: 'route.applyMember', component: ApplyMember }, 'refundPolicy': { title: "Refund Policy", titleScope: 'route.refundPolicy', component: RefundPolicy }, 'myVoucher': { title: "Vouchers", titleScope: 'route.vouchers', component: VoucherPage }, 'voucherDetails': { title: "Voucher Details", titleScope: 'route.voucherDetails', component: VoucherDetails }, 'selectVoucher': { title: "Select Voucher", titleScope: 'route.selectVoucher', component: VoucherSelect }, 'pointsHistory': { title: "Points History", titleScope: 'route.pointsHistory', component: PointsHistory }, 'deleteAccount': { title: "Delete Account", titleScope: 'profile.deleteAccount', component: DeleteAccount }, 'settings': { title: 'Settings', titleScope: 'route.settings', component: Settings } } export const setPageList = (list) => { if (list) { PageList = list; //console.log("设置List", PageList); } } const Stack = createStackNavigator(); enableScreens(); /** * 配置APP主题色 */ const themeColor = { text: textPrimary, card: colorThemes, primary: colorPrimary, background: pageBackground, notification: colorDark } const noTitle = (opt = {}) => { return { title: isIOS ? 'Back' : app.displayName, headerShown: false, ...opt } } /** * 配置标题 * @param {String} title 页面标题 * @param {Object} opt 标题栏选项 * @returns */ const Title = (title, opt = {}, titleScope) => { const options = { headerShown: true, headerStyle: { ...titleHeight(), elevation: 0, shadowOpacity: 0, borderBottomWidth: 0, backgroundColor: app.isWhitelabel ? colorLight : colorPrimary //配置标题栏背景 }, headerTintColor: pageTitleTint, //配置标题栏文字和图标颜色 headerBackTitle: ' ', //配置iOS返回按钮文字 headerBackTitleVisible: false, ...opt } if (titleScope && $t) { //options.headerTitle = () => options.header = () => } else { options.title = title; options.header = () => //options.headerLeft = () => } return options; } var bakPages = undefined; function getPages() { let pages = [], keys = {}; if (bakPages == undefined) { bakPages = Object.assign({}, PageList); } else { setPageList(bakPages); } for (const page in bakPages) { var p = bakPages[page] keys[page] = page; pages.push( ); } setPageList(keys); return pages; } const Router = () => { const navigation = useRef(); useEffect(() => { //注入全局方法 global.startPage = (name, params = {}) => { if (utils.isNotEmpty(name)) { navigation.current?.navigate(name, params); } } global.dispatchPage = (params) => { navigation.current?.dispatch(params); } global.goBack = () => { if (global.pageBackFallback && global.pageBackFallback.names) { //console.log("覆盖返回", navigation.current.getCurrentRoute()?.name); if (global.pageBackFallback.names.indexOf(navigation.current.getCurrentRoute()?.name) >= 0) { global.pageBackFallback?.callback(); global.pageBackFallback = undefined; return; } } if (navigation.current?.canGoBack()) { navigation.current?.goBack(); } else { startPage(PageList.home); } } global.goBack2 = () => { if (navigation.current?.canGoBack()) { navigation.current?.goBack(); } else { startPage(PageList.home); } } return (() => { global.startPage = null; global.goBack = null; }); }, []); return ( {getPages()} ) } const titleHeight = () => { return isIOS ? {} : {height: toolbarSize}; } export default Router;