From 68694ef914113ebffc3d1e1ef1d7df5bbf7e6daf Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Mon, 12 Aug 2024 13:27:03 +0200 Subject: [PATCH] refactor: update SidePeek composition --- .../ContentType/HotelPage/HotelPage.tsx | 26 ++++--- .../HotelPage/IntroSection/index.tsx | 5 +- .../HotelPage/IntroSection/types.ts | 4 -- .../SidePeek/Container/index.tsx | 55 -------------- .../SidePeek/{Content => Item}/index.tsx | 10 +-- .../sidePeekItem.module.css} | 10 +-- .../TempDesignSystem/SidePeek/index.tsx | 72 +++++++++++++------ 7 files changed, 77 insertions(+), 105 deletions(-) delete mode 100644 components/TempDesignSystem/SidePeek/Container/index.tsx rename components/TempDesignSystem/SidePeek/{Content => Item}/index.tsx (80%) rename components/TempDesignSystem/SidePeek/{Content/content.module.css => Item/sidePeekItem.module.css} (81%) diff --git a/components/ContentType/HotelPage/HotelPage.tsx b/components/ContentType/HotelPage/HotelPage.tsx index c91d6036b..feac71db9 100644 --- a/components/ContentType/HotelPage/HotelPage.tsx +++ b/components/ContentType/HotelPage/HotelPage.tsx @@ -2,8 +2,8 @@ import { about, amenities } from "@/constants/routes/hotelPageParams" import { serverClient } from "@/lib/trpc/server" import { getLang } from "@/i18n/serverContext" -import SidePeekContainer from "@/components/TempDesignSystem/SidePeek/Container" -import SidePeekContent from "@/components/TempDesignSystem/SidePeek/Content" +import SidePeek from "@/components/TempDesignSystem/SidePeek" +import SidePeekItem from "@/components/TempDesignSystem/SidePeek/Item" import { getIntl } from "@/i18n" import AmenitiesList from "./AmenitiesList" @@ -20,10 +20,10 @@ export default async function HotelPage() { if (!hotelPageIdentifierData) { return null } - + const lang = getLang() const { attributes, roomCategories } = await serverClient().hotel.getHotel({ hotelId: hotelPageIdentifierData.hotel_page_id, - language: getLang(), + language: lang, include: ["RoomCategories"], }) @@ -35,29 +35,27 @@ export default async function HotelPage() {
- - + {/* TODO: Render amenities as per the design. */} Read more about the amenities here - - + Some additional information about the hotel - - + + (() => { - const sidePeekParam = searchParams.get( - "open" - ) as SidePeekContentKey | null - return sidePeekParam || null - }) - - useEffect(() => { - const sidePeekParam = searchParams.get("open") as SidePeekContentKey | null - if (sidePeekParam !== activeSidePeek) { - setActiveSidePeek(sidePeekParam) - } - }, [searchParams, activeSidePeek]) - - function handleClose(isOpen: boolean) { - if (!isOpen) { - setActiveSidePeek(null) - - const nextSearchParams = new URLSearchParams(searchParams.toString()) - nextSearchParams.delete("open") - - router.push(`${pathname}?${nextSearchParams}`, { scroll: false }) - } - } - const childrenWithIsActive = Children.map(children, (child) => { - if (!React.isValidElement(child)) { - return child - } - return cloneElement(child as React.ReactElement, { - isActive: - (child.props.contentKey as SidePeekContentKey) === activeSidePeek, - }) - }) - - return ( - - {childrenWithIsActive} - - ) -} diff --git a/components/TempDesignSystem/SidePeek/Content/index.tsx b/components/TempDesignSystem/SidePeek/Item/index.tsx similarity index 80% rename from components/TempDesignSystem/SidePeek/Content/index.tsx rename to components/TempDesignSystem/SidePeek/Item/index.tsx index c3a207c68..fa897aae9 100644 --- a/components/TempDesignSystem/SidePeek/Content/index.tsx +++ b/components/TempDesignSystem/SidePeek/Item/index.tsx @@ -1,6 +1,6 @@ "use client" -import { Children, PropsWithChildren } from "react" +import { PropsWithChildren } from "react" import { CloseIcon } from "@/components/Icons" import { SidePeekContentProps } from "@/components/TempDesignSystem/SidePeek/types" @@ -8,16 +8,16 @@ import Title from "@/components/TempDesignSystem/Text/Title" import Button from "../../Button" -import styles from "./content.module.css" +import styles from "./sidePeekItem.module.css" -export default function Content({ +function SidePeekItem({ title, children, isActive = false, onClose, }: PropsWithChildren) { return isActive ? ( -