Merged in feat/SW-3232-site-config-alerts (pull request #2671)

feat(SW-3232): update alert schema

* feat(SW-3232): update alert schema


Approved-by: Erik Tiekstra
This commit is contained in:
Matilda Landström
2025-08-20 09:18:00 +00:00
parent 720a1c2734
commit 7891ae3ae6
30 changed files with 90 additions and 52 deletions

View File

@@ -4,7 +4,7 @@ import { Lang } from "@scandic-hotels/common/constants/language"
import { logger } from "@scandic-hotels/common/logger"
import { removeMultipleSlashes } from "@scandic-hotels/common/utils/url"
import { AlertTypeEnum } from "../../../types/alertType"
import { AlertTypeEnum, AlertVisibleOnEnum } from "../../../types/alert"
import { discriminatedUnion } from "../../../utils/discriminatedUnion"
import {
cardBlockRefsSchema,
@@ -744,6 +744,7 @@ export const alertSchema = z
}),
}),
}),
visible_on: z.array(z.string()).nullable().default([]),
})
.transform(
({
@@ -756,12 +757,14 @@ export const alertSchema = z
has_sidepeek_button,
sidepeek_button,
sidepeek_content,
visible_on,
}) => {
const hasLink = has_link && link.link
return {
type,
text,
heading,
visible_on,
phoneContact:
phone_contact.display_text && phone_contact.phone_number
? {
@@ -792,16 +795,20 @@ export const siteConfigSchema = z
.array(
z.object({
sitewide_alert: z.object({
booking_widget_disabled: z.boolean(),
alertConnection: z.object({
edges: z
.array(
z.object({
node: alertSchema,
})
)
.max(1),
}),
alerts: z
.array(
z.object({
booking_widget_disabled: z.boolean(),
alertConnection: z.object({
edges: z.array(
z.object({
node: alertSchema,
})
),
}),
})
)
.nullable(),
}),
})
)
@@ -818,9 +825,15 @@ export const siteConfigSchema = z
const { sitewide_alert } = data.all_site_config.items[0]
const sitewideAlertWeb = sitewide_alert.alerts?.find((alert) =>
alert.alertConnection.edges[0]?.node.visible_on?.includes(
AlertVisibleOnEnum.WEB
)
)
return {
sitewideAlert: sitewide_alert.alertConnection.edges[0]?.node || null,
bookingWidgetDisabled: sitewide_alert.booking_widget_disabled,
sitewideAlert: sitewideAlertWeb?.alertConnection.edges[0]?.node || null,
bookingWidgetDisabled: sitewideAlertWeb?.booking_widget_disabled,
}
})
@@ -846,15 +859,29 @@ const alertConnectionRefSchema = z.object({
}),
})
),
visible_on: z.array(z.string()).nullable().default([]),
})
export const siteConfigRefSchema = z.object({
all_site_config: z.object({
items: z.array(
z.object({
sitewide_alert: z.object({
alertConnection: alertConnectionRefSchema,
}),
sitewide_alert: z
.object({
alerts: z
.array(
z.object({
alertConnection: alertConnectionRefSchema,
})
)
.nullable(),
})
.transform((data) => {
const sitewideAlertWeb = data.alerts?.find((alert) =>
alert.alertConnection.visible_on?.includes(AlertVisibleOnEnum.WEB)
)
return { alert: sitewideAlertWeb || null }
}),
system: systemSchema,
})
),

View File

@@ -82,9 +82,9 @@ export function getSiteConfigConnections(refs: GetSiteConfigRefData) {
const siteConfigData = refs.all_site_config.items[0]
const connections: System["system"][] = []
if (!siteConfigData) return connections
if (!siteConfigData.sitewide_alert.alert) return connections
const alertConnection = siteConfigData.sitewide_alert.alertConnection
const alertConnection = siteConfigData.sitewide_alert.alert.alertConnection
alertConnection.edges.forEach(({ node }) => {
connections.push(node.system)