372 drag and drop multiple days event to use normal mode instead of extended mode (#407)
- When dragging from allday slot: open normal mode with allday checked, show start date and end date - When dragging from week/month view grid: open normal mode with allday checked, show 4 fields (start date, start time, end date, end time) - Update DateTimeFields logic to support displaying time fields when allday=true and hasEndDateChanged=true for multiple days events Add setHasEndDateChanged(false) to resetAllStateToDefault function to prevent stale state when: - User creates multi-day event from grid (sets hasEndDateChanged = true) - Closes the modal - Opens modal again for a single-day event This ensures hasEndDateChanged is properly reset to false when modal is closed or reset. Fix drag and drop logic: keep allday=false when dragging from week view - Remove setAllDay(true) when dragging multiple days from week view grid - Keep allday=false to show time fields for week view drag scenarios - Add comprehensive test cases for drag and drop scenarios - Test cases cover allday slot and week view drag scenarios - Prevent regressions with test coverage for display logic
This commit is contained in:
@@ -181,6 +181,7 @@ function EventPopover({
|
||||
setTimezone(resolvedCalendarTimezone);
|
||||
setHasVideoConference(false);
|
||||
setMeetingLink(null);
|
||||
setHasEndDateChanged(false);
|
||||
}, [resolvedCalendarTimezone, defaultCalendarId]);
|
||||
|
||||
// Track if we should sync from selectedRange (only on initial selection, not on toggle)
|
||||
@@ -286,11 +287,22 @@ function EventPopover({
|
||||
setStart(startValue);
|
||||
setEnd(endValue);
|
||||
|
||||
// If start date != end date, open extended mode
|
||||
// Check if multiple days event
|
||||
const startDateOnly = startValue.slice(0, 10);
|
||||
const endDateOnly = endValue.slice(0, 10);
|
||||
if (startDateOnly !== endDateOnly) {
|
||||
setShowMore(true);
|
||||
const isMultipleDays = startDateOnly !== endDateOnly;
|
||||
|
||||
if (isMultipleDays) {
|
||||
// Keep normal mode (showMore = false) for multiple days events
|
||||
setShowMore(false);
|
||||
|
||||
if (selectedRange.allDay) {
|
||||
// Dragged from allday slot: allday already set to true at line 234
|
||||
// Will show start date and end date (handled by showEndDate logic)
|
||||
} else {
|
||||
// Dragged from week/month view grid: keep allday=false to show time fields, trigger 4 fields display
|
||||
setHasEndDateChanged(true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Fallback: format Date objects using local time components
|
||||
@@ -337,8 +349,19 @@ function EventPopover({
|
||||
if (formattedStart && formattedEnd) {
|
||||
const startDateOnly = formattedStart.slice(0, 10);
|
||||
const endDateOnly = formattedEnd.slice(0, 10);
|
||||
if (startDateOnly !== endDateOnly) {
|
||||
setShowMore(true);
|
||||
const isMultipleDays = startDateOnly !== endDateOnly;
|
||||
|
||||
if (isMultipleDays) {
|
||||
// Keep normal mode (showMore = false) for multiple days events
|
||||
setShowMore(false);
|
||||
|
||||
if (selectedRange.allDay) {
|
||||
// Dragged from allday slot: allday already set to true at line 234
|
||||
// Will show start date and end date (handled by showEndDate logic)
|
||||
} else {
|
||||
// Dragged from week/month view grid: keep allday=false to show time fields, trigger 4 fields display
|
||||
setHasEndDateChanged(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -493,6 +516,7 @@ function EventPopover({
|
||||
setBusy("OPAQUE");
|
||||
setHasVideoConference(false);
|
||||
setMeetingLink(null);
|
||||
setHasEndDateChanged(false);
|
||||
}
|
||||
|
||||
if (!isCreatingNew) {
|
||||
|
||||
Reference in New Issue
Block a user