Merged in feat/sw-2863-move-contentstack-router-to-trpc-package (pull request #2389)

feat(SW-2863): Move contentstack router to trpc package

* Add exports to packages and lint rule to prevent relative imports

* Add env to trpc package

* Add eslint to trpc package

* Apply lint rules

* Use direct imports from trpc package

* Add lint-staged config to trpc

* Move lang enum to common

* Restructure trpc package folder structure

* WIP first step

* update internal imports in trpc

* Fix most errors in scandic-web

Just 100 left...

* Move Props type out of trpc

* Fix CategorizedFilters types

* Move more schemas in hotel router

* Fix deps

* fix getNonContentstackUrls

* Fix import error

* Fix entry error handling

* Fix generateMetadata metrics

* Fix alertType enum

* Fix duplicated types

* lint:fix

* Merge branch 'master' into feat/sw-2863-move-contentstack-router-to-trpc-package

* Fix broken imports

* Merge branch 'master' into feat/sw-2863-move-contentstack-router-to-trpc-package


Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-06-26 07:53:01 +00:00
parent 0263ab8c87
commit 002d093af4
921 changed files with 3112 additions and 3008 deletions

View File

@@ -8,6 +8,7 @@ import BedSofaExtraIcon from "@scandic-hotels/design-system/Icons/BedSofaExtraIc
import BedTwinIcon from "@scandic-hotels/design-system/Icons/BedTwinIcon"
import BedWallExtraIcon from "@scandic-hotels/design-system/Icons/BedWallExtraIcon"
import type { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod"
import type { IconProps } from "@scandic-hotels/design-system/Icons"
import type { JSX } from "react"
@@ -28,13 +29,6 @@ export enum BookingStatusEnum {
PendingPayment = "PendingPayment",
}
export enum ChildBedTypeEnum {
Crib = "Crib",
ExtraBed = "ExtraBed",
ParentsBed = "ParentsBed",
Unknown = "Unknown",
}
export const FamilyAndFriendsCodes = ["D000029555", "D000029271", "D000029195"]
export const REDEMPTION = "redemption"
@@ -43,28 +37,6 @@ export const SEARCHTYPE = "searchtype"
export const MEMBERSHIP_FAILED_ERROR = "MembershipFailedError"
export enum PaymentMethodEnum {
card = "card",
swish = "swish",
vipps = "vipps",
mobilePay = "mobilePay",
applePay = "applePay",
googlePay = "googlePay",
alipayPlus = "alipayPlus",
weChatPay = "weChatPay",
payPal = "payPal",
klarna = "klarna",
americanExpress = "americanExpress",
dankort = "dankort",
dinersClub = "dinersClub",
jcb = "jcb",
masterCard = "masterCard",
visa = "visa",
maestro = "maestro",
chinaUnionPay = "chinaUnionPay",
discover = "discover",
}
export enum BookingErrorCodeEnum {
InternalError = "InternalError",
ReservationError = "ReservationError",

View File

@@ -1,3 +1,5 @@
import { MembershipLevelEnum } from "@scandic-hotels/common/constants/membershipLevels"
import type { EurobonusTier } from "@/types/user"
export const FriendsMembershipLevels = [
@@ -20,16 +22,6 @@ export enum membershipLevels {
L7 = 7,
}
export enum MembershipLevelEnum {
L1 = "L1",
L2 = "L2",
L3 = "L3",
L4 = "L4",
L5 = "L5",
L6 = "L6",
L7 = "L7",
}
/**
* @note Membership levels should always be in English.
*/
@@ -43,8 +35,6 @@ export const TIER_TO_FRIEND_MAP: Record<MembershipLevelEnum, string> = {
[MembershipLevelEnum.L7]: "Best Friend",
}
export type MembershipLevel = keyof typeof MembershipLevelEnum
export const SAS_EUROBONUS_TIER_TO_NAME_MAP: Record<EurobonusTier, string> = {
EBB: "Member",
EBS: "Silver",

View File

@@ -1,4 +1,4 @@
import type { LangRoute } from "@/types/routes"
import type { LangRoute } from "@scandic-hotels/common/constants/routes/langRoute"
export const missingPoints: LangRoute = {
da: "https://www.scandichotels.dk/form/manglende-point",

View File

@@ -1,4 +1,4 @@
import type { LangRoute } from "@/types/routes"
import type { LangRoute } from "@scandic-hotels/common/constants/routes/langRoute"
export const myBookingPath: LangRoute = {
da: "/hotelreservation/min-booking",

View File

@@ -1,41 +1 @@
export const REWARD_IDS = {
// Food & Beverage
TenPercentFood: "tier_10_percent_food_tier",
TwoForOneBreakfast: "tier_2_for_one_breakfast",
FifteenPercentFood: "tier_15_percent_food",
FreeKidsDrink: "tier_free_kids_drink",
FreeBreakfast: "tier_free_breakfast",
// Monetary Vouchers
Bonus50SEK: "tier_50_SEK_bonus_voucher",
Bonus75SEK: "tier_75_SEK_bonus_voucher",
Bonus100SEK: "tier_100_SEK_bonus_voucher",
Bonus150SEK: "tier_150_SEK_bonus_voucher",
Bonus200SEK: "tier_200_SEK_bonus_voucher",
// Hotel Perks
EarlyCheckin: "tier_early_checkin_tier",
LateCheckout: "tier_late_checkout",
FreeUpgrade: "tier_free_upgrade",
RoomGuarantee48H: "tier_48_h_room_guarantee",
// GymAccess: "tier_gym_access",
// Earning & Points
EarnRate25Percent: "tier_25_percent_earn_rate",
EarnRate50Percent: "tier_50_percent_earn_rate",
StayBoostForKids: "tier_stay_boost_for_kids",
MemberRate: "tier_member_rate",
// Special
YearlyExclusiveGift: "tier_yearly_exclusive_gift",
} as const
export const RESTAURANT_REWARD_IDS = [
REWARD_IDS.TenPercentFood,
REWARD_IDS.TwoForOneBreakfast,
REWARD_IDS.FifteenPercentFood,
REWARD_IDS.FreeKidsDrink,
REWARD_IDS.FreeBreakfast,
] as const
export const REWARDS_PER_PAGE = 6

View File

@@ -1,10 +0,0 @@
import type { LanguageSwitcherData } from "@/types/requests/languageSwitcher"
export const baseUrls: LanguageSwitcherData = {
da: { url: "/da/" },
de: { url: "/de/" },
en: { url: "/en/" },
fi: { url: "/fi/" },
no: { url: "/no/" },
sv: { url: "/sv/" },
}

View File

@@ -1,4 +1,4 @@
import type { LangRoute } from "@/types/routes"
import type { LangRoute } from "@scandic-hotels/common/constants/routes/langRoute"
export const employeeBenefits: LangRoute = {
en: "/en/employee-benefits",

View File

@@ -1,24 +0,0 @@
/**
* @file Due to these records being used in next.config.js, and that is required
* to be a js file, we use jsdoc to type these.
*/
/** @type {import('@/types/routes').LangRoute} */
export const findMyBooking = {
da: "/da/hotelreservation/hent-booking",
de: "/de/hotelreservation/mein-bereich",
en: "/en/hotelreservation/get-booking",
fi: "/fi/hotelreservation/hae-varaus",
no: "/no/hotelreservation/get-booking",
sv: "/sv/hotelreservation/hitta-bokning",
}
/** @type {import('@/types/routes').LangRoute} */
export const findMyBookingCurrentWebPath = {
da: "/hotelreservation/hent-booking",
de: "/hotelreservation/mein-bereich",
en: "/hotelreservation/get-booking",
fi: "/varaa-hotelli/hae-varaus",
no: "/hotelreservation/get-booking",
sv: "/hotelreservation/hitta-bokning",
}

View File

@@ -2,7 +2,7 @@
* These are routes for login, logout, signup, etc.
*/
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const login = {
da: "/da/log-pa",
de: "/de/anmeldung",
@@ -12,7 +12,7 @@ export const login = {
sv: "/sv/logga-in",
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const loginUnLocalized = {
da: "/da/login",
de: "/de/login",
@@ -22,7 +22,7 @@ export const loginUnLocalized = {
sv: "/sv/login",
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const logout = {
da: "/da/log-ud",
de: "/de/ausloggen",
@@ -32,7 +32,7 @@ export const logout = {
sv: "/sv/logga-ut",
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const logoutUnLocalized = {
da: "/da/logout",
de: "/de/logout",
@@ -42,7 +42,7 @@ export const logoutUnLocalized = {
sv: "/sv/logout",
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const verifymagiclink = {
da: "/da/verifymagiclink",
de: "/de/verifymagiclink",

View File

@@ -7,7 +7,7 @@
* These are routes that define code entries for My pages
*/
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const scandicFriends = {
da: "/da/scandic-friends",
de: "/de/scandic-friends",
@@ -17,7 +17,7 @@ export const scandicFriends = {
sv: "/sv/scandic-friends",
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const myPages = {
da: `${scandicFriends.da}/mine-sider`,
de: `${scandicFriends.de}/mein-bereich`,
@@ -27,7 +27,7 @@ export const myPages = {
sv: `${scandicFriends.sv}/mina-sidor`,
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const overview = {
da: `${myPages.da}/oversigt`,
de: `${myPages.de}/uberblick`,
@@ -38,7 +38,7 @@ export const overview = {
}
/** TODO: Update to relevant paths */
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const profile = {
da: `${myPages.da}/profil`,
de: `${myPages.de}/profil`,
@@ -48,7 +48,7 @@ export const profile = {
sv: `${myPages.sv}/profil`,
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const profileEdit = {
da: `${profile.da}/rediger`,
de: `${profile.de}/bearbeiten`,
@@ -58,7 +58,7 @@ export const profileEdit = {
sv: `${profile.sv}/redigera`,
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const points = {
da: `${myPages.da}/point`,
de: `${myPages.de}/punkte`,
@@ -68,7 +68,7 @@ export const points = {
sv: `${myPages.sv}/poang`,
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const benefits = {
da: `${myPages.da}/fordele`,
de: `${myPages.de}/vorteile`,
@@ -78,7 +78,7 @@ export const benefits = {
sv: `${myPages.sv}/formaner`,
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const stays = {
da: `${myPages.da}/ophold`,
de: `${myPages.de}/aufenthalte`,
@@ -88,7 +88,7 @@ export const stays = {
sv: `${myPages.sv}/vistelser`,
}
/** @type {import('@/types/routes').LangRoute} */
/** @type {import('@scandic-hotels/common/constants/routes/langRoute').LangRoute} */
export const partnerSas = {
da: `${myPages.da}/sas-eurobonus`,
de: `${myPages.de}/sas-eurobonus`,

View File

@@ -1,24 +0,0 @@
/**
* @file Due to these records being used in next.config.js, and that is required
* to be a js file, we use jsdoc to type these.
*/
/** @type {import('@/types/routes').LangRoute} */
export const myStay = {
da: "/da/hotelreservation/min-ophold",
de: "/de/hotelreservation/meine-aufenthalte",
en: "/en/hotelreservation/my-stay",
fi: "/fi/hotelreservation/min-vistelma",
no: "/no/hotelreservation/min-ophold",
sv: "/sv/hotelreservation/min-vistelse",
}
/** @type {import('@/types/routes').LangRoute} */
export const preliminaryReceipt = {
da: `${myStay.da}/receipt`,
de: `${myStay.de}/receipt`,
en: `${myStay.en}/receipt`,
fi: `${myStay.fi}/receipt`,
no: `${myStay.no}/receipt`,
sv: `${myStay.sv}/receipt`,
}

View File

@@ -1,4 +1,4 @@
import type { LangRoute } from "@/types/routes"
import type { LangRoute } from "@scandic-hotels/common/constants/routes/langRoute"
export const signup: LangRoute = {
en: "/en/scandic-friends/join",

View File

@@ -1,6 +1,6 @@
import { Lang } from "@scandic-hotels/common/constants/language"
import type { LangRoute } from "@/types/routes"
import type { LangRoute } from "@scandic-hotels/common/constants/routes/langRoute"
export const bookingTermsAndConditions: LangRoute = {
da: `/${Lang.da}/kundeservice/priser-og-bookingvilkar/vilkar-og-betingelser3`,