Feat/BOOK-257 videoplayer with card
* feat(BOOK-257): Added VideoPlayer with card component * feat(BOOK-257): Added queries and component for VideoCard block to Content and Collection pages * fix(BOOK-257): Only setting object-fit: cover on the video if it is not fullscreen * feat(BOOK-257): Added queries and component for VideoCard block to Startpage * feat(BOOK-257): Added queries and component for Video block to content/collection/start page Approved-by: Chuma Mcphoy (We Ahead)
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { transformedVideoSchema, videoRefSchema } from "../video"
|
||||
|
||||
export const videoBlockSchema = z.object({
|
||||
typename: z.literal(BlocksEnums.block.Video).default(BlocksEnums.block.Video),
|
||||
video: transformedVideoSchema,
|
||||
})
|
||||
|
||||
export const videoBlockRefsSchema = z.object({
|
||||
typename: z.literal(BlocksEnums.block.Video).default(BlocksEnums.block.Video),
|
||||
video: videoRefSchema,
|
||||
})
|
||||
@@ -0,0 +1,117 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { logger } from "@scandic-hotels/common/logger"
|
||||
|
||||
import { BlocksEnums } from "../../../../types/blocksEnum"
|
||||
import { systemSchema } from "../system"
|
||||
import { transformedVideoSchema, videoRefSchema } from "../video"
|
||||
|
||||
const cardStyleSchema = z
|
||||
.string()
|
||||
.transform((val): "primary-1" | "primary-2" => {
|
||||
if (val === "primary-1" || val === "primary-2") {
|
||||
return val
|
||||
}
|
||||
return "primary-1"
|
||||
})
|
||||
|
||||
export const videoQuoteCardSchema = z.object({
|
||||
__typename: z.literal("VideoQuoteCard"),
|
||||
video: transformedVideoSchema,
|
||||
style: cardStyleSchema,
|
||||
quote: z.string(),
|
||||
author: z.string(),
|
||||
author_description: z.string().nullish(),
|
||||
})
|
||||
|
||||
export const videoTextCardSchema = z.object({
|
||||
__typename: z.literal("VideoTextCard"),
|
||||
video: transformedVideoSchema,
|
||||
style: cardStyleSchema,
|
||||
heading: z.string(),
|
||||
text: z.string().nullish(),
|
||||
})
|
||||
|
||||
export const videoCardSchema = z.object({
|
||||
typename: z
|
||||
.literal(BlocksEnums.block.VideoCard)
|
||||
.default(BlocksEnums.block.VideoCard),
|
||||
video_card: z
|
||||
.object({
|
||||
video_cardConnection: z.object({
|
||||
edges: z.array(
|
||||
z.object({
|
||||
node: z.discriminatedUnion("__typename", [
|
||||
videoQuoteCardSchema,
|
||||
videoTextCardSchema,
|
||||
]),
|
||||
})
|
||||
),
|
||||
}),
|
||||
})
|
||||
.transform((data) => {
|
||||
const videoCard = data.video_cardConnection.edges[0]?.node
|
||||
if (!videoCard?.video) {
|
||||
return null
|
||||
}
|
||||
|
||||
const { __typename, style, video } = videoCard
|
||||
|
||||
switch (__typename) {
|
||||
case "VideoTextCard": {
|
||||
const { heading, text } = videoCard
|
||||
return {
|
||||
variant: "text" as const,
|
||||
style,
|
||||
video,
|
||||
heading,
|
||||
text: text || undefined,
|
||||
}
|
||||
}
|
||||
case "VideoQuoteCard": {
|
||||
const { quote, author, author_description } = videoCard
|
||||
return {
|
||||
variant: "quote" as const,
|
||||
style,
|
||||
video,
|
||||
quote,
|
||||
author,
|
||||
authorDescription: author_description || undefined,
|
||||
}
|
||||
}
|
||||
default:
|
||||
const type: never = __typename
|
||||
logger.error(`Unsupported content type given: ${type}`)
|
||||
return null
|
||||
}
|
||||
}),
|
||||
})
|
||||
|
||||
const videoCardRefSchema = z.object({
|
||||
video: videoRefSchema,
|
||||
system: systemSchema,
|
||||
})
|
||||
|
||||
export const videoCardRefsSchema = z.object({
|
||||
typename: z
|
||||
.literal(BlocksEnums.block.VideoCard)
|
||||
.default(BlocksEnums.block.VideoCard),
|
||||
video_card: z
|
||||
.object({
|
||||
video_cardConnection: z.object({
|
||||
edges: z.array(
|
||||
z.object({
|
||||
node: videoCardRefSchema,
|
||||
})
|
||||
),
|
||||
}),
|
||||
})
|
||||
.transform((data) => {
|
||||
const videoCard = data.video_cardConnection.edges[0]?.node
|
||||
if (!videoCard?.video) {
|
||||
return null
|
||||
}
|
||||
|
||||
return videoCard
|
||||
}),
|
||||
})
|
||||
Reference in New Issue
Block a user