Date cleanup / refactoring
This commit is contained in:
1 parent
cb0ac1eaf0
commit
e78ced2383
8 files changed
+244
-497
No files matched your search
@@ -4,7 +4,13 @@ import { ref, computed, watch, onMounted, onUnmounted, nextTick } from 'vue'
|
||||
import BaseDialog from './BaseDialog.vue'
|
||||
import WeekdaySelector from './WeekdaySelector.vue'
|
||||
import Numeric from './Numeric.vue'
|
||||
import { addDaysStr, getMondayOfISOWeek, fromLocalString, toLocalString, DEFAULT_TZ } from '@/utils/date'
|
||||
import {
|
||||
addDaysStr,
|
||||
getMondayOfISOWeek,
|
||||
fromLocalString,
|
||||
toLocalString,
|
||||
DEFAULT_TZ,
|
||||
} from '@/utils/date'
|
||||
import { addDays, addMonths } from 'date-fns'
|
||||
|
||||
const props = defineProps({
|
||||
@@ -318,9 +324,9 @@ function openEditDialog(payload) {
|
||||
// Compute occurrenceDate based on occurrenceIndex rather than parsing instanceId
|
||||
if (event.isRepeating) {
|
||||
if (event.repeat === 'weeks' && occurrenceIndex >= 0) {
|
||||
const pattern = event.repeatWeekdays || []
|
||||
const baseStart = fromLocalString(event.startDate, DEFAULT_TZ)
|
||||
const baseEnd = fromLocalString(event.endDate, DEFAULT_TZ)
|
||||
const pattern = event.repeatWeekdays || []
|
||||
const baseStart = fromLocalString(event.startDate, DEFAULT_TZ)
|
||||
const baseEnd = fromLocalString(event.endDate, DEFAULT_TZ)
|
||||
if (occurrenceIndex === 0) {
|
||||
occurrenceDate = baseStart
|
||||
weekday = baseStart.getDay()
|
||||
@@ -334,7 +340,7 @@ function openEditDialog(payload) {
|
||||
const diff = Math.floor((blk - baseBlockStart) / WEEK_MS)
|
||||
return diff % interval === 0
|
||||
}
|
||||
let cur = addDays(baseEnd, 1)
|
||||
let cur = addDays(baseEnd, 1)
|
||||
let found = 0 // number of repeat occurrences found so far
|
||||
let safety = 0
|
||||
while (found < occurrenceIndex && safety < 20000) {
|
||||
@@ -349,8 +355,8 @@ function openEditDialog(payload) {
|
||||
weekday = cur.getDay()
|
||||
}
|
||||
} else if (event.repeat === 'months' && occurrenceIndex >= 0) {
|
||||
const baseDate = fromLocalString(event.startDate, DEFAULT_TZ)
|
||||
occurrenceDate = addMonths(baseDate, occurrenceIndex)
|
||||
const baseDate = fromLocalString(event.startDate, DEFAULT_TZ)
|
||||
occurrenceDate = addMonths(baseDate, occurrenceIndex)
|
||||
}
|
||||
}
|
||||
dialogMode.value = 'edit'
|
||||
@@ -556,7 +562,7 @@ const formattedOccurrenceShort = computed(() => {
|
||||
const ev = calendarStore.getEventById(editingEventId.value)
|
||||
if (ev?.startDate) {
|
||||
try {
|
||||
return fromLocalString(ev.startDate, DEFAULT_TZ)
|
||||
return fromLocalString(ev.startDate, DEFAULT_TZ)
|
||||
.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })
|
||||
.replace(/, /, ' ')
|
||||
} catch {
|
||||
@@ -584,7 +590,7 @@ const headerDateShort = computed(() => {
|
||||
const ev = calendarStore.getEventById(editingEventId.value)
|
||||
if (ev?.startDate) {
|
||||
try {
|
||||
return fromLocalString(ev.startDate, DEFAULT_TZ)
|
||||
return fromLocalString(ev.startDate, DEFAULT_TZ)
|
||||
.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })
|
||||
.replace(/, /, ' ')
|
||||
} catch {
|
||||
@@ -616,16 +622,16 @@ const finalOccurrenceDate = computed(() => {
|
||||
// Convert to Monday-first index
|
||||
// We'll just check store pattern
|
||||
if (pattern[startWeekdaySun]) occs = 1
|
||||
let cursor = new Date(start)
|
||||
let cursor = new Date(start)
|
||||
while (occs < count && occs < 10000) {
|
||||
cursor = addDays(cursor, 1)
|
||||
cursor = addDays(cursor, 1)
|
||||
if (pattern[cursor.getDay()]) occs++
|
||||
}
|
||||
if (occs === count) return cursor
|
||||
return null
|
||||
} else if (uiDisplayFrequency.value === 'months') {
|
||||
const monthsToAdd = displayInterval.value * (count - 1)
|
||||
return addMonths(start, monthsToAdd)
|
||||
const monthsToAdd = displayInterval.value * (count - 1)
|
||||
return addMonths(start, monthsToAdd)
|
||||
} else if (uiDisplayFrequency.value === 'years') {
|
||||
const yearsToAdd = displayInterval.value * (count - 1)
|
||||
const d = new Date(start)
|
||||
|
||||
Reference in new issue
Block a user