diff --git a/apps/scandic-web/server/routers/contentstack/schemas/blocks/carouselCards.ts b/apps/scandic-web/server/routers/contentstack/schemas/blocks/carouselCards.ts index bee907d9d..106042b8a 100644 --- a/apps/scandic-web/server/routers/contentstack/schemas/blocks/carouselCards.ts +++ b/apps/scandic-web/server/routers/contentstack/schemas/blocks/carouselCards.ts @@ -15,7 +15,7 @@ const commonFields = { link: buttonSchema.optional(), } as const -const carouselCardGroupsSchema = z +const carouselCardGroupsFilteredSchema = z .array( z .object({ @@ -29,7 +29,6 @@ const carouselCardGroupsSchema = z if (!group.filter_label || !group.cardConnection.edges.length) { return null } - const iconIdentifier = group.filter_identifier ?? "favorite" const identifier = `${group.filter_label.toLowerCase()}-${iconIdentifier}` const cards = group.cardConnection.edges @@ -51,16 +50,43 @@ const carouselCardGroupsSchema = z groups.filter((group): group is NonNullable => group !== null) ) +const carouselCardGroupsNoFilterSchema = z + .array( + z + .object({ + cardConnection: z.object({ + edges: z.array(z.object({ node: contentCardSchema })), + }), + }) + .transform((group) => { + if (!group.cardConnection.edges.length) { + return null + } + const cards = group.cardConnection.edges + .map((edge) => transformContentCard(edge.node)) + .filter((card): card is NonNullable => card !== null) + .map((card) => ({ + ...card, + })) + return { + cards, + } + }) + ) + .transform((groups) => + groups.filter((group): group is NonNullable => group !== null) + ) + const carouselCardsWithFilters = z.object({ ...commonFields, enable_filters: z.literal(true), - card_groups: carouselCardGroupsSchema, + card_groups: carouselCardGroupsFilteredSchema, }) const carouselCardsWithoutFilters = z.object({ ...commonFields, enable_filters: z.literal(false), - card_groups: carouselCardGroupsSchema, + card_groups: carouselCardGroupsNoFilterSchema, }) export const carouselCardsSchema = z.object({