"use client" import { useEffect, useRef, useState } from "react" import { type DateRange, DayPicker } from "react-day-picker" import { useIntl } from "react-intl" import { Lang } from "@scandic-hotels/common/constants/language" import { dt } from "@scandic-hotels/common/dt" import { Button } from "@scandic-hotels/design-system/Button" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { Typography } from "@scandic-hotels/design-system/Typography" import useLang from "../../../../hooks/useLang" import { locales } from "../locales" import styles from "./mobile.module.css" import classNames from "react-day-picker/style.module.css" type DatePickerRangeProps = { close: () => void startMonth?: Date hideHeader?: boolean selectedRange: DateRange | undefined handleOnSelect: (nextRange: DateRange | undefined, selectedDay: Date) => void } export default function DatePickerRangeMobile({ close, handleOnSelect, selectedRange, }: DatePickerRangeProps) { const lang = useLang() const intl = useIntl() /** English is default language and doesn't need to be imported */ const locale = lang === Lang.en ? undefined : locales[lang] const monthsRef = useRef(null) const [autoScrollEnabled, setAutoScrollEnabled] = useState(true) const currentDate = dt().toDate() const lastDayOfPreviousMonth = dt(currentDate) .set("date", 1) .subtract(1, "day") .toDate() const yesterday = dt(currentDate).subtract(1, "day").toDate() useEffect(() => { if (!monthsRef.current || !selectedRange?.from || !autoScrollEnabled) return const selectedDay = monthsRef.current.querySelector( 'td[aria-selected="true"]:not([data-outside="true"])' ) const targetMonth = selectedDay?.closest(`.${styles.month}`) if (targetMonth) { targetMonth.scrollIntoView({ block: "start" }) } }, [selectedRange, autoScrollEnabled]) function handleSelectWrapper( dateRange: DateRange | undefined, selectedDay: Date ) { setAutoScrollEnabled(false) handleOnSelect(dateRange, selectedDay) } // Max future date allowed to book kept same as of existing prod. const endDate = dt(currentDate).add(395, "day").toDate() const endOfLastMonth = dt(endDate).endOf("month").toDate() return (
handleSelectWrapper(dateRange, selectedDay) } required selected={selectedRange} startMonth={currentDate} weekStartsOn={1} components={{ MonthCaption(props) { return (

{props.children}

) }, }} />
) }