Improved scrolling on month bar (fast drag scroll, per-month wheel scroll, glitches eliminated).

This commit is contained in:
2025-09-25 01:34:30 +00:00
parent ff1975a6a7
commit d5b6054fdd
2 changed files with 69 additions and 161 deletions
+23 -6
View File
@@ -1,9 +1,10 @@
<script setup>
import { ref, onMounted, onBeforeUnmount, computed, watch, nextTick } from 'vue'
import { ref, onMounted, onBeforeUnmount, computed, watch } from 'vue'
import { useCalendarStore } from '@/stores/CalendarStore'
import CalendarHeader from '@/components/CalendarHeader.vue'
import CalendarWeek from '@/components/CalendarWeek.vue'
import HeaderControls from '@/components/HeaderControls.vue'
import Jogwheel from '@/components/Jogwheel.vue'
import {
createScrollManager,
createWeekColumnScrollManager,
@@ -25,7 +26,9 @@ function openCreateEventDialog(eventData) {
// Capture baseline before dialog opens (new event creation flow)
try {
calendarStore.$history?._baselineIfNeeded?.(true)
} catch {}
} catch {
/* noop */
}
const selectionData = { startDate: eventData.startDate, dayCount: eventData.dayCount }
setTimeout(() => eventDialogRef.value?.openCreateDialog(selectionData), 30)
}
@@ -33,7 +36,9 @@ function openEditEventDialog(eventClickPayload) {
// Capture baseline before editing existing event
try {
calendarStore.$history?._baselineIfNeeded?.(true)
} catch {}
} catch {
/* noop */
}
eventDialogRef.value?.openEditDialog(eventClickPayload)
}
const viewport = ref(null)
@@ -207,7 +212,7 @@ watch(
calendarStore.config.holidays.state,
calendarStore.config.holidays.region,
],
(_newVals, _oldVals) => {
() => {
// If weeks already built, just refresh holiday info
if (visibleWeeks.value.length) {
refreshHolidays('config-change')
@@ -393,7 +398,9 @@ onBeforeUnmount(() => {
try {
rowProbeObserver.unobserve(rowProbe.value)
rowProbeObserver.disconnect()
} catch (e) {}
} catch {
/* noop */
}
}
document.removeEventListener('pointerlockchange', handlePointerLockChange)
})
@@ -430,7 +437,9 @@ function scrollToEventStart(startDate, smooth = true) {
const dateObj = fromLocalString(startDate, DEFAULT_TZ)
const weekIndex = getWeekIndex(dateObj)
scrollToWeekCentered(weekIndex, 'search-jump', smooth)
} catch {}
} catch {
/* noop */
}
}
function handleHeaderSearchPreview(result) {
if (!result) return
@@ -560,6 +569,14 @@ window.addEventListener('resize', () => {
</div>
</div>
</div>
<!-- Jogwheel overlay captures drag + wheel over month name column -->
<Jogwheel
:total-virtual-weeks="totalVirtualWeeks"
:row-height="rowHeight"
:viewport-height="viewportHeight"
:scroll-top="scrollTop"
@scroll-to="(v) => setScrollTop(v, 'jogwheel')"
/>
</div>
<EventDialog ref="eventDialogRef" :selection="{ startDate: null, dayCount: 0 }" />
</div>