chore: standardize chrono provider
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -38,9 +38,9 @@ export function daysDiff(a: Date, b: Date): number {
|
||||
* Check if an event spans multiple days
|
||||
*/
|
||||
export function isMultiDay(entity: any): boolean {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
const start = startOfDay(new Date(entity.data.startsOn));
|
||||
const end = entity.data?.endsOn ? startOfDay(new Date(entity.data.endsOn)) : start;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
const start = startOfDay(new Date(entity.properties.startsOn));
|
||||
const end = entity.properties?.endsOn ? startOfDay(new Date(entity.properties.endsOn)) : start;
|
||||
return daysDiff(start, end) > 0;
|
||||
}
|
||||
|
||||
@@ -48,10 +48,10 @@ export function isMultiDay(entity: any): boolean {
|
||||
* Check if an event is an all-day event (no specific time, or spans full day)
|
||||
*/
|
||||
export function isAllDay(entity: any): boolean {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
|
||||
// Explicit all-day flag
|
||||
if (entity.data?.allDay === true) return true;
|
||||
if (entity.properties?.timeless === true) return true;
|
||||
|
||||
// Multi-day events are treated as all-day in the days view
|
||||
if (isMultiDay(entity)) return true;
|
||||
@@ -63,9 +63,9 @@ export function isAllDay(entity: any): boolean {
|
||||
* Check if an event overlaps with a date range
|
||||
*/
|
||||
export function eventOverlapsRange(entity: any, rangeStart: Date, rangeEnd: Date): boolean {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
const eventStart = startOfDay(new Date(entity.data.startsOn));
|
||||
const eventEnd = entity.data?.endsOn ? startOfDay(new Date(entity.data.endsOn)) : eventStart;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
const eventStart = startOfDay(new Date(entity.properties.startsOn));
|
||||
const eventEnd = entity.properties?.endsOn ? startOfDay(new Date(entity.properties.endsOn)) : eventStart;
|
||||
return eventStart <= rangeEnd && eventEnd >= rangeStart;
|
||||
}
|
||||
|
||||
@@ -73,9 +73,9 @@ export function eventOverlapsRange(entity: any, rangeStart: Date, rangeEnd: Date
|
||||
* Check if an event occurs on a specific date
|
||||
*/
|
||||
export function eventOnDate(entity: any, date: Date): boolean {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
const eventStart = startOfDay(new Date(entity.data.startsOn));
|
||||
const eventEnd = entity.data?.endsOn ? startOfDay(new Date(entity.data.endsOn)) : eventStart;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
const eventStart = startOfDay(new Date(entity.properties.startsOn));
|
||||
const eventEnd = entity.properties?.endsOn ? startOfDay(new Date(entity.properties.endsOn)) : eventStart;
|
||||
const targetDate = startOfDay(date);
|
||||
return eventStart <= targetDate && eventEnd >= targetDate;
|
||||
}
|
||||
@@ -95,17 +95,17 @@ export function getMultiDaySegments(
|
||||
|
||||
// Filter multi-day/all-day events that overlap this range
|
||||
const multiDayEvents = events.filter(entity => {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
if (!isAllDay(entity)) return false;
|
||||
return eventOverlapsRange(entity, rangeStart, rangeEnd);
|
||||
});
|
||||
|
||||
// Sort: longer events first, then by start date
|
||||
multiDayEvents.sort((a, b) => {
|
||||
const aStart = new Date(a.data.startsOn);
|
||||
const aEnd = new Date(a.data.endsOn || a.data.startsOn);
|
||||
const bStart = new Date(b.data.startsOn);
|
||||
const bEnd = new Date(b.data.endsOn || b.data.startsOn);
|
||||
const aStart = new Date(a.properties.startsOn);
|
||||
const aEnd = new Date(a.properties.endsOn || a.properties.startsOn);
|
||||
const bStart = new Date(b.properties.startsOn);
|
||||
const bEnd = new Date(b.properties.endsOn || b.properties.startsOn);
|
||||
const aDuration = daysDiff(aStart, aEnd);
|
||||
const bDuration = daysDiff(bStart, bEnd);
|
||||
if (bDuration !== aDuration) return bDuration - aDuration;
|
||||
@@ -116,8 +116,8 @@ export function getMultiDaySegments(
|
||||
const lanes: boolean[][] = [];
|
||||
|
||||
for (const entity of multiDayEvents) {
|
||||
const eventStart = startOfDay(new Date(entity.data.startsOn));
|
||||
const eventEnd = entity.data?.endsOn ? startOfDay(new Date(entity.data.endsOn)) : eventStart;
|
||||
const eventStart = startOfDay(new Date(entity.properties.startsOn));
|
||||
const eventEnd = entity.properties?.endsOn ? startOfDay(new Date(entity.properties.endsOn)) : eventStart;
|
||||
|
||||
// Clamp to visible range
|
||||
const segStart = eventStart < rangeStart ? rangeStart : eventStart;
|
||||
@@ -173,9 +173,9 @@ export function getMultiDaySegments(
|
||||
*/
|
||||
export function getTimedEventsForDate(events: any[], date: Date): any[] {
|
||||
return events.filter(entity => {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
if (isAllDay(entity)) return false;
|
||||
const eventDate = startOfDay(new Date(entity.data.startsOn));
|
||||
const eventDate = startOfDay(new Date(entity.properties.startsOn));
|
||||
return eventDate.toDateString() === date.toDateString();
|
||||
});
|
||||
}
|
||||
@@ -185,9 +185,9 @@ export function getTimedEventsForDate(events: any[], date: Date): any[] {
|
||||
*/
|
||||
export function getSingleDayEventsForDate(events: any[], date: Date): any[] {
|
||||
return events.filter(entity => {
|
||||
if (!entity.data?.startsOn) return false;
|
||||
if (!entity.properties?.startsOn) return false;
|
||||
if (isMultiDay(entity)) return false;
|
||||
const eventDate = startOfDay(new Date(entity.data.startsOn));
|
||||
const eventDate = startOfDay(new Date(entity.properties.startsOn));
|
||||
return eventDate.toDateString() === date.toDateString();
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user