From b5542462ace00ee387831ea132a92d7ea901d092 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 3 Sep 2021 18:31:32 +0300 Subject: [PATCH] Calendar: Various fixes (#1423) --- src/components/common/CalendarModal.tsx | 65 +++++++++++++++++-------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/components/common/CalendarModal.tsx b/src/components/common/CalendarModal.tsx index f3416e5fc..e76b2aa9d 100644 --- a/src/components/common/CalendarModal.tsx +++ b/src/components/common/CalendarModal.tsx @@ -58,6 +58,9 @@ const CalendarModal: FC = ({ const [isTimeInputFocused, markTimeInputAsFocused, unmarkTimeInputAsFocused] = useFlag(false); const [selectedDate, setSelectedDate] = useState(defaultSelectedDate); + const [currentMonthAndYear, setCurrentMonthAndYear] = useState( + new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1), + ); const [selectedHours, setSelectedHours] = useState( formatInputTime(defaultSelectedDate.getHours()), ); @@ -65,15 +68,16 @@ const CalendarModal: FC = ({ formatInputTime(defaultSelectedDate.getMinutes()), ); - const currentYear = selectedDate.getFullYear(); - const currentMonth = selectedDate.getMonth(); - const currentDate = selectedDate.getDate(); + const selectedDay = formatDay(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()); + const currentYear = currentMonthAndYear.getFullYear(); + const currentMonth = currentMonthAndYear.getMonth(); useEffect(() => { if (!prevIsOpen && isOpen) { setSelectedDate(defaultSelectedDate); + setCurrentMonthAndYear(new Date(defaultSelectedDate.getFullYear(), defaultSelectedDate.getMonth(), 1)); } - }, [isOpen, defaultSelectedDate, prevIsOpen]); + }, [defaultSelectedDate, isOpen, prevIsOpen]); useEffect(() => { if (isFutureMode && !isTimeInputFocused && selectedDate.getTime() < defaultSelectedDate.getTime()) { @@ -87,12 +91,12 @@ const CalendarModal: FC = ({ || (maxDate && currentYear >= maxDate.getFullYear() && currentMonth >= maxDate.getMonth()); const shouldDisablePrevMonth = isFutureMode && currentYear <= now.getFullYear() && currentMonth <= now.getMonth(); - const calendarGrid = useMemo(() => ( + const { prevMonthGrid, currentMonthGrid, nextMonthGrid } = useMemo(() => ( buildCalendarGrid(currentYear, currentMonth) ), [currentMonth, currentYear]); function handlePrevMonth() { - setSelectedDate((d) => { + setCurrentMonthAndYear((d) => { const dateCopy = new Date(d); dateCopy.setMonth(dateCopy.getMonth() - 1); @@ -101,7 +105,7 @@ const CalendarModal: FC = ({ } function handleNextMonth() { - setSelectedDate((d) => { + setCurrentMonthAndYear((d) => { const dateCopy = new Date(d); dateCopy.setMonth(dateCopy.getMonth() + 1); @@ -113,6 +117,8 @@ const CalendarModal: FC = ({ setSelectedDate((d) => { const dateCopy = new Date(d); dateCopy.setDate(date); + dateCopy.setMonth(currentMonth); + dateCopy.setFullYear(currentYear); return dateCopy; }); @@ -204,9 +210,9 @@ const CalendarModal: FC = ({

- {lang(`lng_month${selectedDate.getMonth() + 1}`)} + {lang(`lng_month${currentMonth + 1}`)} {' '} - {selectedDate.getFullYear()} + {currentYear}