Handle all day events in calendar

This commit is contained in:
Bettenbuk Zoltan 2018-10-01 16:40:46 +02:00 committed by Saúl Ibarra Corretgé
parent df55448a2c
commit 61456b0d99
1 changed files with 22 additions and 2 deletions

View File

@ -7,6 +7,25 @@ import { APP_LINK_SCHEME, parseURIString } from '../base/util';
import { MAX_LIST_LENGTH } from './constants';
const logger = require('jitsi-meet-logger').getLogger(__filename);
const ALLDAY_EVENT_LENGTH = 23 * 60 * 60 * 1000;
/**
* Returns true of the calendar entry is to be displayed in the app, false
* otherwise.
*
* @param {Object} entry - The calendar entry.
* @returns {boolean}
*/
function _isDisplayableCalendarEntry(entry) {
// Entries are displayable if:
// - Ends in the future (future or ongoing events)
// - Is not an all day event and there is only one attendee (these events
// are usually placeholder events that don't need to be shown.)
return entry.endDate > Date.now()
&& !((entry.allDay
|| entry.endDate - entry.startDate > ALLDAY_EVENT_LENGTH)
&& (!entry.attendees || entry.attendees.length < 2));
}
/**
* Updates the calendar entries in redux when new list is received. The feature
@ -29,13 +48,12 @@ export function _updateCalendarEntries(events: Array<Object>) {
// eslint-disable-next-line no-invalid-this
const { dispatch, getState } = this;
const knownDomains = getState()['features/base/known-domains'];
const now = Date.now();
const entryMap = new Map();
for (const event of events) {
const entry = _parseCalendarEntry(event, knownDomains);
if (entry && entry.endDate > now) {
if (entry && _isDisplayableCalendarEntry(entry)) {
// As was stated above, we don't display subsequent occurrences of
// recurring events, and the repetitions of events coming from
// multiple calendars.
@ -111,6 +129,8 @@ function _parseCalendarEntry(event, knownDomains) {
);
} else {
return {
allDay: event.allDay,
attendees: event.attendees,
calendarId: event.calendarId,
endDate,
id: event.id,