react-router-sitemap
Version:
Module to generate a sitemap for react-router configuration
57 lines (43 loc) • 1.53 kB
JavaScript
import buildPath from './path-builder';
/**
* Module for parsing the result of the `createRoutes(<Route>)` function.
* @module routesParser
* @param {Array|Object} [routes = []] Result of execute function
* `createRoutes(<Route>)`
* @param {String} [basePath = ''] Prefix for all paths
* @return {Array<String>} Array of paths
*
* @example
* import { routesCreater as createRoutes } from 'react-router-sitemap';
* import { routesParser as parseRoutes } from 'react-router-sitemap';
*
* const routes = createRoutes(<Route path='/home'>);
* const paths = parseRoutes(routes); // ['/home']
*
* @example
* import { routesCreater as createRoutes } from 'react-router-sitemap';
* import { routesParser as parseRoutes } from 'react-router-sitemap';
*
* const routes = createRoutes(<Route path='/home'>);
* const prefix = '/prefix';
* const paths = parseRoutes(routes, prefix); // ['/prefix/home']
*/
const parseRoutes = (routes = [], basePath = '') => {
const isArrayOfRoutes = Array.isArray(routes);
if (!isArrayOfRoutes) {
const path = buildPath(basePath, routes.path);
const childRoutes = routes.childRoutes;
const hasChilds = childRoutes && childRoutes.length;
if (!hasChilds) {
return [path];
}
const childs = parseRoutes(childRoutes, path);
return [path].concat(childs);
}
return routes.reduce((result, route) => {
const path = buildPath(basePath, routes.path);
const childs = parseRoutes(route, path);
return result.concat(childs);
}, []);
};
export default parseRoutes;