From 55a9c80a74798dbefc46b9d7a3a08086926b54d1 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Tue, 22 Nov 2022 00:34:50 +0000 Subject: [PATCH] support mobile components --- packages/app/src/router.jsx | 60 ++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/packages/app/src/router.jsx b/packages/app/src/router.jsx index a373cf6d..9b7f4cea 100755 --- a/packages/app/src/router.jsx +++ b/packages/app/src/router.jsx @@ -5,26 +5,39 @@ const NotFoundRender = () => { return
Not found
} -const DebugRoutes = import.meta.glob("/src/debug/components/**/[a-z[]*.jsx") -const JSXRoutes = import.meta.glob("/src/pages/**/[a-z[]*.jsx") -const TSXRoutes = import.meta.glob("/src/pages/**/[a-z[]*.tsx") - -const scriptRoutes = { - ...DebugRoutes, - ...JSXRoutes, - ...TSXRoutes, +const paths = { + ...import.meta.glob("/src/debug/components/**/[a-z[]*.jsx"), + ...import.meta.glob("/src/pages/**/[a-z[]*.jsx"), + ...import.meta.glob("/src/pages/**/[a-z[]*.tsx"), } -const routes = Object.keys(scriptRoutes).map((route) => { +const pathsMobile = { + ...import.meta.glob("/src/pages/**/[a-z[]*.mobile.jsx"), + ...import.meta.glob("/src/pages/**/[a-z[]*.mobile.tsx"), +} + +const routes = Object.keys(paths).map((route) => { const path = route .replace(/\/src\/pages|index|\.jsx$/g, "") + .replace(/\/src\/pages|index|\.tsx$/g, "") .replace(/\/src\/debug\/components/g, "/debug") .replace(/\[\.{3}.+\]/, "*") .replace(/\[(.+)\]/, ":$1") - return { path, component: React.lazy(scriptRoutes[route]) } + return { path, component: React.lazy(paths[route]) } }) +const mobileComponents = Object.fromEntries(Object.keys(pathsMobile).map((route) => { + const path = route + .replace(/\/src\/pages|index|\.mobile|\.jsx$/g, "") + .replace(/\/src\/pages|index|\.mobile|\.tsx$/g, "") + .replace(/\/src\/debug\/components/g, "/debug") + .replace(/\[\.{3}.+\]/, "*") + .replace(/\[(.+)\]/, ":$1") + + return [path, React.lazy(pathsMobile[route])] +})) + export function BindContexts(component) { let contexts = { main: {}, @@ -132,18 +145,29 @@ export const InternalRouter = (props) => { export const PageRender = (props) => { return - {routes.map(({ path, component: Component = React.Fragment }) => ( - { + if (window.isMobile) { + if (mobileComponents[path]) { + Component = mobileComponents[path] + } else { + console.warn(`No mobile component for ${path}, using default`) + } + } + + const generateRenderComponent = (props) => { + return React.createElement(BindContexts(Component), { + ...props, + history: props.history, + }) + } + + return React.createElement(BindContexts(Component), { - ...props, - ..._props, - history: props.history, - })} + component={generateRenderComponent} exact={true} /> - ))} + })}