1 | var __assign = (this && this.__assign) || function () {
|
2 | __assign = Object.assign || function(t) {
|
3 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4 | s = arguments[i];
|
5 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6 | t[p] = s[p];
|
7 | }
|
8 | return t;
|
9 | };
|
10 | return __assign.apply(this, arguments);
|
11 | };
|
12 | var __spreadArrays = (this && this.__spreadArrays) || function () {
|
13 | for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
14 | for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
15 | for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
16 | r[k] = a[j];
|
17 | return r;
|
18 | };
|
19 | export var DAYS_OF_WEEK;
|
20 | (function (DAYS_OF_WEEK) {
|
21 | DAYS_OF_WEEK[DAYS_OF_WEEK["SUNDAY"] = 0] = "SUNDAY";
|
22 | DAYS_OF_WEEK[DAYS_OF_WEEK["MONDAY"] = 1] = "MONDAY";
|
23 | DAYS_OF_WEEK[DAYS_OF_WEEK["TUESDAY"] = 2] = "TUESDAY";
|
24 | DAYS_OF_WEEK[DAYS_OF_WEEK["WEDNESDAY"] = 3] = "WEDNESDAY";
|
25 | DAYS_OF_WEEK[DAYS_OF_WEEK["THURSDAY"] = 4] = "THURSDAY";
|
26 | DAYS_OF_WEEK[DAYS_OF_WEEK["FRIDAY"] = 5] = "FRIDAY";
|
27 | DAYS_OF_WEEK[DAYS_OF_WEEK["SATURDAY"] = 6] = "SATURDAY";
|
28 | })(DAYS_OF_WEEK || (DAYS_OF_WEEK = {}));
|
29 | var DEFAULT_WEEKEND_DAYS = [
|
30 | DAYS_OF_WEEK.SUNDAY,
|
31 | DAYS_OF_WEEK.SATURDAY,
|
32 | ];
|
33 | var DAYS_IN_WEEK = 7;
|
34 | var HOURS_IN_DAY = 24;
|
35 | var MINUTES_IN_HOUR = 60;
|
36 | export var SECONDS_IN_DAY = 60 * 60 * 24;
|
37 | function getExcludedSeconds(dateAdapter, _a) {
|
38 | var startDate = _a.startDate, seconds = _a.seconds, excluded = _a.excluded, precision = _a.precision;
|
39 | if (excluded.length < 1) {
|
40 | return 0;
|
41 | }
|
42 | var addSeconds = dateAdapter.addSeconds, getDay = dateAdapter.getDay, addDays = dateAdapter.addDays;
|
43 | var endDate = addSeconds(startDate, seconds - 1);
|
44 | var dayStart = getDay(startDate);
|
45 | var dayEnd = getDay(endDate);
|
46 | var result = 0;
|
47 | var current = startDate;
|
48 | var _loop_1 = function () {
|
49 | var day = getDay(current);
|
50 | if (excluded.some(function (excludedDay) { return excludedDay === day; })) {
|
51 | result += calculateExcludedSeconds(dateAdapter, {
|
52 | dayStart: dayStart,
|
53 | dayEnd: dayEnd,
|
54 | day: day,
|
55 | precision: precision,
|
56 | startDate: startDate,
|
57 | endDate: endDate,
|
58 | });
|
59 | }
|
60 | current = addDays(current, 1);
|
61 | };
|
62 | while (current < endDate) {
|
63 | _loop_1();
|
64 | }
|
65 | return result;
|
66 | }
|
67 | function calculateExcludedSeconds(dateAdapter, _a) {
|
68 | var precision = _a.precision, day = _a.day, dayStart = _a.dayStart, dayEnd = _a.dayEnd, startDate = _a.startDate, endDate = _a.endDate;
|
69 | var differenceInSeconds = dateAdapter.differenceInSeconds, endOfDay = dateAdapter.endOfDay, startOfDay = dateAdapter.startOfDay;
|
70 | if (precision === 'minutes') {
|
71 | if (day === dayStart) {
|
72 | return differenceInSeconds(endOfDay(startDate), startDate) + 1;
|
73 | }
|
74 | else if (day === dayEnd) {
|
75 | return differenceInSeconds(endDate, startOfDay(endDate)) + 1;
|
76 | }
|
77 | }
|
78 | return SECONDS_IN_DAY;
|
79 | }
|
80 | function getWeekViewEventSpan(dateAdapter, _a) {
|
81 | var event = _a.event, offset = _a.offset, startOfWeekDate = _a.startOfWeekDate, excluded = _a.excluded, precision = _a.precision, totalDaysInView = _a.totalDaysInView;
|
82 | var max = dateAdapter.max, differenceInSeconds = dateAdapter.differenceInSeconds, addDays = dateAdapter.addDays, endOfDay = dateAdapter.endOfDay, differenceInDays = dateAdapter.differenceInDays;
|
83 | var span = SECONDS_IN_DAY;
|
84 | var begin = max([event.start, startOfWeekDate]);
|
85 | if (event.end) {
|
86 | switch (precision) {
|
87 | case 'minutes':
|
88 | span = differenceInSeconds(event.end, begin);
|
89 | break;
|
90 | default:
|
91 | span =
|
92 | differenceInDays(addDays(endOfDay(event.end), 1), begin) *
|
93 | SECONDS_IN_DAY;
|
94 | break;
|
95 | }
|
96 | }
|
97 | var offsetSeconds = offset * SECONDS_IN_DAY;
|
98 | var totalLength = offsetSeconds + span;
|
99 |
|
100 |
|
101 | var secondsInView = totalDaysInView * SECONDS_IN_DAY;
|
102 | if (totalLength > secondsInView) {
|
103 | span = secondsInView - offsetSeconds;
|
104 | }
|
105 | span -= getExcludedSeconds(dateAdapter, {
|
106 | startDate: begin,
|
107 | seconds: span,
|
108 | excluded: excluded,
|
109 | precision: precision,
|
110 | });
|
111 | return span / SECONDS_IN_DAY;
|
112 | }
|
113 | function getWeekViewEventOffset(dateAdapter, _a) {
|
114 | var event = _a.event, startOfWeekDate = _a.startOfWeek, excluded = _a.excluded, precision = _a.precision;
|
115 | var differenceInDays = dateAdapter.differenceInDays, startOfDay = dateAdapter.startOfDay, differenceInSeconds = dateAdapter.differenceInSeconds;
|
116 | if (event.start < startOfWeekDate) {
|
117 | return 0;
|
118 | }
|
119 | var offset = 0;
|
120 | switch (precision) {
|
121 | case 'days':
|
122 | offset =
|
123 | differenceInDays(startOfDay(event.start), startOfWeekDate) *
|
124 | SECONDS_IN_DAY;
|
125 | break;
|
126 | case 'minutes':
|
127 | offset = differenceInSeconds(event.start, startOfWeekDate);
|
128 | break;
|
129 | }
|
130 | offset -= getExcludedSeconds(dateAdapter, {
|
131 | startDate: startOfWeekDate,
|
132 | seconds: offset,
|
133 | excluded: excluded,
|
134 | precision: precision,
|
135 | });
|
136 | return Math.abs(offset / SECONDS_IN_DAY);
|
137 | }
|
138 | function isEventIsPeriod(dateAdapter, _a) {
|
139 | var event = _a.event, periodStart = _a.periodStart, periodEnd = _a.periodEnd;
|
140 | var isSameSecond = dateAdapter.isSameSecond;
|
141 | var eventStart = event.start;
|
142 | var eventEnd = event.end || event.start;
|
143 | if (eventStart > periodStart && eventStart < periodEnd) {
|
144 | return true;
|
145 | }
|
146 | if (eventEnd > periodStart && eventEnd < periodEnd) {
|
147 | return true;
|
148 | }
|
149 | if (eventStart < periodStart && eventEnd > periodEnd) {
|
150 | return true;
|
151 | }
|
152 | if (isSameSecond(eventStart, periodStart) ||
|
153 | isSameSecond(eventStart, periodEnd)) {
|
154 | return true;
|
155 | }
|
156 | if (isSameSecond(eventEnd, periodStart) ||
|
157 | isSameSecond(eventEnd, periodEnd)) {
|
158 | return true;
|
159 | }
|
160 | return false;
|
161 | }
|
162 | export function getEventsInPeriod(dateAdapter, _a) {
|
163 | var events = _a.events, periodStart = _a.periodStart, periodEnd = _a.periodEnd;
|
164 | return events.filter(function (event) {
|
165 | return isEventIsPeriod(dateAdapter, { event: event, periodStart: periodStart, periodEnd: periodEnd });
|
166 | });
|
167 | }
|
168 | function getWeekDay(dateAdapter, _a) {
|
169 | var date = _a.date, _b = _a.weekendDays, weekendDays = _b === void 0 ? DEFAULT_WEEKEND_DAYS : _b;
|
170 | var startOfDay = dateAdapter.startOfDay, isSameDay = dateAdapter.isSameDay, getDay = dateAdapter.getDay;
|
171 | var today = startOfDay(new Date());
|
172 | var day = getDay(date);
|
173 | return {
|
174 | date: date,
|
175 | day: day,
|
176 | isPast: date < today,
|
177 | isToday: isSameDay(date, today),
|
178 | isFuture: date > today,
|
179 | isWeekend: weekendDays.indexOf(day) > -1,
|
180 | };
|
181 | }
|
182 | export function getWeekViewHeader(dateAdapter, _a) {
|
183 | var viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _b = _a.excluded, excluded = _b === void 0 ? [] : _b, weekendDays = _a.weekendDays, _c = _a.viewStart, viewStart = _c === void 0 ? dateAdapter.startOfWeek(viewDate, { weekStartsOn: weekStartsOn }) : _c, _d = _a.viewEnd, viewEnd = _d === void 0 ? dateAdapter.addDays(viewStart, DAYS_IN_WEEK) : _d;
|
184 | var addDays = dateAdapter.addDays, getDay = dateAdapter.getDay;
|
185 | var days = [];
|
186 | var date = viewStart;
|
187 | while (date < viewEnd) {
|
188 | if (!excluded.some(function (e) { return getDay(date) === e; })) {
|
189 | days.push(getWeekDay(dateAdapter, { date: date, weekendDays: weekendDays }));
|
190 | }
|
191 | date = addDays(date, 1);
|
192 | }
|
193 | return days;
|
194 | }
|
195 | export function getDifferenceInDaysWithExclusions(dateAdapter, _a) {
|
196 | var date1 = _a.date1, date2 = _a.date2, excluded = _a.excluded;
|
197 | var date = date1;
|
198 | var diff = 0;
|
199 | while (date < date2) {
|
200 | if (excluded.indexOf(dateAdapter.getDay(date)) === -1) {
|
201 | diff++;
|
202 | }
|
203 | date = dateAdapter.addDays(date, 1);
|
204 | }
|
205 | return diff;
|
206 | }
|
207 | export function getAllDayWeekEvents(dateAdapter, _a) {
|
208 | var _b = _a.events, events = _b === void 0 ? [] : _b, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.precision, precision = _d === void 0 ? 'days' : _d, _e = _a.absolutePositionedEvents, absolutePositionedEvents = _e === void 0 ? false : _e, viewStart = _a.viewStart, viewEnd = _a.viewEnd;
|
209 | viewStart = dateAdapter.startOfDay(viewStart);
|
210 | viewEnd = dateAdapter.endOfDay(viewEnd);
|
211 | var differenceInSeconds = dateAdapter.differenceInSeconds, differenceInDays = dateAdapter.differenceInDays;
|
212 | var maxRange = getDifferenceInDaysWithExclusions(dateAdapter, {
|
213 | date1: viewStart,
|
214 | date2: viewEnd,
|
215 | excluded: excluded,
|
216 | });
|
217 | var totalDaysInView = differenceInDays(viewEnd, viewStart) + 1;
|
218 | var eventsMapped = events
|
219 | .filter(function (event) { return event.allDay; })
|
220 | .map(function (event) {
|
221 | var offset = getWeekViewEventOffset(dateAdapter, {
|
222 | event: event,
|
223 | startOfWeek: viewStart,
|
224 | excluded: excluded,
|
225 | precision: precision,
|
226 | });
|
227 | var span = getWeekViewEventSpan(dateAdapter, {
|
228 | event: event,
|
229 | offset: offset,
|
230 | startOfWeekDate: viewStart,
|
231 | excluded: excluded,
|
232 | precision: precision,
|
233 | totalDaysInView: totalDaysInView,
|
234 | });
|
235 | return { event: event, offset: offset, span: span };
|
236 | })
|
237 | .filter(function (e) { return e.offset < maxRange; })
|
238 | .filter(function (e) { return e.span > 0; })
|
239 | .map(function (entry) { return ({
|
240 | event: entry.event,
|
241 | offset: entry.offset,
|
242 | span: entry.span,
|
243 | startsBeforeWeek: entry.event.start < viewStart,
|
244 | endsAfterWeek: (entry.event.end || entry.event.start) > viewEnd,
|
245 | }); })
|
246 | .sort(function (itemA, itemB) {
|
247 | var startSecondsDiff = differenceInSeconds(itemA.event.start, itemB.event.start);
|
248 | if (startSecondsDiff === 0) {
|
249 | return differenceInSeconds(itemB.event.end || itemB.event.start, itemA.event.end || itemA.event.start);
|
250 | }
|
251 | return startSecondsDiff;
|
252 | });
|
253 | var allDayEventRows = [];
|
254 | var allocatedEvents = [];
|
255 | eventsMapped.forEach(function (event, index) {
|
256 | if (allocatedEvents.indexOf(event) === -1) {
|
257 | allocatedEvents.push(event);
|
258 | var rowSpan_1 = event.span + event.offset;
|
259 | var otherRowEvents = eventsMapped
|
260 | .slice(index + 1)
|
261 | .filter(function (nextEvent) {
|
262 | if (nextEvent.offset >= rowSpan_1 &&
|
263 | rowSpan_1 + nextEvent.span <= totalDaysInView &&
|
264 | allocatedEvents.indexOf(nextEvent) === -1) {
|
265 | var nextEventOffset = nextEvent.offset - rowSpan_1;
|
266 | if (!absolutePositionedEvents) {
|
267 | nextEvent.offset = nextEventOffset;
|
268 | }
|
269 | rowSpan_1 += nextEvent.span + nextEventOffset;
|
270 | allocatedEvents.push(nextEvent);
|
271 | return true;
|
272 | }
|
273 | });
|
274 | var weekEvents = __spreadArrays([event], otherRowEvents);
|
275 | var id = weekEvents
|
276 | .filter(function (weekEvent) { return weekEvent.event.id; })
|
277 | .map(function (weekEvent) { return weekEvent.event.id; })
|
278 | .join('-');
|
279 | allDayEventRows.push(__assign({ row: weekEvents }, (id ? { id: id } : {})));
|
280 | }
|
281 | });
|
282 | return allDayEventRows;
|
283 | }
|
284 | function getWeekViewHourGrid(dateAdapter, _a) {
|
285 | var events = _a.events, viewDate = _a.viewDate, hourSegments = _a.hourSegments, hourDuration = _a.hourDuration, dayStart = _a.dayStart, dayEnd = _a.dayEnd, weekStartsOn = _a.weekStartsOn, excluded = _a.excluded, weekendDays = _a.weekendDays, segmentHeight = _a.segmentHeight, viewStart = _a.viewStart, viewEnd = _a.viewEnd, minimumEventHeight = _a.minimumEventHeight;
|
286 | var dayViewHourGrid = getDayViewHourGrid(dateAdapter, {
|
287 | viewDate: viewDate,
|
288 | hourSegments: hourSegments,
|
289 | hourDuration: hourDuration,
|
290 | dayStart: dayStart,
|
291 | dayEnd: dayEnd,
|
292 | });
|
293 | var weekDays = getWeekViewHeader(dateAdapter, {
|
294 | viewDate: viewDate,
|
295 | weekStartsOn: weekStartsOn,
|
296 | excluded: excluded,
|
297 | weekendDays: weekendDays,
|
298 | viewStart: viewStart,
|
299 | viewEnd: viewEnd,
|
300 | });
|
301 | var setHours = dateAdapter.setHours, setMinutes = dateAdapter.setMinutes, getHours = dateAdapter.getHours, getMinutes = dateAdapter.getMinutes;
|
302 | return weekDays.map(function (day) {
|
303 | var dayView = getDayView(dateAdapter, {
|
304 | events: events,
|
305 | viewDate: day.date,
|
306 | hourSegments: hourSegments,
|
307 | dayStart: dayStart,
|
308 | dayEnd: dayEnd,
|
309 | segmentHeight: segmentHeight,
|
310 | eventWidth: 1,
|
311 | hourDuration: hourDuration,
|
312 | minimumEventHeight: minimumEventHeight,
|
313 | });
|
314 | var hours = dayViewHourGrid.map(function (hour) {
|
315 | var segments = hour.segments.map(function (segment) {
|
316 | var date = setMinutes(setHours(day.date, getHours(segment.date)), getMinutes(segment.date));
|
317 | return __assign(__assign({}, segment), { date: date });
|
318 | });
|
319 | return __assign(__assign({}, hour), { segments: segments });
|
320 | });
|
321 | function getColumnCount(allEvents, prevOverlappingEvents) {
|
322 | var columnCount = Math.max.apply(Math, prevOverlappingEvents.map(function (iEvent) { return iEvent.left + 1; }));
|
323 | var nextOverlappingEvents = allEvents
|
324 | .filter(function (iEvent) { return iEvent.left >= columnCount; })
|
325 | .filter(function (iEvent) {
|
326 | return (getOverLappingWeekViewEvents(prevOverlappingEvents, iEvent.top, iEvent.top + iEvent.height).length > 0);
|
327 | });
|
328 | if (nextOverlappingEvents.length > 0) {
|
329 | return getColumnCount(allEvents, nextOverlappingEvents);
|
330 | }
|
331 | else {
|
332 | return columnCount;
|
333 | }
|
334 | }
|
335 | var mappedEvents = dayView.events.map(function (event) {
|
336 | var columnCount = getColumnCount(dayView.events, getOverLappingWeekViewEvents(dayView.events, event.top, event.top + event.height));
|
337 | var width = 100 / columnCount;
|
338 | return __assign(__assign({}, event), { left: event.left * width, width: width });
|
339 | });
|
340 | return {
|
341 | hours: hours,
|
342 | date: day.date,
|
343 | events: mappedEvents.map(function (event) {
|
344 | var overLappingEvents = getOverLappingWeekViewEvents(mappedEvents.filter(function (otherEvent) { return otherEvent.left > event.left; }), event.top, event.top + event.height);
|
345 | if (overLappingEvents.length > 0) {
|
346 | return __assign(__assign({}, event), { width: Math.min.apply(Math, overLappingEvents.map(function (otherEvent) { return otherEvent.left; })) - event.left });
|
347 | }
|
348 | return event;
|
349 | }),
|
350 | };
|
351 | });
|
352 | }
|
353 | export function getWeekView(dateAdapter, _a) {
|
354 | var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.precision, precision = _d === void 0 ? 'days' : _d, _e = _a.absolutePositionedEvents, absolutePositionedEvents = _e === void 0 ? false : _e, hourSegments = _a.hourSegments, hourDuration = _a.hourDuration, dayStart = _a.dayStart, dayEnd = _a.dayEnd, weekendDays = _a.weekendDays, segmentHeight = _a.segmentHeight, minimumEventHeight = _a.minimumEventHeight, _f = _a.viewStart, viewStart = _f === void 0 ? dateAdapter.startOfWeek(viewDate, { weekStartsOn: weekStartsOn }) : _f, _g = _a.viewEnd, viewEnd = _g === void 0 ? dateAdapter.endOfWeek(viewDate, { weekStartsOn: weekStartsOn }) : _g;
|
355 | if (!events) {
|
356 | events = [];
|
357 | }
|
358 | var startOfDay = dateAdapter.startOfDay, endOfDay = dateAdapter.endOfDay;
|
359 | viewStart = startOfDay(viewStart);
|
360 | viewEnd = endOfDay(viewEnd);
|
361 | var eventsInPeriod = getEventsInPeriod(dateAdapter, {
|
362 | events: events,
|
363 | periodStart: viewStart,
|
364 | periodEnd: viewEnd,
|
365 | });
|
366 | var header = getWeekViewHeader(dateAdapter, {
|
367 | viewDate: viewDate,
|
368 | weekStartsOn: weekStartsOn,
|
369 | excluded: excluded,
|
370 | weekendDays: weekendDays,
|
371 | viewStart: viewStart,
|
372 | viewEnd: viewEnd,
|
373 | });
|
374 | return {
|
375 | allDayEventRows: getAllDayWeekEvents(dateAdapter, {
|
376 | events: eventsInPeriod,
|
377 | excluded: excluded,
|
378 | precision: precision,
|
379 | absolutePositionedEvents: absolutePositionedEvents,
|
380 | viewStart: viewStart,
|
381 | viewEnd: viewEnd,
|
382 | }),
|
383 | period: {
|
384 | events: eventsInPeriod,
|
385 | start: header[0].date,
|
386 | end: endOfDay(header[header.length - 1].date),
|
387 | },
|
388 | hourColumns: getWeekViewHourGrid(dateAdapter, {
|
389 | events: events,
|
390 | viewDate: viewDate,
|
391 | hourSegments: hourSegments,
|
392 | hourDuration: hourDuration,
|
393 | dayStart: dayStart,
|
394 | dayEnd: dayEnd,
|
395 | weekStartsOn: weekStartsOn,
|
396 | excluded: excluded,
|
397 | weekendDays: weekendDays,
|
398 | segmentHeight: segmentHeight,
|
399 | viewStart: viewStart,
|
400 | viewEnd: viewEnd,
|
401 | minimumEventHeight: minimumEventHeight,
|
402 | }),
|
403 | };
|
404 | }
|
405 | export function getMonthView(dateAdapter, _a) {
|
406 | var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.viewStart, viewStart = _d === void 0 ? dateAdapter.startOfMonth(viewDate) : _d, _e = _a.viewEnd, viewEnd = _e === void 0 ? dateAdapter.endOfMonth(viewDate) : _e, weekendDays = _a.weekendDays;
|
407 | if (!events) {
|
408 | events = [];
|
409 | }
|
410 | var startOfWeek = dateAdapter.startOfWeek, endOfWeek = dateAdapter.endOfWeek, differenceInDays = dateAdapter.differenceInDays, startOfDay = dateAdapter.startOfDay, addHours = dateAdapter.addHours, endOfDay = dateAdapter.endOfDay, isSameMonth = dateAdapter.isSameMonth, getDay = dateAdapter.getDay, getMonth = dateAdapter.getMonth;
|
411 | var start = startOfWeek(viewStart, { weekStartsOn: weekStartsOn });
|
412 | var end = endOfWeek(viewEnd, { weekStartsOn: weekStartsOn });
|
413 | var eventsInMonth = getEventsInPeriod(dateAdapter, {
|
414 | events: events,
|
415 | periodStart: start,
|
416 | periodEnd: end,
|
417 | });
|
418 | var initialViewDays = [];
|
419 | var previousDate;
|
420 | var _loop_2 = function (i) {
|
421 |
|
422 | var date;
|
423 | if (previousDate) {
|
424 | date = startOfDay(addHours(previousDate, HOURS_IN_DAY));
|
425 | if (previousDate.getTime() === date.getTime()) {
|
426 |
|
427 |
|
428 | date = startOfDay(addHours(previousDate, HOURS_IN_DAY + 1));
|
429 | }
|
430 | previousDate = date;
|
431 | }
|
432 | else {
|
433 | date = previousDate = start;
|
434 | }
|
435 | if (!excluded.some(function (e) { return getDay(date) === e; })) {
|
436 | var day = getWeekDay(dateAdapter, {
|
437 | date: date,
|
438 | weekendDays: weekendDays,
|
439 | });
|
440 | var eventsInPeriod = getEventsInPeriod(dateAdapter, {
|
441 | events: eventsInMonth,
|
442 | periodStart: startOfDay(date),
|
443 | periodEnd: endOfDay(date),
|
444 | });
|
445 | day.inMonth = isSameMonth(date, viewDate);
|
446 | day.events = eventsInPeriod;
|
447 | day.badgeTotal = eventsInPeriod.length;
|
448 | initialViewDays.push(day);
|
449 | }
|
450 | };
|
451 | for (var i = 0; i < differenceInDays(end, start) + 1; i++) {
|
452 | _loop_2(i);
|
453 | }
|
454 | var days = [];
|
455 | var totalDaysVisibleInWeek = DAYS_IN_WEEK - excluded.length;
|
456 | if (totalDaysVisibleInWeek < DAYS_IN_WEEK) {
|
457 | for (var i = 0; i < initialViewDays.length; i += totalDaysVisibleInWeek) {
|
458 | var row = initialViewDays.slice(i, i + totalDaysVisibleInWeek);
|
459 | var isRowInMonth = row.some(function (day) { return viewStart <= day.date && day.date < viewEnd; });
|
460 | if (isRowInMonth) {
|
461 | days = __spreadArrays(days, row);
|
462 | }
|
463 | }
|
464 | }
|
465 | else {
|
466 | days = initialViewDays;
|
467 | }
|
468 | var rows = Math.floor(days.length / totalDaysVisibleInWeek);
|
469 | var rowOffsets = [];
|
470 | for (var i = 0; i < rows; i++) {
|
471 | rowOffsets.push(i * totalDaysVisibleInWeek);
|
472 | }
|
473 | return {
|
474 | rowOffsets: rowOffsets,
|
475 | totalDaysVisibleInWeek: totalDaysVisibleInWeek,
|
476 | days: days,
|
477 | period: {
|
478 | start: days[0].date,
|
479 | end: endOfDay(days[days.length - 1].date),
|
480 | events: eventsInMonth,
|
481 | },
|
482 | };
|
483 | }
|
484 | function getOverLappingWeekViewEvents(events, top, bottom) {
|
485 | return events.filter(function (previousEvent) {
|
486 | var previousEventTop = previousEvent.top;
|
487 | var previousEventBottom = previousEvent.top + previousEvent.height;
|
488 | if (top < previousEventBottom && previousEventBottom < bottom) {
|
489 | return true;
|
490 | }
|
491 | else if (top < previousEventTop && previousEventTop < bottom) {
|
492 | return true;
|
493 | }
|
494 | else if (previousEventTop <= top && bottom <= previousEventBottom) {
|
495 | return true;
|
496 | }
|
497 | return false;
|
498 | });
|
499 | }
|
500 | function getDayView(dateAdapter, _a) {
|
501 | var events = _a.events, viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd, eventWidth = _a.eventWidth, segmentHeight = _a.segmentHeight, hourDuration = _a.hourDuration, minimumEventHeight = _a.minimumEventHeight;
|
502 | var setMinutes = dateAdapter.setMinutes, setHours = dateAdapter.setHours, startOfDay = dateAdapter.startOfDay, startOfMinute = dateAdapter.startOfMinute, endOfDay = dateAdapter.endOfDay, differenceInMinutes = dateAdapter.differenceInMinutes;
|
503 | var startOfView = setMinutes(setHours(startOfDay(viewDate), sanitiseHours(dayStart.hour)), sanitiseMinutes(dayStart.minute));
|
504 | var endOfView = setMinutes(setHours(startOfMinute(endOfDay(viewDate)), sanitiseHours(dayEnd.hour)), sanitiseMinutes(dayEnd.minute));
|
505 | endOfView.setSeconds(59, 999);
|
506 | var previousDayEvents = [];
|
507 | var eventsInPeriod = getEventsInPeriod(dateAdapter, {
|
508 | events: events.filter(function (event) { return !event.allDay; }),
|
509 | periodStart: startOfView,
|
510 | periodEnd: endOfView,
|
511 | });
|
512 | var dayViewEvents = eventsInPeriod
|
513 | .sort(function (eventA, eventB) {
|
514 | return eventA.start.valueOf() - eventB.start.valueOf();
|
515 | })
|
516 | .map(function (event) {
|
517 | var eventStart = event.start;
|
518 | var eventEnd = event.end || eventStart;
|
519 | var startsBeforeDay = eventStart < startOfView;
|
520 | var endsAfterDay = eventEnd > endOfView;
|
521 | var hourHeightModifier = (hourSegments * segmentHeight) / (hourDuration || MINUTES_IN_HOUR);
|
522 | var top = 0;
|
523 | if (eventStart > startOfView) {
|
524 |
|
525 | var eventOffset = dateAdapter.getTimezoneOffset(eventStart);
|
526 | var startOffset = dateAdapter.getTimezoneOffset(startOfView);
|
527 | var diff = startOffset - eventOffset;
|
528 | top += differenceInMinutes(eventStart, startOfView) + diff;
|
529 | }
|
530 | top *= hourHeightModifier;
|
531 | top = Math.floor(top);
|
532 | var startDate = startsBeforeDay ? startOfView : eventStart;
|
533 | var endDate = endsAfterDay ? endOfView : eventEnd;
|
534 | var timezoneOffset = dateAdapter.getTimezoneOffset(startDate) -
|
535 | dateAdapter.getTimezoneOffset(endDate);
|
536 | var height = differenceInMinutes(endDate, startDate) + timezoneOffset;
|
537 | if (!event.end) {
|
538 | height = segmentHeight;
|
539 | }
|
540 | else {
|
541 | height *= hourHeightModifier;
|
542 | }
|
543 | if (minimumEventHeight && height < minimumEventHeight) {
|
544 | height = minimumEventHeight;
|
545 | }
|
546 | height = Math.floor(height);
|
547 | var bottom = top + height;
|
548 | var overlappingPreviousEvents = getOverLappingWeekViewEvents(previousDayEvents, top, bottom);
|
549 | var left = 0;
|
550 | while (overlappingPreviousEvents.some(function (previousEvent) { return previousEvent.left === left; })) {
|
551 | left += eventWidth;
|
552 | }
|
553 | var dayEvent = {
|
554 | event: event,
|
555 | height: height,
|
556 | width: eventWidth,
|
557 | top: top,
|
558 | left: left,
|
559 | startsBeforeDay: startsBeforeDay,
|
560 | endsAfterDay: endsAfterDay,
|
561 | };
|
562 | previousDayEvents.push(dayEvent);
|
563 | return dayEvent;
|
564 | });
|
565 | var width = Math.max.apply(Math, dayViewEvents.map(function (event) { return event.left + event.width; }));
|
566 | var allDayEvents = getEventsInPeriod(dateAdapter, {
|
567 | events: events.filter(function (event) { return event.allDay; }),
|
568 | periodStart: startOfDay(startOfView),
|
569 | periodEnd: endOfDay(endOfView),
|
570 | });
|
571 | return {
|
572 | events: dayViewEvents,
|
573 | width: width,
|
574 | allDayEvents: allDayEvents,
|
575 | period: {
|
576 | events: eventsInPeriod,
|
577 | start: startOfView,
|
578 | end: endOfView,
|
579 | },
|
580 | };
|
581 | }
|
582 | function sanitiseHours(hours) {
|
583 | return Math.max(Math.min(23, hours), 0);
|
584 | }
|
585 | function sanitiseMinutes(minutes) {
|
586 | return Math.max(Math.min(59, minutes), 0);
|
587 | }
|
588 | function getDayViewHourGrid(dateAdapter, _a) {
|
589 | var viewDate = _a.viewDate, hourSegments = _a.hourSegments, hourDuration = _a.hourDuration, dayStart = _a.dayStart, dayEnd = _a.dayEnd;
|
590 | var setMinutes = dateAdapter.setMinutes, setHours = dateAdapter.setHours, startOfDay = dateAdapter.startOfDay, startOfMinute = dateAdapter.startOfMinute, endOfDay = dateAdapter.endOfDay, addMinutes = dateAdapter.addMinutes, addHours = dateAdapter.addHours, addDays = dateAdapter.addDays;
|
591 | var hours = [];
|
592 | var startOfView = setMinutes(setHours(startOfDay(viewDate), sanitiseHours(dayStart.hour)), sanitiseMinutes(dayStart.minute));
|
593 | var endOfView = setMinutes(setHours(startOfMinute(endOfDay(viewDate)), sanitiseHours(dayEnd.hour)), sanitiseMinutes(dayEnd.minute));
|
594 | var segmentDuration = (hourDuration || MINUTES_IN_HOUR) / hourSegments;
|
595 | var startOfViewDay = startOfDay(viewDate);
|
596 | var endOfViewDay = endOfDay(viewDate);
|
597 | var dateAdjustment = function (d) { return d; };
|
598 |
|
599 | if (dateAdapter.getTimezoneOffset(startOfViewDay) !==
|
600 | dateAdapter.getTimezoneOffset(endOfViewDay)) {
|
601 | startOfViewDay = addDays(startOfViewDay, 1);
|
602 | startOfView = addDays(startOfView, 1);
|
603 | endOfView = addDays(endOfView, 1);
|
604 | dateAdjustment = function (d) { return addDays(d, -1); };
|
605 | }
|
606 | var dayDuration = hourDuration
|
607 | ? (HOURS_IN_DAY * 60) / hourDuration
|
608 | : MINUTES_IN_HOUR;
|
609 | for (var i = 0; i < dayDuration; i++) {
|
610 | var segments = [];
|
611 | for (var j = 0; j < hourSegments; j++) {
|
612 | var date = addMinutes(addMinutes(startOfView, i * (hourDuration || MINUTES_IN_HOUR)), j * segmentDuration);
|
613 | if (date >= startOfView && date < endOfView) {
|
614 | segments.push({
|
615 | date: dateAdjustment(date),
|
616 | displayDate: date,
|
617 | isStart: j === 0,
|
618 | });
|
619 | }
|
620 | }
|
621 | if (segments.length > 0) {
|
622 | hours.push({ segments: segments });
|
623 | }
|
624 | }
|
625 | return hours;
|
626 | }
|
627 | export var EventValidationErrorMessage;
|
628 | (function (EventValidationErrorMessage) {
|
629 | EventValidationErrorMessage["NotArray"] = "Events must be an array";
|
630 | EventValidationErrorMessage["StartPropertyMissing"] = "Event is missing the `start` property";
|
631 | EventValidationErrorMessage["StartPropertyNotDate"] = "Event `start` property should be a javascript date object. Do `new Date(event.start)` to fix it.";
|
632 | EventValidationErrorMessage["EndPropertyNotDate"] = "Event `end` property should be a javascript date object. Do `new Date(event.end)` to fix it.";
|
633 | EventValidationErrorMessage["EndsBeforeStart"] = "Event `start` property occurs after the `end`";
|
634 | })(EventValidationErrorMessage || (EventValidationErrorMessage = {}));
|
635 | export function validateEvents(events, log) {
|
636 | var isValid = true;
|
637 | function isError(msg, event) {
|
638 | log(msg, event);
|
639 | isValid = false;
|
640 | }
|
641 | if (!Array.isArray(events)) {
|
642 | log(EventValidationErrorMessage.NotArray, events);
|
643 | return false;
|
644 | }
|
645 | events.forEach(function (event) {
|
646 | if (!event.start) {
|
647 | isError(EventValidationErrorMessage.StartPropertyMissing, event);
|
648 | }
|
649 | else if (!(event.start instanceof Date)) {
|
650 | isError(EventValidationErrorMessage.StartPropertyNotDate, event);
|
651 | }
|
652 | if (event.end) {
|
653 | if (!(event.end instanceof Date)) {
|
654 | isError(EventValidationErrorMessage.EndPropertyNotDate, event);
|
655 | }
|
656 | if (event.start > event.end) {
|
657 | isError(EventValidationErrorMessage.EndsBeforeStart, event);
|
658 | }
|
659 | }
|
660 | });
|
661 | return isValid;
|
662 | }
|
663 |
|
\ | No newline at end of file |