feat: parseAcfMedia
All checks were successful
Deployment / wordpress (push) Successful in 6s
Deployment / nuxt (push) Successful in 1m1s

This commit is contained in:
2026-01-30 15:50:06 -05:00
parent 2cfc1a0047
commit ab563a7b37
2 changed files with 30 additions and 1 deletions

View File

@@ -34,7 +34,7 @@ const classes = tvSectionHeroSplit({
<section :class="classes.base()">
<div :class="classes.container()">
<UiProse :content="content" :class="classes.content()" />
<AcfMedia :media="$props" :class="classes.media()" />
<AcfMedia :media="parseAcfMedia(props)" :class="classes.media()" />
</div>
</section>
</template>

View File

@@ -0,0 +1,29 @@
import type { AcfMediaFragment } from "#graphql/operations";
import * as z from "zod";
export const acfImageSchema = z.object({
src: z.url(),
alt: z.string(),
mediaDetails: z.object({
width: z.number(),
height: z.number(),
}),
objectPosition: z.string().optional().default("center"),
});
export const acfMediaSchema = z.object({
image: z.object({
node: acfImageSchema,
}),
aspectRatio: z.enum(["square", "video", "portrait", "auto"]).optional().default("auto"),
objectFit: z.enum(["cover", "contain"]).optional().default("cover"),
});
export function parseAcfMedia(data?: Partial<AcfMediaFragment>) {
try {
return acfMediaSchema.parse(data);
}
catch {
return undefined;
}
}