Gwk-Cultural-Park/pages/index.tsx
2024-09-07 08:40:25 +07:00

67 lines
1.4 KiB
TypeScript

import { ThemeProvider } from '@material-tailwind/react'
import { PreviewSuspense } from '@sanity/preview-kit'
import IndexPage from 'components/IndexPage'
import { getAllPosts, getSettings } from 'lib/sanity.client'
import { Post, Settings } from 'lib/sanity.queries'
import { GetStaticProps } from 'next'
import { lazy } from 'react'
const PreviewIndexPage = lazy(() => import('components/PreviewIndexPage'))
interface PageProps {
posts: Post[]
settings: Settings
preview: boolean
token: string | null
}
interface Query {
[key: string]: string
}
interface PreviewData {
token?: string
}
export default function Page(props: PageProps) {
const { posts, settings, preview, token } = props
if (preview) {
return (
<PreviewSuspense
fallback={
<ThemeProvider>
<IndexPage loading preview posts={posts} settings={settings} />
</ThemeProvider>
}
>
<PreviewIndexPage token={token} />
</PreviewSuspense>
)
}
return <IndexPage posts={posts} settings={settings} />
}
export const getStaticProps: GetStaticProps<
PageProps,
Query,
PreviewData
> = async (ctx) => {
const { preview = false, previewData = {} } = ctx
const [settings, posts = []] = await Promise.all([
getSettings(),
getAllPosts(),
])
return {
props: {
posts,
settings,
preview,
token: previewData.token ?? null,
},
}
}