Event search (Ctrl+F), locale/RTL handling, weekday selector workday/weekend, refactored event handling, Firefox compatibility #3

Merged
LeoVasanko merged 17 commits from vol003 into main 2025-08-27 13:41:46 +01:00
Showing only changes of commit 85ce3678ed - Show all commits

View File

@ -84,27 +84,34 @@ export function createVirtualWeekManager({
} }
const dayEvents = [...storedEvents] const dayEvents = [...storedEvents]
for (const base of repeatingBases) { for (const base of repeatingBases) {
const baseEnd = toLocalString(
addDays(fromLocalString(base.startDate, DEFAULT_TZ), (base.days || 1) - 1),
DEFAULT_TZ,
)
if (dateStr >= base.startDate && dateStr <= baseEnd) {
dayEvents.push({ ...base, endDate: baseEnd, _recurrenceIndex: 0, _baseId: base.id })
continue
}
const spanDays = (base.days || 1) - 1 const spanDays = (base.days || 1) - 1
const currentDate = curDateObj const currentDate = curDateObj
let occurrenceFound = false const baseEnd = toLocalString(
for (let offset = 0; offset <= spanDays && !occurrenceFound; offset++) { addDays(fromLocalString(base.startDate, DEFAULT_TZ), spanDays),
DEFAULT_TZ,
)
for (let offset = 0; offset <= spanDays; offset++) {
const candidateStart = addDays(currentDate, -offset) const candidateStart = addDays(currentDate, -offset)
const candidateStartStr = toLocalString(candidateStart, DEFAULT_TZ) const candidateStartStr = toLocalString(candidateStart, DEFAULT_TZ)
if (candidateStartStr === base.startDate) {
if (dateStr >= base.startDate && dateStr <= baseEnd) {
if (!dayEvents.some((ev) => ev.id === base.id)) {
dayEvents.push({
...base,
endDate: baseEnd,
_recurrenceIndex: 0,
_baseId: base.id,
})
}
}
continue
}
const occurrenceIndex = getOccurrenceIndex(base, candidateStartStr, DEFAULT_TZ) const occurrenceIndex = getOccurrenceIndex(base, candidateStartStr, DEFAULT_TZ)
if (occurrenceIndex !== null) { if (occurrenceIndex === null) continue
const virtualEndDate = getVirtualOccurrenceEndDate(base, candidateStartStr, DEFAULT_TZ) const virtualEndDate = getVirtualOccurrenceEndDate(base, candidateStartStr, DEFAULT_TZ)
if (dateStr >= candidateStartStr && dateStr <= virtualEndDate) { if (dateStr < candidateStartStr || dateStr > virtualEndDate) continue
const virtualId = base.id + '_v_' + candidateStartStr const virtualId = base.id + '_v_' + candidateStartStr
const alreadyExists = dayEvents.some((ev) => ev.id === virtualId) if (!dayEvents.some((ev) => ev.id === virtualId)) {
if (!alreadyExists) {
dayEvents.push({ dayEvents.push({
...base, ...base,
id: virtualId, id: virtualId,
@ -114,9 +121,6 @@ export function createVirtualWeekManager({
_baseId: base.id, _baseId: base.id,
}) })
} }
occurrenceFound = true
}
}
} }
} }
return dayEvents return dayEvents
@ -323,31 +327,34 @@ export function createVirtualWeekManager({
} }
const dayEvents = [...storedEvents] const dayEvents = [...storedEvents]
for (const base of repeatingBases) { for (const base of repeatingBases) {
const baseEndStr = toLocalString(
addDays(fromLocalString(base.startDate, DEFAULT_TZ), (base.days || 1) - 1),
DEFAULT_TZ,
)
if (dateStr >= base.startDate && dateStr <= baseEndStr) {
dayEvents.push({ ...base, endDate: baseEndStr, _recurrenceIndex: 0, _baseId: base.id })
continue
}
const spanDays = (base.days || 1) - 1 const spanDays = (base.days || 1) - 1
const currentDate = fromLocalString(dateStr, DEFAULT_TZ) const currentDate = fromLocalString(dateStr, DEFAULT_TZ)
let occurrenceFound = false const baseEndStr = toLocalString(
for (let offset = 0; offset <= spanDays && !occurrenceFound; offset++) { addDays(fromLocalString(base.startDate, DEFAULT_TZ), spanDays),
const candidateStart = addDays(currentDate, -offset)
const candidateStartStr = toLocalString(candidateStart, DEFAULT_TZ)
const occurrenceIndex = getOccurrenceIndex(base, candidateStartStr, DEFAULT_TZ)
if (occurrenceIndex !== null) {
const virtualEndDate = getVirtualOccurrenceEndDate(
base,
candidateStartStr,
DEFAULT_TZ, DEFAULT_TZ,
) )
if (dateStr >= candidateStartStr && dateStr <= virtualEndDate) { for (let offset = 0; offset <= spanDays; offset++) {
const candidateStart = addDays(currentDate, -offset)
const candidateStartStr = toLocalString(candidateStart, DEFAULT_TZ)
if (candidateStartStr === base.startDate) {
if (dateStr >= base.startDate && dateStr <= baseEndStr) {
if (!dayEvents.some((ev) => ev.id === base.id)) {
dayEvents.push({
...base,
endDate: baseEndStr,
_recurrenceIndex: 0,
_baseId: base.id,
})
}
}
continue
}
const occurrenceIndex = getOccurrenceIndex(base, candidateStartStr, DEFAULT_TZ)
if (occurrenceIndex === null) continue
const virtualEndDate = getVirtualOccurrenceEndDate(base, candidateStartStr, DEFAULT_TZ)
if (dateStr < candidateStartStr || dateStr > virtualEndDate) continue
const virtualId = base.id + '_v_' + candidateStartStr const virtualId = base.id + '_v_' + candidateStartStr
const alreadyExists = dayEvents.some((ev) => ev.id === virtualId) if (!dayEvents.some((ev) => ev.id === virtualId)) {
if (!alreadyExists) {
dayEvents.push({ dayEvents.push({
...base, ...base,
id: virtualId, id: virtualId,
@ -357,9 +364,6 @@ export function createVirtualWeekManager({
_baseId: base.id, _baseId: base.id,
}) })
} }
occurrenceFound = true
}
}
} }
} }
day.events = dayEvents day.events = dayEvents