& {
+ onClose?: () => void
+ } & (
+ | {
+ children: React.ReactNode
+ message?: never
+ }
+ | {
+ children?: never
+ message: React.ReactNode
+ }
+ )
diff --git a/components/TempDesignSystem/Tooltip/index.tsx b/components/TempDesignSystem/Tooltip/index.tsx
index d73252161..855bd1237 100644
--- a/components/TempDesignSystem/Tooltip/index.tsx
+++ b/components/TempDesignSystem/Tooltip/index.tsx
@@ -14,12 +14,20 @@ export function Tooltip({
position,
arrow,
children,
+ isTouchable = false,
}: PropsWithChildren>) {
const className = tooltipVariants({ position, arrow })
const [isActive, setIsActive] = useState(false)
function handleToggle() {
- setIsActive(!isActive)
+ setIsActive((prevState) => !prevState)
+ }
+
+ function handleKeyDown(event: React.KeyboardEvent) {
+ if (event.key === "Enter" || event.key === " ") {
+ event.preventDefault()
+ handleToggle()
+ }
}
return (
@@ -27,8 +35,10 @@ export function Tooltip({
className={styles.tooltipContainer}
role="tooltip"
aria-label={text}
- onClick={handleToggle}
- onTouchStart={handleToggle}
+ tabIndex={0}
+ onClick={isTouchable ? undefined : handleToggle}
+ onTouchStart={isTouchable ? handleToggle : undefined}
+ onKeyDown={handleKeyDown}
data-active={isActive}
>
diff --git a/constants/routes/signup.ts b/constants/routes/signup.ts
index 4c63cc47d..3779c6e82 100644
--- a/constants/routes/signup.ts
+++ b/constants/routes/signup.ts
@@ -1,12 +1,12 @@
import { LangRoute } from "@/types/routes"
export const signup: LangRoute = {
- en: "/en/scandic-friends/join-scandic-friends",
+ en: "/en/scandic-friends/join",
sv: "/sv/scandic-friends/bli-medlem",
- no: "/no/scandic-friends/registrer-deg-for-scandic-friends",
- fi: "/fi/scandic-friends/liity-scandic-friends-ohjelmaan",
- da: "/da/scandic-friends/tilmeld-dig-scandic-friends",
- de: "/de/scandic-friends/werden-sie-mitglied-von-scandic-friends",
+ no: "/no/scandic-friends/registrer-deg",
+ fi: "/fi/scandic-friends/liity-jaseneksi",
+ da: "/da/scandic-friends/tilmeld-dig",
+ de: "/de/scandic-friends/mitglied-werden",
}
export const signupVerify: LangRoute = {
diff --git a/env/server.ts b/env/server.ts
index c2dd9843d..6b0e89b07 100644
--- a/env/server.ts
+++ b/env/server.ts
@@ -27,6 +27,7 @@ export const env = createEnv({
CMS_PREVIEW_TOKEN: z.string(),
CMS_PREVIEW_URL: z.string(),
CMS_URL: z.string(),
+ CMS_BRANCH: z.enum(["development", "production"]),
CURITY_CLIENT_ID_USER: z.string(),
CURITY_CLIENT_ID_SERVICE: z.string(),
CURITY_CLIENT_SECRET_SERVICE: z.string(),
@@ -137,6 +138,7 @@ export const env = createEnv({
CMS_PREVIEW_TOKEN: process.env.CMS_PREVIEW_TOKEN,
CMS_PREVIEW_URL: process.env.CMS_PREVIEW_URL,
CMS_URL: process.env.CMS_URL,
+ CMS_BRANCH: process.env.CMS_BRANCH,
CURITY_CLIENT_ID_USER: process.env.CURITY_CLIENT_ID_USER,
CURITY_CLIENT_ID_SERVICE: process.env.CURITY_CLIENT_ID_SERVICE,
CURITY_CLIENT_SECRET_SERVICE: process.env.CURITY_CLIENT_SECRET_SERVICE,
diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json
index 9bfc58fad..02062f2b3 100644
--- a/i18n/dictionaries/da.json
+++ b/i18n/dictionaries/da.json
@@ -6,6 +6,7 @@
"A photo of the room": "Et foto af værelset",
"ACCE": "Tilgængelighed",
"ALLG": "Allergi",
+ "About accessibility": "Om tilgængelighed",
"About meetings & conferences": "About meetings & conferences",
"About the hotel": "Om hotellet",
"Accept new price": "Accepter ny pris",
@@ -17,6 +18,7 @@
"Add new card": "Tilføj nyt kort",
"Address": "Adresse",
"Adults": "voksne",
+ "Age": "Alder",
"Airport": "Lufthavn",
"All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alle vores morgenmadsbuffeter tilbyder glutenfrie, veganske og allergivenlige muligheder.",
"Allergy Room": "Allergirum",
@@ -41,6 +43,7 @@
"Back to top": "Tilbage til top",
"Bar": "Bar",
"Based on availability": "Baseret på tilgængelighed",
+ "Bed": "Seng type",
"Bed type": "Seng type",
"Birth date": "Fødselsdato",
"Book": "Book",
@@ -59,8 +62,11 @@
"Cancel": "Afbestille",
"Change room": "Skift værelse",
"Check in": "Check ind",
+ "Check in from": "Indtjekning fra",
"Check out": "Check ud",
+ "Check out at latest": "Udtjekning senest",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tjek de kreditkort, der er gemt på din profil. Betal med et gemt kort, når du er logget ind for en mere jævn weboplevelse.",
+ "Check-in/Check-out": "Indtjekning/Udtjekning",
"Children": "børn",
"Choose room": "Vælg rum",
"Cities": "Byer",
@@ -137,6 +143,7 @@
"Food options": "Madvalg",
"Former Scandic Hotel": "Tidligere Scandic Hotel",
"Free cancellation": "Gratis afbestilling",
+ "Free parking": "Gratis parkering",
"Free rebooking": "Gratis ombooking",
"From": "Fra",
"Garage": "Garage",
@@ -160,6 +167,7 @@
"Hotel surroundings": "Hotel omgivelser",
"Hotel(s)": "{amount} {amount, plural, one {hotel} other {hoteller}}",
"Hotels": "Hoteller",
+ "Hours": "Tider",
"How do you want to sleep?": "Hvordan vil du sove?",
"How it works": "Hvordan det virker",
"Hurry up and use them before they expire!": "Skynd dig og brug dem, før de udløber!",
@@ -253,6 +261,7 @@
"Open menu": "Åbn menuen",
"Open my pages menu": "Åbn mine sider menuen",
"Opening Hours": "Åbningstider",
+ "Outdoor": "Udendørs",
"OutdoorPool": "Udendørs pool",
"Overview": "Oversigt",
"PETR": "Kæledyr",
@@ -283,6 +292,10 @@
"Previous victories": "Tidligere sejre",
"Price": "Pris",
"Price details": "Prisoplysninger",
+ "Price per 24 hours": "Pris per 24 timer",
+ "Price per day": "Pris per dag",
+ "Price per night": "Pris per nat",
+ "Prices": "Priser",
"Proceed to login": "Fortsæt til login",
"Proceed to payment method": "Fortsæt til betalingsmetode",
"Provide a payment card in the next step": "Giv os dine betalingsoplysninger i næste skridt",
@@ -294,10 +307,11 @@
"Read more & book a table": "Read more & book a table",
"Read more about the hotel": "Læs mere om hotellet",
"Read more about wellness & exercise": "Read more about wellness & exercise",
+ "Reference #{bookingNr}": "Reference #{bookingNr}",
"Relax": "Slap af",
"Remove card from member profile": "Fjern kortet fra medlemsprofilen",
"Request bedtype": "Anmod om sengetype",
- "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}",
+ "Restaurant": "{count, plural, one {Restaurant} other {Restauranter}}",
"Restaurant & Bar": "Restaurant & Bar",
"Restaurants & Bars": "Restaurants & Bars",
"Retype new password": "Gentag den nye adgangskode",
@@ -368,6 +382,7 @@
"There are no transactions to display": "Der er ingen transaktioner at vise",
"Things nearby HOTEL_NAME": "Ting i nærheden af {hotelName}",
"This room is not available": "Dette værelse er ikke tilgængeligt",
+ "Times": "Tider",
"To get the member price
{amount} {currency}, log in or join when completing the booking.": "For at få medlemsprisen
{amount} {currency}, log ind eller tilmeld dig, når du udfylder bookingen.",
"To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.": "For at sikre din reservation, beder vi om at du giver os dine betalingsoplysninger. Du kan så være sikker på, at ingen gebyrer vil blive opkrævet på dette tidspunkt.",
"Total": "Total",
@@ -394,7 +409,11 @@
"We have a special gift waiting for you!": "Vi har en speciel gave, der venter på dig!",
"We have sent a detailed confirmation of your booking to your email:": "Vi har sendt en detaljeret bekræftelse af din booking til din email:",
"We look forward to your visit!": "Vi ser frem til dit besøg!",
+ "Weekday": "Ugedag",
+ "Weekday prices": "Ugedagspriser",
"Weekdays": "Hverdage",
+ "Weekend": "Weekend",
+ "Weekend prices": "Weekendpriser",
"Weekends": "Weekender",
"Welcome": "Velkommen",
"Welcome to": "Velkommen til",
@@ -434,6 +453,8 @@
"booking.basedOnAvailability": "Baseret på tilgængelighed",
"booking.bedOptions": "Sengemuligheder",
"booking.children": "{totalChildren, plural, one {# barn} other {# børn}}",
+ "booking.confirmation.text": "Tak fordi du bookede hos os! Vi glæder os til at byde dig velkommen og håber du får et behageligt ophold. Hvis du har spørgsmål eller har brug for at foretage ændringer i din reservation, bedes du
kontakte os.",
+ "booking.confirmation.title": "Booking bekræftelse",
"booking.guests": "Maks {nrOfGuests, plural, one {# gæst} other {# gæster}}",
"booking.nights": "{totalNights, plural, one {# nat} other {# nætter}}",
"booking.rooms": "{totalRooms, plural, one {# værelse} other {# værelser}}",
@@ -444,6 +465,9 @@
"breakfast.price.free": "
{amount} {currency} 0 {currency}/nat",
"by": "inden",
"characters": "tegn",
+ "filters.nohotel.heading": "Ingen rum matchede dine filtre.",
+ "filters.nohotel.text": "Det ser ud til, at ingen hoteller matcher dine filtre. Prøv at justere din søgning for at finde det perfekte ophold.",
+ "from": "fra",
"guaranteeing": "garanti",
"guest": "gæst",
"guests": "gæster",
@@ -464,11 +488,14 @@
"points": "Point",
"room type": "værelsestype",
"room types": "værelsestyper",
+ "signup.terms": "Ved at tilmelde dig accepterer du Scandic Friends
vilkår og betingelser. Dit medlemskab er gyldigt indtil videre, og du kan til enhver tid opsige dit medlemskab ved at sende en e-mail til Scandics kundeservice",
"signupPage.terms": "Ja, jeg accepterer vilkårene og betingelserne for Scandic Friends og forstår, at Scandic vil behandle mine personlige data i overensstemmelse med
Scandic's integritetspolicy.",
"special character": "speciel karakter",
"spendable points expiring by": "{points} Brugbare point udløber den {date}",
"to": "til",
"uppercase letter": "stort bogstav",
"{amount} out of {total}": "{amount} ud af {total}",
- "{amount} {currency}": "{amount} {currency}"
+ "{amount} {currency}": "{amount} {currency}",
+ "{card} ending with {cardno}": "{card} slutter med {cardno}",
+ "{difference}{amount} {currency}": "{difference}{amount} {currency}"
}
diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json
index 69c8c8956..5cdfe1a31 100644
--- a/i18n/dictionaries/de.json
+++ b/i18n/dictionaries/de.json
@@ -6,6 +6,7 @@
"A photo of the room": "Ein Foto des Zimmers",
"ACCE": "Zugänglichkeit",
"ALLG": "Allergie",
+ "About accessibility": "Über Barrierefreiheit",
"About meetings & conferences": "About meetings & conferences",
"About the hotel": "Über das Hotel",
"Accept new price": "Neuen Preis akzeptieren",
@@ -17,6 +18,7 @@
"Add new card": "Neue Karte hinzufügen",
"Address": "Adresse",
"Adults": "Erwachsene",
+ "Age": "Alter",
"Airport": "Flughafen",
"All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alle unsere Frühstücksbuffets bieten glutenfreie, vegane und allergikerfreundliche Speisen.",
"Allergy Room": "Allergikerzimmer",
@@ -41,6 +43,7 @@
"Back to top": "Zurück zur Spitze",
"Bar": "Bar",
"Based on availability": "Je nach Verfügbarkeit",
+ "Bed": "Bettentyp",
"Bed type": "Bettentyp",
"Birth date": "Geburtsdatum",
"Book": "Buchen",
@@ -59,8 +62,11 @@
"Cancel": "Stornieren",
"Change room": "Zimmer ändern",
"Check in": "Einchecken",
+ "Check in from": "Check-in ab",
"Check out": "Auschecken",
+ "Check out at latest": "Check-out spätestens",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sehen Sie sich die in Ihrem Profil gespeicherten Kreditkarten an. Bezahlen Sie mit einer gespeicherten Karte, wenn Sie angemeldet sind, für ein reibungsloseres Web-Erlebnis.",
+ "Check-in/Check-out": "Einchecken/Auschecken",
"Children": "Kinder",
"Choose room": "Zimmer wählen",
"Cities": "Städte",
@@ -137,6 +143,7 @@
"Food options": "Speisen & Getränke",
"Former Scandic Hotel": "Ehemaliges Scandic Hotel",
"Free cancellation": "Kostenlose Stornierung",
+ "Free parking": "Kostenloses Parken",
"Free rebooking": "Kostenlose Umbuchung",
"From": "Fromm",
"Garage": "Garage",
@@ -160,6 +167,7 @@
"Hotel surroundings": "Umgebung des Hotels",
"Hotel(s)": "{amount} {amount, plural, one {hotel} other {hotels}}",
"Hotels": "Hotels",
+ "Hours": "Zeiten",
"How do you want to sleep?": "Wie möchtest du schlafen?",
"How it works": "Wie es funktioniert",
"Hurry up and use them before they expire!": "Beeilen Sie sich und nutzen Sie sie, bevor sie ablaufen!",
@@ -252,6 +260,7 @@
"Open menu": "Menü öffnen",
"Open my pages menu": "Meine Seiten Menü öffnen",
"Opening Hours": "Öffnungszeiten",
+ "Outdoor": "Im Freien",
"OutdoorPool": "Außenpool",
"Overview": "Übersicht",
"PETR": "Haustier",
@@ -282,6 +291,10 @@
"Previous victories": "Bisherige Siege",
"Price": "Preis",
"Price details": "Preisdetails",
+ "Price per 24 hours": "Preis pro 24 Stunden",
+ "Price per day": "Preis pro Tag",
+ "Price per night": "Preis pro Nacht",
+ "Prices": "Preise",
"Proceed to login": "Weiter zum Login",
"Proceed to payment method": "Weiter zur Zahlungsmethode",
"Provide a payment card in the next step": "Geben Sie Ihre Zahlungskarteninformationen im nächsten Schritt an",
@@ -293,10 +306,11 @@
"Read more & book a table": "Read more & book a table",
"Read more about the hotel": "Lesen Sie mehr über das Hotel",
"Read more about wellness & exercise": "Read more about wellness & exercise",
+ "Reference #{bookingNr}": "Referenz #{bookingNr}",
"Relax": "Entspannen",
"Remove card from member profile": "Karte aus dem Mitgliedsprofil entfernen",
"Request bedtype": "Bettentyp anfragen",
- "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}",
+ "Restaurant": "{count, plural, one {Restaurant} other {Restaurants}}",
"Restaurant & Bar": "Restaurant & Bar",
"Restaurants & Bars": "Restaurants & Bars",
"Retype new password": "Neues Passwort erneut eingeben",
@@ -367,6 +381,7 @@
"There are no transactions to display": "Es sind keine Transaktionen zum Anzeigen vorhanden",
"Things nearby HOTEL_NAME": "Dinge in der Nähe von {hotelName}",
"This room is not available": "Dieses Zimmer ist nicht verfügbar",
+ "Times": "Zeiten",
"To get the member price
{amount} {currency}, log in or join when completing the booking.": "Um den Mitgliederpreis von
{amount} {currency} zu erhalten, loggen Sie sich ein oder treten Sie Scandic Friends bei, wenn Sie die Buchung abschließen.",
"To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.": "Um Ihre Reservierung zu sichern, bitten wir Sie, Ihre Zahlungskarteninformationen zu geben. Sie können sicher sein, dass keine Gebühren zu diesem Zeitpunkt erhoben werden.",
"Total": "Gesamt",
@@ -393,7 +408,11 @@
"We have a special gift waiting for you!": "Wir haben ein besonderes Geschenk für Sie!",
"We have sent a detailed confirmation of your booking to your email:": "Wir haben eine detaillierte Bestätigung Ihrer Buchung an Ihre E-Mail gesendet:",
"We look forward to your visit!": "Wir freuen uns auf Ihren Besuch!",
+ "Weekday": "Wochentag",
+ "Weekday prices": "Wochentagspreise",
"Weekdays": "Wochentage",
+ "Weekend": "Wochenende",
+ "Weekend prices": "Wochenendpreise",
"Weekends": "Wochenenden",
"Welcome": "Willkommen",
"Welcome to": "Willkommen zu",
@@ -433,6 +452,8 @@
"booking.basedOnAvailability": "Abhängig von der Verfügbarkeit",
"booking.bedOptions": "Bettoptionen",
"booking.children": "{totalChildren, plural, one {# kind} other {# kinder}}",
+ "booking.confirmation.text": "Vielen Dank, dass Sie bei uns gebucht haben! Wir freuen uns, Sie bei uns begrüßen zu dürfen und wünschen Ihnen einen angenehmen Aufenthalt. Wenn Sie Fragen haben oder Änderungen an Ihrer Buchung vornehmen müssen,
kontaktieren Sie uns bitte..",
+ "booking.confirmation.title": "Buchungsbestätigung",
"booking.guests": "Max {nrOfGuests, plural, one {# gast} other {# gäste}}",
"booking.nights": "{totalNights, plural, one {# nacht} other {# Nächte}}",
"booking.rooms": "{totalRooms, plural, one {# zimmer} other {# räume}}",
@@ -443,6 +464,9 @@
"breakfast.price.free": "
{amount} {currency} 0 {currency}/Nacht",
"by": "bis",
"characters": "figuren",
+ "filters.nohotel.heading": "Kein Zimmer entspricht Ihren Filtern.",
+ "filters.nohotel.text": "Es scheint, dass keine Hotels Ihren Filtern entsprechen. Versuchen Sie, Ihre Suche anzupassen, um den perfekten Aufenthalt zu finden.",
+ "from": "aus",
"guaranteeing": "garantiert",
"guest": "gast",
"guests": "gäste",
@@ -463,11 +487,14 @@
"points": "Punkte",
"room type": "zimmerart",
"room types": "zimmerarten",
+ "signup.terms": "Mit Ihrer Anmeldung akzeptieren Sie die
Allgemeinen Geschäftsbedingungen von Scandic Friends. Ihre Mitgliedschaft ist bis auf Weiteres gültig und Sie können sie jederzeit kündigen, indem Sie eine E-Mail an den Kundenservice von Scandic senden.",
"signupPage.terms": "Ja, ich akzeptiere die Allgemeinen Geschäftsbedingungen für Scandic Friends und verstehe, dass Scandic meine persönlichen Daten gemäß
Scandics Datenschutzrichtlinie.",
"special character": "sonderzeichen",
"spendable points expiring by": "{points} Einlösbare punkte verfallen bis zum {date}",
"to": "zu",
"uppercase letter": "großbuchstabe",
"{amount} out of {total}": "{amount} von {total}",
- "{amount} {currency}": "{amount} {currency}"
+ "{amount} {currency}": "{amount} {currency}",
+ "{card} ending with {cardno}": "{card} endet mit {cardno}",
+ "{difference}{amount} {currency}": "{difference}{amount} {currency}"
}
diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json
index 2bc086e28..1930a6824 100644
--- a/i18n/dictionaries/en.json
+++ b/i18n/dictionaries/en.json
@@ -6,6 +6,7 @@
"A photo of the room": "A photo of the room",
"ACCE": "Accessibility",
"ALLG": "Allergy",
+ "About accessibility": "About accessibility",
"About meetings & conferences": "About meetings & conferences",
"About the hotel": "About the hotel",
"Accept new price": "Accept new price",
@@ -47,7 +48,9 @@
"Bed type": "Bed type",
"Birth date": "Birth date",
"Book": "Book",
+ "Book another stay": "Book another stay",
"Book reward night": "Book reward night",
+ "Book your next stay": "Book your next stay",
"Booking": "Booking",
"Booking number": "Booking number",
"Breakfast": "Breakfast",
@@ -64,9 +67,12 @@
"Cancellation policy": "Cancellation policy",
"Change room": "Change room",
"Check in": "Check in",
+ "Check in from": "Check in from",
"Check out": "Check out",
+ "Check out at latest": "Check out at latest",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.",
"Check-in": "Check-in",
+ "Check-in/Check-out": "Check-in/Check-out",
"Check-out": "Check-out",
"Child age is required": "Child age is required",
"Children": "Children",
@@ -111,6 +117,7 @@
"Disabled booking options text": "Codes, cheques and reward nights aren't available on the new website yet.",
"Discard changes": "Discard changes",
"Discard unsaved changes?": "Discard unsaved changes?",
+ "Discover the little extra touches to make your upcoming stay even more unforgettable.": "Discover the little extra touches to make your upcoming stay even more unforgettable.",
"Distance in km to city centre": "{number} km to city centre",
"Distance to city centre": "Distance to city centre",
"Distance to hotel": "Distance to hotel: {distance} m",
@@ -146,11 +153,14 @@
"Food options": "Food options",
"Former Scandic Hotel": "Former Scandic Hotel",
"Free cancellation": "Free cancellation",
+ "Free parking": "Free parking",
"Free rebooking": "Free rebooking",
"Free until": "Free until",
+ "Friend no.": "Friend no.",
"From": "From",
"Garage": "Garage",
"Get inspired": "Get inspired",
+ "Get inspired and start dreaming beyond your next trip. Explore more Scandic destinations.": "Get inspired and start dreaming beyond your next trip. Explore more Scandic destinations.",
"Get member benefits & offers": "Get member benefits & offers",
"Gift(s) added to your benefits": "{amount, plural, one {Gift} other {Gifts}} added to your benefits",
"Go back to edit": "Go back to edit",
@@ -167,11 +177,13 @@
"Home": "Home",
"Hospital": "Hospital",
"Hotel": "Hotel",
+ "Hotel details": "Hotel details",
"Hotel facilities": "Hotel facilities",
"Hotel reservation": "Hotel reservation",
"Hotel surroundings": "Hotel surroundings",
"Hotel(s)": "{amount} {amount, plural, one {hotel} other {hotels}}",
"Hotels": "Hotels",
+ "Hours": "Hours",
"How do you want to sleep?": "How do you want to sleep?",
"How it works": "How it works",
"Hurry up and use them before they expire!": "Hurry up and use them before they expire!",
@@ -209,8 +221,10 @@
"Log in here": "Log in here",
"Log in/Join": "Log in/Join",
"Log out": "Log out",
+ "Long {long} ∙ Lat {lat}": "Long {long} ∙ Lat {lat}",
"Longitude": "Longitude {long}",
"MY SAVED CARDS": "MY SAVED CARDS",
+ "Main guest": "Main guest",
"Main menu": "Main menu",
"Manage booking": "Manage booking",
"Manage preferences": "Manage preferences",
@@ -224,6 +238,7 @@
"Members": "Members",
"Membership ID": "Membership ID",
"Membership ID copied to clipboard": "Membership ID copied to clipboard",
+ "Membership benefits applied": "Membership benefits applied",
"Membership cards": "Membership cards",
"Membership no": "Membership no",
"Membership terms and conditions": "Membership terms and conditions",
@@ -249,6 +264,7 @@
"No breakfast": "No breakfast",
"No content published": "No content published",
"No matching location found": "No matching location found",
+ "No membership benefits applied": "No membership benefits applied",
"No prices available": "No prices available",
"No results": "No results",
"No transactions available": "No transactions available",
@@ -270,6 +286,7 @@
"Open menu": "Open menu",
"Open my pages menu": "Open my pages menu",
"Opening Hours": "Opening Hours",
+ "Outdoor": "Outdoor",
"OutdoorPool": "Outdoor pool",
"Overview": "Overview",
"PETR": "Pet",
@@ -281,6 +298,7 @@
"Pay now": "Pay now",
"Payment": "Payment",
"Payment Guarantee": "Payment Guarantee",
+ "Payment details": "Payment details",
"Payment info": "Payment info",
"Payment method": "Payment method",
"Payment received": "Payment received",
@@ -306,6 +324,10 @@
"Price details": "Price details",
"Price excl VAT": "Price excl VAT",
"Price incl VAT": "Price incl VAT",
+ "Price per 24 hours": "Price per 24 hours",
+ "Price per day": "Price per day",
+ "Price per night": "Price per night",
+ "Prices": "Prices",
"Print confirmation": "Print confirmation",
"Proceed to login": "Proceed to login",
"Proceed to payment method": "Proceed to payment method",
@@ -323,7 +345,9 @@
"Relax": "Relax",
"Remove card from member profile": "Remove card from member profile",
"Request bedtype": "Request bedtype",
- "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}",
+ "Reservation number": "Reservation number",
+ "Reservation policy": "Reservation policy",
+ "Restaurant": "{count, plural, one {Restaurant} other {Restaurants}}",
"Restaurant & Bar": "Restaurant & Bar",
"Restaurants & Bars": "Restaurants & Bars",
"Retype new password": "Retype new password",
@@ -378,6 +402,7 @@
"Something went wrong and we couldn't remove your card. Please try again later.": "Something went wrong and we couldn't remove your card. Please try again later.",
"Something went wrong!": "Something went wrong!",
"Sort by": "Sort by",
+ "Spice things up": "Spice things up",
"Sports": "Sports",
"Standard price": "Standard price",
"Stay at HOTEL_NAME | Hotel in DESTINATION": "Stay at {hotelName} | Hotel in {destination}",
@@ -396,6 +421,7 @@
"There are no transactions to display": "There are no transactions to display",
"Things nearby HOTEL_NAME": "Things nearby {hotelName}",
"This room is not available": "This room is not available",
+ "Times": "Times",
"To get the member price
{amount} {currency}, log in or join when completing the booking.": "To get the member price
{amount} {currency}, log in or join when completing the booking.",
"To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.": "To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.",
"Total": "Total",
@@ -415,8 +441,10 @@
"User information": "User information",
"VAT": "VAT",
"VAT amount": "VAT amount",
+ "View and buy add-ons": "View and buy add-ons",
"View as list": "View as list",
"View as map": "View as map",
+ "View room details": "View room details",
"View terms": "View terms",
"View your booking": "View your booking",
"Visiting address": "Visiting address",
@@ -425,7 +453,11 @@
"We have a special gift waiting for you!": "We have a special gift waiting for you!",
"We have sent a detailed confirmation of your booking to your email:": "We have sent a detailed confirmation of your booking to your email: ",
"We look forward to your visit!": "We look forward to your visit!",
+ "Weekday": "Weekday",
+ "Weekday prices": "Weekday prices",
"Weekdays": "Weekdays",
+ "Weekend": "Weekend",
+ "Weekend prices": "Weekend prices",
"Weekends": "Weekends",
"Welcome": "Welcome",
"Welcome to": "Welcome to",
@@ -485,6 +517,7 @@
"guest": "guest",
"guest.paid": "{amount} {currency} has been paid",
"guests": "guests",
+ "has been paid": "has been paid",
"hotelPages.rooms.roomCard.persons": "{size} ({totalOccupancy, plural, one {# person} other {# persons}})",
"hotelPages.rooms.roomCard.seeRoomDetails": "See room details",
"km to city center": "km to city center",
diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json
index 0f536a5ff..edbeb7c00 100644
--- a/i18n/dictionaries/fi.json
+++ b/i18n/dictionaries/fi.json
@@ -6,6 +6,7 @@
"A photo of the room": "Kuva huoneesta",
"ACCE": "Saavutettavuus",
"ALLG": "Allergia",
+ "About accessibility": "Tietoja saavutettavuudesta",
"About meetings & conferences": "About meetings & conferences",
"About the hotel": "Tietoja hotellista",
"Accept new price": "Hyväksy uusi hinta",
@@ -17,6 +18,7 @@
"Add new card": "Lisää uusi kortti",
"Address": "Osoite",
"Adults": "Aikuista",
+ "Age": "Ikä",
"Airport": "Lentokenttä",
"All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Kaikki aamiaisbuffettimme tarjoavat gluteenittomia, vegaanisia ja allergiaystävällisiä vaihtoehtoja.",
"Allergy Room": "Allergiahuone",
@@ -41,6 +43,7 @@
"Back to top": "Takaisin ylös",
"Bar": "Bar",
"Based on availability": "Saatavuuden mukaan",
+ "Bed": "Vuodetyyppi",
"Bed type": "Vuodetyyppi",
"Birth date": "Syntymäaika",
"Book": "Varaa",
@@ -59,8 +62,11 @@
"Cancel": "Peruuttaa",
"Change room": "Vaihda huonetta",
"Check in": "Sisäänkirjautuminen",
+ "Check in from": "Sisäänkirjautuminen alkaen",
"Check out": "Uloskirjautuminen",
+ "Check out at latest": "Uloskirjautuminen viimeistään",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Tarkista profiiliisi tallennetut luottokortit. Maksa tallennetulla kortilla kirjautuneena, jotta verkkokokemus on sujuvampi.",
+ "Check-in/Check-out": "Sisäänkirjautuminen/Uloskirjautuminen",
"Children": "Lasta",
"Choose room": "Valitse huone",
"Cities": "Kaupungit",
@@ -137,6 +143,7 @@
"Food options": "Ruokavalio",
"Former Scandic Hotel": "Entinen Scandic-hotelli",
"Free cancellation": "Ilmainen peruutus",
+ "Free parking": "Ilmainen pysäköinti",
"Free rebooking": "Ilmainen uudelleenvaraus",
"From": "From",
"Garage": "Autotalli",
@@ -160,6 +167,7 @@
"Hotel surroundings": "Hotellin ympäristö",
"Hotel(s)": "{amount} {amount, plural, one {hotelli} other {hotellit}}",
"Hotels": "Hotellit",
+ "Hours": "Ajat",
"How do you want to sleep?": "Kuinka haluat nukkua?",
"How it works": "Kuinka se toimii",
"Hurry up and use them before they expire!": "Ole nopea ja käytä ne ennen kuin ne vanhenevat!",
@@ -253,6 +261,7 @@
"Open menu": "Avaa valikko",
"Open my pages menu": "Avaa omat sivut -valikko",
"Opening Hours": "Aukioloajat",
+ "Outdoor": "Ulkona",
"OutdoorPool": "Ulkouima-allas",
"Overview": "Yleiskatsaus",
"PETR": "Lemmikki",
@@ -283,6 +292,10 @@
"Previous victories": "Edelliset voitot",
"Price": "Hinta",
"Price details": "Hintatiedot",
+ "Price per 24 hours": "Hinta per 24 tuntia",
+ "Price per day": "Hinta per päivä",
+ "Price per night": "Hinta per yö",
+ "Prices": "Hinnat",
"Proceed to login": "Jatka kirjautumiseen",
"Proceed to payment method": "Siirry maksutavalle",
"Provide a payment card in the next step": "Anna maksukortin tiedot seuraavassa vaiheessa",
@@ -294,10 +307,11 @@
"Read more & book a table": "Read more & book a table",
"Read more about the hotel": "Lue lisää hotellista",
"Read more about wellness & exercise": "Read more about wellness & exercise",
+ "Reference #{bookingNr}": "Referenssi #{bookingNr}",
"Relax": "Rentoutua",
"Remove card from member profile": "Poista kortti jäsenprofiilista",
"Request bedtype": "Pyydä sänkytyyppiä",
- "Restaurant": "{count, plural, one {#Ravintola} other {#Restaurants}}",
+ "Restaurant": "{count, plural, one {Ravintola} other {Ravintolat}}",
"Restaurant & Bar": "Ravintola & Baari",
"Restaurants & Bars": "Restaurants & Bars",
"Retype new password": "Kirjoita uusi salasana uudelleen",
@@ -368,6 +382,7 @@
"There are no transactions to display": "Näytettäviä tapahtumia ei ole",
"Things nearby HOTEL_NAME": "Lähellä olevia asioita {hotelName}",
"This room is not available": "Tämä huone ei ole käytettävissä",
+ "Times": "Ajat",
"To get the member price
{amount} {currency}, log in or join when completing the booking.": "Jäsenhintaan saavat sisäänkirjautuneet tai liittyneet jäsenet.",
"To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.": "Varmistaaksesi varauksen, pyydämme sinua antamaan meille maksukortin tiedot. Varmista, että ei veloiteta maksusi tällä hetkellä.",
"Total": "Kokonais",
@@ -394,7 +409,11 @@
"We have a special gift waiting for you!": "Meillä on erityinen lahja odottamassa sinua!",
"We have sent a detailed confirmation of your booking to your email:": "Olemme lähettäneet yksityiskohtaisen varausvahvistuksen sähköpostiisi:",
"We look forward to your visit!": "Odotamme innolla vierailuasi!",
+ "Weekday": "Arkipäivä",
+ "Weekday prices": "Arkisin hinnat",
"Weekdays": "Arkisin",
+ "Weekend": "Viikonloppu",
+ "Weekend prices": "Viikonlopun hinnat",
"Weekends": "Viikonloppuisin",
"Welcome": "Tervetuloa",
"Welcome to": "Tervetuloa",
@@ -432,6 +451,8 @@
"booking.basedOnAvailability": "Saatavuuden mukaan",
"booking.bedOptions": "Vuodevaihtoehdot",
"booking.children": "{totalChildren, plural, one {# lapsi} other {# lasta}}",
+ "booking.confirmation.text": "Kiitos, että teit varauksen meiltä! Toivotamme sinut tervetulleeksi ja toivomme sinulle miellyttävää oleskelua. Jos sinulla on kysyttävää tai haluat tehdä muutoksia varaukseesi,
ota meihin yhteyttä.",
+ "booking.confirmation.title": "Varausvahvistus",
"booking.guests": "Max {nrOfGuests, plural, one {# vieras} other {# vieraita}}",
"booking.nights": "{totalNights, plural, one {# yö} other {# yötä}}",
"booking.rooms": "{totalRooms, plural, one {# huone} other {# sviitti}}",
@@ -442,6 +463,9 @@
"breakfast.price.free": "
{amount} {currency} 0 {currency}/yö",
"by": "mennessä",
"characters": "hahmoja",
+ "filters.nohotel.heading": "Yksikään huone ei vastannut suodattimiasi",
+ "filters.nohotel.text": "Näyttää siltä, että mikään hotelli ei vastaa suodattimiasi. Yritä muokata hakuasi löytääksesi täydellisen oleskelun.",
+ "from": "alkaen",
"guaranteeing": "varmistetaan",
"guest": "Vieras",
"guests": "Vieraita",
@@ -462,11 +486,14 @@
"points": "pistettä",
"room type": "huonetyyppi",
"room types": "huonetyypit",
+ "signup.terms": "Rekisteröitymällä hyväksyt Scandic Friendsin
käyttöehdot. Jäsenyytesi on voimassa toistaiseksi ja voit lopettaa jäsenyytesi milloin tahansa lähettämällä sähköpostia Scandicin asiakaspalveluun",
"signupPage.terms": "Kyllä, hyväksyn Scandic Friends -käyttöehdot ja ymmärrän, että Scandic käsittelee henkilötietojani
Scandicin tietosuojakäytännön mukaisesti.",
"special character": "erikoishahmo",
"spendable points expiring by": "{points} pistettä vanhenee {date} mennessä",
"to": "to",
"uppercase letter": "iso kirjain",
"{amount} out of {total}": "{amount}/{total}",
- "{amount} {currency}": "{amount} {currency}"
+ "{amount} {currency}": "{amount} {currency}",
+ "{card} ending with {cardno}": "{card} päättyen {cardno}",
+ "{difference}{amount} {currency}": "{difference}{amount} {currency}"
}
diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json
index 443b83bab..24a86d528 100644
--- a/i18n/dictionaries/no.json
+++ b/i18n/dictionaries/no.json
@@ -6,6 +6,7 @@
"A photo of the room": "Et bilde av rommet",
"ACCE": "Tilgjengelighet",
"ALLG": "Allergi",
+ "About accessibility": "Om tilgjengelighet",
"About meetings & conferences": "About meetings & conferences",
"About the hotel": "Om hotellet",
"Accept new price": "Aksepterer ny pris",
@@ -17,6 +18,7 @@
"Add new card": "Legg til nytt kort",
"Address": "Adresse",
"Adults": "Voksne",
+ "Age": "Alder",
"Airport": "Flyplass",
"All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alle våre frokostbufféer tilbyr glutenfrie, veganske og allergivennlige alternativer.",
"Allergy Room": "Allergirom",
@@ -41,6 +43,7 @@
"Back to top": "Tilbake til toppen",
"Bar": "Bar",
"Based on availability": "Basert på tilgjengelighet",
+ "Bed": "Seng type",
"Bed type": "Seng type",
"Birth date": "Fødselsdato",
"Book": "Bestill",
@@ -59,8 +62,11 @@
"Cancel": "Avbryt",
"Change room": "Endre rom",
"Check in": "Sjekk inn",
+ "Check in from": "Innsjekking fra",
"Check out": "Sjekk ut",
+ "Check out at latest": "Utsjekking senest",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Sjekk ut kredittkortene som er lagret på profilen din. Betal med et lagret kort når du er pålogget for en jevnere nettopplevelse.",
+ "Check-in/Check-out": "Innsjekking/Utsjekking",
"Children": "Barn",
"Choose room": "Velg rom",
"Cities": "Byer",
@@ -136,6 +142,7 @@
"Food options": "Matvalg",
"Former Scandic Hotel": "Tidligere Scandic-hotell",
"Free cancellation": "Gratis avbestilling",
+ "Free parking": "Gratis parkering",
"Free rebooking": "Gratis ombooking",
"From": "Fra",
"Garage": "Garasje",
@@ -159,6 +166,7 @@
"Hotel surroundings": "Hotellomgivelser",
"Hotel(s)": "{amount} {amount, plural, one {hotell} other {hoteller}}",
"Hotels": "Hoteller",
+ "Hours": "Tider",
"How do you want to sleep?": "Hvordan vil du sove?",
"How it works": "Hvordan det fungerer",
"Hurry up and use them before they expire!": "Skynd deg og bruk dem før de utløper!",
@@ -251,6 +259,7 @@
"Open menu": "Åpne menyen",
"Open my pages menu": "Åpne mine sider menyen",
"Opening Hours": "Åpningstider",
+ "Outdoor": "Utendørs",
"OutdoorPool": "Utendørs basseng",
"Overview": "Oversikt",
"PETR": "Kjæledyr",
@@ -281,6 +290,10 @@
"Previous victories": "Tidligere seire",
"Price": "Pris",
"Price details": "Prisdetaljer",
+ "Price per 24 hours": "Pris per 24 timer",
+ "Price per day": "Pris per dag",
+ "Price per night": "Pris per natt",
+ "Prices": "Priser",
"Proceed to login": "Fortsett til innlogging",
"Proceed to payment method": "Fortsett til betalingsmetode",
"Provide a payment card in the next step": "Gi oss dine betalingskortdetaljer i neste steg",
@@ -292,10 +305,11 @@
"Read more & book a table": "Read more & book a table",
"Read more about the hotel": "Les mer om hotellet",
"Read more about wellness & exercise": "Read more about wellness & exercise",
+ "Reference #{bookingNr}": "Referanse #{bookingNr}",
"Relax": "Slappe av",
"Remove card from member profile": "Fjern kortet fra medlemsprofilen",
"Request bedtype": "Be om sengetype",
- "Restaurant": "{count, plural, one {#Restaurant} other {#Restaurants}}",
+ "Restaurant": "{count, plural, one {Restaurant} other {Restauranter}}",
"Restaurant & Bar": "Restaurant & Bar",
"Restaurants & Bars": "Restaurants & Bars",
"Retype new password": "Skriv inn nytt passord på nytt",
@@ -365,6 +379,7 @@
"There are no transactions to display": "Det er ingen transaksjoner å vise",
"Things nearby HOTEL_NAME": "Ting i nærheten av {hotelName}",
"This room is not available": "Dette rommet er ikke tilgjengelig",
+ "Times": "Tider",
"To get the member price
{amount} {currency}, log in or join when completing the booking.": "For å få medlemsprisen
{amount} {currency}, logg inn eller bli med når du fullfører bestillingen.",
"To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.": "For å sikre din reservasjon, ber vi om at du gir oss dine betalingskortdetaljer. Vær sikker på at ingen gebyrer vil bli belastet på dette tidspunktet.",
"Total": "Total",
@@ -391,7 +406,11 @@
"We have a special gift waiting for you!": "Vi har en spesiell gave som venter på deg!",
"We have sent a detailed confirmation of your booking to your email:": "Vi har sendt en detaljert bekreftelse av din bestilling til din e-post:",
"We look forward to your visit!": "Vi ser frem til ditt besøk!",
+ "Weekday": "Ukedag",
+ "Weekday prices": "Ukedagspriser",
"Weekdays": "Hverdager",
+ "Weekend": "Helg",
+ "Weekend prices": "Helgepriser",
"Weekends": "Helger",
"Welcome": "Velkommen",
"Welcome to": "Velkommen til",
@@ -431,15 +450,21 @@
"booking.basedOnAvailability": "Basert på tilgjengelighet",
"booking.bedOptions": "Sengemuligheter",
"booking.children": "{totalChildren, plural, one {# barn} other {# barn}}",
+ "booking.confirmation.text": "Takk for at du booket hos oss! Vi ser frem til å ønske deg velkommen og håper du får et hyggelig opphold. Hvis du har spørsmål eller trenger å gjøre endringer i bestillingen din, vennligst
kontakt oss.",
+ "booking.confirmation.title": "Bestillingsbekreftelse",
"booking.guests": "Maks {nrOfGuests, plural, one {# gjest} other {# gjester}}",
"booking.nights": "{totalNights, plural, one {# natt} other {# netter}}",
"booking.rooms": "{totalRooms, plural, one {# rom} other {# rom}}",
"booking.selectRoom": "Velg rom",
+ "booking.terms": "Ved å betale med en av de tilgjengelige betalingsmetodene godtar jeg vilkårene og betingelsene for denne bestillingen og de generelle
vilkårene, og forstår at Scandic vil behandle mine personopplysninger i forbindelse med denne bestillingen i henhold til
Scandics personvernpolicy. Jeg aksepterer at Scandic krever et gyldig kredittkort under mitt besøk i tilfelle noe blir refundert.",
"booking.thisRoomIsEquippedWith": "Dette rommet er utstyrt med",
"breakfast.price": "{amount} {currency}/natt",
"breakfast.price.free": "
{amount} {currency} 0 {currency}/natt",
"by": "innen",
"characters": "tegn",
+ "filters.nohotel.heading": "Ingen rom samsvarte med filtrene dine",
+ "filters.nohotel.text": "Det ser ut til at ingen hoteller samsvarer med filtrene dine. Prøv å justere søket for å finne det perfekte oppholdet.",
+ "from": "fra",
"guaranteeing": "garantiert",
"guest": "gjest",
"guests": "gjester",
@@ -460,11 +485,14 @@
"points": "poeng",
"room type": "romtype",
"room types": "romtyper",
+ "signup.terms": "Ved å registrere deg godtar du Scandic Friends
vilkår og betingelser. Medlemskapet ditt er gyldig inntil videre, og du kan si opp medlemskapet ditt når som helst ved å sende en e-post til Scandics kundeservice",
"signupPage.terms": "Ja, jeg godtar vilkårene og betingelsene for Scandic Friends og forstår at Scandic vil behandle mine personopplysninger i henhold til
Scandics integritetspolicy.",
"special character": "spesiell karakter",
"spendable points expiring by": "{points} Brukbare poeng utløper innen {date}",
"to": "til",
"uppercase letter": "stor bokstav",
"{amount} out of {total}": "{amount} av {total}",
- "{amount} {currency}": "{amount} {currency}"
+ "{amount} {currency}": "{amount} {currency}",
+ "{card} ending with {cardno}": "{card} slutter med {cardno}",
+ "{difference}{amount} {currency}": "{difference}{amount} {currency}"
}
diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json
index 94c6bd602..a67214de5 100644
--- a/i18n/dictionaries/sv.json
+++ b/i18n/dictionaries/sv.json
@@ -6,6 +6,7 @@
"A photo of the room": "Ett foto av rummet",
"ACCE": "Tillgänglighet",
"ALLG": "Allergi",
+ "About accessibility": "Om tillgänglighet",
"About meetings & conferences": "About meetings & conferences",
"About the hotel": "Om hotellet",
"Accept new price": "Accepter ny pris",
@@ -17,6 +18,7 @@
"Add new card": "Lägg till nytt kort",
"Address": "Adress",
"Adults": "Vuxna",
+ "Age": "Ålder",
"Airport": "Flygplats",
"All our breakfast buffets offer gluten free, vegan, and allergy-friendly options.": "Alla våra frukostbufféer erbjuder glutenfria, veganska och allergivänliga alternativ.",
"Allergy Room": "Allergirum",
@@ -41,6 +43,7 @@
"Back to top": "Tillbaka till toppen",
"Bar": "Bar",
"Based on availability": "Baserat på tillgänglighet",
+ "Bed": "Sängtyp",
"Bed type": "Sängtyp",
"Birth date": "Födelsedatum",
"Book": "Boka",
@@ -59,8 +62,11 @@
"Cancel": "Avbryt",
"Change room": "Ändra rum",
"Check in": "Checka in",
+ "Check in from": "Incheckning från",
"Check out": "Checka ut",
+ "Check out at latest": "Utcheckning senast",
"Check out the credit cards saved to your profile. Pay with a saved card when signed in for a smoother web experience.": "Kolla in kreditkorten som sparats i din profil. Betala med ett sparat kort när du är inloggad för en smidigare webbupplevelse.",
+ "Check-in/Check-out": "Inchecking/Utcheckning",
"Children": "Barn",
"Choose room": "Välj rum",
"Cities": "Städer",
@@ -136,6 +142,7 @@
"Food options": "Matval",
"Former Scandic Hotel": "Tidigare Scandichotell",
"Free cancellation": "Fri avbokning",
+ "Free parking": "Gratis parkering",
"Free rebooking": "Fri ombokning",
"From": "Från",
"Garage": "Garage",
@@ -159,6 +166,7 @@
"Hotel surroundings": "Hotellomgivning",
"Hotel(s)": "{amount} hotell",
"Hotels": "Hotell",
+ "Hours": "Tider",
"How do you want to sleep?": "Hur vill du sova?",
"How it works": "Hur det fungerar",
"Hurry up and use them before they expire!": "Skynda dig och använd dem innan de går ut!",
@@ -251,6 +259,7 @@
"Open menu": "Öppna menyn",
"Open my pages menu": "Öppna mina sidor menyn",
"Opening Hours": "Öppettider",
+ "Outdoor": "Utomhus",
"OutdoorPool": "Utomhuspool",
"Overview": "Översikt",
"PETR": "Husdjur",
@@ -281,6 +290,10 @@
"Previous victories": "Tidigare segrar",
"Price": "Pris",
"Price details": "Prisdetaljer",
+ "Price per 24 hours": "Pris per 24 timmar",
+ "Price per day": "Pris per dag",
+ "Price per night": "Pris per natt",
+ "Prices": "Priser",
"Proceed to login": "Fortsätt till inloggning",
"Proceed to payment method": "Gå vidare till betalningsmetod",
"Provide a payment card in the next step": "Ge oss dina betalkortdetaljer i nästa steg",
@@ -292,10 +305,11 @@
"Read more & book a table": "Read more & book a table",
"Read more about the hotel": "Läs mer om hotellet",
"Read more about wellness & exercise": "Read more about wellness & exercise",
+ "Reference #{bookingNr}": "Referens #{bookingNr}",
"Relax": "Koppla av",
"Remove card from member profile": "Ta bort kortet från medlemsprofilen",
"Request bedtype": "Request bedtype",
- "Restaurant": "{count, plural, one {#Restaurang} other {#Restauranger}}",
+ "Restaurant": "{count, plural, one {Restaurang} other {Restauranger}}",
"Restaurant & Bar": "Restaurang & Bar",
"Restaurants & Bars": "Restaurants & Bars",
"Retype new password": "Upprepa nytt lösenord",
@@ -365,6 +379,7 @@
"There are no transactions to display": "Det finns inga transaktioner att visa",
"Things nearby HOTEL_NAME": "Saker i närheten av {hotelName}",
"This room is not available": "Detta rum är inte tillgängligt",
+ "Times": "Tider",
"To get the member price
{amount} {currency}, log in or join when completing the booking.": "För att få medlemsprisen
{amount} {currency}, logga in eller bli medlem när du slutför bokningen.",
"To secure your reservation, we kindly ask you to provide your payment card details. Rest assured, no charges will be made at this time.": "För att säkra din bokning ber vi om att du ger oss dina betalkortdetaljer. Välj säker på att ingen avgifter kommer att debiteras just nu.",
"Total": "Totalt",
@@ -391,7 +406,11 @@
"We have a special gift waiting for you!": "Vi har en speciell present som väntar på dig!",
"We have sent a detailed confirmation of your booking to your email:": "Vi har skickat en detaljerad bekräftelse av din bokning till din e-post:",
"We look forward to your visit!": "Vi ser fram emot ditt besök!",
+ "Weekday": "Vardag",
+ "Weekday prices": "Vardagspriser",
"Weekdays": "Vardagar",
+ "Weekend": "Helg",
+ "Weekend prices": "Helgpriser",
"Weekends": "Helger",
"Welcome": "Välkommen",
"Welcome to": "Välkommen till",
@@ -431,6 +450,8 @@
"booking.basedOnAvailability": "Baserat på tillgänglighet",
"booking.bedOptions": "Sängalternativ",
"booking.children": "{totalChildren, plural, one {# barn} other {# barn}}",
+ "booking.confirmation.text": "Tack för att du bokar hos oss! Vi ser fram emot att välkomna dig och hoppas att du får en trevlig vistelse. Om du har några frågor eller behöver göra ändringar i din bokning, vänligen
kontakta oss.",
+ "booking.confirmation.title": "Bokningsbekräftelse",
"booking.guests": "Max {nrOfGuests, plural, one {# gäst} other {# gäster}}",
"booking.nights": "{totalNights, plural, one {# natt} other {# nätter}}",
"booking.rooms": "{totalRooms, plural, one {# rum} other {# rum}}",
@@ -441,6 +462,9 @@
"breakfast.price.free": "
{amount} {currency} 0 {currency}/natt",
"by": "innan",
"characters": "tecken",
+ "filters.nohotel.heading": "Inga rum matchade dina filter",
+ "filters.nohotel.text": "Det verkar som att inga hotell matchar dina filter. Prova att justera din sökning för att hitta den perfekta vistelsen.",
+ "from": "från",
"guaranteeing": "garanterar",
"guest": "gäst",
"guests": "gäster",
@@ -461,6 +485,7 @@
"points": "poäng",
"room type": "rumtyp",
"room types": "rumstyper",
+ "signup.terms": "Genom att registrera dig accepterar du Scandic Friends
Användarvillkor. Ditt medlemskap gäller tills vidare och du kan när som helst säga upp ditt medlemskap genom att skicka ett mejl till Scandics kundtjänst",
"signupPage.terms": "Ja, jag accepterar villkoren för Scandic Friends och förstår att Scandic kommer att behandla mina personuppgifter i enlighet med
Scandics integritetspolicy.",
"special character": "speciell karaktär",
"spendable points expiring by": "{points} poäng förfaller {date}",
@@ -469,5 +494,7 @@
"types": "typer",
"uppercase letter": "stor bokstav",
"{amount} out of {total}": "{amount} av {total}",
- "{amount} {currency}": "{amount} {currency}"
+ "{amount} {currency}": "{amount} {currency}",
+ "{card} ending with {cardno}": "{card} som slutar på {cardno}",
+ "{difference}{amount} {currency}": "{difference}{amount} {currency}"
}
diff --git a/lib/graphql/_request.ts b/lib/graphql/_request.ts
index 42920c293..e2ffef5c4 100644
--- a/lib/graphql/_request.ts
+++ b/lib/graphql/_request.ts
@@ -18,6 +18,7 @@ export async function request
(
try {
client.setHeaders({
access_token: env.CMS_ACCESS_TOKEN,
+ branch: env.CMS_BRANCH,
"Content-Type": "application/json",
...params?.headers,
})
diff --git a/lib/trpc/memoizedRequests/index.ts b/lib/trpc/memoizedRequests/index.ts
index 7db2e66da..2bf35c264 100644
--- a/lib/trpc/memoizedRequests/index.ts
+++ b/lib/trpc/memoizedRequests/index.ts
@@ -144,7 +144,7 @@ export const getBookingConfirmation = cache(
export const getCityCoordinates = cache(
async function getMemoizedCityCoordinates(input: {
city: string
- hotel: { address: string }
+ hotel: { address: string | undefined }
}) {
return serverClient().hotel.map.city(input)
}
diff --git a/package-lock.json b/package-lock.json
index 2a2f3b61a..b4509615e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,6 +35,7 @@
"dayjs": "^1.11.10",
"deepmerge": "^4.3.1",
"downshift": "^9.0.8",
+ "fast-deep-equal": "^3.1.3",
"fetch-retry": "^6.0.0",
"framer-motion": "^11.3.28",
"graphql": "^16.8.1",
@@ -43,7 +44,6 @@
"immer": "10.1.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"libphonenumber-js": "^1.10.60",
- "lodash.isequal": "^4.5.0",
"next": "^14.2.18",
"next-auth": "^5.0.0-beta.19",
"react": "^18",
@@ -67,7 +67,6 @@
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.12",
"@types/json-stable-stringify-without-jsonify": "^1.0.2",
- "@types/lodash.isequal": "^4.5.8",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
@@ -6866,21 +6865,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/lodash": {
- "version": "4.17.13",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz",
- "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==",
- "dev": true
- },
- "node_modules/@types/lodash.isequal": {
- "version": "4.5.8",
- "resolved": "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.8.tgz",
- "integrity": "sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==",
- "dev": true,
- "dependencies": {
- "@types/lodash": "*"
- }
- },
"node_modules/@types/node": {
"version": "20.12.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
@@ -15001,11 +14985,6 @@
"resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
"integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg=="
},
- "node_modules/lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
- },
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
diff --git a/package.json b/package.json
index b6e68c685..efb824197 100644
--- a/package.json
+++ b/package.json
@@ -50,6 +50,7 @@
"dayjs": "^1.11.10",
"deepmerge": "^4.3.1",
"downshift": "^9.0.8",
+ "fast-deep-equal": "^3.1.3",
"fetch-retry": "^6.0.0",
"framer-motion": "^11.3.28",
"graphql": "^16.8.1",
@@ -58,7 +59,6 @@
"immer": "10.1.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"libphonenumber-js": "^1.10.60",
- "lodash.isequal": "^4.5.0",
"next": "^14.2.18",
"next-auth": "^5.0.0-beta.19",
"react": "^18",
@@ -82,7 +82,6 @@
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.12",
"@types/json-stable-stringify-without-jsonify": "^1.0.2",
- "@types/lodash.isequal": "^4.5.8",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
diff --git a/public/_static/img/icons/swan-eco/swan_eco_dark_dk.png b/public/_static/img/icons/swan-eco/swan_eco_dark_da.png
similarity index 100%
rename from public/_static/img/icons/swan-eco/swan_eco_dark_dk.png
rename to public/_static/img/icons/swan-eco/swan_eco_dark_da.png
diff --git a/public/_static/img/icons/swan-eco/swan_eco_dark_de.png b/public/_static/img/icons/swan-eco/swan_eco_dark_de.png
new file mode 100644
index 000000000..2b7ef7340
Binary files /dev/null and b/public/_static/img/icons/swan-eco/swan_eco_dark_de.png differ
diff --git a/public/_static/img/icons/swan-eco/swan_eco_dark_se.png b/public/_static/img/icons/swan-eco/swan_eco_dark_sv.png
similarity index 100%
rename from public/_static/img/icons/swan-eco/swan_eco_dark_se.png
rename to public/_static/img/icons/swan-eco/swan_eco_dark_sv.png
diff --git a/server/routers/hotels/input.ts b/server/routers/hotels/input.ts
index a4e47caf3..4a66009b3 100644
--- a/server/routers/hotels/input.ts
+++ b/server/routers/hotels/input.ts
@@ -77,6 +77,6 @@ export const getRoomPackagesInputSchema = z.object({
export const getCityCoordinatesInputSchema = z.object({
city: z.string(),
hotel: z.object({
- address: z.string(),
+ address: z.string().optional(),
}),
})
diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts
index 14bea40c1..76f29349a 100644
--- a/server/routers/hotels/output.ts
+++ b/server/routers/hotels/output.ts
@@ -56,7 +56,7 @@ const contactInformationSchema = z.object({
websiteUrl: z.string(),
})
-const checkinSchema = z.object({
+export const checkinSchema = z.object({
checkInTime: z.string(),
checkOutTime: z.string(),
onlineCheckOutAvailableFrom: z.string().nullable().optional(),
@@ -110,6 +110,12 @@ const hotelContentSchema = z.object({
short: z.string(),
medium: z.string(),
}),
+ meetingDescription: z
+ .object({
+ short: z.string().optional(),
+ medium: z.string().optional(),
+ })
+ .optional(),
}),
restaurantsOverviewPage: z.object({
restaurantsOverviewPageLinkText: z.string().optional(),
@@ -129,7 +135,7 @@ const detailedFacilitySchema = z.object({
})
export const facilitySchema = z.object({
- headingText: z.string(),
+ headingText: z.string().default(""),
heroImages: z.array(
z.object({
metaData: imageMetaDataSchema,
diff --git a/stores/enter-details/helpers.ts b/stores/enter-details/helpers.ts
index 567e96334..496b75ba6 100644
--- a/stores/enter-details/helpers.ts
+++ b/stores/enter-details/helpers.ts
@@ -1,13 +1,10 @@
-import isEqual from "lodash.isequal"
-import { z } from "zod"
+import isEqual from "fast-deep-equal"
import { Lang } from "@/constants/languages"
-import { breakfastPackageSchema } from "@/server/routers/hotels/output"
import { getLang } from "@/i18n/serverContext"
import type { BookingData } from "@/types/components/hotelReservation/enterDetails/bookingData"
-import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import { CurrencyEnum } from "@/types/enums/currency"
import { StepEnum } from "@/types/enums/step"
import type { DetailsState, RoomRate } from "@/types/stores/enter-details"
diff --git a/components/TempDesignSystem/Form/Phone/phone.ts b/types/components/form/phone.ts
similarity index 61%
rename from components/TempDesignSystem/Form/Phone/phone.ts
rename to types/components/form/phone.ts
index f7dbd0e15..537c17cc1 100644
--- a/components/TempDesignSystem/Form/Phone/phone.ts
+++ b/types/components/form/phone.ts
@@ -1,6 +1,9 @@
+import type { CountryCode } from "libphonenumber-js/min"
import type { RegisterOptions } from "react-hook-form"
-export type PhoneProps = {
+export type LowerCaseCountryCode = Lowercase
+
+export interface PhoneProps {
ariaLabel?: string
className?: string
disabled?: boolean
diff --git a/types/components/hotelPage/sidepeek/aboutTheHotel.ts b/types/components/hotelPage/sidepeek/aboutTheHotel.ts
index bb9633b60..d2ceae322 100644
--- a/types/components/hotelPage/sidepeek/aboutTheHotel.ts
+++ b/types/components/hotelPage/sidepeek/aboutTheHotel.ts
@@ -8,3 +8,8 @@ export type AboutTheHotelSidePeekProps = {
ecoLabels: Hotel["hotelFacts"]["ecoLabels"]
descriptions: Hotel["hotelContent"]["texts"]
}
+
+export type ContactInformationProps = Omit<
+ AboutTheHotelSidePeekProps,
+ "descriptions"
+>
diff --git a/types/components/hotelPage/sidepeek/accessibility.ts b/types/components/hotelPage/sidepeek/accessibility.ts
new file mode 100644
index 000000000..335971419
--- /dev/null
+++ b/types/components/hotelPage/sidepeek/accessibility.ts
@@ -0,0 +1,5 @@
+import type { Hotel } from "@/types/hotel"
+
+export type AccessibilityAmenityProps = {
+ accessibility: Hotel["hotelFacts"]["hotelInformation"]["accessibility"]
+}
diff --git a/types/components/hotelPage/sidepeek/amenities.ts b/types/components/hotelPage/sidepeek/amenities.ts
new file mode 100644
index 000000000..8ded22722
--- /dev/null
+++ b/types/components/hotelPage/sidepeek/amenities.ts
@@ -0,0 +1,12 @@
+import type { Hotel } from "@/types/hotel"
+
+export type AmenitiesSidePeekProps = {
+ amenitiesList: Hotel["detailedFacilities"]
+ parking: Hotel["parking"]
+ checkInInformation: Hotel["hotelFacts"]["checkin"]
+ accessibility: Hotel["hotelFacts"]["hotelInformation"]["accessibility"]
+}
+
+export type FilteredAmenitiesProps = {
+ filteredAmenities: Hotel["detailedFacilities"]
+}
diff --git a/types/components/hotelPage/sidepeek/checkIn.ts b/types/components/hotelPage/sidepeek/checkIn.ts
new file mode 100644
index 000000000..e3a8d929b
--- /dev/null
+++ b/types/components/hotelPage/sidepeek/checkIn.ts
@@ -0,0 +1,5 @@
+import type { Hotel } from "@/types/hotel"
+
+export type CheckInAmenityProps = {
+ checkInInformation: Hotel["hotelFacts"]["checkin"]
+}
diff --git a/types/components/hotelPage/sidepeek/contactInformation.ts b/types/components/hotelPage/sidepeek/contactInformation.ts
deleted file mode 100644
index f1eb73196..000000000
--- a/types/components/hotelPage/sidepeek/contactInformation.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { AboutTheHotelSidePeekProps } from "./aboutTheHotel"
-
-export type ContactInformationProps = Omit<
- AboutTheHotelSidePeekProps,
- "descriptions"
->
diff --git a/types/components/hotelPage/sidepeek/parking.ts b/types/components/hotelPage/sidepeek/parking.ts
new file mode 100644
index 000000000..67c1653e8
--- /dev/null
+++ b/types/components/hotelPage/sidepeek/parking.ts
@@ -0,0 +1,25 @@
+import type { Hotel } from "@/types/hotel"
+
+export enum Periods {
+ day = "Day",
+ night = "Night",
+ allDay = "AllDay",
+}
+
+export type ParkingAmenityProps = {
+ parking: Hotel["parking"]
+}
+
+export type ParkingListProps = {
+ numberOfChargingSpaces: Hotel["parking"][number]["numberOfChargingSpaces"]
+ canMakeReservation: Hotel["parking"][number]["canMakeReservation"]
+ numberOfParkingSpots: Hotel["parking"][number]["numberOfParkingSpots"]
+ distanceToHotel: Hotel["parking"][number]["distanceToHotel"]
+ address: Hotel["parking"][number]["address"]
+}
+
+export type ParkingPricesProps = {
+ data: Hotel["parking"][number]["pricing"]["localCurrency"]["ordinary"]
+ currency: Hotel["parking"][number]["pricing"]["localCurrency"]["currency"]
+ freeParking: Hotel["parking"][number]["pricing"]["freeParking"]
+}
diff --git a/types/components/hotelReservation/bookingConfirmation/promo.ts b/types/components/hotelReservation/bookingConfirmation/promo.ts
new file mode 100644
index 000000000..22cf695d8
--- /dev/null
+++ b/types/components/hotelReservation/bookingConfirmation/promo.ts
@@ -0,0 +1,5 @@
+export interface PromoProps {
+ buttonText: string
+ text: string
+ title: string
+}
diff --git a/types/components/hotelReservation/bookingConfirmation/room.ts b/types/components/hotelReservation/bookingConfirmation/room.ts
new file mode 100644
index 000000000..5f379c4ec
--- /dev/null
+++ b/types/components/hotelReservation/bookingConfirmation/room.ts
@@ -0,0 +1,11 @@
+import { RouterOutput } from "@/lib/trpc/client"
+
+export interface RoomProps {
+ booking: RouterOutput["booking"]["confirmation"]["booking"]
+ img: NonNullable<
+ RouterOutput["booking"]["confirmation"]["hotel"]["included"]
+ >[number]["images"][number]
+ roomName: NonNullable<
+ RouterOutput["booking"]["confirmation"]["hotel"]["included"]
+ >[number]["name"]
+}
diff --git a/types/components/hotelReservation/enterDetails/summary.ts b/types/components/hotelReservation/enterDetails/summary.ts
index 5b6f82754..54d896d92 100644
--- a/types/components/hotelReservation/enterDetails/summary.ts
+++ b/types/components/hotelReservation/enterDetails/summary.ts
@@ -1,5 +1,4 @@
import type { Child } from "@/types/components/hotelReservation/selectRate/selectRate"
-import type { Packages } from "@/types/requests/packages"
import type { RoomAvailability } from "@/types/trpc/routers/hotel/availability"
export interface ClientSummaryProps
diff --git a/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts b/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts
index 68a6174ed..eb84b6977 100644
--- a/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts
+++ b/types/components/hotelReservation/selectHotel/hotelCardListingProps.ts
@@ -18,3 +18,7 @@ export type HotelData = {
hotelData: Hotel
price: ProductType
}
+
+export interface NullableHotelData extends Omit {
+ hotelData: HotelData["hotelData"] | null
+}
diff --git a/types/components/hotelReservation/selectHotel/map.ts b/types/components/hotelReservation/selectHotel/map.ts
index 4ec21f86f..19490464d 100644
--- a/types/components/hotelReservation/selectHotel/map.ts
+++ b/types/components/hotelReservation/selectHotel/map.ts
@@ -56,7 +56,7 @@ export interface HotelCardDialogProps {
}
export interface HotelCardDialogListingProps {
- hotels: HotelData[]
+ hotels: HotelData[] | null
activeCard: string | null | undefined
onActiveCardChange: (hotelName: string | null) => void
}
diff --git a/types/components/hotelReservation/selectHotel/selectHotel.ts b/types/components/hotelReservation/selectHotel/selectHotel.ts
index 233cf0076..d5f8807bd 100644
--- a/types/components/hotelReservation/selectHotel/selectHotel.ts
+++ b/types/components/hotelReservation/selectHotel/selectHotel.ts
@@ -1,4 +1,4 @@
-import { Hotel, ParkingData } from "@/types/hotel"
+import { CheckInData, Hotel, ParkingData } from "@/types/hotel"
export enum AvailabilityEnum {
Available = "Available",
@@ -17,5 +17,21 @@ export interface ContactProps {
}
export interface ParkingProps {
- parking: ParkingData
+ parking: ParkingData[]
+}
+
+export interface AccessibilityProps {
+ accessibilityElevatorPitchText: string
+}
+
+export interface RestaurantProps {
+ restaurantsContentDescriptionMedium: string
+}
+
+export interface CheckInCheckOutProps {
+ checkin: CheckInData
+}
+
+export interface MeetingsAndConferencesProps {
+ meetingDescription: string
}
diff --git a/types/components/hotelReservation/sidePanel.ts b/types/components/hotelReservation/sidePanel.ts
new file mode 100644
index 000000000..5a7f1910a
--- /dev/null
+++ b/types/components/hotelReservation/sidePanel.ts
@@ -0,0 +1,6 @@
+import { sidePanelVariants } from "@/components/HotelReservation/SidePanel/variants"
+
+import type { VariantProps } from "class-variance-authority"
+
+export interface SidePanelProps
+ extends VariantProps {}
diff --git a/types/components/hotelReservation/summary.ts b/types/components/hotelReservation/summary.ts
index de8e20c4c..e705f3751 100644
--- a/types/components/hotelReservation/summary.ts
+++ b/types/components/hotelReservation/summary.ts
@@ -1,10 +1,6 @@
-import { RoomPackageCodeEnum } from "./selectRate/roomFilter"
-
import type { Packages } from "@/types/requests/packages"
import type { DetailsState, Price } from "@/types/stores/enter-details"
import type { RoomAvailability } from "@/types/trpc/routers/hotel/availability"
-import type { BedTypeSchema } from "./enterDetails/bedType"
-import type { BreakfastPackage } from "./enterDetails/breakfast"
import type { Child } from "./selectRate/selectRate"
export type RoomsData = Pick &
@@ -15,25 +11,8 @@ export type RoomsData = Pick &
packages: Packages | null
}
-interface SharedSummaryProps {
- fromDate: string
- toDate: string
-}
-
-export interface SummaryProps extends SharedSummaryProps {
- bedType: BedTypeSchema | undefined
- breakfast: BreakfastPackage | false | undefined
- showMemberPrice: boolean
- room: RoomsData
- toggleSummaryOpen?: () => void
- totalPrice: Price
-}
-
-export interface SummaryPageProps extends SharedSummaryProps {
- adults: number
- hotelId: string
- kids: Child[] | undefined
- packageCodes: RoomPackageCodeEnum[] | undefined
- rateCode: string
- roomTypeCode: string
+export interface SummaryProps
+ extends Pick,
+ Pick {
+ isMember: boolean
}
diff --git a/types/components/tooltip.ts b/types/components/tooltip.ts
index ff7ed6ecc..622db4c2c 100644
--- a/types/components/tooltip.ts
+++ b/types/components/tooltip.ts
@@ -18,4 +18,5 @@ export interface TooltipProps {
text?: string
position: P
arrow: ValidArrow
+ isTouchable?: boolean
}
diff --git a/types/enums/facilities.ts b/types/enums/facilities.ts
index 169aad6c0..2e9d0ae4d 100644
--- a/types/enums/facilities.ts
+++ b/types/enums/facilities.ts
@@ -148,6 +148,7 @@ export enum FacilityEnum {
Lake0To1Km = 1865,
LakeOrSea0To1Km = 245437,
LaptopSafe = 5283,
+ LateCheckOutUntil1400Guaranteed = 324101,
LaundryRoom = 326031,
LaundryService = 1834,
LaundryServiceExpress = 162583,
@@ -155,6 +156,7 @@ export enum FacilityEnum {
LifestyleConcierge = 162584,
LuggageLockers = 324098,
Massage = 348859,
+ MeetingArea = 1692,
MeetingConferenceFacilities = 5806,
MeetingRooms = 1017,
MinibarInRoom = 5768,
diff --git a/types/hotel.ts b/types/hotel.ts
index aadaab740..def1e2ebe 100644
--- a/types/hotel.ts
+++ b/types/hotel.ts
@@ -1,6 +1,7 @@
import { z } from "zod"
import {
+ checkinSchema,
facilitySchema,
getHotelDataSchema,
imageSchema,
@@ -23,6 +24,7 @@ export type HotelTripAdvisor =
export type RoomData = z.infer
export type GalleryImage = z.infer
+export type CheckInData = z.infer
export type PointOfInterest = z.output
diff --git a/types/transitionTypes/rte/enums.ts b/types/transitionTypes/rte/enums.ts
index f4d6bd86c..29a76bf0d 100644
--- a/types/transitionTypes/rte/enums.ts
+++ b/types/transitionTypes/rte/enums.ts
@@ -27,6 +27,7 @@ export enum RTETypeEnum {
ol = "ol",
p = "p",
reference = "reference",
+ span = "span",
table = "table",
tbody = "tbody",
td = "td",
diff --git a/utils/getBookedHotelRoom.ts b/utils/getBookedHotelRoom.ts
new file mode 100644
index 000000000..45b5d65b8
--- /dev/null
+++ b/utils/getBookedHotelRoom.ts
@@ -0,0 +1,23 @@
+import type { RouterOutput } from "@/lib/trpc/client"
+
+export function getBookedHotelRoom(
+ hotel: RouterOutput["booking"]["confirmation"]["hotel"],
+ roomTypeCode: string
+) {
+ const room = hotel.included?.find((include) => {
+ return include.roomTypes.find((roomType) => roomType.code === roomTypeCode)
+ })
+ if (!room) {
+ return null
+ }
+ const bedType = room.roomTypes.find(
+ (roomType) => roomType.code === roomTypeCode
+ )
+ if (!bedType) {
+ return null
+ }
+ return {
+ ...room,
+ bedType,
+ }
+}