Переглянути джерело

add app/utils/routeUtil.js

wudebin 6 місяців тому
батько
коміт
bea8ea122b
1 змінених файлів з 118 додано та 0 видалено
  1. 118 0
      Strides-SPAPP/app/utils/routeUtil.js

+ 118 - 0
Strides-SPAPP/app/utils/routeUtil.js

@@ -0,0 +1,118 @@
+/**
+ * Route Util
+ * @邠心vbe on 2023/02/13
+ */
+import { CommonActions } from '@react-navigation/routers';
+import React, { Component } from 'react';
+import { View } from 'react-native';
+import { PagerList } from '../pages/chargeV2/ChargeAdapter';
+import { PageList } from '../pages/Router';
+
+const routeUtil = {
+  /**
+   * 重置路由并导航到首页
+   * @param {Object} props 页面道具
+   */
+  resetToHome: (props) => {
+    if (props.navigation) {
+      props.navigation.reset({
+        index: 0,
+        routes: [{
+          name: PageList.home
+        }]
+      });
+    }
+  },
+  /**
+   * 重置路由并导航到指定路由
+   * @param {Object} props 页面道具
+   * @param {Array} routes 指定路由
+   */
+  resetHome2Page: (props, routes=[]) => {
+    if (props.navigation) {
+      props.navigation.reset({
+        index: routes.length,
+        routes: [
+          {
+            name: PageList.home,
+          },
+          ...routes
+        ]
+      })
+    }
+  },
+  /**
+   * 跳转到新页面并清除当前页面
+   * @param {Object} props 页面道具
+   * @param {Object} route 需要导航的路由
+   */
+  redirectTo: (props, route) => {
+    if (props.navigation) {
+      props.navigation.dispatch(state => {
+        var routes = []
+        routes = JSON.parse(JSON.stringify(state.routes))
+        routes.pop();
+        routes.push(route);
+        return CommonActions.reset({
+          index: routes.length - 1,
+          routes: routes
+        })
+      });
+    }
+  },
+  /**
+   * 导航到中转页面
+   * @param {String} route 需要导航的路由名称
+   */
+  bridge2Page: (route) => {
+    startPage(PageList.bridge, {route: route})
+  },
+  /**
+   * 导航到中转页面
+   * @param {Array} routes 需要导航的路由
+   */
+  bridge2Pages: (routes=[]) => {
+    startPage(PageList.bridge, {routes: routes})
+  }
+}
+
+export default routeUtil;
+
+export class BridgePage extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      params: ""
+    };
+  }
+
+  componentDidMount() {
+    const routes = this.props.route?.params?.routes
+    const route = this.props.route?.params?.route
+    if (route) {
+      startPage(route);
+    } else if (routes) {
+      console.log('bridge', routes);
+      setTimeout(() => {
+        routeUtil.resetHome2Page(this.props, routes)
+      }, 500);
+    }
+    this.props.navigation.addListener('focus', e => {
+      console.log('bridge.focus', this.props.route?.params)
+      if (this.state.params) {
+        routeUtil.resetToHome(this.props)
+      } else {
+        this.setState({
+          params: true
+        })
+      }
+    });
+  }
+
+  render() {
+    return (
+      <View style={ui.flex1}>
+      </View>
+    );
+  }
+}