feat/SW-3108 external links

* feat(SW-3108): Added external link options to shortcuts
* feat(SW-3108): Added external link options to header

Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-08-28 07:25:17 +00:00
parent 1a10afdbad
commit fd48f86c90
8 changed files with 213 additions and 98 deletions

View File

@@ -15,37 +15,65 @@ export const shortcutsBlockSchema = z.object({
two_column_list: z.boolean().nullable().default(false),
shortcuts: z
.array(
z.object({
open_in_new_tab: z.boolean(),
text: z.string().optional().default(""),
linkConnection: z.object({
edges: z.array(
z.object({
node: linkUnionSchema.transform((data) => {
const link = transformPageLink(data)
if (link) {
return link
}
return data
}),
z
.object({
is_contentstack_link: z.boolean().nullish(),
external_link: z
.object({
href: z.string().nullish().default(""),
title: z.string().nullish(),
})
),
}),
})
)
.transform((data) => {
return data
.filter((node) => node.linkConnection.edges.length)
.map((node) => {
const link = node.linkConnection.edges[0].node
return {
openInNewTab: node.open_in_new_tab,
text: node.text,
title: link.title,
url: link.url,
}
.nullish(),
open_in_new_tab: z.boolean(),
text: z.string().optional().default(""),
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,
open_in_new_tab,
text,
}) => {
if (
is_contentstack_link !== false &&
linkConnection.edges.length
) {
const linkRef = linkConnection.edges[0].node
return {
openInNewTab: open_in_new_tab,
text: text || linkRef.title,
url: linkRef.url,
}
} else if (
is_contentstack_link === false &&
external_link?.href
) {
return {
openInNewTab: open_in_new_tab,
text: text || external_link.title || "",
url: external_link.href,
}
} else {
return null
}
}
)
)
.transform((data) => data.filter((item) => !!item)),
})
.transform(({ two_column_list, ...rest }) => {
return {