From a309a4dd47083a58c998a4f6d169185177cca571 Mon Sep 17 00:00:00 2001 From: Daniel Almaguer Date: Fri, 20 Sep 2024 10:39:52 -0500 Subject: [PATCH] refactor: wrap header and footer in suspense (#1388) --- .changeset/thick-donuts-hope.md | 5 ++++ core/app/[locale]/(default)/layout.tsx | 39 ++++++------------------- core/app/[locale]/(default)/query.ts | 15 ++++++++++ core/app/[locale]/not-found.tsx | 30 +++++++++---------- core/components/footer/footer.tsx | 19 ++++++++---- core/components/header/index.tsx | 40 +++++++++++++++++++++++--- 6 files changed, 94 insertions(+), 54 deletions(-) create mode 100644 .changeset/thick-donuts-hope.md create mode 100644 core/app/[locale]/(default)/query.ts diff --git a/.changeset/thick-donuts-hope.md b/.changeset/thick-donuts-hope.md new file mode 100644 index 000000000..cb6db20ef --- /dev/null +++ b/.changeset/thick-donuts-hope.md @@ -0,0 +1,5 @@ +--- +"@bigcommerce/catalyst-core": minor +--- + +wraps header and footer in suspense boundaries diff --git a/core/app/[locale]/(default)/layout.tsx b/core/app/[locale]/(default)/layout.tsx index d921d8d1b..a53345e7f 100644 --- a/core/app/[locale]/(default)/layout.tsx +++ b/core/app/[locale]/(default)/layout.tsx @@ -1,52 +1,31 @@ import { unstable_setRequestLocale } from 'next-intl/server'; -import { PropsWithChildren } from 'react'; +import { PropsWithChildren, Suspense } from 'react'; -import { getSessionCustomerId } from '~/auth'; -import { client } from '~/client'; -import { graphql } from '~/client/graphql'; -import { revalidate } from '~/client/revalidate-target'; import { Footer } from '~/components/footer/footer'; -import { FooterFragment } from '~/components/footer/fragment'; -import { Header } from '~/components/header'; +import { Header, HeaderSkeleton } from '~/components/header'; import { Cart } from '~/components/header/cart'; -import { HeaderFragment } from '~/components/header/fragment'; import { LocaleType } from '~/i18n/routing'; interface Props extends PropsWithChildren { params: { locale: LocaleType }; } -const LayoutQuery = graphql( - ` - query LayoutQuery { - site { - ...HeaderFragment - ...FooterFragment - } - } - `, - [HeaderFragment, FooterFragment], -); - -export default async function DefaultLayout({ children, params: { locale } }: Props) { +export default function DefaultLayout({ children, params: { locale } }: Props) { unstable_setRequestLocale(locale); - const customerId = await getSessionCustomerId(); - - const { data } = await client.fetch({ - document: LayoutQuery, - fetchOptions: customerId ? { cache: 'no-store' } : { next: { revalidate } }, - }); - return ( <> -
} data={data.site} /> + }> +
} /> +
{children}
-