43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
const LAYOUT_PREFIX = 'layout.';
|
|
const VIEW_PREFIX = 'view.';
|
|
const FIRST_LEVEL_ROUTE_COMPONENT_SPLIT = '$';
|
|
|
|
export function getLayoutAndPage(component?: string | null) {
|
|
let layout = '';
|
|
let page = '';
|
|
|
|
const [layoutOrPage, pageItem] = component?.split(FIRST_LEVEL_ROUTE_COMPONENT_SPLIT) || [];
|
|
|
|
layout = getLayout(layoutOrPage);
|
|
page = getPage(pageItem || layoutOrPage);
|
|
|
|
return { layout, page };
|
|
}
|
|
|
|
function getLayout(layout: string) {
|
|
return layout.startsWith(LAYOUT_PREFIX) ? layout.replace(LAYOUT_PREFIX, '') : '';
|
|
}
|
|
|
|
function getPage(page: string) {
|
|
return page.startsWith(VIEW_PREFIX) ? page.replace(VIEW_PREFIX, '') : '';
|
|
}
|
|
|
|
export function transformLayoutAndPageToComponent(layout: string, page: string) {
|
|
const hasLayout = Boolean(layout);
|
|
const hasPage = Boolean(page);
|
|
|
|
if (hasLayout && hasPage) {
|
|
return `${LAYOUT_PREFIX}${layout}${FIRST_LEVEL_ROUTE_COMPONENT_SPLIT}${VIEW_PREFIX}${page}`;
|
|
}
|
|
|
|
if (hasLayout) {
|
|
return `${LAYOUT_PREFIX}${layout}`;
|
|
}
|
|
|
|
if (hasPage) {
|
|
return `${VIEW_PREFIX}${page}`;
|
|
}
|
|
|
|
return '';
|
|
}
|