diff --git a/app/[locale]/[[...slug]]/page.tsx b/app/[locale]/[[...slug]]/page.tsx index 99f208150..4b5b37d51 100644 --- a/app/[locale]/[[...slug]]/page.tsx +++ b/app/[locale]/[[...slug]]/page.tsx @@ -1,14 +1,16 @@ -// 'use client'; - import getQueryFromSlug from 'helpers/getQueryFromSlug'; import { docQuery } from 'lib/sanity/queries'; import { client } from 'lib/sanity/sanity.client'; +import type { Metadata } from 'next'; import { groq } from 'next-sanity'; import CategoryPage from './category-page'; import HomePage from './home-page'; import ProductPage from './product-page'; import SinglePage from './single-page'; +/** + * Get paths for each page. + */ export async function generateStaticParams() { const paths = await client.fetch(groq`${docQuery}`, { next: { revalidate: 10 }, @@ -43,6 +45,45 @@ function filterDataToSingleItem(data: any, preview = false) { return data[0] } +/** + * Generate metadata for each page. + */ +export async function generateMetadata({ params }: {params: { slug: string[], locale: string }}): Promise { + const { slug, locale } = params + + const { query = '', queryParams } = getQueryFromSlug(slug, locale) + + const pageData = await client.fetch(query, queryParams) + + const data = filterDataToSingleItem(pageData, false) + + const { seo, title } = data + + return { + title: seo?.title ? seo?.title : title, + description: seo?.description + ? seo.description + : 'Webb och digitalbyrå från Göteborg', + openGraph: { + images: [ + { + url: seo?.image?.asset?.url + ? seo.image.asset.url + : '/og-image.jpg', + width: 1200, + height: 630, + alt: seo?.coverImage?.alt + ? seo.coverImage.alt + : 'Kodamera AB', + }, + ], + }, + } +} + +/** + * Render pages depending on type. + */ export default async function Page({ params, }: { diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index 751c98bc8..10b80c3ce 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -6,13 +6,29 @@ import { notFound } from 'next/navigation'; import { ReactNode } from 'react'; import './globals.css'; -const { TWITTER_CREATOR, TWITTER_SITE, SITE_NAME } = process.env; +const SITE_NAME = "KM Storefront" +const SITE_DESCRIPTION = "Webb och digitalbyrå från Göteborg" +const TWITTER_CREATOR = "@kodamera.se" +const TWITTER_SITE = "https://kodamera.se" +const OG_IMAGE_URL = "/og-image.jpg" +const OG_IMAGE_ALT = "Kodamera" export const metadata = { title: { default: SITE_NAME, template: `%s | ${SITE_NAME}` }, + description: SITE_DESCRIPTION, + openGraph: { + images: [ + { + url: OG_IMAGE_URL, + width: 1200, + height: 630, + alt: OG_IMAGE_ALT + }, + ], + }, robots: { follow: true, index: true @@ -34,7 +50,7 @@ const inter = Inter({ }); export function generateStaticParams() { - return [{locale: 'sv'}, {locale: 'en'}, {locale: 'nn'}]; + return [{locale: 'sv'}, {locale: 'en'}]; } interface LocaleLayoutProps { @@ -46,6 +62,7 @@ interface LocaleLayoutProps { export default async function LocaleLayout({children, params: {locale}}: LocaleLayoutProps) { let messages; + try { messages = (await import(`../../messages/${locale}.json`)).default; } catch (error) { diff --git a/messages/en.json b/messages/en.json index 3dff17e4d..755839b26 100644 --- a/messages/en.json +++ b/messages/en.json @@ -1,7 +1,4 @@ { - "Index": { - "title": "Welcome" - }, "ui": { "button": { "close": "Close", diff --git a/messages/nn.json b/messages/nn.json deleted file mode 100644 index 8c7f9b7f7..000000000 --- a/messages/nn.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "Index": { - "title": "Velkommen" - }, - "ui": { - "button": { - "close": "Lukk", - "back": "Tilbake", - "wishList": "Legg til i favorittlisten" - }, - "previewBanner": { - "titlePart": "Forhåndsvisning av:", - "exitPreviewLabel": "Avslutt forhåndsvisning" - }, - "copyright": "Alle rettigheter forbeholdt." - }, - "search": { - "search": "Søk", - "placeholder": "Søk etter produkter...", - "globalPlaceholder": "Søk produkter og kategorier...", - "categories": "Kategorier", - "priceRange": "Prisklasse", - "clearAllFilters": "Fjern alle filtre", - "submitTitle": "Send inn søket ditt", - "clearTitle": "Fjern søket ditt", - "resetTitle": "Tilbakestill søket ditt", - "seo": { - "title": "Søk", - "description": "Søk etter produkt eller kategori" - } - }, - "product": { - "description": "Beskrivelse", - "specification": "Spesifikasjon", - "shippingAndReturns": "Frakt og retur", - "reviews": "anmeldelser", - "noReviews": "Ingen recensioner", - "addToCart": "Legg i handlekurv", - "notAvailable": "Ikke tilgjengelig", - "related": "Relaterte produkter", - "selectSize": "Velg størrelse" - }, - "cart": { - "myCarttitle": "Handlekurven min", - "subTotal": "Delsum", - "taxes": "Skatter", - "calculatedAtCheckout": "Beregned i kassen", - "free": "Gratis", - "shipping": "Shipping", - "estimatedShipping": "Estimert shipping", - "total": "Totalt", - "proceedToCheckout": "Fortsett til utsjekking", - "empty": { - "title": "Handlekurven din er tom", - "text": "Legg til et produkt for å begynne å handle." - }, - "error": "Vi kunne ikke fullføre kjøpet ditt. Sjekk kortinformasjonen din og prøv igjen.", - "success": "Takk for din bestilling.", - "addShippingAddress": "+ Legg til leveringsadresse", - "addShippingMethod": "+ Legg til leveringsmetode", - "addPaymentMethod": "+ Legg til betalingsmåte", - "continueShopping": "Fortsette å handle", - "seo": { - "title": "Min handlekurv", - "description": "Alle produktene i handlekurven din vises her" - } - }, - "checkout": { - "checkoutTitle": "Kasse", - "subTotal": "Delsum", - "taxes": "Skatter", - "calculatedAtCheckout": "Beregned i kassen", - "free": "Gratis", - "shipping": "Shipping", - "total": "Totalt", - "confirmPurchase": "Bekreft kjøp" - }, - "paymentMethod": { - "paymentMethodTitle": "Betalingsmåte", - "cardHolderName": "Kortholder", - "cardNumber": "Kortnummer", - "expires": "Utløpsdato", - "cvc": "CVC", - "firstName": "Fornavn", - "lastName": "Etternavn", - "company": "Firma (valgfritt)", - "streetAndHouseNumber": "Gate og husnummer", - "apartment": "Leilighet, suite osv. (valgfritt)", - "postalCode": "Post kode", - "city": "By", - "countryAndRegion": "Land/Region", - "continue": "Fortsette" - }, - "shipping": { - "shippingTitle": "Shipping", - "shippingAdress": { - "same": "Samme som betalingsadresse", - "different": "Bruk en annen leveringsadresse" - }, - "addShippingAddress": "Legg til leveringsadresse", - "firstName": "Fornavn", - "lastName": "Etternavn", - "company": "Firma (valgfritt)", - "streetAndHouseNumber": "Gate og husnummer", - "apartment": "Leilighet, suite osv. (valgfritt)", - "postalCode": "Post kode", - "city": "By", - "countryAndRegion": "Land/Region", - "continue": "Fortsette" - }, - "orders": { - "title": "Mine bestillinger", - "notFound": "Ingen bestillinger funnet", - "seo": { - "title": "Mine bestillinger", - "description": "Mine bestillinger vises her" - } - }, - "profile": { - "title": "Min profil", - "fullName": "Navn", - "email": "E-post", - "seo": { - "title": "Min profil", - "description": "Se og konfigurer kontoen min" - } - }, - "wishlist": { - "title": "Min ønskeliste", - "empty": "Din ønskeliste er tom", - "seo": { - "title": "Min ønskeliste", - "description": "Ønskelisten min vises her" - } - }, - "auth": { - "signUp": { - "firstName": "Fornavn", - "lastName": "Etternavn", - "email": "E-post", - "password": "Passord", - "informationPre": "Info", - "information": "Passord må være lengre enn 7 bokstaver og inneholde tall.", - "register": "Registrere", - "existingAccount": "Har du en konto?", - "loginLabel": "Logg inn" - }, - "login": { - "email": "E-post", - "password": "Passord", - "logIn": "Logg inn", - "noExistingAccount": "Har du ikke en konto?", - "noExistingAccountLabel": "Registrere", - "forgotPasswordText": "E-post og passord er obligatorisk for å logge inn, har du", - "forgotPasswordLinkLabel": "glemt passordet?" - }, - "forgotPassword": { - "email": "E-post", - "recover": "Tilbakestille passord", - "existingAccount": "Har du en konto?", - "loginLabel": "Logg inn" - } - }, - "customerMenu": { - "myOrders": "Mine bestillinger", - "myProfile": "Min profil", - "myCart": "Min handlekurv", - "logOut": "Logg ut" - }, - "notFound": { - "seo": { - "title": "Siden kan ikke bli funnet", - "description": "Siden kan ikke bli funnet" - } - } -} diff --git a/messages/sv.json b/messages/sv.json index 733e794e7..1fcdec833 100644 --- a/messages/sv.json +++ b/messages/sv.json @@ -1,7 +1,4 @@ { - "Index": { - "title": "Välkommen" - }, "ui": { "button": { "close": "Stäng", diff --git a/public/og-image.jpg b/public/og-image.jpg new file mode 100644 index 000000000..83cbaa886 Binary files /dev/null and b/public/og-image.jpg differ