| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579 |
- /**
- * 路由配置文件
- * @邠心vbe on 2021/03/22
- */
- import React, { useEffect, useRef } from 'react';
- import { Pressable } from 'react-native';
- import { NavigationContainer, DefaultTheme } 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.ScaleFromCenterAndroid//.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: () => (
- <Pressable
- style={Styles.backIcon}
- android_ripple={rippleLessIcon}
- onPress={() => startPage(PageList.addVehicle)}>
- <MaterialCommunityIcons
- name='plus'
- color={pageTitleTint}
- size={24}
- style={Styles.iconOpacity}
- />
- </Pressable>
- )
- }
- },
- '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: () => (
- <Pressable
- style={Styles.backIcon}
- android_ripple={rippleLessIcon}
- onPress={() => startPage(PageList.applyMember)}>
- <MaterialCommunityIcons
- name='plus'
- color={pageTitleTint}
- size={24}
- style={Styles.iconOpacity}
- />
- </Pressable>
- )
- }
- },
- '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 = () => <HeaderTitle scope={titleScope}/>
- options.header = () => <Toolbar scope={titleScope} rightIcon={options?.headerRight}/>
- } else {
- options.title = title;
- options.header = () => <Toolbar scope={titleScope} rightIcon={options?.headerRight}/>
- //options.headerLeft = () => <BackButton/>
- }
- 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(
- <Stack.Screen
- key={page}
- name={page}
- component={p.component}
- options={p.title ? Title(p.title, p.options, p.titleScope) : noTitle(p.options)}
- />
- );
- }
- setPageList(keys);
- return pages;
- }
- const Router = () => {
- const navigation = useRef();
- useEffect(() => {
- //注入全局方法
- global.startPage = (name, params = {}) => {
- if (utils.isNotEmpty(name)) {
- let _current = navigation.current?.getCurrentRoute()
- utils.logEventTracking("page_navigation", _current.name + " → " + 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 (
- <NavigationContainer
- ref={navigation}
- theme={{
- ...DefaultTheme,
- dark: darkMode,
- colors: themeColor
- }}>
- <Stack.Navigator
- initialRouteName='splash'
- screenOptions={{animationEnabled: true, ...TransitionPresets.SlideFromRightIOS }}>
- {getPages()}
- </Stack.Navigator>
- </NavigationContainer>
- )
- }
- const titleHeight = () => {
- return isIOS ? {} : {height: toolbarSize};
- }
- export default Router;
|