67 lines
1.4 KiB
TypeScript
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,
|
|
},
|
|
}
|
|
}
|