|
1 | 1 | import { computed, ref, onUnmounted, type Ref, type ComputedRef } from 'vue'; |
2 | 2 | import type { Dayjs } from 'dayjs'; |
3 | 3 | import type { TimeEntry } from '@/packages/api/src'; |
4 | | -import { getDayJsInstance, getLocalizedDayJs } from '../utils/time'; |
5 | | -import { getUserTimezone } from '../utils/settings'; |
| 4 | +import { getLocalizedDayJs, getLocalizedDayJsFromMinutes } from '../utils/time'; |
6 | 5 | import type { CalendarSettings } from './calendarSettings'; |
7 | 6 | import type { CalendarEvent, DayEvent } from './calendarTypes'; |
8 | 7 | import { SLOT_HEIGHT, DRAG_THRESHOLD } from './calendarTypes'; |
@@ -67,8 +66,7 @@ export function useEventDrag(params: { |
67 | 66 | } |
68 | 67 |
|
69 | 68 | if (dayEvent.isClippedStart && originDay && ev.timeEntry.end) { |
70 | | - const dayjs = getDayJsInstance(); |
71 | | - const dayMidnight = dayjs(`${originDay}T00:00:00`).tz(getUserTimezone(), true); |
| 69 | + const dayMidnight = getLocalizedDayJsFromMinutes(originDay, 0); |
72 | 70 | const evStart = getLocalizedDayJs(ev.timeEntry.start); |
73 | 71 | const eventStartFromGridStart = evStart.diff(dayMidnight, 'minute') - s.startHour * 60; |
74 | 72 | const segmentTopMinutes = (dayEvent.top / SLOT_HEIGHT) * s.slotMinutes; |
@@ -154,13 +152,11 @@ export function useEventDrag(params: { |
154 | 152 | const lowerBound = startMin - 4 * 60; |
155 | 153 | const clampedMinutes = Math.max(lowerBound, Math.min(snappedMinutes, s.endHour * 60)); |
156 | 154 |
|
157 | | - const dayjs = getDayJsInstance(); |
158 | | - const originalSegmentStart = dayjs(`${savedOriginalDayStr}T00:00:00`) |
159 | | - .tz(getUserTimezone(), true) |
160 | | - .add(startMin + params.pixelsToMinutesFromMidnight(dragStartEventTop), 'minute'); |
161 | | - const newSegmentStart = dayjs(`${targetDateStr}T00:00:00`) |
162 | | - .tz(getUserTimezone(), true) |
163 | | - .add(clampedMinutes, 'minute'); |
| 155 | + const originalSegmentStart = getLocalizedDayJsFromMinutes( |
| 156 | + savedOriginalDayStr, |
| 157 | + startMin + params.pixelsToMinutesFromMidnight(dragStartEventTop) |
| 158 | + ); |
| 159 | + const newSegmentStart = getLocalizedDayJsFromMinutes(targetDateStr, clampedMinutes); |
164 | 160 | const deltaMs = newSegmentStart.diff(originalSegmentStart); |
165 | 161 |
|
166 | 162 | const origStart = getLocalizedDayJs(timeEntry.start); |
@@ -240,11 +236,14 @@ export function useEventDrag(params: { |
240 | 236 | } |
241 | 237 |
|
242 | 238 | // Multi-day: compute actual start/end datetimes, then clip per day |
243 | | - const dayjs = getDayJsInstance(); |
244 | | - const eventStartAbsolute = dayjs(`${dragCurrentDay.value}T00:00:00`) |
245 | | - .tz(getUserTimezone(), true) |
246 | | - .add(startMin + eventStartOnGrid, 'minute'); |
247 | | - const eventEndAbsolute = eventStartAbsolute.add(dragFullDurationMinutes, 'minute'); |
| 239 | + const eventStartAbsolute = getLocalizedDayJsFromMinutes( |
| 240 | + dragCurrentDay.value, |
| 241 | + startMin + eventStartOnGrid |
| 242 | + ); |
| 243 | + const eventEndAbsolute = getLocalizedDayJsFromMinutes( |
| 244 | + dragCurrentDay.value, |
| 245 | + startMin + eventStartOnGrid + dragFullDurationMinutes |
| 246 | + ); |
248 | 247 |
|
249 | 248 | const result: Record<string, Record<string, string>> = {}; |
250 | 249 |
|
|
0 commit comments