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
JavaScript
;
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;