Merged develop into feat/hotel-pages-intro-section

This commit is contained in:
Chuma Mcphoy (We Ahead)
2024-07-08 07:12:59 +00:00
10 changed files with 179 additions and 70 deletions

View File

@@ -3,6 +3,9 @@ import "@scandic-hotels/design-system/style.css"
import TrpcProvider from "@/lib/trpc/Provider" import TrpcProvider from "@/lib/trpc/Provider"
import { getIntl } from "@/i18n"
import ServerIntlProvider from "@/i18n/Provider"
import styles from "./layout.module.css" import styles from "./layout.module.css"
import type { Metadata } from "next" import type { Metadata } from "next"
@@ -13,14 +16,17 @@ export const metadata: Metadata = {
title: "Webview", title: "Webview",
} }
export default function RootLayout({ export default async function RootLayout({
children, children,
params, params,
}: React.PropsWithChildren<LayoutArgs<LangParams>>) { }: React.PropsWithChildren<LayoutArgs<LangParams>>) {
const { defaultLocale, locale, messages } = await getIntl()
return ( return (
<html lang={params.lang}> <html lang={params.lang}>
<body className={styles.layout}> <body className={styles.layout}>
<TrpcProvider lang={params.lang}>{children}</TrpcProvider> <ServerIntlProvider intl={{ defaultLocale, locale, messages }}>
<TrpcProvider lang={params.lang}>{children}</TrpcProvider>
</ServerIntlProvider>
</body> </body>
</html> </html>
) )

View File

@@ -19,13 +19,11 @@ export default async function AboutScandicFriends({ lang }: LangParams) {
<section className={styles.content}> <section className={styles.content}>
<LinkToOverview lang={lang} /> <LinkToOverview lang={lang} />
{loyaltyPage.sidebar ? ( {loyaltyPage.sidebar.length ? (
<section className={styles.sidebar}> <Sidebar blocks={loyaltyPage.sidebar} lang={lang} />
<Sidebar blocks={loyaltyPage.sidebar} lang={lang} />
</section>
) : null} ) : null}
<MaxWidth tag="main"> <MaxWidth tag="main" className={styles.blocks}>
<Title>{loyaltyPage.heading}</Title> <Title>{loyaltyPage.heading}</Title>
<Blocks blocks={loyaltyPage.blocks} lang={lang} /> <Blocks blocks={loyaltyPage.blocks} lang={lang} />
</MaxWidth> </MaxWidth>

View File

@@ -8,3 +8,8 @@
margin-left: calc(var(--Spacing-x2) * -1); margin-left: calc(var(--Spacing-x2) * -1);
margin-right: calc(var(--Spacing-x2) * -1); margin-right: calc(var(--Spacing-x2) * -1);
} }
.blocks {
display: grid;
gap: var(--Spacing-x5);
}

View File

@@ -20,11 +20,11 @@
}, },
{ {
"name": "Gratis mocktail til børn under opholdet", "name": "Gratis mocktail til børn under opholdet",
"description": "Vi vil så gerne have, at børnenes føler sig som de VIPs, de er, så vi giver en forfriskende mocktail under hvert ophold.", "description": "Vi vil så gerne have, at børnene føler sig som de VIPs, de er, så vi giver en forfriskende mocktail under hvert ophold.",
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": false "unlocked": false
}, },
@@ -39,13 +39,13 @@
"unlocked": false "unlocked": false
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": false "unlocked": false
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -55,7 +55,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -89,7 +89,7 @@
}, },
{ {
"name": "Rabat på mad", "name": "Rabat på mad",
"description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!", "description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat i vores restaurant og på maden i vores hotel shop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!",
"unlocked": true, "unlocked": true,
"value": "15%" "value": "15%"
}, },
@@ -99,7 +99,7 @@
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": false "unlocked": false
}, },
@@ -114,13 +114,13 @@
"unlocked": false "unlocked": false
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": false "unlocked": false
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -130,7 +130,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -164,7 +164,7 @@
}, },
{ {
"name": "Rabat på mad", "name": "Rabat på mad",
"description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!", "description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat i vores restaurant og på maden i vores hotel shop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!",
"unlocked": true, "unlocked": true,
"value": "15%" "value": "15%"
}, },
@@ -174,7 +174,7 @@
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": true "unlocked": true
}, },
@@ -190,13 +190,13 @@
"unlocked": false "unlocked": false
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": false "unlocked": false
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -206,7 +206,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -240,7 +240,7 @@
}, },
{ {
"name": "Rabat på mad", "name": "Rabat på mad",
"description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!", "description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat i vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!",
"unlocked": true, "unlocked": true,
"value": "15%" "value": "15%"
}, },
@@ -250,7 +250,7 @@
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": true "unlocked": true
}, },
@@ -262,18 +262,18 @@
}, },
{ {
"name": "Venskabsboost", "name": "Venskabsboost",
"description": "Hver gang du booster dine venskabspoint, får du 25% ekstra! Så kom i gang med at optjene point på ophold, måltider med mere, og pludselig har du en gratis overnatning.", "description": "Hver gang du booster dine venskabspoint, får du 25% ekstra! Så kom i gang med at optjene point på ophold, måltider m.m., og pludselig har du en gratis overnatning.",
"unlocked": true, "unlocked": true,
"value": "25%" "value": "25%"
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": true "unlocked": true
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -283,7 +283,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -317,7 +317,7 @@
}, },
{ {
"name": "Rabat på mad", "name": "Rabat på mad",
"description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!", "description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat i vores restaurant og på maden i vores hotel shop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!",
"unlocked": true, "unlocked": true,
"value": "15%" "value": "15%"
}, },
@@ -327,7 +327,7 @@
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": true "unlocked": true
}, },
@@ -339,18 +339,18 @@
}, },
{ {
"name": "Venskabsboost", "name": "Venskabsboost",
"description": "Hver gang du booster dine venskabspoint, får du 25% ekstra! Så kom i gang med at optjene point på ophold, måltider med mere, og pludselig har du en gratis overnatning.", "description": "Hver gang du booster dine venskabspoint, får du 25% ekstra! Så kom i gang med at optjene point på ophold, måltider m.m., og pludselig har du en gratis overnatning.",
"unlocked": true, "unlocked": true,
"value": "25%" "value": "25%"
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": true "unlocked": true
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": true "unlocked": true
}, },
{ {
@@ -360,7 +360,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": false "unlocked": false
}, },
{ {
@@ -394,7 +394,7 @@
}, },
{ {
"name": "Rabat på mad", "name": "Rabat på mad",
"description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!", "description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat i vores restaurant og på maden i vores hotel shop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!",
"unlocked": true, "unlocked": true,
"value": "15%" "value": "15%"
}, },
@@ -404,13 +404,13 @@
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": true "unlocked": true
}, },
{ {
"name": "Restaurantvoucher", "name": "Restaurantvoucher",
"description": "Det går ret godt, så nu giver hver pointgivende overnatning en restaurantvoucher på 150 DKK. Den er helt sikkert god at have ved hånden, næste gang du vil spise en lækker morgenmad eller romantisk middag!", "description": "Det går ret godt, så nu giver hver pointgivende overnatning en restaurantvoucher på 150 DKK. Den er helt sikkert god at have ved hånden, næste gang du vil spise en god middag!",
"unlocked": true, "unlocked": true,
"value": "150 DKK" "value": "150 DKK"
}, },
@@ -421,13 +421,13 @@
"value": "50%" "value": "50%"
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": true "unlocked": true
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": true "unlocked": true
}, },
{ {
@@ -437,7 +437,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": true "unlocked": true
}, },
{ {
@@ -471,7 +471,7 @@
}, },
{ {
"name": "Rabat på mad", "name": "Rabat på mad",
"description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat vores restaurant og på maden i vores hotelshop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!", "description": "Hvad er mere lækkert end en rabat? Som vores ven får du i weekenderne og på udvalgte helligdage 15% rabat i vores restaurant og på maden i vores hotel shop og det er uanset om du overnatter hos os eller ej. Så kom i gang med at forkæle dig selv: Bestil noget roomservice!",
"unlocked": true, "unlocked": true,
"value": "15%" "value": "15%"
}, },
@@ -481,7 +481,7 @@
"unlocked": true "unlocked": true
}, },
{ {
"name": "Sen udcheckning, når tilgængelig", "name": "Sen check ud, når tilgængelig",
"description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.", "description": "Vi ved godt, at muligheden for at checke sent ud virkelig kan redde turen, og nu skal du ikke længere skynde dig ud af sengen. Check ud en time senere uden ekstra omkostninger, og nyd at kunne sove lidt længere.",
"unlocked": true "unlocked": true
}, },
@@ -498,13 +498,13 @@
"value": "50%" "value": "50%"
}, },
{ {
"name": "Tidlig indcheckning, når tilgængelig", "name": "Tidlig check ind, når tilgængelig",
"description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.", "description": "Vil du tage hul på opholdet lidt hurtigere? Intet problem. Check ind en time før uden ekstra omkostninger, og nyd at kunne slappe en smule mere af.",
"unlocked": true "unlocked": true
}, },
{ {
"name": "Gratis opgraderinger, når tilgængelige", "name": "Gratis opgraderinger, når tilgængelige",
"description": "ad os bare sige det lige ud: Vi giver det hele et nøk opad. På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.", "description": "På det her venskabsniveau opgraderer vi dit værelse, hvis det er muligt, så du får et endnu mere behageligt ophold.",
"unlocked": true "unlocked": true
}, },
{ {
@@ -514,7 +514,7 @@
}, },
{ {
"name": "48-timers værelsesgaranti", "name": "48-timers værelsesgaranti",
"description": "Shh, kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.", "description": "Kun få af jer får denne særlige fordel! Selv hvis vi er fuldt bookede, er du garanteret et værelse, så længe du booker mindst 48 timer i forvejen.",
"unlocked": true "unlocked": true
}, },
{ {

View File

@@ -34,11 +34,22 @@ export default async function JoinLoyaltyContact({
</Title> </Title>
<ScandicFriends color="red" /> <ScandicFriends color="red" />
{block.preamble ? <Body>{block.preamble}</Body> : null} {block.preamble ? <Body>{block.preamble}</Body> : null}
<Button asChild intent="primary" theme="base" className={styles.button}> {block.button ? (
<Link href={login[lang]} color="white"> <Button
{formatMessage({ id: "Join Scandic Friends" })} asChild
</Link> intent="primary"
</Button> theme="base"
className={styles.button}
>
<Link
href={block.button.href}
color="white"
target={block.button.openInNewTab ? "_blank" : "_self"}
>
{block.button.title}
</Link>
</Button>
) : null}
<section className={styles.loginContainer}> <section className={styles.loginContainer}>
<Body>{formatMessage({ id: "Already a friend?" })}</Body> <Body>{formatMessage({ id: "Already a friend?" })}</Body>
<Link <Link

View File

@@ -23,7 +23,7 @@ function DynamicComponent({ component, props }: AccountPageContentProps) {
return ( return (
<Overview <Overview
lang={props.lang} lang={props.lang}
link={undefined} link={props.link}
subtitle={null} subtitle={null}
title={props.title} title={props.title}
/> />
@@ -56,7 +56,11 @@ export default function Content({ lang, content }: ContentProps) {
href: href:
item.dynamic_content.link.linkConnection.edges[0].node item.dynamic_content.link.linkConnection.edges[0].node
.original_url || .original_url ||
`/${lang}/webview${item.dynamic_content.link.linkConnection.edges[0].node.url}`, modWebviewLink(
item.dynamic_content.link.linkConnection.edges[0].node
.url,
lang
),
text: item.dynamic_content.link.link_text, text: item.dynamic_content.link.link_text,
} }
: null : null

View File

@@ -109,6 +109,24 @@ query GetLoyaltyPage($locale: String!, $uid: String!) {
join_loyalty_contact { join_loyalty_contact {
title title
preamble preamble
button {
cta_text
external_link {
title
href
}
open_in_new_tab
linkConnection {
edges {
node {
__typename
...AccountPageLink
...ContentPageLink
...LoyaltyPageLink
}
}
}
}
contact { contact {
... on LoyaltyPageSidebarJoinLoyaltyContactBlockContactContact { ... on LoyaltyPageSidebarJoinLoyaltyContactBlockContactContact {
__typename __typename
@@ -252,6 +270,23 @@ query GetLoyaltyPageRefs($locale: String!, $uid: String!) {
} }
} }
} }
... on LoyaltyPageSidebarJoinLoyaltyContact {
__typename
join_loyalty_contact {
button {
linkConnection {
edges {
node {
__typename
...AccountPageRef
...ContentPageRef
...LoyaltyPageRef
}
}
}
}
}
}
} }
system { system {
...System ...System

View File

@@ -152,6 +152,14 @@ const loyaltyPageJoinLoyaltyContact = z.object({
join_loyalty_contact: z.object({ join_loyalty_contact: z.object({
title: z.string().nullable(), title: z.string().nullable(),
preamble: z.string().nullable(), preamble: z.string().nullable(),
button: z
.object({
openInNewTab: z.boolean(),
title: z.string(),
href: z.string(),
isExternal: z.boolean(),
})
.nullable(),
contact: z.array( contact: z.array(
z.object({ z.object({
__typename: z.literal( __typename: z.literal(
@@ -362,8 +370,22 @@ const loyaltyPageSidebarTextContentRef = z.object({
}), }),
}) })
const loyaltyPageSidebarJoinLoyaltyContactRef = z.object({
__typename: z.literal(
SidebarTypenameEnum.LoyaltyPageSidebarJoinLoyaltyContact
),
join_loyalty_contact: z.object({
button: z
.object({
linkConnection: pageConnectionRefs,
})
.nullable(),
}),
})
const loyaltyPageSidebarRefsItem = z.discriminatedUnion("__typename", [ const loyaltyPageSidebarRefsItem = z.discriminatedUnion("__typename", [
loyaltyPageSidebarTextContentRef, loyaltyPageSidebarTextContentRef,
loyaltyPageSidebarJoinLoyaltyContactRef,
]) ])
export const validateLoyaltyPageRefsSchema = z.object({ export const validateLoyaltyPageRefsSchema = z.object({

View File

@@ -27,6 +27,7 @@ import { InsertResponse } from "@/types/components/imageVaultImage"
import { import {
LoyaltyBlocksTypenameEnum, LoyaltyBlocksTypenameEnum,
LoyaltyCardsGridEnum, LoyaltyCardsGridEnum,
SidebarTypenameEnum,
} from "@/types/components/loyalty/enums" } from "@/types/components/loyalty/enums"
function makeImageVaultImage(image: any) { function makeImageVaultImage(image: any) {
@@ -36,21 +37,25 @@ function makeImageVaultImage(image: any) {
} }
function makeButtonObject(button: any) { function makeButtonObject(button: any) {
if (!button) return null
const isContenstackLink =
button?.is_contentstack_link || button.linkConnection?.edges?.length
return { return {
openInNewTab: button.open_in_new_tab, openInNewTab: button?.open_in_new_tab,
title: title:
button.cta_text || button.cta_text ||
(button.is_contentstack_link && button.linkConnection.edges.length (isContenstackLink
? button.linkConnection.edges[0].node.title ? button.linkConnection.edges[0].node.title
: button.external_link.title), : button.external_link.title),
href: href: isContenstackLink
button.is_contentstack_link && button.linkConnection.edges.length ? button.linkConnection.edges[0].node.web?.original_url ||
? button.linkConnection.edges[0].node.web?.original_url || removeMultipleSlashes(
removeMultipleSlashes( `/${button.linkConnection.edges[0].node.system.locale}/${button.linkConnection.edges[0].node.url}`
`/${button.linkConnection.edges[0].node.system.locale}/${button.linkConnection.edges[0].node.url}` )
) : button.external_link.href,
: button.external_link.href, isExternal: !isContenstackLink,
isExternal: !button.is_contentstack_link,
} }
} }
@@ -155,11 +160,7 @@ export const loyaltyPageQueryRouter = router({
return { return {
...card, ...card,
image: makeImageVaultImage(card.image), image: makeImageVaultImage(card.image),
link: makeButtonObject({ link: makeButtonObject(card.link),
...card.link,
is_contentstack_link:
!!card.link.linkConnection.edges.length,
}),
} }
case LoyaltyCardsGridEnum.Card: case LoyaltyCardsGridEnum.Card:
return { return {
@@ -185,11 +186,28 @@ export const loyaltyPageQueryRouter = router({
}) })
: null : null
const sidebar = response.data.loyalty_page.sidebar
? response.data.loyalty_page.sidebar.map((item: any) => {
switch (item.__typename) {
case SidebarTypenameEnum.LoyaltyPageSidebarJoinLoyaltyContact:
return {
...item,
join_loyalty_contact: {
...item.join_loyalty_contact,
button: makeButtonObject(item.join_loyalty_contact.button),
},
}
default:
return item
}
})
: null
const loyaltyPage = { const loyaltyPage = {
heading: response.data.loyalty_page.heading, heading: response.data.loyalty_page.heading,
system: response.data.loyalty_page.system, system: response.data.loyalty_page.system,
blocks, blocks,
sidebar: response.data.loyalty_page.sidebar, sidebar,
} }
const validatedLoyaltyPage = const validatedLoyaltyPage =

View File

@@ -3,6 +3,7 @@ import { LoyaltyPageRefsDataRaw } from "./output"
import { import {
LoyaltyBlocksTypenameEnum, LoyaltyBlocksTypenameEnum,
LoyaltyCardsGridEnum, LoyaltyCardsGridEnum,
SidebarTypenameEnum,
} from "@/types/components/loyalty/enums" } from "@/types/components/loyalty/enums"
import type { Edges } from "@/types/requests/utils/edges" import type { Edges } from "@/types/requests/utils/edges"
import type { NodeRefs } from "@/types/requests/utils/refs" import type { NodeRefs } from "@/types/requests/utils/refs"
@@ -59,8 +60,17 @@ export function getConnections(refs: LoyaltyPageRefsDataRaw) {
} }
if (refs.loyalty_page.sidebar) { if (refs.loyalty_page.sidebar) {
refs.loyalty_page.sidebar?.forEach((item) => { refs.loyalty_page.sidebar?.forEach((item) => {
if (item.content.content.embedded_itemsConnection.edges.length) { switch (item.__typename) {
connections.push(item.content.content.embedded_itemsConnection) case SidebarTypenameEnum.LoyaltyPageSidebarContent:
if (item.content.content.embedded_itemsConnection.edges.length) {
connections.push(item.content.content.embedded_itemsConnection)
}
break
case SidebarTypenameEnum.LoyaltyPageSidebarJoinLoyaltyContact:
if (item.join_loyalty_contact.button?.linkConnection) {
connections.push(item.join_loyalty_contact.button.linkConnection)
}
break
} }
}) })
} }