import Head from 'next/head' import Image from 'next/image' import { App } from 'src/components/App' import { tail } from 'lodash' import { Page } from 'src/components/Page' import { Markdown } from 'src/components/Markdown' import { Meta } from 'src/components/Meta' import { MetaBuilder } from 'src/lib/meta' import { apiGet } from '@/next-lib' import { GetStaticProps, NextPage } from 'next' import { IBreadcumbsPart, IMeta, ITag, FileTokenData, Token } from '@/types' import { size, ext } from 'src/lib/file' import { Html } from 'src/components/Html' import { Youtube } from '@/components/Youtube' import { createPage, createPageUrls } from '@/remote/factory' import { paramsToSlug } from '@/remote/lib' import { PageGrid } from '@/components/PageGrid' async function getUrls() { let urls = [] 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, null) if (!res || res.items.length === 0) { break } start += limit urls = [...urls, ...res.items] } return urls } const File: React.SFC = props => { const fileSize = size(props.file_size) const format = ext(props.file_format) return (
{props['title']}
{format} ({fileSize})
) } type Props = { title: string tags: ITag[] date: string breadcrumb: IBreadcumbsPart[] meta?: IMeta tokens: Token[] } const Index: NextPage = props => ( {props.title} {!props.meta ? null : ( )}
{props.tokens.map((x, i) => { switch (x.token) { case 'text': return ( ) case 'html': return ( ) case 'instagram': return ( ) case 'youtube': return ( ) case 'image': return (
{x.data.alt}
{x.data.caption}
) 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) { console.log('kek something happend'); return { notFound: true, } } const description = page.description ?? undefined const breadcrumbSize = page?.breadcrumb?.length ?? 0 const breadcrumb = breadcrumbSize < 2 ? null : page.breadcrumb const meta = (new MetaBuilder()) .setImage(page.cover) .setTitle(page.title) .setDescription(description) .build() const tokens = page.tokens return { props: { tokens, title: page.title, tags: page.tags, date: page.date, meta, breadcrumb, } } } export const getStaticPaths = async () => { const urls = await getUrls() return { fallback: false, paths: urls .map(path => { const slug = tail(path.split('/')) return { params: { slug, }, } }), } } export default Index