@vitjs/runtime
Version:
@vitjs/runtime
57 lines (56 loc) • 1.9 kB
JavaScript
/* 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;
}