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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
),
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -4,3 +4,8 @@ export enum AlertTypeEnum {
|
||||
Alarm = "alarm",
|
||||
Success = "success",
|
||||
}
|
||||
|
||||
export const AlertVisibleOnEnum = {
|
||||
WEB: "WEB",
|
||||
APP: "APP",
|
||||
} as const
|
||||
Reference in New Issue
Block a user