diff --git a/components/DatePicker/Screen/Desktop.tsx b/components/DatePicker/Screen/Desktop.tsx index db290137e..192f8a036 100644 --- a/components/DatePicker/Screen/Desktop.tsx +++ b/components/DatePicker/Screen/Desktop.tsx @@ -61,9 +61,9 @@ export default function DatePickerDesktop({ locale={locale} mode="range" numberOfMonths={2} - onSelect={handleOnSelect} + onDayClick={handleOnSelect} pagedNavigation - required + required={false} selected={selectedDate} startMonth={currentDate} weekStartsOn={1} diff --git a/components/DatePicker/Screen/Mobile.tsx b/components/DatePicker/Screen/Mobile.tsx index 3d367d995..0407f9b63 100644 --- a/components/DatePicker/Screen/Mobile.tsx +++ b/components/DatePicker/Screen/Mobile.tsx @@ -78,7 +78,7 @@ export default function DatePickerMobile({ mode="range" /** Showing full year or what's left of it */ numberOfMonths={12} - onSelect={handleOnSelect} + onDayClick={handleOnSelect} required selected={selectedDate} startMonth={startMonth} diff --git a/components/DatePicker/Screen/desktop.module.css b/components/DatePicker/Screen/desktop.module.css index afbb286a7..aa02537a5 100644 --- a/components/DatePicker/Screen/desktop.module.css +++ b/components/DatePicker/Screen/desktop.module.css @@ -47,8 +47,8 @@ td.rangeStart[aria-selected="true"] button.dayButton:hover { } td.rangeEnd[aria-selected="true"]:not([data-outside="true"]) button.dayButton, -td.rangeStart[aria-selected="true"]:not([data-outside="true"]) - button.dayButton { +td.rangeStart[aria-selected="true"]:not([data-outside="true"]) button.dayButton, +td.day[aria-selected="true"] button.dayButton { background: var(--Primary-Light-On-Surface-Accent); border: none; color: var(--Base-Button-Inverted-Fill-Normal); @@ -75,6 +75,7 @@ td.rangeMiddle[aria-selected="true"] button.dayButton { background: var(--Base-Background-Primary-Normal); border: none; border-radius: 0; + color: var(--UI-Text-High-contrast); } td.day[data-disabled="true"], diff --git a/components/DatePicker/Screen/mobile.module.css b/components/DatePicker/Screen/mobile.module.css index 4f820fd5f..ef3f97ca0 100644 --- a/components/DatePicker/Screen/mobile.module.css +++ b/components/DatePicker/Screen/mobile.module.css @@ -113,8 +113,8 @@ td.rangeStart[aria-selected="true"] button.dayButton:hover { } td.rangeEnd[aria-selected="true"]:not([data-outside="true"]) button.dayButton, -td.rangeStart[aria-selected="true"]:not([data-outside="true"]) - button.dayButton { +td.rangeStart[aria-selected="true"]:not([data-outside="true"]) button.dayButton, +td.day[aria-selected="true"] button.dayButton { background: var(--Primary-Light-On-Surface-Accent); border: none; color: var(--Base-Button-Inverted-Fill-Normal); @@ -141,6 +141,7 @@ td.rangeMiddle[aria-selected="true"] button.dayButton { background: var(--Base-Background-Primary-Normal); border: none; border-radius: 0; + color: var(--UI-Text-High-contrast); } td.day[data-disabled="true"], diff --git a/components/DatePicker/date-picker.module.css b/components/DatePicker/date-picker.module.css index b11ab3b77..b2e23cd41 100644 --- a/components/DatePicker/date-picker.module.css +++ b/components/DatePicker/date-picker.module.css @@ -22,6 +22,11 @@ .hideWrapper { background-color: var(--Main-Grey-White); + display: none; +} + +.container[data-isopen="true"] .hideWrapper { + display: block; } @media screen and (max-width: 1366px) { diff --git a/components/DatePicker/index.tsx b/components/DatePicker/index.tsx index 586da5208..503c0c6ac 100644 --- a/components/DatePicker/index.tsx +++ b/components/DatePicker/index.tsx @@ -14,8 +14,6 @@ import DatePickerMobile from "./Screen/Mobile" import styles from "./date-picker.module.css" -import type { DateRange } from "react-day-picker" - import type { DatePickerFormProps } from "@/types/components/datepicker" const locales = { @@ -33,6 +31,8 @@ export default function DatePickerForm({ name = "date" }: DatePickerFormProps) { const { register, setValue } = useFormContext() const ref = useRef(null) + const [isSelectingFrom, setIsSelectingFrom] = useState(true) + function close() { setIsOpen(false) } @@ -41,11 +41,29 @@ export default function DatePickerForm({ name = "date" }: DatePickerFormProps) { setIsOpen((prevIsOpen) => !prevIsOpen) } - function handleSelectDate(selected: DateRange) { - setValue(name, { - from: dt(selected.from).format("YYYY-MM-DD"), - to: dt(selected.to).format("YYYY-MM-DD"), - }) + function handleSelectDate(selected: Date) { + if (isSelectingFrom) { + setValue(name, { + from: dt(selected).format("YYYY-MM-DD"), + to: undefined, + }) + setIsSelectingFrom(false) + } else { + const fromDate = dt(selectedDate.from) + const toDate = dt(selected) + if (toDate.isAfter(fromDate)) { + setValue(name, { + from: selectedDate.from, + to: toDate.format("YYYY-MM-DD"), + }) + } else { + setValue(name, { + from: toDate.format("YYYY-MM-DD"), + to: selectedDate.from, + }) + } + setIsSelectingFrom(true) + } } useEffect(() => { @@ -64,7 +82,9 @@ export default function DatePickerForm({ name = "date" }: DatePickerFormProps) { const selectedFromDate = dt(selectedDate.from) .locale(lang) .format("ddd D MMM") - const selectedToDate = dt(selectedDate.to).locale(lang).format("ddd D MMM") + const selectedToDate = !!selectedDate.to + ? dt(selectedDate.to).locale(lang).format("ddd D MMM") + : "" return (
diff --git a/components/Forms/BookingWidget/FormContent/Search/index.tsx b/components/Forms/BookingWidget/FormContent/Search/index.tsx index af5f7ce3d..12d5e740c 100644 --- a/components/Forms/BookingWidget/FormContent/Search/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Search/index.tsx @@ -48,15 +48,6 @@ export default function Search({ locations }: SearchProps) { dispatch({ type: ActionType.CLEAR_HISTORY_LOCATIONS }) } - function handleOnBlur() { - if (!value && state.searchData?.name) { - setValue(name, state.searchData.name) - // Always need to manually trigger - // revalidation when setting value r-h-f - trigger() - } - } - function handleOnChange( evt: FormEvent | ChangeEvent ) { @@ -138,7 +129,9 @@ export default function Search({ locations }: SearchProps) {
@@ -154,7 +147,6 @@ export default function Search({ locations }: SearchProps) { }), ...register(name, { onBlur: function () { - handleOnBlur() closeMenu() }, onChange: handleOnChange, diff --git a/components/Forms/BookingWidget/FormContent/Search/search.module.css b/components/Forms/BookingWidget/FormContent/Search/search.module.css index d1acb79be..0b9ecfa8c 100644 --- a/components/Forms/BookingWidget/FormContent/Search/search.module.css +++ b/components/Forms/BookingWidget/FormContent/Search/search.module.css @@ -24,8 +24,3 @@ p { color: var(--UI-Text-Active); } - -.container:hover:has(input:not(:active, :focus, :focus-within)) - input::-webkit-search-cancel-button { - display: none; -} diff --git a/components/Forms/BookingWidget/FormContent/Voucher/index.tsx b/components/Forms/BookingWidget/FormContent/Voucher/index.tsx index 0a9841a43..30eef6e21 100644 --- a/components/Forms/BookingWidget/FormContent/Voucher/index.tsx +++ b/components/Forms/BookingWidget/FormContent/Voucher/index.tsx @@ -1,7 +1,7 @@ "use client" import { useIntl } from "react-intl" -import Body from "@/components/TempDesignSystem/Text/Body" +import Checkbox from "@/components/TempDesignSystem/Form/Checkbox" import Caption from "@/components/TempDesignSystem/Text/Caption" import { Tooltip } from "@/components/TempDesignSystem/Tooltip" @@ -50,17 +50,17 @@ export default function Voucher() { >
diff --git a/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css b/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css index 0deccbb43..694134cd8 100644 --- a/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css +++ b/components/Forms/BookingWidget/FormContent/Voucher/voucher.module.css @@ -68,7 +68,7 @@ .options { flex-direction: column; max-width: 190px; - gap: 0; + gap: var(--Spacing-x-half); } .vouchers:hover, .option:hover { @@ -76,6 +76,7 @@ } .optionsContainer { flex-direction: row; + align-items: center; } .checkboxVoucher { display: none; diff --git a/components/Forms/BookingWidget/FormContent/formContent.module.css b/components/Forms/BookingWidget/FormContent/formContent.module.css index a58bb1062..2012bfa7a 100644 --- a/components/Forms/BookingWidget/FormContent/formContent.module.css +++ b/components/Forms/BookingWidget/FormContent/formContent.module.css @@ -75,8 +75,10 @@ padding: var(--Spacing-x1) var(--Spacing-x-one-and-half); border-radius: var(--Corner-radius-Small); } + .when:hover, .rooms:hover, + .when:has([data-isopen="true"]), .rooms:has(.input:active, .input:focus, .input:focus-within) { background-color: var(--Base-Surface-Primary-light-Hover-alt); } diff --git a/components/Forms/BookingWidget/FormContent/index.tsx b/components/Forms/BookingWidget/FormContent/index.tsx index 40c7533b4..1b6cb406e 100644 --- a/components/Forms/BookingWidget/FormContent/index.tsx +++ b/components/Forms/BookingWidget/FormContent/index.tsx @@ -1,4 +1,5 @@ "use client" +import { useState } from "react" import { useWatch } from "react-hook-form" import { useIntl } from "react-intl" @@ -20,7 +21,6 @@ import type { BookingWidgetFormContentProps } from "@/types/components/form/book export default function FormContent({ locations, formId, - formState, }: BookingWidgetFormContentProps) { const intl = useIntl() const selectedDate = useWatch({ name: "date" }) @@ -40,7 +40,7 @@ export default function FormContent({ {intl.formatMessage( { id: "booking.nights" }, - { totalNights: nights } + { totalNights: nights > 0 ? nights : 0 } )} @@ -60,7 +60,6 @@ export default function FormContent({