From 71c7f3c0a469e37d631abf145489ac2f4e477599 Mon Sep 17 00:00:00 2001 From: Hrishikesh Vaipurkar Date: Thu, 31 Oct 2024 09:18:33 +0100 Subject: [PATCH] fix: SW-710 Datepicker UI/UX updates --- components/DatePicker/Screen/Desktop.tsx | 17 +++++++++-- components/DatePicker/Screen/Mobile.tsx | 38 ++++++------------------ components/DatePicker/index.tsx | 12 ++++++-- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/components/DatePicker/Screen/Desktop.tsx b/components/DatePicker/Screen/Desktop.tsx index d3b30dbf8..24ea57523 100644 --- a/components/DatePicker/Screen/Desktop.tsx +++ b/components/DatePicker/Screen/Desktop.tsx @@ -1,5 +1,6 @@ "use client" +import { useState } from "react" import { DayPicker } from "react-day-picker" import { useIntl } from "react-intl" @@ -26,12 +27,19 @@ export default function DatePickerDesktop({ }: DatePickerProps) { const lang = useLang() const intl = useIntl() + const [month, setMonth] = useState(new Date()) /** English is default language and doesn't need to be imported */ const locale = lang === Lang.en ? undefined : locales[lang] const currentDate = dt().toDate() const startOfMonth = dt(currentDate).set("date", 1).toDate() const yesterday = dt(currentDate).subtract(1, "day").toDate() + const endDate = dt().add(365, "day").toDate() + const endOfLastMonth = dt(endDate).endOf("month").toDate() + + function handleMonthChange(selected: Date) { + setMonth(selected) + } return ( dt().year()) const lang = useLang() const intl = useIntl() - function handleSelectYear(evt: ChangeEvent) { - setSelectedYear(Number(evt.currentTarget.value)) - } - /** English is default language and doesn't need to be imported */ const locale = lang === Lang.en ? undefined : locales[lang] const currentDate = dt().toDate() const startOfCurrentMonth = dt(currentDate).set("date", 1).toDate() const yesterday = dt(currentDate).subtract(1, "day").toDate() - const startMonth = dt().set("year", selectedYear).startOf("year").toDate() - const decemberOfYear = dt().set("year", selectedYear).endOf("year").toDate() + const endDate = dt().add(365, "day").toDate() + const endOfLastMonth = dt(endDate).endOf("month").toDate() return (
- diff --git a/components/DatePicker/index.tsx b/components/DatePicker/index.tsx index b18a4d9ca..a93063565 100644 --- a/components/DatePicker/index.tsx +++ b/components/DatePicker/index.tsx @@ -48,7 +48,7 @@ export default function DatePickerForm({ name = "date" }: DatePickerFormProps) { toDate: undefined, }) setIsSelectingFrom(false) - } else { + } else if (!dt(selectedDate.fromDate).isSame(dt(selected))) { const fromDate = dt(selectedDate.fromDate) const toDate = dt(selected) if (toDate.isAfter(fromDate)) { @@ -70,6 +70,14 @@ export default function DatePickerForm({ name = "date" }: DatePickerFormProps) { function handleClickOutside(evt: Event) { const target = evt.target as HTMLElement if (ref.current && target && !ref.current.contains(target)) { + if (!selectedDate.toDate) { + setValue(name, { + fromDate: selectedDate.fromDate, + toDate: dt(selectedDate.fromDate) + .add(1, "day") + .format("YYYY-MM-DD"), + }) + } setIsOpen(false) } } @@ -77,7 +85,7 @@ export default function DatePickerForm({ name = "date" }: DatePickerFormProps) { return () => { document.body.removeEventListener("click", handleClickOutside) } - }, [setIsOpen]) + }, [setIsOpen, setValue, selectedDate, name]) const selectedFromDate = dt(selectedDate.fromDate) .locale(lang)