Skip to content

Commit d847523

Browse files
feat: event resize
1 parent 9dffe0e commit d847523

3 files changed

Lines changed: 21 additions & 22 deletions

File tree

examples/react/basic/src/index.tsx

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -463,22 +463,20 @@ function ScheduleView({
463463
const eventProps = calendar.getEventProps(event)
464464
const { style, isSplitEvent } = eventProps
465465

466-
const eventStartDate = event.start.split('T')[0]
467-
const eventEndDate = event.end.split('T')[0]
466+
const originalStart = event._originalStart ?? event.start
467+
const originalEnd = event._originalEnd ?? event.end
468+
const originalStartDate = originalStart.split('T')[0]
469+
const originalEndDate = originalEnd.split('T')[0]
468470
const segmentStartDate = eventProps.start.split('T')[0]
469471
const segmentEndDate = eventProps.end.split('T')[0]
470472

471-
// First segment: event starts on this day (exact match or same date)
472-
const isFirstSegment =
473-
event.start === eventProps.start ||
474-
eventStartDate === segmentStartDate
473+
// First segment: this segment's start date matches the original event's start date
474+
const isFirstSegment = originalStartDate === segmentStartDate
475475

476-
// Last segment: event ends on this day
477-
// For multi-day events, check if this segment's date matches the event's end date
476+
// Last segment: this segment's date matches the original event's end date
478477
const isLastSegment =
479-
event.end === eventProps.end ||
480-
eventEndDate === segmentEndDate ||
481-
eventEndDate === segmentStartDate
478+
originalEndDate === segmentEndDate ||
479+
originalEndDate === segmentStartDate
482480

483481
const isBeingResized =
484482
resizeState.isResizing && resizeState.eventId === event.id
@@ -593,13 +591,8 @@ function ScheduleView({
593591

594592
// Show bottom handle if:
595593
// 1. Not a split event (single day), OR
596-
// 2. This segment's date matches the event's end date (last segment)
597-
// Check if the event ends on this day by comparing the dayDate with eventEndDate
598-
const showBottomHandle =
599-
!isSplitEvent ||
600-
dayDate === eventEndDate ||
601-
eventEndDate === segmentStartDate ||
602-
eventEndDate === segmentEndDate
594+
// 2. This is the last segment (matches original event's end date)
595+
const showBottomHandle = !isSplitEvent || isLastSegment
603596

604597
// Check if this segment is being actively resized (original or new target)
605598
const isActivelyResized = isBeingResized && previewStyle !== null
@@ -630,8 +623,8 @@ function ScheduleView({
630623
{...getResizeHandleProps(
631624
event.id,
632625
'top',
633-
event.start,
634-
event.end,
626+
event._originalStart ?? event.start,
627+
event._originalEnd ?? event.end,
635628
)}
636629
/>
637630
)}
@@ -655,8 +648,8 @@ function ScheduleView({
655648
{...getResizeHandleProps(
656649
event.id,
657650
'bottom',
658-
event.start,
659-
event.end,
651+
event._originalStart ?? event.start,
652+
event._originalEnd ?? event.end,
660653
)}
661654
/>
662655
)}

packages/time/src/calendar/splitMultiDayEvents.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export const splitMultiDayEvents = <
3333
...event,
3434
start: eventStart.toPlainDateTime().toString(),
3535
end: eventEnd.toPlainDateTime().toString(),
36+
_originalStart: event.start,
37+
_originalEnd: event.end,
3638
})
3739

3840
currentDay = startOfDay.add({ days: 1 })

packages/time/src/calendar/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export interface Event<TResource extends Resource = Resource> {
2323
end: string
2424
title: string
2525
resources?: Array<TResource>
26+
/** Original start time before splitting (only set on split segments of multi-day events) */
27+
_originalStart?: string
28+
/** Original end time before splitting (only set on split segments of multi-day events) */
29+
_originalEnd?: string
2630
}
2731

2832
export type Day<

0 commit comments

Comments
 (0)