Allow recurrent multi day events to overlap themselves.
This commit is contained in:
parent
6f8d9d7774
commit
85ce3678ed
@ -84,38 +84,42 @@ 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)
|
||||||
const occurrenceIndex = getOccurrenceIndex(base, candidateStartStr, DEFAULT_TZ)
|
if (candidateStartStr === base.startDate) {
|
||||||
if (occurrenceIndex !== null) {
|
if (dateStr >= base.startDate && dateStr <= baseEnd) {
|
||||||
const virtualEndDate = getVirtualOccurrenceEndDate(base, candidateStartStr, DEFAULT_TZ)
|
if (!dayEvents.some((ev) => ev.id === base.id)) {
|
||||||
if (dateStr >= candidateStartStr && dateStr <= virtualEndDate) {
|
|
||||||
const virtualId = base.id + '_v_' + candidateStartStr
|
|
||||||
const alreadyExists = dayEvents.some((ev) => ev.id === virtualId)
|
|
||||||
if (!alreadyExists) {
|
|
||||||
dayEvents.push({
|
dayEvents.push({
|
||||||
...base,
|
...base,
|
||||||
id: virtualId,
|
endDate: baseEnd,
|
||||||
startDate: candidateStartStr,
|
_recurrenceIndex: 0,
|
||||||
endDate: virtualEndDate,
|
|
||||||
_recurrenceIndex: occurrenceIndex,
|
|
||||||
_baseId: base.id,
|
_baseId: base.id,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
occurrenceFound = true
|
|
||||||
}
|
}
|
||||||
|
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
|
||||||
|
if (!dayEvents.some((ev) => ev.id === virtualId)) {
|
||||||
|
dayEvents.push({
|
||||||
|
...base,
|
||||||
|
id: virtualId,
|
||||||
|
startDate: candidateStartStr,
|
||||||
|
endDate: virtualEndDate,
|
||||||
|
_recurrenceIndex: occurrenceIndex,
|
||||||
|
_baseId: base.id,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,42 +327,42 @@ 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),
|
||||||
|
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)
|
||||||
const occurrenceIndex = getOccurrenceIndex(base, candidateStartStr, DEFAULT_TZ)
|
if (candidateStartStr === base.startDate) {
|
||||||
if (occurrenceIndex !== null) {
|
if (dateStr >= base.startDate && dateStr <= baseEndStr) {
|
||||||
const virtualEndDate = getVirtualOccurrenceEndDate(
|
if (!dayEvents.some((ev) => ev.id === base.id)) {
|
||||||
base,
|
|
||||||
candidateStartStr,
|
|
||||||
DEFAULT_TZ,
|
|
||||||
)
|
|
||||||
if (dateStr >= candidateStartStr && dateStr <= virtualEndDate) {
|
|
||||||
const virtualId = base.id + '_v_' + candidateStartStr
|
|
||||||
const alreadyExists = dayEvents.some((ev) => ev.id === virtualId)
|
|
||||||
if (!alreadyExists) {
|
|
||||||
dayEvents.push({
|
dayEvents.push({
|
||||||
...base,
|
...base,
|
||||||
id: virtualId,
|
endDate: baseEndStr,
|
||||||
startDate: candidateStartStr,
|
_recurrenceIndex: 0,
|
||||||
endDate: virtualEndDate,
|
|
||||||
_recurrenceIndex: occurrenceIndex,
|
|
||||||
_baseId: base.id,
|
_baseId: base.id,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
occurrenceFound = true
|
|
||||||
}
|
}
|
||||||
|
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
|
||||||
|
if (!dayEvents.some((ev) => ev.id === virtualId)) {
|
||||||
|
dayEvents.push({
|
||||||
|
...base,
|
||||||
|
id: virtualId,
|
||||||
|
startDate: candidateStartStr,
|
||||||
|
endDate: virtualEndDate,
|
||||||
|
_recurrenceIndex: occurrenceIndex,
|
||||||
|
_baseId: base.id,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user