@etsoo/website
Version:
ETSOO CMS Based NextJs Website Framework
39 lines (35 loc) • 1.23 kB
text/typescript
import { GetStaticPathsResult } from 'next';
import { SiteTab } from '../dto/site/SiteTab';
import { StaticSite } from '../site/StaticSite';
type ExcludedUrls = string[] | ((tab: SiteTab) => boolean);
/**
* Create getStaticPaths
* @param site Static site
* @param excludedUrls
* @returns Result
*/
export function StaticPaths(site: StaticSite, excludedUrls?: ExcludedUrls) {
excludedUrls ??= ['/', '/contact'];
return async (): Promise<GetStaticPathsResult> => {
// Pregenerate main menu items
const siteData = await site.getSiteData();
const paths =
siteData?.tabs
.filter((tab) =>
typeof excludedUrls === 'function'
? !excludedUrls(tab)
: tab.layout != 1 &&
!excludedUrls?.some(
(url) =>
url.toLowerCase() === tab.url.toLowerCase()
)
)
.map((tab) => ({
params: { param: tab.url.substring(1).split('/') }
})) ?? [];
return {
paths,
fallback: 'blocking'
};
};
}