feat(SW-1846): Added query to fetch metadata on start page

* feat(SW-1846): Added query to fetch metadata on start page


Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-03-13 09:11:30 +00:00
parent 91c36ee41c
commit a1303d3dae
5 changed files with 32 additions and 2 deletions

View File

@@ -0,0 +1,19 @@
#import "../../Fragments/Metadata.graphql"
#import "../../Fragments/System.graphql"
query GetStartPageMetadata($locale: String!, $uid: String!) {
start_page(locale: $locale, uid: $uid) {
web {
seo_metadata {
...Metadata
}
}
header {
heading
hero_image
}
system {
...System
}
}
}

View File

@@ -43,6 +43,7 @@ import {
import { internalServerError } from "@/server/errors/trpc" import { internalServerError } from "@/server/errors/trpc"
import { generateTag } from "@/utils/generateTag" import { generateTag } from "@/utils/generateTag"
import { removeTrailingSlash } from "@/utils/url"
import { validateLanguageSwitcherData } from "./output" import { validateLanguageSwitcherData } from "./output"
import { import {
@@ -172,7 +173,7 @@ export async function getUrlsOfAllLanguages(
const item = response.data[key as Lang] const item = response.data[key as Lang]
const url = item const url = item
? item.web?.original_url || `/${key}${item.url}` ? item.web?.original_url || removeTrailingSlash(`/${key}${item.url}`)
: undefined : undefined
return { return {

View File

@@ -88,6 +88,7 @@ export const rawMetadataSchema = z.object({
.object({ .object({
heading: z.string().optional().nullable(), heading: z.string().optional().nullable(),
preamble: z.string().optional().nullable(), preamble: z.string().optional().nullable(),
hero_image: tempImageVaultAssetSchema.nullable(),
}) })
.optional() .optional()
.nullable(), .nullable(),

View File

@@ -9,6 +9,7 @@ import { GetDestinationCountryPageMetadata } from "@/lib/graphql/Query/Destinati
import { GetDestinationOverviewPageMetadata } from "@/lib/graphql/Query/DestinationOverviewPage/Metadata.graphql" import { GetDestinationOverviewPageMetadata } from "@/lib/graphql/Query/DestinationOverviewPage/Metadata.graphql"
import { GetHotelPageMetadata } from "@/lib/graphql/Query/HotelPage/Metadata.graphql" import { GetHotelPageMetadata } from "@/lib/graphql/Query/HotelPage/Metadata.graphql"
import { GetLoyaltyPageMetadata } from "@/lib/graphql/Query/LoyaltyPage/Metadata.graphql" import { GetLoyaltyPageMetadata } from "@/lib/graphql/Query/LoyaltyPage/Metadata.graphql"
import { GetStartPageMetadata } from "@/lib/graphql/Query/StartPage/Metadata.graphql"
import { request } from "@/lib/graphql/request" import { request } from "@/lib/graphql/request"
import { notFound } from "@/server/errors/trpc" import { notFound } from "@/server/errors/trpc"
import { contentStackUidWithServiceProcedure, router } from "@/server/trpc" import { contentStackUidWithServiceProcedure, router } from "@/server/trpc"
@@ -262,6 +263,14 @@ export const metadataQueryRouter = router({
}, },
alternates alternates
) )
case PageContentTypeEnum.startPage:
const startPageResponse = await fetchMetadata<{
start_page: RawMetadataSchema
}>(GetStartPageMetadata, variables)
return getTransformedMetadata(
startPageResponse.start_page,
alternates
)
default: default:
return null return null
} }

View File

@@ -157,7 +157,7 @@ export function getDescription(data: RawMetadataSchema) {
export function getImage(data: RawMetadataSchema) { export function getImage(data: RawMetadataSchema) {
const metadataImage = data.web?.seo_metadata?.seo_image const metadataImage = data.web?.seo_metadata?.seo_image
const heroImage = data.hero_image const heroImage = data.hero_image || data.header?.hero_image
const hotelImage = const hotelImage =
data.hotelData?.gallery?.heroImages?.[0] || data.hotelData?.gallery?.heroImages?.[0] ||
data.hotelData?.gallery?.smallerImages?.[0] data.hotelData?.gallery?.smallerImages?.[0]