Calendar: gracefully handle errors handling recurring events.

master
Tom Hacohen 4 years ago
parent 54c9735074
commit 1b50d197b1

@ -6,6 +6,8 @@ import { Calendar as BigCalendar, momentLocalizer, View } from "react-big-calend
import "react-big-calendar/lib/css/react-big-calendar.css"; import "react-big-calendar/lib/css/react-big-calendar.css";
import moment from "moment"; import moment from "moment";
import * as ICAL from "ical.js"; import * as ICAL from "ical.js";
import { store } from "../store";
import { appendError } from "../store/actions";
import { EventType } from "../pim-types"; import { EventType } from "../pim-types";
@ -55,21 +57,25 @@ class Calendar extends React.PureComponent<PropsType> {
this.props.entries.forEach((event) => { this.props.entries.forEach((event) => {
entries.push(event); entries.push(event);
if (event.isRecurring()) { try {
const recur = event.iterator(); if (event.isRecurring()) {
const recur = event.iterator();
let next = recur.next(); // Skip the first one
while ((next = recur.next())) { let next = recur.next(); // Skip the first one
if (next.compare(MAX_RECURRENCE_DATE) > 0) { while ((next = recur.next())) {
break; if (next.compare(MAX_RECURRENCE_DATE) > 0) {
break;
}
const shift = next.subtractDateTz(event.startDate);
const ev = event.clone();
ev.startDate.addDuration(shift);
ev.endDate.addDuration(shift);
entries.push(ev);
} }
const shift = next.subtractDateTz(event.startDate);
const ev = event.clone();
ev.startDate.addDuration(shift);
ev.endDate.addDuration(shift);
entries.push(ev);
} }
} catch (e) {
store.dispatch(appendError(e));
} }
}); });

Loading…
Cancel
Save