import Head from 'next/head' import { App } from 'src/components/App' import { tail } from 'lodash' import { Page } from 'src/components/Page' import { Meta } from 'src/components/Meta' import { MetaBuilder } from 'src/lib/meta' import { apiGet } from '@/next-lib' import { GetStaticProps, NextPage } from 'next' import { IBreadcumbsPart, IMenu, IMeta, ITag, Sign, Token } from '@/types' import { Html } from 'src/components/Html' import { Youtube } from '@/components/Youtube' import { createMenu, createPage, createPageUrls } from '@/remote/factory' import { paramsToSlug } from '@/remote/lib' import { PageGrid } from '@/components/PageGrid' import { useRouter } from 'next/router' import { FileCard } from '@/components/FIleCard' import { Picture } from '@/components/Picture' async function getUrls() { let urls: string[] = [] const limit = 100 let start = 0 while (true) { const url = `https://hudozka.tmshv.com/pages?_limit=${limit}&_start=${start}` const res = await apiGet(createPageUrls)(url, () => ({ items: [] })) if (!res || res.items.length === 0) { break } start += limit urls = [...urls, ...res.items] } return urls } type Props = { title: string tags: ITag[] date: string breadcrumb: IBreadcumbsPart[] meta?: IMeta menu: IMenu[], tokens: Token[] documentSignature: Sign } const Index: NextPage = props => { const router = useRouter() if (router.isFallback) { return (
loading...
) } return ( {props.title} {!props.meta ? null : ( )}
{props.tokens.map((x, i) => { switch (x.token) { case 'html': return ( ) case 'instagram': return ( ) case 'youtube': return ( ) case 'image': return ( ) case 'file': return ( ) case 'grid': return ( ) default: return (
                                        {JSON.stringify(x)}
                                    
) } })}
) } export const getStaticProps: GetStaticProps = async ctx => { const slug = paramsToSlug(ctx.params?.slug ?? []) const url = `https://hudozka.tmshv.com/pages?slug=${slug}` const page = await apiGet(createPage)(url, () => null) if (!page) { return { notFound: true, } } const menu = await apiGet(createMenu) ('https://hudozka.tmshv.com/menu', () => []) const description = page.description ?? undefined const breadcrumbSize = page?.breadcrumb?.length ?? 0 const breadcrumb = breadcrumbSize < 2 ? [] : page.breadcrumb ?? [] const meta = (new MetaBuilder()) .setImage(page.cover) .setTitle(page.title) .setDescription(description) .build() const tokens = page.tokens return { revalidate: 30, props: { tokens, title: page.title, tags: page.tags, date: page.date, meta, menu, breadcrumb, documentSignature: { date: '20.01.2021г.', person: 'Тимашева Марина Геннадьевна', position: 'Директор', signature: '0ac4ea89753a4ba9893799442325fb41', } } } } export const getStaticPaths = async () => { const urls = await getUrls() return { fallback: true, paths: urls .map(path => { const slug = tail(path.split('/')) return { params: { slug, }, } }), } } export default Index