22 lines
1.3 KiB
TypeScript
22 lines
1.3 KiB
TypeScript
import type {GetServerSideProps} from 'next';
|
|
import {NativeSeries} from '../components/NativeSeries';
|
|
import {NativeResult} from '../components/NativeResult';
|
|
import fixedLayouts from '../content/templates/layouts.json';
|
|
import standardLayout from '../content/standard-layout.json';
|
|
import {readDesign} from '../lib/design-server';
|
|
import {nativeLayout,type Design} from '../lib/native-layout';
|
|
import type {Layout} from '../lib/layout-parameters';
|
|
|
|
type Props={layout:Layout;design:Design;page:number|null;quality:boolean};
|
|
export default function TemplateLayout(props:Props){return props.design.document?<NativeSeries design={props.design} page={props.page} quality={props.quality}/>:<NativeResult {...props}/>}
|
|
export const getServerSideProps:GetServerSideProps<Props>=async({query,req,res})=>{
|
|
res.setHeader('Cache-Control','private, no-store');
|
|
const design=await readDesign(query.id,req);
|
|
if(!design)return {notFound:true};
|
|
const layout=[standardLayout,...fixedLayouts].find(l=>l.id===design.layoutId);
|
|
if(!layout)return {notFound:true};
|
|
const page=query.page===undefined?null:Number(query.page);
|
|
if(page!==null&&(!Number.isInteger(page)||page<1||page>(design.document?.pages.length||1)))return {notFound:true};
|
|
return {props:{layout:nativeLayout(layout),design,page,quality:query.export==='1'}};
|
|
};
|