WolfGrayy

Untitled

Apr 28th, 2023
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. import type { GetStaticPropsContext, InferGetStaticPropsType } from 'next'
  2. import { useRouter } from 'next/router'
  3. import { BuilderComponent, builder, useIsPreviewing } from '@builder.io/react'
  4. import DefaultErrorPage from 'next/error'
  5. import Head from 'next/head'
  6. import { env } from '~/env.mjs'
  7.  
  8. builder.init(env.NEXT_PUBLIC_BUILDER_IO_KEY)
  9.  
  10. export async function getStaticProps ({
  11. params
  12. }: GetStaticPropsContext<{ page: string[] }>) {
  13. const page =
  14. (await builder
  15. .get('page', {
  16. userAttributes: {
  17. urlPath: '/' + (params?.page?.join('/') || '')
  18. }
  19. })
  20. .toPromise()) || null
  21.  
  22. return {
  23. props: {
  24. page
  25. },
  26. // Next.js will attempt to re-generate the page:
  27. // - When a request comes in
  28. // - At most once every 5 seconds
  29. revalidate: 5
  30. }
  31. }
  32.  
  33. export async function getStaticPaths () {
  34. const pages = await builder.getAll('page', {
  35. options: { noTargeting: true },
  36. omit: 'data.blocks'
  37. })
  38.  
  39. return {
  40. paths: pages.map(page => `${page.data?.url}`),
  41. fallback: true
  42. }
  43. }
  44.  
  45. export default function Page ({
  46. page
  47. }: InferGetStaticPropsType<typeof getStaticProps>) {
  48. const router = useRouter()
  49. const isPreviewingInBuilder = useIsPreviewing()
  50. const show404 = !page && !isPreviewingInBuilder
  51.  
  52. if (router.isFallback) {
  53. return <h1>Loading...</h1>
  54. }
  55.  
  56. return (
  57. <>
  58. <Head>
  59. <meta name='viewport' content='width=device-width, initial-scale=1' />
  60. {!page && <meta name='robots' content='noindex' />}
  61. </Head>
  62. {show404 ? (
  63. <DefaultErrorPage statusCode={404} />
  64. ) : (
  65. <BuilderComponent model='page' content={page} />
  66. )}
  67. </>
  68. )
  69. }
  70.  
  71.  
Add Comment
Please, Sign In to add comment