Major refactorering to get a hold on all these events

This commit is contained in:
Janus Knudsen 2025-08-09 00:31:44 +02:00
parent 2a766cf685
commit 59b3c64c55
18 changed files with 1901 additions and 357 deletions

View file

@ -2,14 +2,14 @@
import { eventBus } from '../core/EventBus';
import { EventTypes } from '../constants/EventTypes';
import { CalendarEvent, EventData, Period, EventType } from '../types/CalendarTypes';
import { CalendarEvent, EventData, Period } from '../types/CalendarTypes';
/**
* Event creation data interface
*/
interface EventCreateData {
title: string;
type: EventType;
type: string;
start: string;
end: string;
allDay: boolean;
@ -67,7 +67,7 @@ export class DataManager {
* Fetch events for a specific period
*/
async fetchEventsForPeriod(period: Period): Promise<EventData> {
const cacheKey = `${period.start}-${period.end}-${period.view}`;
const cacheKey = `${period.start}-${period.end}`;
// Check cache first
if (this.cache.has(cacheKey)) {
@ -90,8 +90,7 @@ export class DataManager {
// Real API call
const params = new URLSearchParams({
start: period.start,
end: period.end,
view: period.view
end: period.end
});
const response = await fetch(`${this.baseUrl}?${params}`);
@ -275,8 +274,8 @@ export class DataManager {
*/
private getMockData(period: Period): EventData {
const events: CalendarEvent[] = [];
const types: EventType[] = ['meeting', 'meal', 'work', 'milestone'];
const titles: Record<EventType, string[]> = {
const types: string[] = ['meeting', 'meal', 'work', 'milestone'];
const titles: Record<string, string[]> = {
meeting: ['Team Standup', 'Client Meeting', 'Project Review', 'Sprint Planning', 'Design Review'],
meal: ['Breakfast', 'Lunch', 'Coffee Break', 'Dinner'],
work: ['Deep Work Session', 'Code Review', 'Documentation', 'Testing'],
@ -296,7 +295,7 @@ export class DataManager {
if (isWeekend) {
// Maybe one or two events on weekends
if (Math.random() > 0.7) {
const type: EventType = 'meal';
const type: string = 'meal';
const title = titles[type][Math.floor(Math.random() * titles[type].length)];
const hour = 12 + Math.floor(Math.random() * 4);
@ -358,10 +357,11 @@ export class DataManager {
}
}
// Add a multi-day event
if (period.view === 'week') {
// Add a multi-day event if period spans multiple days
const daysDiff = Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));
if (daysDiff > 1) {
const midWeek = new Date(startDate);
midWeek.setDate(midWeek.getDate() + 2);
midWeek.setDate(midWeek.getDate() + Math.min(2, daysDiff - 1));
events.push({
id: `evt-${events.length + 1}`,
@ -379,7 +379,6 @@ export class DataManager {
meta: {
start: period.start,
end: period.end,
view: period.view,
total: events.length
}
};