diff --git a/src/components/Calendar/Calendar.tsx b/src/components/Calendar/Calendar.tsx index 522b7b3..a21f8b3 100644 --- a/src/components/Calendar/Calendar.tsx +++ b/src/components/Calendar/Calendar.tsx @@ -104,6 +104,7 @@ export default function CalendarApp() { }; const handleClosePopover = () => { + calendarRef.current?.unselect(); setAnchorEl(null); setSelectedRange(null); }; @@ -230,6 +231,7 @@ export default function CalendarApp() { slotDuration={"00:30:00"} slotLabelInterval={"00:30:00"} scrollTime={"09:00:00"} + unselectAuto={false} allDayText="" slotLabelFormat={{ hour: "2-digit", @@ -285,6 +287,8 @@ export default function CalendarApp() { open={Boolean(anchorEl)} onClose={handleClosePopover} selectedRange={selectedRange} + setSelectedRange={setSelectedRange} + calendarRef={calendarRef} /> void; selectedRange: DateSelectArg | null; + setSelectedRange: Function; + calendarRef: React.RefObject; }) { const dispatch = useAppDispatch(); @@ -60,6 +64,7 @@ function EventPopover({ useEffect(() => { if (selectedRange) { setStart(selectedRange ? formatLocalDateTime(selectedRange.start) : ""); + setEnd(selectedRange ? formatLocalDateTime(selectedRange.end) : ""); } }, [selectedRange]); @@ -148,8 +153,19 @@ function EventPopover({ fullWidth label="Start" type={allday ? "date" : "datetime-local"} - value={start} - onChange={(e) => setStart(e.target.value)} + value={allday ? start.split("T")[0] : start} + onChange={(e) => { + const newStart = e.target.value; + setStart(newStart); + const newRange = { + ...selectedRange, + start: new Date(newStart), + startStr: newStart, + allDay: allday, + }; + setSelectedRange(newRange); + calendarRef.current?.select(newRange); + }} size="small" margin="dense" InputLabelProps={{ shrink: true }} @@ -158,8 +174,19 @@ function EventPopover({ fullWidth label="End" type={allday ? "date" : "datetime-local"} - value={end} - onChange={(e) => setEnd(e.target.value)} + value={allday ? end.split("T")[0] : end} + onChange={(e) => { + const newEnd = e.target.value; + setEnd(newEnd); + const newRange = { + ...selectedRange, + end: new Date(newEnd), + endStr: newEnd, + allDay: allday, + }; + setSelectedRange(newRange); + calendarRef.current?.select(newRange); + }} size="small" margin="dense" InputLabelProps={{ shrink: true }} @@ -168,7 +195,19 @@ function EventPopover({ setAllDay(!allday)} + onChange={() => { + setAllDay(!allday); + const newRange = { + startStr: allday ? start.split("T")[0] : start, + endStr: allday ? end.split("T")[0] : end, + start: new Date(allday ? start.split("T")[0] : start), + end: new Date(allday ? end.split("T")[0] : end), + allday, + ...selectedRange, + }; + setSelectedRange(newRange); + calendarRef.current?.select(newRange); + }} /> All day