UNPKG

@etsoo/website

Version:

ETSOO CMS Based NextJs Website Framework

111 lines (110 loc) 4.13 kB
import { TabLayout } from '../dto/site/TabLayout'; import { StaticPage } from './StaticPage'; /** * Create tab page getStaticProps * 创建栏目的 getStaticProps * @param site Static site * @param tabFilter Tab filter * @param maxArticles Max artciles to read * @param revalidate Revalidate setting * @returns Result */ export function StaticTabPage(site, tabFilter, maxArticles, revalidate) { return StaticPage(site, async (siteData, context) => { var _a, _b, _c; // Current tab let tab; let articleUrl; if (tabFilter === true) { const { params = {} } = context; // Named as the file name [...param] const { param } = params; if (Array.isArray(param)) { // First path is 'home' reserved for the home tab if (param[0] === 'home') { tab = siteData.tabs.find((tab) => tab.url === '/'); } else { const targetUrl = '/' + param.join('/').toLowerCase(); tab = siteData.tabs.find((tab) => tab.url.toLowerCase() === targetUrl); if (tab == null) { // Local copy const locals = [...param]; // Is article? articleUrl = locals.pop(); const tabUrl = '/' + locals.join('/').toLowerCase(); tab = siteData.tabs.find((tab) => tab.url.toLowerCase() === tabUrl); } } } if (tab == null) { // Not found console.log(`No Tab Matched with ISR ${param}`); return { notFound: true }; } } else if (typeof tabFilter === 'string') { tabFilter = tabFilter.toLowerCase(); tab = siteData.tabs.find((tab) => tab.name.toLowerCase() === tabFilter || tab.url.toLowerCase() === `/${tabFilter}`); if (tab == null) { // Not found console.log(`No Tab Matched with ${tabFilter}`); return { notFound: true }; } } else { const callback = tabFilter; tab = siteData.tabs.find((tab) => callback(tab, context)); // Not found console.log(`No Tab Matched with Filter`); return { notFound: true }; } let parent = tab.parent; if (parent && tab.ancestorTabs == null) { // Avoid duplicate calculation tab.ancestorTabs = []; do { const ancestor = siteData.tabs.find((tab) => tab.id === parent); if (ancestor) { tab.ancestorTabs.push(ancestor); parent = ancestor.parent; } else { break; } } while (parent); } const article = tab.layout === TabLayout.Article ? (_a = (await site.getArticle({ tab: tab.id, withContent: true }))) !== null && _a !== void 0 ? _a : null : articleUrl ? (_b = (await site.getArticle({ tab: tab.id, url: articleUrl, withContent: true }))) !== null && _b !== void 0 ? _b : null : null; const articles = tab.layout === TabLayout.Article || tab.layout === TabLayout.None ? [] : (_c = (await site.getArticles({ tab: tab.id, withContent: tab.layout === TabLayout.ContentList, batchSize: typeof maxArticles === 'function' ? maxArticles(tab) : maxArticles }))) !== null && _c !== void 0 ? _c : []; return { props: { siteData, article, articles, tab }, revalidate }; }); }