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

@@ -81,6 +81,7 @@ fragment Alert on Alert {
json
}
}
visible_on
}
fragment AlertRef on Alert {
@@ -130,4 +131,5 @@ fragment AlertRef on Alert {
system {
...System
}
visible_on
}

View File

@@ -6,11 +6,13 @@ query GetSiteConfig($locale: String!) {
all_site_config(limit: 1, locale: $locale) {
items {
sitewide_alert {
booking_widget_disabled
alertConnection {
edges {
node {
...Alert
alerts {
booking_widget_disabled
alertConnection {
edges {
node {
...Alert
}
}
}
}
@@ -23,10 +25,12 @@ query GetSiteConfigRef($locale: String!) {
all_site_config(limit: 1, locale: $locale) {
items {
sitewide_alert {
alertConnection {
edges {
node {
...AlertRef
alerts {
alertConnection {
edges {
node {
...AlertRef
}
}
}
}

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)

View File

@@ -3,7 +3,7 @@ import { z } from "zod"
import { dt } from "@scandic-hotels/common/dt"
import { nullableStringValidator } from "@scandic-hotels/common/utils/zod/stringValidator"
import { AlertTypeEnum } from "../../../../types/alertType"
import { AlertTypeEnum } from "../../../../types/alert"
const specialAlertSchema = z.object({
description: nullableStringValidator,

View File

@@ -4,3 +4,8 @@ export enum AlertTypeEnum {
Alarm = "alarm",
Success = "success",
}
export const AlertVisibleOnEnum = {
WEB: "WEB",
APP: "APP",
} as const