refactor(SW-302)

This commit is contained in:
Matilda Landström
2024-10-07 17:30:24 +02:00
parent df5b6be4f8
commit 150f0f0e4e
6 changed files with 46 additions and 56 deletions

View File

@@ -10,11 +10,11 @@ import { getLang } from "@/i18n/serverContext"
import styles from "./amenitiesList.module.css" import styles from "./amenitiesList.module.css"
import type { AmentiesListProps } from "@/types/components/hotelPage/amenities" import type { AmenitiesListProps } from "@/types/components/hotelPage/amenities"
export default async function AmenitiesList({ export default async function AmenitiesList({
detailedFacilities, detailedFacilities,
}: AmentiesListProps) { }: AmenitiesListProps) {
const intl = await getIntl() const intl = await getIntl()
const sortedAmenities = detailedFacilities const sortedAmenities = detailedFacilities
.sort((a, b) => b.sortOrder - a.sortOrder) .sort((a, b) => b.sortOrder - a.sortOrder)

View File

@@ -1,8 +1,7 @@
import Card from "@/components/TempDesignSystem/Card" import Card from "@/components/TempDesignSystem/Card"
import CardImage from "@/components/TempDesignSystem/Card/CardImage" import CardImage from "@/components/TempDesignSystem/Card/CardImage"
import Grids from "@/components/TempDesignSystem/Grids" import Grids from "@/components/TempDesignSystem/Grids"
import { isFacilityCard } from "@/utils/facilityCards" import { filterFacilityCards, isFacilityCard } from "@/utils/facilityCards"
import { sortCards } from "@/utils/imageCard"
import styles from "./cardGrid.module.css" import styles from "./cardGrid.module.css"
@@ -14,7 +13,7 @@ import type {
export default function FacilitiesCardGrid({ export default function FacilitiesCardGrid({
facilitiesCardGrid, facilitiesCardGrid,
}: CardGridProps) { }: CardGridProps) {
const imageCard = sortCards(facilitiesCardGrid) const imageCard = filterFacilityCards(facilitiesCardGrid)
const nrCards = facilitiesCardGrid.length const nrCards = facilitiesCardGrid.length
function getCardClassName(card: FacilityCardType): string { function getCardClassName(card: FacilityCardType): string {

View File

@@ -8,6 +8,7 @@ import FacilitiesCardGrid from "./CardGrid"
import styles from "./facilities.module.css" import styles from "./facilities.module.css"
import type { import type {
Facilities,
FacilitiesProps, FacilitiesProps,
FacilityCardType, FacilityCardType,
FacilityGrid, FacilityGrid,
@@ -21,20 +22,29 @@ export default async function Facilities({
const facilityCardGrids = setFacilityCardGrids(facilities) const facilityCardGrids = setFacilityCardGrids(facilities)
facilityCardGrids.map((cardGrid: FacilityGrid) => { const translatedFacilityGrids: Facilities = facilityCardGrids.map(
cardGrid.map((card: FacilityCardType) => { (cardGrid: FacilityGrid) => {
if (isFacilityCard(card)) { return cardGrid.map((card: FacilityCardType) => {
card.heading = intl.formatMessage({ id: card.heading }) if (isFacilityCard(card)) {
card.secondaryButton.title = intl.formatMessage({ return {
id: card.secondaryButton.title, ...card,
}) heading: intl.formatMessage({ id: card.heading }),
} secondaryButton: {
}) ...card.secondaryButton,
}) title: intl.formatMessage({
id: card.secondaryButton.title,
}),
},
}
}
return card
})
}
)
return ( return (
<SectionContainer className={styles.grid}> <SectionContainer className={styles.grid}>
{facilityCardGrids.map((cardGrid: FacilityGrid) => ( {translatedFacilityGrids.map((cardGrid: FacilityGrid) => (
<FacilitiesCardGrid <FacilitiesCardGrid
key={cardGrid[0].id} key={cardGrid[0].id}
facilitiesCardGrid={cardGrid} facilitiesCardGrid={cardGrid}

View File

@@ -1,5 +1,5 @@
import type { Amenities } from "@/types/hotel" import type { Amenities } from "@/types/hotel"
export type AmentiesListProps = { export type AmenitiesListProps = {
detailedFacilities: Amenities detailedFacilities: Amenities
} }

View File

@@ -20,11 +20,11 @@ import type { Amenities, Facility } from "@/types/hotel"
import type { CardProps } from "@/components/TempDesignSystem/Card/card" import type { CardProps } from "@/components/TempDesignSystem/Card/card"
export function isFacilityCard(card: FacilityCardType): card is FacilityCard { export function isFacilityCard(card: FacilityCardType): card is FacilityCard {
return (card as FacilityCard).heading != undefined return "heading" in card
} }
export function isFacilityImage(card: FacilityCardType): card is FacilityCard { export function isFacilityImage(card: FacilityCardType): card is FacilityImage {
return (card as FacilityImage).backgroundImage != undefined return "backgroundImage" in card
} }
function setCardProps( function setCardProps(
@@ -35,10 +35,10 @@ function setCardProps(
scriptedTopTitle: string scriptedTopTitle: string
): FacilityCard { ): FacilityCard {
return { return {
theme: theme, theme,
id: href, id: href,
heading: heading, heading,
scriptedTopTitle: scriptedTopTitle, scriptedTopTitle,
secondaryButton: { secondaryButton: {
href: `?s=${href}`, href: `?s=${href}`,
title: buttonText, title: buttonText,
@@ -49,13 +49,11 @@ function setCardProps(
export function setFacilityCardGrids(facilities: Facility[]): Facilities { export function setFacilityCardGrids(facilities: Facility[]): Facilities {
const lang = getLang() const lang = getLang()
const cards: Facilities = []
facilities.forEach(async (facility) => { const cards: Facilities = facilities.map((facility) => {
const grid: FacilityGrid = []
let card: FacilityCard let card: FacilityCard
facility.heroImages.slice(0, 2).forEach((image) => { const grid: FacilityGrid = facility.heroImages.slice(0, 2).map((image) => {
// Can be a maximum 2 images per grid // Can be a maximum 2 images per grid
const img: FacilityImage = { const img: FacilityImage = {
backgroundImage: { backgroundImage: {
@@ -70,7 +68,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities {
theme: "image", theme: "image",
id: image.imageSizes.large, id: image.imageSizes.large,
} }
grid.push(img) return img
}) })
switch (facility.id) { switch (facility.id) {
@@ -108,7 +106,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities {
grid.unshift(card) grid.unshift(card)
break break
} }
cards.push(grid) return grid
}) })
return cards return cards
} }
@@ -131,3 +129,13 @@ export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings {
} }
return RestaurantHeadings.breakfastRestaurant return RestaurantHeadings.breakfastRestaurant
} }
export function filterFacilityCards(cards: FacilityGrid) {
const card = cards.filter((card) => isFacilityCard(card))
const images = cards.filter((card) => isFacilityImage(card))
return {
card: card[0] as FacilityCard,
images: images as FacilityImage[],
}
}

View File

@@ -1,27 +0,0 @@
import { isFacilityImage } from "./facilityCards"
import type {
FacilityCard,
FacilityCardType,
FacilityGrid,
FacilityImage,
} from "@/types/components/hotelPage/facilities"
export function sortCards(cards: FacilityGrid) {
const sortedCards = cards
.slice(0)
.sort((a: FacilityCardType, b: FacilityCardType) => {
if (!isFacilityImage(a) && isFacilityImage(b)) {
return 1
}
if (isFacilityImage(a) && !isFacilityImage(b)) {
return -1
}
return 0
})
return {
card: sortedCards.pop() as FacilityCard,
images: sortedCards as FacilityImage[],
}
}