From a75a2e7feb6cd495a791c089a5e0e415fc194b44 Mon Sep 17 00:00:00 2001 From: Henrik Larsson Date: Mon, 7 Aug 2023 15:06:13 +0200 Subject: [PATCH 1/6] Structural changes --- .../category-page-preview.tsx | 0 .../category-page.tsx | 0 .../home-page-preview.tsx | 0 .../home-page.tsx | 0 .../[[...slug]] => ...[[...slug]]}/page.tsx | 4 +- .../product-page-preview.tsx | 0 .../product-page.tsx | 0 .../single-page-preview.tsx | 0 .../single-page.tsx | 0 app/[locale]/[slug]/page.tsx | 44 +++++++++ app/[locale]/category/[slug]/page.tsx | 41 ++++++++ app/[locale]/layout.tsx | 9 +- app/[locale]/page.tsx | 27 ++++++ app/[locale]/product/[slug]/page.tsx | 89 ++++++++++++++++++ components/layout/footer/footer.tsx | 24 +++-- components/layout/header/header.tsx | 21 ++--- .../modules/blurb-section/blurb-section.tsx | 53 +++++------ components/modules/hero/hero.tsx | 57 ++++++------ components/product/product-view.tsx | 12 +-- components/ui/card/card.tsx | 93 ++++++++----------- .../ui/locale-switcher/locale-switcher.tsx | 4 +- components/ui/product-card/product-card.tsx | 2 +- i18n-config.ts | 4 +- lib/sanity/queries.tsx | 54 +++++------ middleware.ts | 1 - 25 files changed, 359 insertions(+), 180 deletions(-) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/category-page-preview.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/category-page.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/home-page-preview.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/home-page.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/page.tsx (98%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/product-page-preview.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/product-page.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/single-page-preview.tsx (100%) rename {app/[locale]/[[...slug]] => ...[[...slug]]}/single-page.tsx (100%) create mode 100644 app/[locale]/[slug]/page.tsx create mode 100644 app/[locale]/category/[slug]/page.tsx create mode 100644 app/[locale]/page.tsx create mode 100644 app/[locale]/product/[slug]/page.tsx diff --git a/app/[locale]/[[...slug]]/category-page-preview.tsx b/...[[...slug]]/category-page-preview.tsx similarity index 100% rename from app/[locale]/[[...slug]]/category-page-preview.tsx rename to ...[[...slug]]/category-page-preview.tsx diff --git a/app/[locale]/[[...slug]]/category-page.tsx b/...[[...slug]]/category-page.tsx similarity index 100% rename from app/[locale]/[[...slug]]/category-page.tsx rename to ...[[...slug]]/category-page.tsx diff --git a/app/[locale]/[[...slug]]/home-page-preview.tsx b/...[[...slug]]/home-page-preview.tsx similarity index 100% rename from app/[locale]/[[...slug]]/home-page-preview.tsx rename to ...[[...slug]]/home-page-preview.tsx diff --git a/app/[locale]/[[...slug]]/home-page.tsx b/...[[...slug]]/home-page.tsx similarity index 100% rename from app/[locale]/[[...slug]]/home-page.tsx rename to ...[[...slug]]/home-page.tsx diff --git a/app/[locale]/[[...slug]]/page.tsx b/...[[...slug]]/page.tsx similarity index 98% rename from app/[locale]/[[...slug]]/page.tsx rename to ...[[...slug]]/page.tsx index 0ab67b638..af5b76004 100644 --- a/app/[locale]/[[...slug]]/page.tsx +++ b/...[[...slug]]/page.tsx @@ -41,7 +41,7 @@ export default async function Page({ params }: { params: { slug: string[]; local return (
-
+
{isEnabled ? ( @@ -65,7 +65,7 @@ export default async function Page({ params }: { params: { slug: string[]; local )}
-
+
); } diff --git a/app/[locale]/[[...slug]]/product-page-preview.tsx b/...[[...slug]]/product-page-preview.tsx similarity index 100% rename from app/[locale]/[[...slug]]/product-page-preview.tsx rename to ...[[...slug]]/product-page-preview.tsx diff --git a/app/[locale]/[[...slug]]/product-page.tsx b/...[[...slug]]/product-page.tsx similarity index 100% rename from app/[locale]/[[...slug]]/product-page.tsx rename to ...[[...slug]]/product-page.tsx diff --git a/app/[locale]/[[...slug]]/single-page-preview.tsx b/...[[...slug]]/single-page-preview.tsx similarity index 100% rename from app/[locale]/[[...slug]]/single-page-preview.tsx rename to ...[[...slug]]/single-page-preview.tsx diff --git a/app/[locale]/[[...slug]]/single-page.tsx b/...[[...slug]]/single-page.tsx similarity index 100% rename from app/[locale]/[[...slug]]/single-page.tsx rename to ...[[...slug]]/single-page.tsx diff --git a/app/[locale]/[slug]/page.tsx b/app/[locale]/[slug]/page.tsx new file mode 100644 index 000000000..a2f51cdd3 --- /dev/null +++ b/app/[locale]/[slug]/page.tsx @@ -0,0 +1,44 @@ +import DynamicContentManager from 'components/layout/dynamic-content-manager'; +import { pageQuery } from 'lib/sanity/queries'; +import { clientFetch } from 'lib/sanity/sanity.client'; +import type { Metadata } from 'next'; +import { notFound } from 'next/navigation'; + +export const runtime = 'edge'; + +export const revalidate = 43200; // 12 hours in seconds + +export async function generateMetadata({ + params +}: { + params: { locale: string; slug: string }; +}): Promise { + const page = await clientFetch(pageQuery, params); + + if (!page) return notFound(); + + return { + title: page.seo?.title || page.title, + description: page.seo?.description || page.bodySummary, + openGraph: { + publishedTime: page.createdAt, + modifiedTime: page.updatedAt, + type: 'article' + } + }; +} + +interface PageParams { + params: { + locale: string; + slug: string; + }; +} + +export default async function Page({ params }: PageParams) { + const page = await clientFetch(pageQuery, params); + + if (!page) return notFound(); + + return ; +} diff --git a/app/[locale]/category/[slug]/page.tsx b/app/[locale]/category/[slug]/page.tsx new file mode 100644 index 000000000..a069cb3e1 --- /dev/null +++ b/app/[locale]/category/[slug]/page.tsx @@ -0,0 +1,41 @@ +import Text from 'components/ui/text/text'; +import { categoryQuery } from 'lib/sanity/queries'; +import { clientFetch } from 'lib/sanity/sanity.client'; +import { Metadata } from 'next'; +import { notFound } from 'next/navigation'; + +export async function generateMetadata({ + params +}: { + params: { slug: string; locale: string }; +}): Promise { + const category = await clientFetch(categoryQuery, params); + + if (!category) return notFound(); + + return { + title: category.seo.title || category.title, + description: category.seo.description || category.description + }; +} + +interface CategoryPageParams { + params: { + locale: string; + slug: string; + }; +} + +export default async function ProductPage({ params }: CategoryPageParams) { + const category = await clientFetch(categoryQuery, params); + + if (!category) return notFound(); + + const { title } = category; + + return ( +
+ {title} +
+ ); +} diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index 3d2a7833c..36ec12ff1 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -1,7 +1,10 @@ +import Footer from 'components/layout/footer/footer'; +import Header from 'components/layout/header/header'; import { NextIntlClientProvider } from 'next-intl'; import { Inter } from 'next/font/google'; import { notFound } from 'next/navigation'; import { ReactNode } from 'react'; +import { supportedLanguages } from '../../i18n-config'; import './globals.css'; const SITE_NAME = 'KM Storefront'; @@ -36,7 +39,7 @@ const inter = Inter({ }); export function generateStaticParams() { - return [{ locale: 'sv' }, { locale: 'en' }]; + return supportedLanguages.locales.map((locale) => ({ locale: locale.id })); } interface LocaleLayoutProps { @@ -59,7 +62,9 @@ export default async function LocaleLayout({ children, params: { locale } }: Loc - {children} +
+
{children}
+