import Head from "next/head" import { App } from "src/components/App" import { tail } from "lodash" import { Page } from "src/components/Page" import { NextSeo } from "next-seo" 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 "@/ui/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.meta ? null : ( )} {props.title}
{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