Merged in feat/1525-info-card-themes (pull request #1300)

feat(SW-1525): Add theme support for InfoCard component

* feat(1525): Add theme support for InfoCard component

* refactor(1525): Update InfoCard theme typing


Approved-by: Christian Andolf
This commit is contained in:
Chuma Mcphoy (We Ahead)
2025-02-11 10:40:23 +00:00
parent 6eb01750e8
commit 3c4d08a894
4 changed files with 13 additions and 0 deletions

View File

@@ -64,6 +64,7 @@ export default function CardsGrid({
heading={card.heading}
bodyText={card.bodyText}
image={card.image}
theme={card.theme ?? "one"}
primaryButton={card.primaryButton}
secondaryButton={card.secondaryButton}
imagePosition={index % 2 === 0 ? "right" : "left"}

View File

@@ -16,6 +16,7 @@ fragment InfoCardBlock on InfoCard {
body_text
image
title
theme
primary_button {
is_contentstack_link

View File

@@ -5,6 +5,7 @@ import { systemSchema } from "../../system"
import { buttonSchema } from "../utils/buttonLinkSchema"
import { linkConnectionRefsSchema } from "../utils/linkConnection"
import { INFO_CARD_THEMES } from "@/types/components/blocks/infoCard"
import { CardsEnum } from "@/types/enums/cards"
export const infoCardBlockSchema = z.object({
@@ -13,6 +14,7 @@ export const infoCardBlockSchema = z.object({
heading: z.string().optional().default(""),
body_text: z.string().optional().default(""),
image: tempImageVaultAssetSchema,
theme: z.enum(INFO_CARD_THEMES).nullable(),
title: z.string().optional(),
primary_button: buttonSchema.optional().nullable(),
secondary_button: buttonSchema.optional().nullable(),
@@ -26,6 +28,7 @@ export function transformInfoCardBlock(card: typeof infoCardBlockSchema._type) {
heading: card.heading,
bodyText: card.body_text,
image: card.image,
theme: card.theme,
title: card.title,
primaryButton: card.primary_button?.href ? card.primary_button : undefined,
secondaryButton: card.secondary_button?.href

View File

@@ -9,6 +9,14 @@ type CardTheme = Exclude<
"image"
>
export const INFO_CARD_THEMES = [
"one",
"two",
"three",
"primaryInverted",
"primaryStrong",
] as const satisfies readonly CardTheme[]
export interface InfoCardProps {
scriptedTopTitle?: string
heading: string