56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
// Copyright 2021 99cloud
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import React from 'react';
|
|
import { Redirect } from 'react-router-dom';
|
|
import { Switch, Route } from 'react-router';
|
|
import { isString, isObject } from 'lodash';
|
|
// import { isArray } from 'util';
|
|
|
|
const renderRoutes = (routes, extraProps = {}, switchProps = {}) =>
|
|
routes ? (
|
|
<Switch {...switchProps}>
|
|
{routes.map((route, i) => {
|
|
const key = route.key || i;
|
|
if (route.redirect) {
|
|
const { redirect } = route;
|
|
|
|
if (isString(redirect)) return <Redirect key={key} to={redirect} />;
|
|
|
|
if (isObject(redirect)) {
|
|
return <Redirect key={key} {...redirect} />;
|
|
}
|
|
}
|
|
return (
|
|
<Route
|
|
key={key}
|
|
exact={route.exact}
|
|
path={route.path}
|
|
render={(props) => {
|
|
if (route.render) {
|
|
return route.render(props);
|
|
}
|
|
return (
|
|
<route.component {...props} {...extraProps} route={route} />
|
|
);
|
|
}}
|
|
strict={route.strict}
|
|
/>
|
|
);
|
|
})}
|
|
</Switch>
|
|
) : null;
|
|
|
|
export default renderRoutes;
|