"use client" import { useEffect, useRef } from "react" import { createDetailsStore } from "@/stores/enter-details" import { checkIsSameRoom, clearSessionStorage, readFromSessionStorage, } from "@/stores/enter-details/helpers" import { DetailsContext } from "@/contexts/Details" import type { DetailsStore } from "@/types/contexts/enter-details" import type { DetailsProviderProps } from "@/types/providers/enter-details" import type { InitialState } from "@/types/stores/enter-details" export default function EnterDetailsProvider({ booking, showBreakfastStep, children, roomsData, searchParamsStr, user, vat, }: DetailsProviderProps) { const storeRef = useRef() if (!storeRef.current) { const initialData: InitialState = { booking, rooms: roomsData .filter((r) => r.bedTypes?.length) // TODO: how to handle room without bedtypes? .map((room) => ({ roomFeatures: room.packages, roomRate: room.roomRate, roomType: room.roomType, cancellationText: room.cancellationText, rateDetails: room.rateDetails, bedType: room.bedTypes?.length === 1 ? { roomTypeCode: room.bedTypes[0].value, description: room.bedTypes[0].description, } : undefined, })), vat, } if (!showBreakfastStep) { initialData.breakfast = false } storeRef.current = createDetailsStore(initialData, searchParamsStr, user) } useEffect(() => { const storedValues = readFromSessionStorage() if (!storedValues) { return } const isSameRoom = checkIsSameRoom(storedValues.booking, booking) if (!isSameRoom) { clearSessionStorage() return } const state = storeRef.current?.getState() storeRef.current?.setState({ ...state, rooms: storedValues.rooms, bookingProgress: storedValues.bookingProgress, }) }, [booking]) return ( {children} ) }