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
@@ -1,4 +1,4 @@
import type { Accordion } from "@/server/routers/contentstack/schemas/blocks/accordion"
import type { Accordion } from "@scandic-hotels/trpc/routers/contentstack/schemas/blocks/accordion"
export type AccordionProps = {
accordion: Accordion["accordion"]["accordions"]
@@ -1,12 +1,12 @@
import type { Block as AccountPageBlock } from "@/types/trpc/routers/contentstack/accountPage"
import type { Block as CampaignPageBlock } from "@/types/trpc/routers/contentstack/campaignPage"
import type { Block as CollectionPageBlock } from "@/types/trpc/routers/contentstack/collectionPage"
import type { Block as ContentPageBlock } from "@/types/trpc/routers/contentstack/contentPage"
import type { Block as DestinationCityPageBlock } from "@/types/trpc/routers/contentstack/destinationCityPage"
import type { Block as DestinationCountryPageBlock } from "@/types/trpc/routers/contentstack/destinationCountryPage"
import type { Block as DestinationOverviewPageBlock } from "@/types/trpc/routers/contentstack/destinationOverviewPage"
import type { Block as LoyaltyPageBlock } from "@/types/trpc/routers/contentstack/loyaltyPage"
import type { Block as StartPageBlock } from "@/types/trpc/routers/contentstack/startPage"
import type { Block as StartPageBlock } from "@scandic-hotels/trpc/routers/contentstack/startPage/query"
import type { Block as AccountPageBlock } from "@scandic-hotels/trpc/types/accountPage"
import type { Block as CampaignPageBlock } from "@scandic-hotels/trpc/types/campaignPage"
import type { Block as CollectionPageBlock } from "@scandic-hotels/trpc/types/collectionPage"
import type { Block as ContentPageBlock } from "@scandic-hotels/trpc/types/contentPage"
import type { Block as DestinationCityPageBlock } from "@scandic-hotels/trpc/types/destinationCityPage"
import type { Block as DestinationCountryPageBlock } from "@scandic-hotels/trpc/types/destinationCountryPage"
import type { Block as DestinationOverviewPageBlock } from "@scandic-hotels/trpc/types/destinationOverviewPage"
import type { Block as LoyaltyPageBlock } from "@scandic-hotels/trpc/types/loyaltyPage"
export type Blocks =
| AccountPageBlock
@@ -1,6 +1,6 @@
import type { ImageVaultAsset } from "@scandic-hotels/trpc/types/imageVault"
import type { VariantProps } from "class-variance-authority"
import type { ImageVaultAsset } from "@/types/components/imageVault"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
import type { cardVariants } from "@/components/TempDesignSystem/Card/variants"
@@ -1,4 +1,4 @@
import type { Surprise } from "../myPages/rewards"
import type { Surprise } from "@scandic-hotels/trpc/types/rewards"
export interface SurprisesProps {
surprises: Surprise[]
@@ -1,6 +0,0 @@
export enum ChildBedMapEnum {
IN_ADULTS_BED = 0,
IN_CRIB = 1,
IN_EXTRA_BED = 2,
UNKNOWN = 3,
}
@@ -1,4 +1,5 @@
import type { AdditionalData, Hotel } from "@/types/hotel"
import type { AdditionalData, Hotel } from "@scandic-hotels/trpc/types/hotel"
import type { HotelListing } from "@/types/trpc/routers/contentstack/blocks"
export interface HotelListingItemProps {
@@ -1,4 +1,4 @@
import type { ContactNode } from "@/types/requests/asides/contact"
import type { Node } from "@/types/requests/utils/edges"
import type { Node } from "@scandic-hotels/trpc/types/edges"
export type ContactsProps = { contacts: Node<ContactNode>[] }
@@ -1,4 +1,4 @@
import type { NavigationItem } from "@/server/routers/contentstack/base/output"
import type { NavigationItem } from "@scandic-hotels/trpc/routers/contentstack/base/output"
export type FooterNavigationProps = {
linkGroups: NavigationItem[]
@@ -1,4 +1,5 @@
import type { Image } from "@/types/image"
import type { Image } from "@scandic-hotels/trpc/types/image"
import type {
CurrentHeaderLink,
TopMenuHeaderLink,
@@ -1,4 +1,4 @@
import type { Image } from "@/types/image"
import type { Image } from "@scandic-hotels/trpc/types/image"
export type HeroProps = {
images: {
@@ -1,4 +1,4 @@
import type { LanguageSwitcherData } from "@/types/requests/languageSwitcher"
import type { LanguageSwitcherData } from "@scandic-hotels/trpc/types/languageSwitcher"
export type LanguageSwitcherLink = {
href: string
@@ -1,5 +1,5 @@
import type { Embeds } from "@/types/requests/embeds"
import type { Node } from "@/types/requests/utils/edges"
import type { Node } from "@scandic-hotels/trpc/types/edges"
import type { RTENode } from "../rte/node"
import type { RenderOptions } from "../rte/option"
@@ -1,19 +1,7 @@
import type { SortOption } from "../enums/destinationFilterAndSort"
import type { SortOption } from "@scandic-hotels/trpc/enums/destinationFilterAndSort"
export interface SortItem {
label: string
value: SortOption
isDefault?: boolean
}
export interface Filter {
name: string
slug: string
filterType: string
sortOrder: number
}
export interface CategorizedFilters {
facilityFilters: Filter[]
surroundingsFilters: Filter[]
}
@@ -1,27 +0,0 @@
export type City = {
id: string
name: string
hotelIds: string[]
hotelCount: number
url: string
}
export type DestinationCountry = {
country: string
countryUrl?: string
numberOfHotels: number
cities: City[]
}
export type DestinationsData = DestinationCountry[]
export type DestinationsListProps = {
destinations: DestinationsData
}
export type DestinationProps = {
country: string
countryUrl: string | undefined
numberOfHotels: number
cities: DestinationCountry["cities"]
}
@@ -1,11 +0,0 @@
import type { z } from "zod"
import type {
validateFooterConfigSchema,
validateFooterRefConfigSchema,
validateLinkItem,
} from "@/server/routers/contentstack/base/output"
export type FooterRefDataRaw = z.infer<typeof validateFooterRefConfigSchema>
export type FooterDataRaw = z.infer<typeof validateFooterConfigSchema>
export type FooterLinkItem = z.infer<typeof validateLinkItem>
@@ -1,4 +1,4 @@
import type { MenuItem } from "@/types/trpc/routers/contentstack/header"
import type { MenuItem } from "@scandic-hotels/trpc/types/header"
export interface MegaMenuProps {
title: MenuItem["title"]
@@ -1,4 +1,4 @@
import type { Header } from "@/types/trpc/routers/contentstack/header"
import type { Header } from "@scandic-hotels/trpc/types/header"
export interface MobileMenuProps {
topLink: Header["header"]["topLink"]
@@ -1,4 +1,4 @@
import type { MenuItem } from "@/types/trpc/routers/contentstack/header"
import type { MenuItem } from "@scandic-hotels/trpc/types/header"
export interface NavigationMenuItemProps {
item: MenuItem
@@ -1,4 +1,4 @@
import type { MenuItem } from "@/types/trpc/routers/contentstack/header"
import type { MenuItem } from "@scandic-hotels/trpc/types/header"
export interface NavigationMenuListProps {
isMobile: boolean
@@ -1,4 +1,4 @@
import type { Header } from "@/types/trpc/routers/contentstack/header"
import type { Header } from "@scandic-hotels/trpc/types/header"
export interface TopLinkProps {
isLoggedIn: boolean
@@ -1,5 +1,5 @@
import type { z } from "zod"
import type { dynamicContentSchema } from "@/server/routers/contentstack/schemas/headers/dynamicContent"
import type { dynamicContentSchema } from "@scandic-hotels/trpc/routers/contentstack/schemas/headers/dynamicContent"
export type HeaderDynamicContentProps = z.infer<typeof dynamicContentSchema>
@@ -1,4 +1,4 @@
import type { Amenities } from "@/types/hotel"
import type { Amenities } from "@scandic-hotels/trpc/types/hotel"
export type AmenitiesListProps = {
detailedFacilities: Amenities
@@ -1,5 +1,9 @@
import type { Amenities, Facility, HealthFacilities } from "@/types/hotel"
import type { ActivitiesCard } from "@/types/trpc/routers/contentstack/hotelPage"
import type {
Amenities,
Facility,
HealthFacilities,
} from "@scandic-hotels/trpc/types/hotel"
import type { ActivitiesCard } from "@scandic-hotels/trpc/types/hotelPage"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
export type FacilitiesProps = {
@@ -1,9 +1,9 @@
import type { PointOfInterest } from "@scandic-hotels/trpc/types/hotel"
import type { MarkerInfo } from "@scandic-hotels/trpc/types/marker"
import type { ReactElement } from "react"
import type { HotelPin } from "@/types/components/hotelReservation/selectHotel/map"
import type { Coordinates } from "@/types/components/maps/coordinates"
import type { MarkerInfo } from "@/types/components/maps/marker"
import type { PointOfInterest } from "@/types/hotel"
export interface InteractiveMapProps {
coordinates: Coordinates
@@ -1,4 +1,4 @@
import type { PointOfInterest } from "@/types/hotel"
import type { PointOfInterest } from "@scandic-hotels/trpc/types/hotel"
export interface MapCardProps {
hotelName: string
@@ -1,4 +1,4 @@
import type { PointOfInterest } from "@/types/hotel"
import type { PointOfInterest } from "@scandic-hotels/trpc/types/hotel"
import type { Coordinates } from "../../maps/coordinates"
export interface SidebarProps {
@@ -1,4 +1,5 @@
import type { MarkerInfo } from "@/types/components/maps/marker"
import type { MarkerInfo } from "@scandic-hotels/trpc/types/marker"
import type { Coordinates } from "../../maps/coordinates"
export type StaticMapProps = {
@@ -1,4 +1,4 @@
import type { ApiImage } from "@/types/hotel"
import type { ApiImage } from "@scandic-hotels/trpc/types/hotel"
export type PreviewImagesProps = {
images: ApiImage[]
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
export interface RoomCardProps {
room: Room
@@ -1,4 +1,8 @@
import type { Hotel, HotelAddress, HotelLocation } from "@/types/hotel"
import type {
Hotel,
HotelAddress,
HotelLocation,
} from "@scandic-hotels/trpc/types/hotel"
export type AboutTheHotelSidePeekProps = {
hotelAddress: HotelAddress
@@ -3,7 +3,7 @@ import type {
DetailedFacility,
Hotel,
Restaurant,
} from "@/types/hotel"
} from "@scandic-hotels/trpc/types/hotel"
import type { ParkingAmenityProps } from "./parking"
export type AmenitiesSidePeekProps = {
@@ -1,4 +1,4 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
export type FacilityProps = {
data: Hotel["healthFacilities"][number]
@@ -1,4 +1,4 @@
import type { AdditionalData, Hotel } from "@/types/hotel"
import type { AdditionalData, Hotel } from "@scandic-hotels/trpc/types/hotel"
import type { MeetingRooms } from "../meetingRooms"
export type MeetingsAndConferencesSidePeekProps = {
@@ -1,4 +1,4 @@
import type { Hotel, Parking } from "@/types/hotel"
import type { Hotel, Parking } from "@scandic-hotels/trpc/types/hotel"
export enum Periods {
allDay = "AllDay",
@@ -1,4 +1,4 @@
import type { Restaurant } from "@/types/hotel"
import type { Restaurant } from "@scandic-hotels/trpc/types/hotel"
export interface RestaurantBarSidePeekProps {
restaurants: Restaurant[]
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
export interface RoomSidePeekProps {
room: Room
@@ -1,4 +1,4 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
export type WellnessAndExerciseSidePeekProps = {
healthFacilities: Hotel["healthFacilities"]
@@ -1,5 +1,9 @@
import type { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
import type { AdditionalData, Hotel, Restaurant } from "@/types/hotel"
import type {
AdditionalData,
Hotel,
Restaurant,
} from "@scandic-hotels/trpc/types/hotel"
export type AmenitiesSidePeekProps = {
hotel: Hotel & { url: string | null }
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
import type {
BookingConfirmation,
BookingConfirmationSchema,
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation"
export interface BookingConfirmationRoomsProps
@@ -1,8 +1,8 @@
import type { breakfastPackagesSchema } from "@scandic-hotels/trpc/routers/hotels/output"
import type { breakfastPackageSchema } from "@scandic-hotels/trpc/routers/hotels/schemas/packages"
import type { z } from "zod"
import type { breakfastFormSchema } from "@/components/HotelReservation/EnterDetails/Breakfast/schema"
import type { breakfastPackagesSchema } from "@/server/routers/hotels/output"
import type { breakfastPackageSchema } from "@/server/routers/hotels/schemas/packages"
export interface BreakfastFormSchema
extends z.output<typeof breakfastFormSchema> {}
@@ -1,14 +1,14 @@
import type { z } from "zod"
import type { PackageEnum } from "@/types/requests/packages"
import type { Product } from "@/types/trpc/routers/hotel/roomAvailability"
import type { Product } from "@scandic-hotels/trpc/types/roomAvailability"
import type { SafeUser } from "@/types/user"
import type { getMultiroomDetailsSchema } from "@/components/HotelReservation/EnterDetails/Details/Multiroom/schema"
import type {
guestDetailsSchema,
signedInDetailsSchema,
} from "@/components/HotelReservation/EnterDetails/Details/RoomOne/schema"
import type { productTypePointsSchema } from "@/server/routers/hotels/schemas/productTypePrice"
import type { productTypePointsSchema } from "@scandic-hotels/trpc/routers/hotels/schemas/productTypePrice"
import type { BookingSearchType } from "../booking"
import type { Price } from "../price"
import type { Child } from "../selectRate/selectRate"
@@ -1,4 +1,4 @@
import type { HotelData } from "@/types/hotel"
import type { HotelData } from "@scandic-hotels/trpc/types/hotel"
export interface HotelHeaderProps {
hotelData: HotelData
@@ -1,5 +1,6 @@
import type { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod"
import type { CreditCard } from "@/types/user"
import type { PaymentMethodEnum } from "@/constants/booking"
export interface PaymentProps {
otherPaymentOptions: PaymentMethodEnum[]
@@ -1,5 +1,9 @@
import type { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
import type { AdditionalData, Hotel, Restaurant } from "@/types/hotel"
import type {
AdditionalData,
Hotel,
Restaurant,
} from "@scandic-hotels/trpc/types/hotel"
export type HotelSidePeekProps = {
hotel: Hotel & { url: string | null }
@@ -1,6 +1,6 @@
import { z } from "zod"
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
export const cancelStaySchema = z.object({
rooms: z.array(
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation"
import type { Ancillaries } from "../../myPages/myStay/ancillaries"
@@ -1,6 +1,6 @@
import { z } from "zod"
import { CurrencyEnum } from "@/types/enums/currency"
import { CurrencyEnum } from "@scandic-hotels/common/constants/currency"
interface TPrice {
additionalPrice?: number
@@ -1,6 +1,6 @@
import type { CategorizedFilters } from "./hotelFilters"
import type { CategorizedHotelFilters } from "./hotelFilters"
export type FilterAndSortModalProps = {
filters: CategorizedFilters
filters: CategorizedHotelFilters
setShowSkeleton?: (showSkeleton: boolean) => void
}
@@ -1,4 +1,4 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
import type { ProductType } from "@/types/trpc/routers/hotel/availability"
import type { HotelResponse } from "@/components/HotelReservation/SelectHotel/helpers"
@@ -1,19 +1,20 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
export type HotelFilter = Hotel["detailedFacilities"][number] & {
hotelId: string
hotelIds: string[]
}
export type CategorizedFilters = {
export type CategorizedHotelFilters = {
facilityFilters: HotelFilter[]
surroundingsFilters: HotelFilter[]
}
export type HotelFiltersProps = {
filters: CategorizedFilters
filters: CategorizedHotelFilters
className?: string
}
export type HotelFilterModalProps = {
filters: CategorizedFilters
filters: CategorizedHotelFilters
}
@@ -1,11 +1,11 @@
import type { imageSchema } from "@scandic-hotels/trpc/routers/hotels/schemas/image"
import type { Amenities } from "@scandic-hotels/trpc/types/hotel"
import type { z } from "zod"
import type { Coordinates } from "@/types/components/maps/coordinates"
import type { Amenities } from "@/types/hotel"
import type { ProductTypeCheque } from "@/types/trpc/routers/hotel/availability"
import type { HotelResponse } from "@/components/HotelReservation/SelectHotel/helpers"
import type { imageSchema } from "@/server/routers/hotels/schemas/image"
import type { CategorizedFilters } from "./hotelFilters"
import type { CategorizedHotelFilters } from "./hotelFilters"
import type { SelectHotelBooking } from "./selectHotel"
export interface HotelListingProps {
@@ -18,7 +18,7 @@ export interface SelectHotelMapProps {
hotelPins: HotelPin[]
mapId: string
hotels: HotelResponse[]
filterList: CategorizedFilters
filterList: CategorizedHotelFilters
cityCoordinates: Coordinates
bookingCode: string | undefined
isBookingCodeRateAvailable?: boolean
@@ -1,4 +1,4 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
export type NoAvailabilityAlertProp = {
hotelsLength: number
@@ -1,13 +1,8 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
import type { BookingSearchType } from "../booking"
import type { Child } from "../selectRate/selectRate"
import type { SidePeekEnum } from "../sidePeek"
export enum AvailabilityEnum {
Available = "Available",
NotAvailable = "NotAvailable",
}
export interface ReadMoreProps {
label: string
hotelId: string
@@ -1,4 +1,5 @@
import type { Hotel } from "@/types/hotel"
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
import type { SelectRateBooking } from "./selectRate"
export interface HotelInfoCardProps {
@@ -1,7 +1,7 @@
import type {
Product,
RoomConfiguration,
} from "@/types/trpc/routers/hotel/roomAvailability"
} from "@scandic-hotels/trpc/types/roomAvailability"
export interface RatesProps {
roomConfiguration: RoomConfiguration
@@ -1,22 +1,6 @@
import type { z } from "zod"
import type { packageSchema } from "@/server/routers/hotels/schemas/packages"
import type { packageSchema } from "@scandic-hotels/trpc/routers/hotels/schemas/packages"
export enum RoomPackageCodeEnum {
PET_ROOM = "PETR",
ALLERGY_ROOM = "ALLG",
ACCESSIBILITY_ROOM = "ACCE",
}
export interface DefaultFilterOptions {
code: RoomPackageCodeEnum
description: string
}
export type FilterValues = {
[K in RoomPackageCodeEnum]?: boolean
}
export type RoomPackage = z.output<typeof packageSchema>
type RoomPackage = z.output<typeof packageSchema>
export type RoomPackageCodes = RoomPackage["code"]
export type RoomPackages = RoomPackage[]
@@ -1,5 +1,5 @@
import type { Package } from "@/types/requests/packages"
import type { RoomConfiguration } from "@/types/trpc/routers/hotel/roomAvailability"
import type { RoomConfiguration } from "@scandic-hotels/trpc/types/roomAvailability"
export type RoomListItemProps = {
roomConfiguration: RoomConfiguration
@@ -1,4 +1,4 @@
import type { HotelData } from "@/types/hotel"
import type { HotelData } from "@scandic-hotels/trpc/types/hotel"
export interface RoomsContainerProps
extends Pick<HotelData, "roomCategories">,
@@ -1,10 +1,11 @@
import type { RateEnum } from "@/types/enums/rate"
import type { PackageEnum, Packages } from "@/types/requests/packages"
import type { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum"
import type { RateEnum } from "@scandic-hotels/trpc/enums/rate"
import type {
Product,
RoomConfiguration,
} from "@/types/trpc/routers/hotel/roomAvailability"
import type { ChildBedMapEnum } from "../../bookingWidget/enums"
} from "@scandic-hotels/trpc/types/roomAvailability"
import type { PackageEnum, Packages } from "@/types/requests/packages"
import type { BookingSearchType } from "../booking"
export interface Child {
@@ -1,4 +1,4 @@
import type { CurrencyEnum } from "@/types/enums/currency"
import type { CurrencyEnum } from "@scandic-hotels/common/constants/currency"
import type { Packages } from "@/types/requests/packages"
import type { RoomState } from "@/types/stores/enter-details"
import type {
+3 -7
View File
@@ -1,17 +1,13 @@
import type { FocalPoint } from "@scandic-hotels/trpc/types/image"
import type { ImageProps as NextImageProps } from "next/image"
export interface FocalPoint {
x: number
y: number
}
export interface Dimensions {
interface Dimensions {
width: number
height: number
aspectRatio: number
}
export interface Meta {
interface Meta {
alt: string | undefined | null
caption: string | undefined | null
}
@@ -1,4 +1,4 @@
import type { ImageVaultAsset } from "./imageVault"
import type { ImageVaultAsset } from "@scandic-hotels/trpc/types/imageVault"
export type ImageContainerProps = {
leftImage: ImageVaultAsset
@@ -1,29 +0,0 @@
/**
* @file TypeScript typings for ImageVault
*
* The types in this file are based on the source maps of the downloaded
* distribution at https://clientscript.imagevault.se/Installation/ImageVaultInsertMedia
*
* They have been clean up and amended to.
*/
import { z } from "zod"
import { imageVaultAssetSchema } from "@/server/routers/contentstack/schemas/imageVault"
import type { FocalPoint } from "./image"
export type ImageVaultAssetResponse = z.infer<typeof imageVaultAssetSchema>
export type ImageVaultAsset = {
id: number
title: string
url: string
dimensions: {
width: number
height: number
aspectRatio: number
}
meta: { alt: string | undefined | null; caption: string | undefined | null }
focalPoint: FocalPoint
}
@@ -1,7 +1,6 @@
import type { LanguageSwitcherData } from "@scandic-hotels/trpc/types/languageSwitcher"
import type { ReactElement } from "react"
import type { LanguageSwitcherData } from "@/types/requests/languageSwitcher"
export enum LanguageSwitcherTypesEnum {
MobileHeader = "mobileHeader",
DesktopHeader = "desktopHeader",
@@ -1,5 +1,5 @@
import type { z } from "zod"
import type { mapLocationSchema } from "@/server/routers/contentstack/schemas/mapLocation"
import type { mapLocationSchema } from "@scandic-hotels/trpc/routers/contentstack/schemas/mapLocation"
export type MapLocation = z.output<typeof mapLocationSchema>
@@ -1,6 +1,6 @@
import type { FeatureCollection, Point } from "geojson"
import type { Amenities } from "@/types/hotel"
import type { Amenities } from "@scandic-hotels/trpc/types/hotel"
import type { GalleryImage } from "../imageGallery"
export interface DestinationMarker {
@@ -1,4 +0,0 @@
export type MarkerInfo = {
hotelId: string
hotelType: string
}
@@ -1,6 +1,6 @@
import type { PointOfInterestGroupEnum } from "@scandic-hotels/trpc/enums/pointOfInterest"
import type { VariantProps } from "class-variance-authority"
import type { PointOfInterestGroupEnum } from "@/types/enums/pointOfInterest"
import type { poiVariants } from "@/components/Maps/Markers/Poi/variants"
export interface PoiMarkerProps extends VariantProps<typeof poiVariants> {
@@ -1,5 +1,6 @@
import type { MembershipLevel } from "@scandic-hotels/common/constants/membershipLevels"
import type { LevelProps } from "@/components/Levels/levels"
import type { MembershipLevel } from "@/constants/membershipLevels"
export type MembershipLevelIconProps = {
level: MembershipLevel
@@ -1,9 +1,9 @@
import type { blocksSchema } from "@scandic-hotels/trpc/routers/contentstack/accountPage/output"
import type { Reward } from "@scandic-hotels/trpc/types/rewards"
import type { Dispatch, SetStateAction } from "react"
import type { z } from "zod"
import type { DynamicContent } from "@/types/trpc/routers/contentstack/blocks"
import type { blocksSchema } from "@/server/routers/contentstack/accountPage/output"
import type { Reward } from "../rewards"
export interface AccountPageContentProps
extends Pick<DynamicContent, "dynamic_content"> {}
@@ -5,7 +5,7 @@ import type { CreditCard, User } from "@/types/user"
import type {
ancillaryPackagesSchema,
packagesSchema,
} from "@/server/routers/hotels/output"
} from "@scandic-hotels/trpc/routers/hotels/output"
export type Ancillaries = z.output<typeof ancillaryPackagesSchema>
export type Ancillary = Ancillaries[number]
@@ -1,43 +0,0 @@
import {
type RESTAURANT_REWARD_IDS,
type REWARD_IDS,
} from "@/constants/rewards"
import type { LogoAndIllustrationProps } from "@scandic-hotels/design-system/Icons"
import type {
ApiReward,
BenefitReward,
CMSReward,
CouponReward,
} from "@/types/trpc/routers/contentstack/reward"
export type { BaseReward, Campaign, Reward, Surprise, Tier }
export interface RewardIconProps extends LogoAndIllustrationProps {
rewardId: string
iconSize?: "small" | "medium" | "large"
}
export type RewardId = (typeof REWARD_IDS)[keyof typeof REWARD_IDS]
export type RestaurantRewardId = (typeof RESTAURANT_REWARD_IDS)[number]
type BaseReward = ApiReward & CMSReward
type Campaign = CouponReward &
CMSReward & {
rewardType: "Campaign"
}
type Surprise = CouponReward &
CMSReward & {
rewardType: "Surprise"
}
type Tier = BenefitReward &
CMSReward & {
rewardType: "Tier"
}
type MemberVoucher = CouponReward &
CMSReward & {
rewardType: "Member-voucher"
}
type Reward = Campaign | Surprise | Tier | MemberVoucher
@@ -1,9 +1,8 @@
import type { MembershipLevel } from "@scandic-hotels/common/constants/membershipLevels"
import type { LevelWithRewards } from "@scandic-hotels/trpc/routers/contentstack/loyaltyLevel/output"
import type { CMSReward } from "@scandic-hotels/trpc/types/reward"
import type { JSX } from "react"
import type { MembershipLevel } from "@/constants/membershipLevels"
import type { LoyaltyLevel } from "@/server/routers/contentstack/loyaltyLevel/output"
import type { CMSReward } from "../trpc/routers/contentstack/reward"
export type OverviewTableClientProps = {
activeMembership: MembershipLevel | null
levels: ComparisonLevel[]
@@ -13,8 +12,6 @@ export type LevelCardProps = {
level: LevelWithRewards
}
export type LevelWithRewards = LoyaltyLevel & { rewards: CMSReward[] }
export type ComparisonLevel = LevelWithRewards
export type LevelSummaryProps = {
@@ -3,7 +3,7 @@ import type {
DetailedFacility,
Parking,
Restaurant,
} from "@/types/hotel"
} from "@scandic-hotels/trpc/types/hotel"
export interface ParkingAccordionItemProps {
parkingPageHref?: string | null
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
import type { SafeUser } from "@/types/user"
export type BookedRoomSidePeekProps = {
@@ -1,4 +1,4 @@
import type { Room } from "@/types/hotel"
import type { Room } from "@scandic-hotels/trpc/types/hotel"
import type { SidePeekEnum } from "../hotelReservation/sidePeek"
export type RoomSidePeekProps = {
@@ -1,5 +1,5 @@
import type { SidebarBlock as ContentPageSidebarBlock } from "@/types/trpc/routers/contentstack/contentPage"
import type { SidebarBlock as LoyaltyPageSidebarBlock } from "@/types/trpc/routers/contentstack/loyaltyPage"
import type { SidebarBlock as ContentPageSidebarBlock } from "@scandic-hotels/trpc/types/contentPage"
import type { SidebarBlock as LoyaltyPageSidebarBlock } from "@scandic-hotels/trpc/types/loyaltyPage"
export type Blocks = ContentPageSidebarBlock | LoyaltyPageSidebarBlock
@@ -1,8 +1,9 @@
import type { ContactFields } from "@scandic-hotels/trpc/routers/contentstack/base/output"
import type {
Contacts,
JoinLoyaltyContact,
} from "@/types/trpc/routers/contentstack/sidebar"
import type { ContactFields } from "@/server/routers/contentstack/base/output"
export interface JoinLoyaltyContactProps {
block: JoinLoyaltyContact["join_loyalty_contact"]
@@ -1,6 +1,6 @@
import type { ImageVaultAsset } from "@scandic-hotels/trpc/types/imageVault"
import type { VariantProps } from "class-variance-authority"
import type { ImageVaultAsset } from "@/types/components/imageVault"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
import type { teaserCardVariants } from "@/components/TempDesignSystem/TeaserCard/variants"
import type { TeaserCard } from "../trpc/routers/contentstack/blocks"
@@ -1,7 +1,6 @@
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { MembershipLevel } from "@/constants/membershipLevels"
import type { RateEnum } from "../enums/rate"
import type { MembershipLevel } from "@scandic-hotels/common/constants/membershipLevels"
import type { RateEnum } from "@scandic-hotels/trpc/enums/rate"
export enum TrackingChannelEnum {
"scandic-friends" = "scandic-friends",
@@ -1,7 +0,0 @@
import type { ZodDiscriminatedUnionOption, ZodError } from "zod"
export interface DiscriminatedUnionError {
error: ZodError<unknown>
}
export interface Option extends ZodDiscriminatedUnionOption<"__typename"> {}
@@ -1,9 +0,0 @@
export namespace AccountPageEnum {
export namespace ContentStack {
export const enum blocks {
DynamicContent = "AccountPageContentDynamicContent",
ShortCuts = "AccountPageContentShortcuts",
TextContent = "AccountPageContentTextContent",
}
}
}
-7
View File
@@ -1,10 +1,3 @@
export enum AlertTypeEnum {
Info = "info",
Warning = "warning",
Alarm = "alarm",
Success = "success",
}
export const AlertName = {
HotelChildrenInBooking: "HotelChildrenInBooking",
} as const
-20
View File
@@ -1,20 +0,0 @@
export namespace BlocksEnums {
export const enum block {
Accordion = "Accordion",
CardGallery = "CardGallery",
CardsGrid = "CardsGrid",
CarouselCards = "CarouselCards",
Content = "Content",
DynamicContent = "DynamicContent",
FullWidthCampaign = "FullWidthCampaign",
CampaignPageHotelListing = "CampaignPageHotelListing",
ContentPageHotelListing = "ContentPageHotelListing",
JoinScandicFriends = "JoinScandicFriends",
Shortcuts = "Shortcuts",
Table = "Table",
TextCols = "TextCols",
TextContent = "TextContent",
UspGrid = "UspGrid",
Essentials = "Essentials",
}
}
@@ -1,9 +0,0 @@
export enum BreakfastPackageEnum {
FREE_MEMBER_BREAKFAST = "BRF0",
FREE_CHILD_BREAKFAST = "BRFINF",
REGULAR_BREAKFAST = "BRF1",
CHILD_PAYING_BREAKFAST = "BRF1C",
SPECIAL_PACKAGE_BREAKFAST = "F01S",
ANCILLARY_REGULAR_BREAKFAST = "BRF2",
ANCILLARY_CHILD_PAYING_BREAKFAST = "BRF2C",
}
@@ -1,10 +0,0 @@
export namespace CampaignPageEnum {
export namespace ContentStack {
export const enum blocks {
Essentials = "CampaignPageBlocksEssentials",
CarouselCards = "CampaignPageBlocksCarouselCards",
Accordion = "CampaignPageBlocksAccordion",
HotelListing = "CampaignPageBlocksHotelListing",
}
}
}
-7
View File
@@ -1,7 +0,0 @@
export const CardsEnum = {
Card: "Card",
TeaserCard: "TeaserCard",
LoyaltyCard: "LoyaltyCard",
InfoCard: "InfoCard",
ContentCard: "ContentCard",
} as const
-22
View File
@@ -1,22 +0,0 @@
import { CardsEnum } from "./cards"
/**
* Enums specific to the CardsGrid presentation context.
* CardsEnum defines the core card types, while CardsGridEnum defines
* which cards are supported in the grid layout.
*/
export namespace CardsGridEnum {
export const cards = {
Card: CardsEnum.Card,
LoyaltyCard: CardsEnum.LoyaltyCard,
TeaserCard: CardsEnum.TeaserCard,
InfoCard: CardsEnum.InfoCard,
} as const satisfies Partial<typeof CardsEnum>
}
export enum CardsGridLayoutEnum {
ONE_COLUMN = "oneColumnGrid",
TWO_COLUMNS = "twoColumnGrid",
THREE_COLUMNS = "threeColumnGrid",
TWO_PLUS_ONE = "twoPlusOne", // Not sure if this is used?
}
@@ -1,10 +0,0 @@
export namespace CollectionPageEnum {
export namespace ContentStack {
export const enum blocks {
CardsGrid = "CollectionPageBlocksCardsGrid",
DynamicContent = "CollectionPageBlocksDynamicContent",
Shortcuts = "CollectionPageBlocksShortcuts",
UspGrid = "CollectionPageBlocksUspGrid",
}
}
}
-17
View File
@@ -1,17 +0,0 @@
export namespace ContentEnum {
export const enum blocks {
AccountPage = "AccountPage",
CampaignOverviewPage = "CampaignOverviewPage",
CampaignPage = "CampaignPage",
CollectionPage = "CollectionPage",
ContentPage = "ContentPage",
DestinationCityPage = "DestinationCityPage",
DestinationCountryPage = "DestinationCountryPage",
DestinationOverviewPage = "DestinationOverviewPage",
HotelPage = "HotelPage",
ImageContainer = "ImageContainer",
LoyaltyPage = "LoyaltyPage",
StartPage = "StartPage",
SysAsset = "SysAsset",
}
}
@@ -1,24 +0,0 @@
export namespace ContentPageEnum {
export namespace ContentStack {
export const enum blocks {
Accordion = "ContentPageBlocksAccordion",
CardsGrid = "ContentPageBlocksCardsGrid",
Content = "ContentPageBlocksContent",
DynamicContent = "ContentPageBlocksDynamicContent",
Shortcuts = "ContentPageBlocksShortcuts",
TextCols = "ContentPageBlocksTextCols",
UspGrid = "ContentPageBlocksUspGrid",
Table = "ContentPageBlocksTable",
HotelListing = "ContentPageBlocksHotelListing",
}
export const enum sidebar {
Content = "ContentPageSidebarContent",
DynamicContent = "ContentPageSidebarDynamicContent",
JoinLoyaltyContact = "ContentPageSidebarJoinLoyaltyContact",
ScriptedCard = "ContentPageSidebarScriptedCard",
TeaserCard = "ContentPageSidebarTeaserCard",
QuickLinks = "ContentPageSidebarShortcuts",
}
}
}
-61
View File
@@ -1,61 +0,0 @@
import { Lang } from "@scandic-hotels/common/constants/language"
export enum Country {
Denmark = "Denmark",
Finland = "Finland",
Germany = "Germany",
Norway = "Norway",
Poland = "Poland",
Sweden = "Sweden",
}
export const ApiCountry: Record<Lang, Record<Country, string>> = {
[Lang.da]: {
[Country.Denmark]: "Danmark",
[Country.Finland]: "Finland",
[Country.Germany]: "Tyskland",
[Country.Norway]: "Norge",
[Country.Poland]: "Polen",
[Country.Sweden]: "Sverige",
},
[Lang.de]: {
[Country.Denmark]: "Dänemark",
[Country.Finland]: "Finnland",
[Country.Germany]: "Deutschland",
[Country.Norway]: "Norwegen",
[Country.Poland]: "Polen",
[Country.Sweden]: "Schweden",
},
[Lang.en]: {
[Country.Denmark]: "Denmark",
[Country.Finland]: "Finland",
[Country.Germany]: "Germany",
[Country.Norway]: "Norway",
[Country.Poland]: "Poland",
[Country.Sweden]: "Sweden",
},
[Lang.fi]: {
[Country.Denmark]: "Tanska",
[Country.Finland]: "Suomi",
[Country.Germany]: "Saksa",
[Country.Norway]: "Norja",
[Country.Poland]: "Puola",
[Country.Sweden]: "Ruotsi",
},
[Lang.no]: {
[Country.Denmark]: "Danmark",
[Country.Finland]: "Finland",
[Country.Germany]: "Tyskland",
[Country.Norway]: "Norge",
[Country.Poland]: "Polen",
[Country.Sweden]: "Sverige",
},
[Lang.sv]: {
[Country.Denmark]: "Danmark",
[Country.Finland]: "Finland",
[Country.Germany]: "Tyskland",
[Country.Norway]: "Norge",
[Country.Poland]: "Polen",
[Country.Sweden]: "Sverige",
},
}
-11
View File
@@ -1,11 +0,0 @@
export enum CurrencyEnum {
DKK = "DKK",
EUR = "EUR",
NOK = "NOK",
PLN = "PLN",
SEK = "SEK",
POINTS = "Points",
Voucher = "Voucher",
CC = "CC",
Unknown = "Unknown",
}
@@ -1,8 +0,0 @@
export namespace DestinationCityPageEnum {
export namespace ContentStack {
export const enum blocks {
Accordion = "DestinationCityPageBlocksAccordion",
Content = "DestinationCityPageBlocksContent",
}
}
}
@@ -1,8 +0,0 @@
export namespace DestinationCountryPageEnum {
export namespace ContentStack {
export const enum blocks {
Accordion = "DestinationCountryPageBlocksAccordion",
Content = "DestinationCountryPageBlocksContent",
}
}
}
@@ -1,6 +0,0 @@
export enum SortOption {
Recommended = "recommended",
Distance = "distance",
Name = "name",
TripAdvisorRating = "tripadvisor",
}
@@ -1,7 +0,0 @@
export namespace DestinationOverviewPageEnum {
export namespace ContentStack {
export const enum blocks {
CardGallery = "DestinationOverviewPageBlocksCardGallery",
}
}
}
@@ -1,90 +0,0 @@
// Helper type to get a union of an object's string literal values
type ValueOf<T> = T[keyof T]
export namespace DynamicContentEnum {
export namespace Blocks {
export const components = {
current_benefits: "current_benefits",
earn_and_burn: "earn_and_burn",
expiring_points: "expiring_points",
how_it_works: "how_it_works",
jobylon_feed: "jobylon_feed",
loyalty_levels: "loyalty_levels",
membership_overview: "membership_overview",
my_points: "my_points",
next_benefits: "next_benefits",
overview_table: "overview_table",
points_overview: "points_overview",
previous_stays: "previous_stays",
sign_up_form: "sign_up_form",
sign_up_verification: "sign_up_verification",
soonest_stays: "soonest_stays",
upcoming_stays: "upcoming_stays",
sas_linked_account: "sas_linked_account",
sas_transfer_points: "sas_transfer_points",
sas_tier_comparison: "sas_tier_comparison",
} as const
/**
* Represents one of the possible component string literal values from Blocks.components.
* e.g., "current_benefits" | "earn_and_burn" | ...
*/
type ComponentValue = ValueOf<typeof components>
/**
* Array of all component string literal values from Blocks.components.
* Typed as a non-empty tuple `[ComponentValue, ...ComponentValue[]]`,
* to ensure it meets Zod's z.enum() requirements.
*/
export const enums = Object.values(components) as [
ComponentValue,
...ComponentValue[],
]
}
export namespace Headers {
export const components = {
dtmc_employee_benefits_call_to_actions:
"dtmc_employee_benefits_call_to_actions",
} as const
/**
* Represents one of the possible component string literal values from Headers.components.
* e.g., "dtmc_employee_benefits_call_to_actions"
*/
type ComponentValue = ValueOf<typeof components>
/**
* Array of all component string literal values from Headers.components.
* Typed as a non-empty tuple `[ComponentValue, ...ComponentValue[]]`,
* to ensure it meets Zod's z.enum() requirements.
*/
export const enums = Object.values(components) as [
ComponentValue,
...ComponentValue[],
]
}
export namespace Sidebar {
export const components = {
my_pages_navigation: "my_pages_navigation",
employee_benefits_auth_card: "employee_benefits_auth_card",
} as const
/**
* Represents one of the possible component string literal values from Sidebar.components.
* e.g., "my_pages_navigation" | "employee_benefits_auth_card"
*/
type ComponentValue = ValueOf<typeof components>
/**
* Array of all component string literal values from Sidebar.components.
* Typed as a non-empty tuple `[ComponentValue, ...ComponentValue[]]`,
* to ensure it meets Zod's z.enum() requirements.
*/
export const enums = Object.values(components) as [
ComponentValue,
...ComponentValue[],
]
}
}
-266
View File
@@ -1,266 +0,0 @@
export enum FacilityEnum {
AccessibleBathingControls = 2065,
AccessibleBathtubs = 2062,
AccessibleElevators = 2067,
AccessibleLightSwitch = 2066,
AccessibleRoomsAtHotel1 = 2659,
AccessibleRoomsAtHotel2 = 3010,
AccessibleToilets = 2068,
AccessibleWashBasins = 2063,
AdaptedRoomDoors = 2080,
AdjoiningConventionCentre = 1560,
AirConAirCooling = 2660,
AirConditioningInRoom = 5763,
AirportMaxDistance8Km = 1856,
AlarmsContinuouslyMonitored = 1876,
AlarmsHaveStrobeLightsForDeafHardHearingInAllGuestRooms = 1877,
AlarmsHaveStrobeLightsForDeafHardHearingInAllHallways = 1878,
AlarmsHaveStrobeLightsForDeafHardHearingInAllPublicAreas = 1879,
AllAudibleSmokeAlarmsHardwired = 1884,
AllExteriorDoorsRequireKeyAccessAtNightOrAutomaticallyLock = 2004,
AllGuestRoomDoorsHaveViewports = 2006,
AllGuestRoomDoorsSelfClosing = 2007,
AllParkingAreasPatrolled = 1933,
AllParkingAreasWellLit = 2013,
AllStairsWellsVentilated = 2053,
ArmchairBed = 104126,
AudibleAlarms = 1880,
AudibleSmokeAlarmsInAllHalls = 1881,
AudibleSmokeAlarmsInAllPublicAreas = 1882,
AudibleSmokeAlarmsInAllRooms = 1883,
AudioVisualEquipmentAvailable = 961,
AutolinkFireDepartment = 1886,
AutomatedExternalDefibrillatorOnSiteAED = 1917,
AutomaticFireDoors = 1887,
AutoRecallElevators = 1885,
BalconiesAccessibleToAdjoiningRooms = 1962,
Ballroom = 1609,
Banquet = 1557,
Bar = 1014,
BasicMedicalEquipmentOnSite = 1920,
BathroomsAdaptedForDisabledGuests = 2064,
Beach = 1827,
Beach0To1Km = 1019,
BeautySalon = 1015,
BedroomsWithWheelchairAccess = 2081,
BikesForLoan = 5550,
Bowling = 185105,
BrailleLargePrintHotelLiterature = 2069,
BrailleLargePrintMenus = 2070,
Breakfast = 5807,
Business1 = 1385,
Business2 = 83715,
BusinessCentre = 962,
Cafe = 1381,
CashFree8pmTill6am = 327877,
CashFreeHotel = 345180,
ChildrenWelcome = 1828,
City = 1857,
CoffeeInReceptionAtCharge = 332224,
CoffeeShop = 956,
CoffeeTeaFacilities = 5776,
ColourTVInRoomsAllScandicHotels = 5773,
ComplimentaryColdRefreshments = 157965,
CongressHall = 1558,
ConventionCentre = 963,
Couples = 2663,
DeadboltsOnConnectingDoors = 1990,
DeadboltsSecondaryLocksOnAllGuestRoomDoors = 1985,
Defibrillator = 99872,
Desk = 5777,
DirectDialPhoneInRoomsAllScandic = 5772,
DisabledEmergencyPlan1 = 1888,
DisabledEmergencyPlan2 = 2074,
DisabledParking = 2072,
DiscoNightClub = 958,
DJLiveMusic = 162587,
DO_NOT_USE_Restaurant = 1377,
Downtown = 969,
DrinkableTapWater = 5553,
DVDPlayer = 5778,
EBikesChargingStation = 265711,
ElectronicKeyCards = 1994,
Elevator = 959,
EmergencyBackUpGenerators = 1889,
EmergencyCallButtonOnPhone = 1998,
EmergencyCodesOrButtonsInRooms = 2075,
EmergencyEvacuationPlan1 = 1890,
EmergencyEvacuationPlan2 = 1895,
EmergencyEvaluationDrillFrequency = 1896,
EmergencyInfoInAllRooms = 1897,
EmergencyLightingAllScandic = 952,
EmergencyLightningInAllPublicAreas = 1898,
EmergencyServiceResponseTimeInMinutes = 1899,
Entertainment = 970,
EventVenue = 1559,
ExchangeFacility = 1605,
ExitMapsInRooms = 1900,
ExitSignsLit = 1901,
ExtraFamilyFriendly = 242920,
Families = 2664,
FaxFacilityInRoom = 5764,
Financial = 1409,
FireDetectorsAllScandic = 1869,
FireDetectorsInAllHalls = 1903,
FireDetectorsInAllPublicAreas = 1905,
FireDetectorsInAllRooms = 1906,
FireExtinguishersInAllPublicAreas = 1907,
FireExtinguishersInPublicAreasAllScandic = 1870,
FireSafetyAllScandic = 1871,
FirstAidAvailable = 1915,
FoodDrinks247 = 324100,
FreeWiFi = 1833,
GiftShop = 1376,
Golf = 1016,
GolfCourse0To30Km = 1607,
GuestRoomDoorsHaveASecondLock = 2005,
Gym = 1829,
GymTrainingFacilities = 2669,
Hairdresser = 348860,
HairdryerInRoomAllScandic = 5765,
HandicapFacilities = 2076,
HandrailsInBathrooms = 2078,
HearingInductionLoops = 2077,
Highway1 = 1858,
Highway2 = 1864,
Hiking0To3Km = 239346,
HotelCompliesWithAAASecurityStandards = 2011,
HotelIsFollowingScandicsSafetySecurityPolicy = 5559,
HotelWorksAccordingToScandicsAccessibilityConcepts = 5560,
IceMachine = 1405,
IceMachineReception = 332194,
IDRequiredToReplaceAGuestRoomKey = 2024,
IfNoWhatAreTheHoursUse24ClockEx0000To0600 = 1912,
InCountry = 1867,
IndustrialPark = 1859,
InternetHighSpeedInternetConnectionAllScandic = 5804,
InternetHotSpotsAllScandic = 1832,
IroningRoom = 238849,
IronIroningBoardAllScandic = 5780,
Jacuzzi = 162573,
JacuzziInRoom = 5766,
KayaksForLoan = 162585,
KeyAccessOnlySecuredFloorsAvailable = 2050,
KeyAccessOnlyToHealthClubGym = 2061,
KidsPlayRoom = 239349,
KidsUpToAndIncluding12YearsStayForFree = 5561,
KitchenInRoom = 5767,
Lake0To1Km = 1865,
LakeOrSea0To1Km = 245437,
LaptopSafe = 5283,
LateCheckOutUntil1400Guaranteed = 324101,
LaundryRoom = 326031,
LaundryService = 1834,
LaundryServiceExpress = 162583,
Leisure = 83716,
LifestyleConcierge = 162584,
LuggageLockers = 324098,
LuggageStorageAdditionalCost = 375884,
LuggageStorageNoCost = 375885,
Massage = 348859,
MeetingArea = 1692,
MeetingConferenceFacilities = 5806,
MeetingRooms = 1017,
MinibarInRoom = 5768,
MobileLift = 113185,
Mountains0To1Km = 1866,
MovieChannelsInRoomAllScandic = 5770,
MultipleExitsOnEachFloor = 2012,
NonSmokingRoomsAllScandic = 5771,
OnSiteTrainingFacilities = 3014,
OtherExplainInBriefDescription = 1608,
OutdoorTerrace = 1382,
OvernightSecurity = 1913,
ParkingAdditionalCost = 1406,
ParkingAttendant = 1914,
ParkingElectricCharging = 5554,
ParkingFreeParking = 5562,
ParkingGarage = 2665,
ParkingOutdoor = 162574,
PCHookUpInRoom = 5769,
PetFriendlyRooms = 1835,
PillowAlarmsAvailable = 2079,
PlayStationInPlayArea = 175449,
Pool = 1831,
PoolSwimmingPoolJacuzziAtHotel = 2667,
PrintingService = 1380,
PropertyMeetsRequirementsFireSafety = 1875,
PublicAddressSystem = 2014,
RelaxationSuite = 5564,
Restaurant = 1383,
RestrictedRoomAccessAllScandic = 1872,
RooftopBar = 239348,
RoomsAccessibleFromTheInterior = 950,
RoomService = 1378,
RoomWindowsOpen = 2016,
RoomWindowsThatOpenHaveLockingDevice = 2020,
Rural1 = 1861,
Rural2 = 1868,
SafeDepositBoxInRoomsAllScandic = 5775,
SafeDepositBoxInRoomsCanHoldA17InchLaptop = 200124,
SafeDepositBoxInRoomsCannotHoldALaptop = 200123,
SafetyChainsOnGuestRoomDoor = 2047,
Sauna = 1379,
ScandicShop24Hrs = 1408,
SecondaryLocksOnSlidingGlassDoors = 2048,
SecondaryLocksOnWindows = 2049,
Security24Hours = 1911,
SecurityEscortsAvailableOnRequest = 1936,
SecurityPersonnelOnSite = 1934,
SeparateFloorsForWomen = 2051,
ServesBreakfastAlwaysIncluded = 1407,
ServesBreakfastNotAlwaysIncluded = 5556,
ServesOrganicBreakfastAlwaysIncluded = 5557,
ServesOrganicBreakfastNotAlwaysIncluded = 5558,
ServiceGuideDogsAllowed = 2071,
ServiceSecurity24Hrs = 326033,
Shopping = 971,
SkateboardsForLoan = 162586,
Skiing0To1Km = 245031,
Skybar = 1606,
SmokeDetectorsAllScandic = 1873,
Solarium = 1830,
SpecialNeedsMenus = 2082,
Sports = 83717,
SprinklersAllScandic = 1874,
SprinklersInAllHalls = 1908,
SprinklersInAllPublicAreas = 1909,
SprinklersInAllRooms = 1910,
StaffInDuplicateKeys = 1942,
StaffRedCrossCertifiedInCPR = 1941,
StaffTrainedForDisabledGuests = 1928,
StaffTrainedInAutomatedExternalDefibrillatorUsageAED = 1940,
StaffTrainedInCPR = 1923,
StaffTrainedInFirstAid = 1939,
StaffTrainedInFirstAidTechniques = 951,
StaffTrainedToCaterForDisabledGuestsAllScandic = 2073,
Suburbs = 1860,
SwingboltLock = 2052,
TeleConferencingFacilitiesAvailable = 1018,
TelevisionsWithSubtitlesOrClosedCaptions = 2083,
Tennis1 = 1836,
Tennis2 = 1838,
TennisPadel = 239350,
Theatre = 1862,
TrouserPress = 5779,
TVWithChromecast1 = 229127,
TVWithChromecast2 = 229144,
UniformSecurityOnPremises = 1935,
UtilityRoomForIroning = 324097,
VendingMachineWithNecessities = 324099,
VideoSurveillanceInHallways = 2056,
VideoSurveillanceInPublicAreas = 1386,
VideoSurveillanceMonitored24HrsADay = 2058,
VideoSurveillanceOfAllParkingAreas = 2055,
VideoSurveillanceOfExteriorFrontEntrance = 2054,
VideoSurveillanceRecorded24HrsADayParkingArea = 2059,
WallMountedCycleRack = 199642,
WellLitWalkways = 2060,
WellnessAndSaunaEntranceFeeAdmission16PlusYears = 267806,
WellnessPoolSaunaEntranceFeeAdmission16PlusYears = 307754,
WheelchairAccess = 2084,
WideCorridors = 2086,
WideEntrance = 2085,
WideRestaurantEntrance = 2087,
WiFiWirelessInternetAccessAllScandic = 5774,
}

Some files were not shown because too many files have changed in this diff Show More