UNPKG

react-calendar-full

Version:

A full-featured React calendar component with event scheduling and monthly, weekly, and daily views.

61 lines (60 loc) 1.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CalendarEventStore = void 0; const date_1 = require("./utils/date"); class CalendarEventStore { events = []; addListeners = []; updateListeners = []; deleteListeners = []; constructor(events) { this.events = events; } add(event) { this.events = [...this.events, event]; this.notify(this.addListeners, event); } addOrUpdate(event) { if (event.id == null) { event.id = Math.max(...this.events.map((event) => event.id || 0)) + 1; this.add(event); } else { const index = this.events.findIndex((e) => e.id === event.id); if (index !== -1) { this.events[index] = event; this.notify(this.updateListeners, event); } else { this.add(event); } } } delete(eventId) { const event = this.events.find((event) => event.id !== eventId); this.events = this.events.filter((event) => event.id !== eventId); if (event) { this.notify(this.deleteListeners, event); } } eventsForDate(date) { return this.events.filter((event) => { const eventDate = new Date(event.date + 'T00:00'); return (0, date_1.areDatesEqual)(eventDate, date); }); } onAdd(listener) { this.addListeners.push(listener); } onUpdate(listener) { this.updateListeners.push(listener); } onDelete(listener) { this.deleteListeners.push(listener); } notify(listeners, item) { listeners.forEach((listener) => listener(item)); } } exports.CalendarEventStore = CalendarEventStore; exports.default = CalendarEventStore;