refactor(SW-302

This commit is contained in:
Matilda Landström
2024-10-03 16:42:53 +02:00
parent 22f3656b92
commit 0fa8251cd3
6 changed files with 78 additions and 78 deletions

View File

@@ -8,9 +8,9 @@ import styles from "./cardGrid.module.css"
import type { CardGridProps } from "@/types/components/hotelPage/facilities" import type { CardGridProps } from "@/types/components/hotelPage/facilities"
import type { CardProps } from "@/components/TempDesignSystem/Card/card" import type { CardProps } from "@/components/TempDesignSystem/Card/card"
export default async function CardGrid({ facilities }: CardGridProps) { export default function CardGrid({ facilityCardGid }: CardGridProps) {
const imageCard = sortCards(facilities) const imageCard = sortCards(facilityCardGid)
const nrCards = facilities.length const nrCards = facilityCardGid.length
function getCardClassName(card: CardProps): string { function getCardClassName(card: CardProps): string {
if (nrCards === 1) { if (nrCards === 1) {
@@ -24,7 +24,7 @@ export default async function CardGrid({ facilities }: CardGridProps) {
return ( return (
<section id={imageCard.card?.id}> <section id={imageCard.card?.id}>
<Grids.Stackable className={styles.desktopGrid}> <Grids.Stackable className={styles.desktopGrid}>
{facilities.map((card: CardProps) => ( {facilityCardGid.map((card: CardProps) => (
<Card <Card
theme={card.theme || "primaryDark"} theme={card.theme || "primaryDark"}
key={card.id} key={card.id}

View File

@@ -1,33 +1,49 @@
import { activities } from "@/constants/routes/hotelPageParams"
import SectionContainer from "@/components/Section/Container" import SectionContainer from "@/components/Section/Container"
import { getLang } from "@/i18n/serverContext" import { getIntl } from "@/i18n"
import { setActivityCard, setFacilityCardGrids } from "@/utils/facilityCards"
import CardGrid from "./CardGrid" import CardGrid from "./CardGrid"
import styles from "./facilities.module.css" import styles from "./facilities.module.css"
import type { import type {
FacilitiesProps,
FacilityCards, FacilityCards,
FacilityProps,
} from "@/types/components/hotelPage/facilities" } from "@/types/components/hotelPage/facilities"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
export default async function Facilities({ facilities }: FacilityProps) { export default async function Facilities({
const lang = getLang() facilities,
activitiesCard,
}: FacilitiesProps) {
const intl = await getIntl()
// Put activities card at the end const facilityCardGrids = setFacilityCardGrids(facilities)
const activitiesIdx = facilities.findIndex( const updatedActivitiesCard =
(facility) => facility[0].id === activities[lang] activitiesCard && setActivityCard(activitiesCard)
)
if (activitiesIdx !== -1) { facilityCardGrids.map((cardGrid: FacilityCards) => {
facilities.push(facilities.splice(activitiesIdx, 1)[0]) cardGrid.map((card: CardProps) => {
} card.heading = card.heading && intl.formatMessage({ id: card.heading })
card.secondaryButton
? (card.secondaryButton.title = intl.formatMessage({
id: card.secondaryButton.title,
}))
: null
})
})
return ( return (
<SectionContainer className={styles.grid}> <SectionContainer className={styles.grid}>
{facilities.map((facilityCards: FacilityCards) => ( {facilityCardGrids.map((cardGrid: FacilityCards) => (
<CardGrid key={facilityCards[0].id} facilities={facilityCards} /> <CardGrid key={cardGrid[0].id} facilityCardGid={cardGrid} />
))} ))}
{updatedActivitiesCard && (
<CardGrid
key={updatedActivitiesCard.id}
facilityCardGid={[updatedActivitiesCard]}
/>
)}
</SectionContainer> </SectionContainer>
) )
} }

View File

@@ -6,11 +6,7 @@ import SidePeekProvider from "@/components/SidePeekProvider"
import SidePeek from "@/components/TempDesignSystem/SidePeek" import SidePeek from "@/components/TempDesignSystem/SidePeek"
import { getIntl } from "@/i18n" import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext" import { getLang } from "@/i18n/serverContext"
import { import { getRestaurantHeading } from "@/utils/facilityCards"
getRestaurantHeading,
setActivityCard,
setFacilityCards,
} from "@/utils/facilityCards"
import DynamicMap from "./Map/DynamicMap" import DynamicMap from "./Map/DynamicMap"
import MapCard from "./Map/MapCard" import MapCard from "./Map/MapCard"
@@ -48,12 +44,9 @@ export default async function HotelPage() {
roomCategories, roomCategories,
activitiesCard, activitiesCard,
pointsOfInterest, pointsOfInterest,
facilityCards, facilities,
} = hotelData } = hotelData
const facilities = setFacilityCards(facilityCards)
activitiesCard && facilities.push(setActivityCard(activitiesCard))
const topThreePois = pointsOfInterest.slice(0, 3) const topThreePois = pointsOfInterest.slice(0, 3)
const coordinates = { const coordinates = {
@@ -126,7 +119,7 @@ export default async function HotelPage() {
<AmenitiesList detailedFacilities={hotelDetailedFacilities} /> <AmenitiesList detailedFacilities={hotelDetailedFacilities} />
</div> </div>
<Rooms rooms={roomCategories} /> <Rooms rooms={roomCategories} />
<Facilities facilities={facilities} /> <Facilities facilities={facilities} activitiesCard={activitiesCard} />
</main> </main>
{googleMapsApiKey ? ( {googleMapsApiKey ? (
<> <>

View File

@@ -246,7 +246,7 @@ export const hotelQueryRouter = router({
pointsOfInterest: hotelAttributes.pointsOfInterest, pointsOfInterest: hotelAttributes.pointsOfInterest,
roomCategories, roomCategories,
activitiesCard: activities?.upcoming_activities_card, activitiesCard: activities?.upcoming_activities_card,
facilityCards: facilities, facilities,
} }
}), }),
availability: router({ availability: router({

View File

@@ -1,15 +1,18 @@
import type { Facility } from "@/types/hotel"
import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage"
import type { CardProps } from "@/components/TempDesignSystem/Card/card" import type { CardProps } from "@/components/TempDesignSystem/Card/card"
export type FacilityCards = CardProps[] export type FacilityCards = CardProps[]
export type Facilities = FacilityCards[] export type Facilities = FacilityCards[]
export type FacilityProps = { export type FacilitiesProps = {
facilities: Facilities facilities: Facility[]
activitiesCard?: ActivityCard
} }
export type CardGridProps = { export type CardGridProps = {
facilities: FacilityCards facilityCardGid: FacilityCards
} }
export enum FacilityEnum { export enum FacilityEnum {

View File

@@ -5,79 +5,67 @@ import {
wellnessAndExercise, wellnessAndExercise,
} from "@/constants/routes/hotelPageParams" } from "@/constants/routes/hotelPageParams"
import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext" import { getLang } from "@/i18n/serverContext"
import { import {
type Facilities, type Facilities,
type FacilityCards,
FacilityEnum, FacilityEnum,
FacilityIds, FacilityIds,
RestaurantHeadings, RestaurantHeadings,
} from "@/types/components/hotelPage/facilities" } from "@/types/components/hotelPage/facilities"
import type { ImageVaultAsset } from "@/types/components/imageVault"
import type { Amenities, Facility } from "@/types/hotel" import type { Amenities, Facility } from "@/types/hotel"
import { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage"
import type { CardProps } from "@/components/TempDesignSystem/Card/card" import type { CardProps } from "@/components/TempDesignSystem/Card/card"
type ActivityCard = { export function setActivityCard(activitiesCard: ActivityCard): CardProps {
background_image?: ImageVaultAsset
scripted_title?: string
heading: string
body_text: string
cta_text: string
contentPage: { href: string }
}
export function setActivityCard(activitiesCard: ActivityCard): FacilityCards {
const lang = getLang() const lang = getLang()
const hasImage = activitiesCard.background_image const hasImage = activitiesCard.background_image
return [
{ const updatedCard: CardProps = {
id: activities[lang], id: activities[lang],
theme: hasImage ? "image" : "primaryDark", theme: hasImage ? "image" : "primaryDark",
scriptedTopTitle: activitiesCard.scripted_title, scriptedTopTitle: activitiesCard.scripted_title,
heading: activitiesCard.heading, heading: activitiesCard.heading,
bodyText: activitiesCard.body_text, bodyText: activitiesCard.body_text,
backgroundImage: hasImage ? activitiesCard.background_image : undefined, backgroundImage: hasImage ? activitiesCard.background_image : undefined,
primaryButton: hasImage primaryButton: hasImage
? { ? {
href: activitiesCard.contentPage.href, href: activitiesCard.contentPage.href,
title: activitiesCard.cta_text, title: activitiesCard.cta_text,
isExternal: false, isExternal: false,
} }
: undefined, : undefined,
secondaryButton: hasImage secondaryButton: hasImage
? undefined ? undefined
: { : {
href: activitiesCard.contentPage.href, href: activitiesCard.contentPage.href,
title: activitiesCard.cta_text, title: activitiesCard.cta_text,
isExternal: false, isExternal: false,
}, },
}, }
] return updatedCard
} }
async function setCardProps( function setCardProps(
theme: CardProps["theme"], theme: CardProps["theme"],
heading: string, heading: string,
buttonText: string, buttonText: string,
href: string href: string
) { ) {
const intl = await getIntl()
const card: CardProps = {} const card: CardProps = {}
card.theme = theme card.theme = theme
card.id = href card.id = href
card.heading = intl.formatMessage({ id: heading }) card.heading = heading
card.secondaryButton = { card.secondaryButton = {
href: `?s=${href}`, href: `?s=${href}`,
title: intl.formatMessage({ id: buttonText }), title: buttonText,
isExternal: false, isExternal: false,
} }
return card return card
} }
export function setFacilityCards(facilities: Facility[]) { export function setFacilityCardGrids(facilities: Facility[]): Facilities {
const lang = getLang() const lang = getLang()
const cards: Facilities = [] const cards: Facilities = []
@@ -104,7 +92,7 @@ export function setFacilityCards(facilities: Facility[]) {
switch (facility.id) { switch (facility.id) {
case FacilityEnum.wellness: case FacilityEnum.wellness:
card = await setCardProps( card = setCardProps(
"one", "one",
"Sauna and gym", "Sauna and gym",
"Read more about wellness & exercise", "Read more about wellness & exercise",
@@ -115,7 +103,7 @@ export function setFacilityCards(facilities: Facility[]) {
break break
case FacilityEnum.conference: case FacilityEnum.conference:
card = await setCardProps( card = setCardProps(
"primaryDim", "primaryDim",
"Events that make an impression", "Events that make an impression",
"About meetings & conferences", "About meetings & conferences",
@@ -127,7 +115,7 @@ export function setFacilityCards(facilities: Facility[]) {
case FacilityEnum.restaurant: case FacilityEnum.restaurant:
//const title = getRestaurantHeading(amenities) // TODO will be used later //const title = getRestaurantHeading(amenities) // TODO will be used later
card = await setCardProps( card = setCardProps(
"primaryDark", "primaryDark",
"Enjoy relaxed restaurant experiences", "Enjoy relaxed restaurant experiences",
"Read more & book a table", "Read more & book a table",