UNPKG

@vitjs/runtime

Version:
57 lines (56 loc) 1.9 kB
/* eslint-disable @typescript-eslint/ban-types */ import React, { createElement } from 'react'; import { Switch, Route, Redirect } from 'react-router-dom'; function render({ route, opts, props }) { const routes = renderRoutes({ ...opts, routes: route.routes || [], rootRoutes: opts.rootRoutes, }, { location: props.location }); const { component: Component, wrappers } = route; if (Component) { const defaultPageInitialProps = window.g_initialProps; const newProps = { ...props, ...(opts.pageInitialProps || defaultPageInitialProps), route, routes: opts.rootRoutes, }; let ret = React.createElement(Component, { ...newProps }, routes); // route.wrappers if (wrappers) { let len = wrappers.length - 1; while (len >= 0) { ret = createElement(wrappers[len], newProps, ret); len -= 1; } } return ret; } return routes; } function getRouteElement({ route, index, opts }) { const routeProps = { key: route.key || index, exact: route.exact, strict: route.strict, sensitive: route.sensitive, path: route.path, }; if (route.redirect) { return React.createElement(Redirect, { ...routeProps, from: route.path, to: route.redirect }); } return (React.createElement(Route, { ...routeProps, render: (props) => { return render({ route, opts, props }); } })); } export default function renderRoutes(opts, switchProps = {}) { return opts.routes ? (React.createElement(Switch, { ...switchProps }, opts.routes.map((route, index) => getRouteElement({ route, index, opts: { ...opts, rootRoutes: opts.rootRoutes || opts.routes, }, })))) : null; }