72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
import objects from './index.js';
|
|
|
|
export default function generateRoutes() {
|
|
let routes = [];
|
|
for (let objectType in objects) {
|
|
let object = objects[objectType];
|
|
if (object.list) {
|
|
let routeName = `${object.pagetype} List`;
|
|
object.list.routeName = routeName;
|
|
routes.push({
|
|
name: routeName,
|
|
path: object.list.route,
|
|
component: () => import('../pages/ListPage.vue'),
|
|
props: route => {
|
|
return { objectType, ...route.params };
|
|
}
|
|
});
|
|
}
|
|
if (object.detail) {
|
|
let children = object.detail.tabs.map(tab => {
|
|
const routeName = `${object.pagetype} Detail ${tab.label}`;
|
|
tab.routeName = routeName;
|
|
const nestedChildren = [];
|
|
|
|
// nested children shouldn't be added to the main children array
|
|
for (let route of tab.nestedChildrenRoutes || []) {
|
|
nestedChildren.push({
|
|
...route,
|
|
props: route => {
|
|
return { objectType, ...route.params };
|
|
}
|
|
});
|
|
}
|
|
|
|
return {
|
|
name: routeName,
|
|
path: tab.route,
|
|
component: () => import('../pages/DetailTab.vue'),
|
|
props: route => {
|
|
return { ...route.params };
|
|
},
|
|
redirect: nestedChildren.length ? { name: tab.redirectTo } : null,
|
|
children: nestedChildren
|
|
};
|
|
});
|
|
if (object.routes) {
|
|
for (let route of object.routes) {
|
|
children.push({
|
|
...route,
|
|
props: route => {
|
|
return { objectType, ...route.params };
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
object.detail.routeName = `${object.pagetype} Detail`;
|
|
routes.push({
|
|
name: object.detail.routeName,
|
|
path: object.detail.route,
|
|
component: () => import('../pages/DetailPage.vue'),
|
|
props: route => {
|
|
return { objectType, ...route.params };
|
|
},
|
|
redirect: children.length ? { name: children[0].name } : null,
|
|
children
|
|
});
|
|
}
|
|
}
|
|
return routes;
|
|
}
|