feat(SW-3108): Added external link option to top primary button on content/collection page
Approved-by: Matilda Landström
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { removeMultipleSlashes } from "@scandic-hotels/common/utils/url"
|
||||
import { nullableStringValidator } from "@scandic-hotels/common/utils/zod/stringValidator"
|
||||
|
||||
import { ContentEnum } from "../../../types/content"
|
||||
import { systemSchema } from "./system"
|
||||
@@ -206,6 +207,47 @@ export function transformPageLink(data: Data) {
|
||||
}
|
||||
}
|
||||
|
||||
export const internalOrExternalLinkSchema = z
|
||||
.object({
|
||||
is_contentstack_link: z.boolean().nullish(),
|
||||
external_link: z
|
||||
.object({
|
||||
href: nullableStringValidator,
|
||||
title: z.string().nullish(),
|
||||
})
|
||||
.nullish(),
|
||||
title: nullableStringValidator,
|
||||
linkConnection: z.object({
|
||||
edges: z.array(
|
||||
z.object({
|
||||
node: linkUnionSchema.transform((data) => {
|
||||
const link = transformPageLink(data)
|
||||
if (link) {
|
||||
return link
|
||||
}
|
||||
return data
|
||||
}),
|
||||
})
|
||||
),
|
||||
}),
|
||||
})
|
||||
.transform(
|
||||
({ is_contentstack_link, external_link, linkConnection, title }) => {
|
||||
if (is_contentstack_link !== false && linkConnection.edges.length) {
|
||||
const linkRef = linkConnection.edges[0].node
|
||||
return {
|
||||
title: title || linkRef.title,
|
||||
url: linkRef.url,
|
||||
}
|
||||
} else if (is_contentstack_link === false && external_link?.href) {
|
||||
return {
|
||||
title: title || external_link.title || "",
|
||||
url: external_link.href,
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
export const linkRefsUnionSchema = z.discriminatedUnion("__typename", [
|
||||
accountPageRefSchema,
|
||||
campaignOverviewPageRefSchema,
|
||||
|
||||
Reference in New Issue
Block a user