Untitled
unknown
plain_text
2 years ago
1.9 kB
5
Indexable
module.exports = function (routeTree, data, urls) { const result = []; // Функция для построения маршрута function buildRoute(routeNode, path, params) { // Если есть параметризованный сегмент маршрута if (routeNode.route.startsWith(':')) { const entity = routeNode.route.slice(1); const entityId = params[entity]; const title = data[entity][entityId]; const route = `${path}/${entityId}`; result.push({ route, title }); } else { const route = `${path}${routeNode.route}`; result.push({ route, title: routeNode.title }); } // Рекурсивный обход дочерних элементов if (routeNode.children && routeNode.children.length > 0) { routeNode.children.forEach(child => { buildRoute(child, `${path}${routeNode.route}`, params); }); } // Проверка наличия перенаправления if (routeNode.redirectTo) { const redirectTo = routeNode.redirectTo; const redirectNode = findRouteNode(routeTree, redirectTo); if (redirectNode) { buildRoute(redirectNode, path, params); } } } // Функция для поиска элемента RouteNode в дереве function findRouteNode(routeNode, route) { if (routeNode.route === route) { return routeNode; } if (routeNode.children && routeNode.children.length > 0) { for (const child of routeNode.children) { const foundNode = findRouteNode(child, route); if (foundNode) { return foundNode; } } } return null; } // Построение маршрутов для каждого URL for (const url of urls) { const routeParams = url.split('/').slice(1); buildRoute(routeTree, '', routeParams); } return result; }
Editor is loading...