UNPKG

scheduler-react

Version:

A scheduler and resource planning component built for React

1,059 lines (977 loc) 49.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); var _rrule = require('rrule'); var _config = require('./config'); var _config2 = _interopRequireDefault(_config); var _behaviors = require('./behaviors'); var _behaviors2 = _interopRequireDefault(_behaviors); var _index = require('./index'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var SchedulerData = function () { function SchedulerData() { var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _moment2.default)().format(_index.DATE_FORMAT); var viewType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _index.ViewTypes.Week; var showAgenda = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isEventPerspective = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var newConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined; var newBehaviors = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined; var localeMoment = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined; _classCallCheck(this, SchedulerData); this.resources = []; this.events = []; this.eventGroups = []; this.eventGroupsAutoGenerated = true; this.viewType = viewType; this.cellUnit = viewType === _index.ViewTypes.Day ? _index.CellUnits.Hour : _index.CellUnits.Day; this.showAgenda = showAgenda; this.isEventPerspective = isEventPerspective; this.resizing = false; this.scrollToSpecialMoment = false; this.documentWidth = 0; this.localeMoment = _moment2.default; if (!!localeMoment) this.localeMoment = localeMoment; this.config = newConfig == undefined ? _config2.default : _extends({}, _config2.default, newConfig); this._validateMinuteStep(this.config.minuteStep); this.behaviors = newBehaviors == undefined ? _behaviors2.default : _extends({}, _behaviors2.default, newBehaviors); this._resolveDate(0, date); this._createHeaders(); this._createRenderData(); } _createClass(SchedulerData, [{ key: 'setLocaleMoment', value: function setLocaleMoment(localeMoment) { if (!!localeMoment) { this.localeMoment = localeMoment; this._createHeaders(); this._createRenderData(); } } }, { key: 'setResources', value: function setResources(resources) { this._validateResource(resources); this.resources = Array.from(new Set(resources)); this._createRenderData(); this.setScrollToSpecialMoment(true); } }, { key: 'setEventGroupsAutoGenerated', value: function setEventGroupsAutoGenerated(autoGenerated) { this.eventGroupsAutoGenerated = autoGenerated; } //optional }, { key: 'setEventGroups', value: function setEventGroups(eventGroups) { this._validateEventGroups(eventGroups); this.eventGroups = Array.from(new Set(eventGroups)); this.eventGroupsAutoGenerated = false; this._createRenderData(); this.setScrollToSpecialMoment(true); } }, { key: 'setMinuteStep', value: function setMinuteStep(minuteStep) { if (this.config.minuteStep !== minuteStep) { this._validateMinuteStep(minuteStep); this.config.minuteStep = minuteStep; this._createHeaders(); this._createRenderData(); } } }, { key: 'setBesidesWidth', value: function setBesidesWidth(besidesWidth) { if (besidesWidth >= 0) { this.config.besidesWidth = besidesWidth; } } }, { key: 'getMinuteStepsInHour', value: function getMinuteStepsInHour() { return 60 / this.config.minuteStep; } }, { key: 'addResource', value: function addResource(resource) { var existedResources = this.resources.filter(function (x) { return x.id === resource.id; }); if (existedResources.length === 0) { this.resources.push(resource); this._createRenderData(); } } }, { key: 'addEventGroup', value: function addEventGroup(eventGroup) { var existedEventGroups = this.eventGroups.filter(function (x) { return x.id === eventGroup.id; }); if (existedEventGroups.length === 0) { this.eventGroups.push(eventGroup); this._createRenderData(); } } }, { key: 'removeEventGroupById', value: function removeEventGroupById(eventGroupId) { var index = -1; this.eventGroups.forEach(function (item, idx) { if (item.id === eventGroupId) index = idx; }); if (index !== -1) this.eventGroups.splice(index, 1); } }, { key: 'containsEventGroupId', value: function containsEventGroupId(eventGroupId) { var index = -1; this.eventGroups.forEach(function (item, idx) { if (item.id === eventGroupId) index = idx; }); return index !== -1; } }, { key: 'setEvents', value: function setEvents(events) { this._validateEvents(events); this.events = Array.from(events); if (this.eventGroupsAutoGenerated) this._generateEventGroups(); if (this.config.recurringEventsEnabled) this._handleRecurringEvents(); this._createRenderData(); } }, { key: 'setScrollToSpecialMoment', value: function setScrollToSpecialMoment(scrollToSpecialMoment) { if (this.config.scrollToSpecialMomentEnabled) this.scrollToSpecialMoment = scrollToSpecialMoment; } }, { key: 'prev', value: function prev() { this._resolveDate(-1); this.events = []; this._createHeaders(); this._createRenderData(); } }, { key: 'next', value: function next() { this._resolveDate(1); this.events = []; this._createHeaders(); this._createRenderData(); } }, { key: 'setDate', value: function setDate() { var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _moment2.default)().format(_index.DATE_FORMAT); this._resolveDate(0, date); this.events = []; this._createHeaders(); this._createRenderData(); } }, { key: 'setViewType', value: function setViewType() { var viewType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _index.ViewTypes.Week; var showAgenda = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var isEventPerspective = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; this.showAgenda = showAgenda; this.isEventPerspective = isEventPerspective; this.cellUnit = _index.CellUnits.Day; if (this.viewType !== viewType) { var date = this.startDate; if (viewType === _index.ViewTypes.Custom || viewType === _index.ViewTypes.Custom1 || viewType === _index.ViewTypes.Custom2) { this.viewType = viewType; this._resolveDate(0, date); } else { if (this.viewType < viewType) { if (viewType === _index.ViewTypes.Week) { this.startDate = this.localeMoment(date).startOf('week').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('week').format(_index.DATE_FORMAT); } else if (viewType === _index.ViewTypes.Month) { this.startDate = this.localeMoment(date).startOf('month').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('month').format(_index.DATE_FORMAT); } else if (viewType === _index.ViewTypes.Quarter) { this.startDate = this.localeMoment(date).startOf('quarter').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('quarter').format(_index.DATE_FORMAT); } else if (viewType === _index.ViewTypes.Year) { this.startDate = this.localeMoment(date).startOf('year').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('year').format(_index.DATE_FORMAT); } } else { var start = this.localeMoment(this.startDate); var end = this.localeMoment(this.endDate).add(1, 'days'); if (this.selectDate !== undefined) { var selectDate = this.localeMoment(this.selectDate); if (selectDate >= start && selectDate < end) { date = this.selectDate; } } var now = this.localeMoment(); if (now >= start && now < end) { date = now.format(_index.DATE_FORMAT); } if (viewType === _index.ViewTypes.Day) { this.startDate = date; this.endDate = this.startDate; this.cellUnit = _index.CellUnits.Hour; } else if (viewType === _index.ViewTypes.Week) { this.startDate = this.localeMoment(date).startOf('week').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('week').format(_index.DATE_FORMAT); } else if (viewType === _index.ViewTypes.Month) { this.startDate = this.localeMoment(date).startOf('month').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('month').format(_index.DATE_FORMAT); } else if (viewType === _index.ViewTypes.Quarter) { this.startDate = this.localeMoment(date).startOf('quarter').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('quarter').format(_index.DATE_FORMAT); } } this.viewType = viewType; } this.events = []; this._createHeaders(); this._createRenderData(); this.setScrollToSpecialMoment(true); } } }, { key: 'setSchedulerMaxHeight', value: function setSchedulerMaxHeight(newSchedulerMaxHeight) { this.config.schedulerMaxHeight = newSchedulerMaxHeight; } }, { key: 'isSchedulerResponsive', value: function isSchedulerResponsive() { return !!this.config.schedulerWidth.endsWith && this.config.schedulerWidth.endsWith("%"); } }, { key: 'toggleExpandStatus', value: function toggleExpandStatus(slotId) { var slotEntered = false; var slotIndent = -1; var isExpanded = false; var expandedMap = new Map(); this.renderData.forEach(function (item) { if (slotEntered === false) { if (item.slotId === slotId && item.hasChildren) { slotEntered = true; isExpanded = !item.expanded; item.expanded = isExpanded; slotIndent = item.indent; expandedMap.set(item.indent, { expanded: item.expanded, render: item.render }); } } else { if (item.indent > slotIndent) { var expandStatus = expandedMap.get(item.indent - 1); item.render = expandStatus.expanded && expandStatus.render; if (item.hasChildren) { expandedMap.set(item.indent, { expanded: item.expanded, render: item.render }); } } else { slotEntered = false; } } }); } }, { key: 'isResourceViewResponsive', value: function isResourceViewResponsive() { var resourceTableWidth = this.getResourceTableConfigWidth(); return !!resourceTableWidth.endsWith && resourceTableWidth.endsWith("%"); } }, { key: 'isContentViewResponsive', value: function isContentViewResponsive() { var contentCellWidth = this.getContentCellConfigWidth(); return !!contentCellWidth.endsWith && contentCellWidth.endsWith("%"); } }, { key: 'getSchedulerWidth', value: function getSchedulerWidth() { var baseWidth = this.documentWidth - this.config.besidesWidth > 0 ? this.documentWidth - this.config.besidesWidth : 0; var minWidth = parseInt(baseWidth * Number(this.config.schedulerWidth.slice(0, -1)) / 100) <= this.config.schedulerMinWidth ? this.config.schedulerMinWidth : parseInt(baseWidth * Number(this.config.schedulerWidth.slice(0, -1)) / 100); return this.isSchedulerResponsive() ? minWidth : this.config.schedulerWidth; } }, { key: 'getResourceTableWidth', value: function getResourceTableWidth() { var resourceTableConfigWidth = this.getResourceTableConfigWidth(); var schedulerWidth = this.getSchedulerWidth(); var resourceTableWidth = this.isResourceViewResponsive() ? parseInt(schedulerWidth * Number(resourceTableConfigWidth.slice(0, -1)) / 100) : resourceTableConfigWidth; if (this.isSchedulerResponsive() && this.getContentTableWidth() + resourceTableWidth < schedulerWidth) resourceTableWidth = schedulerWidth - this.getContentTableWidth(); return resourceTableWidth; } }, { key: 'getContentCellWidth', value: function getContentCellWidth() { var contentCellConfigWidth = this.getContentCellConfigWidth(); var schedulerWidth = this.getSchedulerWidth(); return this.isContentViewResponsive() ? parseInt(schedulerWidth * Number(contentCellConfigWidth.slice(0, -1)) / 100) : contentCellConfigWidth; } }, { key: 'getContentTableWidth', value: function getContentTableWidth() { return this.headers.length * this.getContentCellWidth(); } }, { key: 'getScrollToSpecialMoment', value: function getScrollToSpecialMoment() { if (this.config.scrollToSpecialMomentEnabled) return this.scrollToSpecialMoment; return false; } }, { key: 'getSlots', value: function getSlots() { return this.isEventPerspective ? this.eventGroups : this.resources; } }, { key: 'getSlotById', value: function getSlotById(slotId) { var slots = this.getSlots(); var slot = undefined; slots.forEach(function (item) { if (item.id === slotId) slot = item; }); return slot; } }, { key: 'getResourceById', value: function getResourceById(resourceId) { var resource = undefined; this.resources.forEach(function (item) { if (item.id === resourceId) resource = item; }); return resource; } }, { key: 'getTableHeaderHeight', value: function getTableHeaderHeight() { return this.config.tableHeaderHeight; } }, { key: 'getSchedulerContentDesiredHeight', value: function getSchedulerContentDesiredHeight() { var height = 0; this.renderData.forEach(function (item) { if (item.render) height += item.rowHeight; }); return height; } }, { key: 'getCellMaxEvents', value: function getCellMaxEvents() { return this.viewType === _index.ViewTypes.Week ? this.config.weekMaxEvents : this.viewType === _index.ViewTypes.Day ? this.config.dayMaxEvents : this.viewType === _index.ViewTypes.Month ? this.config.monthMaxEvents : this.viewType === _index.ViewTypes.Year ? this.config.yearMaxEvents : this.viewType === _index.ViewTypes.Quarter ? this.config.quarterMaxEvents : this.config.customMaxEvents; } }, { key: 'getDateLabel', value: function getDateLabel() { var start = this.localeMoment(this.startDate); var end = this.localeMoment(this.endDate); var dateLabel = start.format('LL'); if (start != end) dateLabel = start.format('LL') + '-' + end.format('LL'); if (!!this.behaviors.getDateLabelFunc) dateLabel = this.behaviors.getDateLabelFunc(this, this.viewType, this.startDate, this.endDate); return dateLabel; } }, { key: 'addEvent', value: function addEvent(newEvent) { this._attachEvent(newEvent); if (this.eventGroupsAutoGenerated) this._generateEventGroups(); this._createRenderData(); } }, { key: 'updateEventStart', value: function updateEventStart(event, newStart) { this._detachEvent(event); event.start = newStart; this._attachEvent(event); this._createRenderData(); } }, { key: 'updateEventEnd', value: function updateEventEnd(event, newEnd) { event.end = newEnd; this._createRenderData(); } }, { key: 'moveEvent', value: function moveEvent(event, newSlotId, newSlotName, newStart, newEnd) { this._detachEvent(event); if (this.isEventPerspective) { event.groupId = newSlotId; event.groupName = newSlotName; } else event.resourceId = newSlotId; event.end = newEnd; event.start = newStart; this._attachEvent(event); this._createRenderData(); } }, { key: 'isEventInTimeWindow', value: function isEventInTimeWindow(eventStart, eventEnd, windowStart, windowEnd) { return eventStart < windowEnd && eventEnd > windowStart; } }, { key: 'removeEvent', value: function removeEvent(event) { var index = this.events.indexOf(event); if (index !== -1) { this.events.splice(index, 1); this._createRenderData(); } } }, { key: 'removeEventById', value: function removeEventById(eventId) { var index = -1; this.events.forEach(function (item, idx) { if (item.id === eventId) index = idx; }); if (index !== -1) { this.events.splice(index, 1); this._createRenderData(); } } }, { key: 'getResourceTableConfigWidth', value: function getResourceTableConfigWidth() { if (this.showAgenda) return this.config.agendaResourceTableWidth; return this.viewType === _index.ViewTypes.Week ? this.config.weekResourceTableWidth : this.viewType === _index.ViewTypes.Day ? this.config.dayResourceTableWidth : this.viewType === _index.ViewTypes.Month ? this.config.monthResourceTableWidth : this.viewType === _index.ViewTypes.Year ? this.config.yearResourceTableWidth : this.viewType === _index.ViewTypes.Quarter ? this.config.quarterResourceTableWidth : this.config.customResourceTableWidth; } }, { key: 'getContentCellConfigWidth', value: function getContentCellConfigWidth() { return this.viewType === _index.ViewTypes.Week ? this.config.weekCellWidth : this.viewType === _index.ViewTypes.Day ? this.config.dayCellWidth : this.viewType === _index.ViewTypes.Month ? this.config.monthCellWidth : this.viewType === _index.ViewTypes.Year ? this.config.yearCellWidth : this.viewType === _index.ViewTypes.Quarter ? this.config.quarterCellWidth : this.config.customCellWidth; } }, { key: '_setDocumentWidth', value: function _setDocumentWidth(documentWidth) { if (documentWidth >= 0) { this.documentWidth = documentWidth; } } }, { key: '_detachEvent', value: function _detachEvent(event) { var index = this.events.indexOf(event); if (index !== -1) this.events.splice(index, 1); } }, { key: '_attachEvent', value: function _attachEvent(event) { var _this = this; var pos = 0; var eventStart = this.localeMoment(event.start); this.events.forEach(function (item, index) { var start = _this.localeMoment(item.start); if (eventStart >= start) pos = index + 1; }); this.events.splice(pos, 0, event); } }, { key: '_handleRecurringEvents', value: function _handleRecurringEvents() { var _this2 = this; var recurringEvents = this.events.filter(function (x) { return !!x.rrule; }); recurringEvents.forEach(function (item) { _this2._detachEvent(item); }); recurringEvents.forEach(function (item) { var windowStart = _this2.localeMoment(_this2.startDate), windowEnd = _this2.localeMoment(_this2.endDate).add(1, 'days'), oldStart = _this2.localeMoment(item.start), oldEnd = _this2.localeMoment(item.end), rule = (0, _rrule.rrulestr)(item.rrule), oldDtstart = undefined, oldUntil = rule.origOptions.until || windowEnd.toDate(); if (!!rule.origOptions.dtstart) { oldDtstart = _this2.localeMoment(rule.origOptions.dtstart); } //rule.origOptions.dtstart = oldStart.toDate(); if (windowEnd < oldUntil) { rule.origOptions.until = windowEnd.toDate(); } //reload rule = (0, _rrule.rrulestr)(rule.toString()); if (item.exdates || item.exrule) { var rruleSet = new _rrule.RRuleSet(); rruleSet.rrule(rule); if (item.exrule) { rruleSet.exrule((0, _rrule.rrulestr)(item.exrule)); } if (item.exdates) { item.exdates.forEach(function (exdate) { rruleSet.exdate(_this2.localeMoment(exdate).toDate()); }); } rule = rruleSet; } var all = rule.all(); var newEvents = all.map(function (time, index) { return _extends({}, item, { recurringEventId: item.id, recurringEventStart: item.start, recurringEventEnd: item.end, id: item.id + '-' + index, start: rule.origOptions.tzid ? _this2.localeMoment.utc(time).utcOffset(_this2.localeMoment().utcOffset(), true).format(_index.DATETIME_FORMAT) : _this2.localeMoment(time).format(_index.DATETIME_FORMAT), end: rule.origOptions.tzid ? _this2.localeMoment.utc(time).utcOffset(_this2.localeMoment().utcOffset(), true).add(oldEnd.diff(oldStart), 'ms').add(_this2.localeMoment(oldUntil).utcOffset() - _this2.localeMoment(item.start).utcOffset(), "m").format(_index.DATETIME_FORMAT) : _this2.localeMoment(time).add(oldEnd.diff(oldStart), 'ms').format(_index.DATETIME_FORMAT) }); }); newEvents.forEach(function (newEvent) { var eventStart = _this2.localeMoment(newEvent.start), eventEnd = _this2.localeMoment(newEvent.end); if (_this2.isEventInTimeWindow(eventStart, eventEnd, windowStart, windowEnd) && (!oldDtstart || eventStart >= oldDtstart)) { _this2._attachEvent(newEvent); } }); }); } }, { key: '_resolveDate', value: function _resolveDate(num) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; if (date != undefined) this.selectDate = this.localeMoment(date).format(_index.DATE_FORMAT); if (this.viewType === _index.ViewTypes.Week) { this.startDate = date != undefined ? this.localeMoment(date).startOf('week').format(_index.DATE_FORMAT) : this.localeMoment(this.startDate).add(num, 'weeks').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('week').format(_index.DATE_FORMAT); } else if (this.viewType === _index.ViewTypes.Day) { this.startDate = date != undefined ? this.selectDate : this.localeMoment(this.startDate).add(num, 'days').format(_index.DATE_FORMAT); this.endDate = this.startDate; } else if (this.viewType === _index.ViewTypes.Month) { this.startDate = date != undefined ? this.localeMoment(date).startOf('month').format(_index.DATE_FORMAT) : this.localeMoment(this.startDate).add(num, 'months').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('month').format(_index.DATE_FORMAT); } else if (this.viewType === _index.ViewTypes.Quarter) { this.startDate = date != undefined ? this.localeMoment(date).startOf('quarter').format(_index.DATE_FORMAT) : this.localeMoment(this.startDate).add(num, 'quarters').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('quarter').format(_index.DATE_FORMAT); } else if (this.viewType === _index.ViewTypes.Year) { this.startDate = date != undefined ? this.localeMoment(date).startOf('year').format(_index.DATE_FORMAT) : this.localeMoment(this.startDate).add(num, 'years').format(_index.DATE_FORMAT); this.endDate = this.localeMoment(this.startDate).endOf('year').format(_index.DATE_FORMAT); } else if (this.viewType === _index.ViewTypes.Custom || this.viewType === _index.ViewTypes.Custom1 || this.viewType === _index.ViewTypes.Custom2) { if (this.behaviors.getCustomDateFunc != undefined) { var customDate = this.behaviors.getCustomDateFunc(this, num, date); this.startDate = customDate.startDate; this.endDate = customDate.endDate; if (!!customDate.cellUnit) this.cellUnit = customDate.cellUnit; } else { throw new Error('This is custom view type, set behaviors.getCustomDateFunc func to resolve the time window(startDate and endDate) yourself'); } } } }, { key: '_createHeaders', value: function _createHeaders() { var headers = [], start = this.localeMoment(this.startDate), end = this.localeMoment(this.endDate), header = start; if (this.showAgenda) { headers.push({ time: header.format(_index.DATETIME_FORMAT), nonWorkingTime: false }); } else { if (this.cellUnit === _index.CellUnits.Hour) { start = start.add(this.config.dayStartFrom, 'hours'); end = end.add(this.config.dayStopTo, 'hours'); header = start; while (header >= start && header <= end) { var minuteSteps = this.getMinuteStepsInHour(); for (var i = 0; i < minuteSteps; i++) { var hour = header.hour(); if (hour >= this.config.dayStartFrom && hour <= this.config.dayStopTo) { var time = header.format(_index.DATETIME_FORMAT); var nonWorkingTime = this.behaviors.isNonWorkingTimeFunc(this, time); var isFriday = this.behaviors.isFridayTimeFunc(this, time); headers.push({ time: time, nonWorkingTime: nonWorkingTime, isFriday: isFriday }); } header = header.add(this.config.minuteStep, 'minutes'); } } } else { while (header >= start && header <= end) { var _time = header.format(_index.DATETIME_FORMAT); var dayOfWeek = header.weekday(); if (this.config.displayWeekend || dayOfWeek !== 0 && dayOfWeek !== 6) { var _nonWorkingTime = this.behaviors.isNonWorkingTimeFunc(this, _time); var _isFriday = this.behaviors.isFridayTimeFunc(this, _time); headers.push({ time: _time, nonWorkingTime: _nonWorkingTime, isFriday: _isFriday }); } header = header.add(1, 'days'); } } } this.headers = headers; } }, { key: '_createInitHeaderEvents', value: function _createInitHeaderEvents(header) { var start = this.localeMoment(header.time), startValue = start.format(_index.DATETIME_FORMAT); var endValue = this.showAgenda ? this.viewType === _index.ViewTypes.Week ? start.add(1, 'weeks').format(_index.DATETIME_FORMAT) : this.viewType === _index.ViewTypes.Day ? start.add(1, 'days').format(_index.DATETIME_FORMAT) : this.viewType === _index.ViewTypes.Month ? start.add(1, 'months').format(_index.DATETIME_FORMAT) : this.viewType === _index.ViewTypes.Year ? start.add(1, 'years').format(_index.DATETIME_FORMAT) : this.viewType === _index.ViewTypes.Quarter ? start.add(1, 'quarters').format(_index.DATETIME_FORMAT) : this.localeMoment(this.endDate).add(1, 'days').format(_index.DATETIME_FORMAT) : this.cellUnit === _index.CellUnits.Hour ? start.add(this.config.minuteStep, 'minutes').format(_index.DATETIME_FORMAT) : start.add(1, 'days').format(_index.DATETIME_FORMAT); return { time: header.time, nonWorkingTime: header.nonWorkingTime, start: startValue, end: endValue, count: 0, addMore: 0, addMoreIndex: 0, events: [,,,] }; } }, { key: '_createHeaderEvent', value: function _createHeaderEvent(render, span, eventItem) { return { render: render, span: span, eventItem: eventItem }; } }, { key: '_getEventSlotId', value: function _getEventSlotId(event) { return this.isEventPerspective ? this._getEventGroupId(event) : event.resourceId; } }, { key: '_getEventGroupId', value: function _getEventGroupId(event) { return !!event.groupId ? event.groupId.toString() : event.id.toString(); } }, { key: '_getEventGroupName', value: function _getEventGroupName(event) { return !!event.groupName ? event.groupName : event.title; } }, { key: '_generateEventGroups', value: function _generateEventGroups() { var _this3 = this; var eventGroups = []; var set = new Set(); this.events.forEach(function (item) { var groupId = _this3._getEventGroupId(item); var groupName = _this3._getEventGroupName(item); if (!set.has(groupId)) { eventGroups.push({ id: groupId, name: groupName, state: item }); set.add(groupId); } }); this.eventGroups = eventGroups; } }, { key: '_createInitRenderData', value: function _createInitRenderData(isEventPerspective, eventGroups, resources, headers) { var _this4 = this; var slots = isEventPerspective ? eventGroups : resources; var slotTree = [], slotMap = new Map(); slots.forEach(function (slot) { var headerEvents = headers.map(function (header) { return _this4._createInitHeaderEvents(header); }); var slotRenderData = { slotId: slot.id, slotName: slot.name, slotAuthor: slot.author, slotColor: slot.bgColor, slotIssue: slot.issue, parentId: slot.parentId, groupOnly: slot.groupOnly, hasSummary: false, rowMaxCount: 0, rowHeight: _this4.config.nonAgendaSlotMinHeight !== 0 ? _this4.config.nonAgendaSlotMinHeight : _this4.config.eventItemLineHeight + 2, headerItems: headerEvents, indent: 0, hasChildren: false, expanded: true, render: true }; var id = slot.id; var value = undefined; if (slotMap.has(id)) { value = slotMap.get(id); value.data = slotRenderData; } else { value = { data: slotRenderData, children: [] }; slotMap.set(id, value); } var parentId = slot.parentId; if (!parentId || parentId === id) { slotTree.push(value); } else { var parentValue = undefined; if (slotMap.has(parentId)) { parentValue = slotMap.get(parentId); } else { parentValue = { data: undefined, children: [] }; slotMap.set(parentId, parentValue); } parentValue.children.push(value); } }); var slotStack = []; var i = void 0; for (i = slotTree.length - 1; i >= 0; i--) { slotStack.push(slotTree[i]); } var initRenderData = []; var currentNode = undefined; while (slotStack.length > 0) { currentNode = slotStack.pop(); if (currentNode.data.indent > 0) { currentNode.data.render = this.config.defaultExpanded; } if (currentNode.children.length > 0) { currentNode.data.hasChildren = true; currentNode.data.expanded = this.config.defaultExpanded; } initRenderData.push(currentNode.data); for (i = currentNode.children.length - 1; i >= 0; i--) { currentNode.children[i].data.indent = currentNode.data.indent + 1; slotStack.push(currentNode.children[i]); } } return initRenderData; } }, { key: '_getSpan', value: function _getSpan(startTime, endTime, headers) { if (this.showAgenda) return 1; var start = this.localeMoment(startTime), end = this.localeMoment(endTime), span = 0; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = headers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var header = _step.value; var spanStart = this.localeMoment(header.time), spanEnd = this.cellUnit === _index.CellUnits.Hour ? this.localeMoment(header.time).add(this.config.minuteStep, 'minutes') : this.localeMoment(header.time).add(1, 'days'); if (spanStart < end && spanEnd > start) { span++; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return span; } }, { key: '_validateResource', value: function _validateResource(resources) { if (Object.prototype.toString.call(resources) !== "[object Array]") { throw new Error('Resources should be Array object'); } resources.forEach(function (item, index) { if (item == undefined) { console.error('Resource undefined: ' + index); throw new Error('Resource undefined: ' + index); } if (item.id == undefined || item.name == undefined) { console.error('Resource property missed', index, item); throw new Error('Resource property undefined: ' + index); } }); } }, { key: '_validateEventGroups', value: function _validateEventGroups(eventGroups) { if (Object.prototype.toString.call(eventGroups) !== "[object Array]") { throw new Error('Event groups should be Array object'); } eventGroups.forEach(function (item, index) { if (item == undefined) { console.error('Event group undefined: ' + index); throw new Error('Event group undefined: ' + index); } if (item.id == undefined || item.name == undefined) { console.error('Event group property missed', index, item); throw new Error('Event group property undefined: ' + index); } }); } }, { key: '_validateEvents', value: function _validateEvents(events) { if (Object.prototype.toString.call(events) !== "[object Array]") { throw new Error('Events should be Array object'); } events.forEach(function (e, index) { if (e == undefined) { console.error('Event undefined: ' + index); throw new Error('Event undefined: ' + index); } if (e.id == undefined || e.resourceId == undefined || e.title == undefined || e.start == undefined || e.end == undefined) { console.error('Event property missed', index, e); throw new Error('Event property undefined: ' + index); } }); } }, { key: '_validateMinuteStep', value: function _validateMinuteStep(minuteStep) { if (60 % minuteStep !== 0) { console.error('Minute step is not set properly - 60 minutes must be divisible without remainder by this number'); throw new Error('Minute step is not set properly - 60 minutes must be divisible without remainder by this number'); } } }, { key: '_compare', value: function _compare(event1, event2) { var start1 = this.localeMoment(event1.start), start2 = this.localeMoment(event2.start); if (start1 !== start2) return start1 < start2 ? -1 : 1; var end1 = this.localeMoment(event1.end), end2 = this.localeMoment(event2.end); if (end1 !== end2) return end1 < end2 ? -1 : 1; return event1.id < event2.id ? -1 : 1; } }, { key: '_createRenderData', value: function _createRenderData() { var _this5 = this; var initRenderData = this._createInitRenderData(this.isEventPerspective, this.eventGroups, this.resources, this.headers); //this.events.sort(this._compare); var cellMaxEventsCount = this.getCellMaxEvents(); var cellMaxEventsCountValue = 30; this.events.forEach(function (item) { var resourceEventsList = initRenderData.filter(function (x) { return x.slotId === _this5._getEventSlotId(item); }); if (resourceEventsList.length > 0) { var resourceEvents = resourceEventsList[0]; var span = _this5._getSpan(item.start, item.end, _this5.headers); var eventStart = _this5.localeMoment(item.start), eventEnd = _this5.localeMoment(item.end); var pos = -1; resourceEvents.headerItems.forEach(function (header, index) { var headerStart = _this5.localeMoment(header.start), headerEnd = _this5.localeMoment(header.end); if (headerEnd > eventStart && headerStart < eventEnd) { header.count = header.count + 1; if (header.count > resourceEvents.rowMaxCount) { resourceEvents.rowMaxCount = header.count; var rowsCount = cellMaxEventsCount <= cellMaxEventsCountValue && resourceEvents.rowMaxCount > cellMaxEventsCount ? cellMaxEventsCount : resourceEvents.rowMaxCount; var newRowHeight = rowsCount * _this5.config.eventItemLineHeight + (_this5.config.creatable && _this5.config.checkConflict === false ? 20 : 2); if (newRowHeight > resourceEvents.rowHeight) resourceEvents.rowHeight = newRowHeight; } if (pos === -1) { var tmp = 0; while (header.events[tmp] !== undefined) { tmp++; }pos = tmp; } var render = headerStart <= eventStart || index === 0; if (render === false) { var previousHeader = resourceEvents.headerItems[index - 1]; var previousHeaderStart = _this5.localeMoment(previousHeader.start), previousHeaderEnd = _this5.localeMoment(previousHeader.end); if (previousHeaderEnd <= eventStart || previousHeaderStart >= eventEnd) render = true; } header.events[pos] = _this5._createHeaderEvent(render, span, item); } }); } }); if (cellMaxEventsCount <= cellMaxEventsCountValue || this.behaviors.getSummaryFunc !== undefined) { initRenderData.forEach(function (resourceEvents) { var hasSummary = false; resourceEvents.headerItems.forEach(function (headerItem) { if (cellMaxEventsCount <= cellMaxEventsCountValue) { var renderItemsCount = 0, addMoreIndex = 0, index = 0; while (index < cellMaxEventsCount - 1) { if (headerItem.events[index] !== undefined) { renderItemsCount++; addMoreIndex = index + 1; } index++; } if (headerItem.events[index] !== undefined) { if (renderItemsCount + 1 < headerItem.count) { headerItem.addMore = headerItem.count - renderItemsCount; headerItem.addMoreIndex = addMoreIndex; } } else { if (renderItemsCount < headerItem.count) { headerItem.addMore = headerItem.count - renderItemsCount; headerItem.addMoreIndex = addMoreIndex; } } } if (_this5.behaviors.getSummaryFunc !== undefined) { var events = []; headerItem.events.forEach(function (e) { if (!!e && !!e.eventItem) events.push(e.eventItem); }); headerItem.summary = _this5.behaviors.getSummaryFunc(_this5, events, resourceEvents.slotId, resourceEvents.slotName, headerItem.start, headerItem.end); if (!!headerItem.summary && headerItem.summary.text != undefined) hasSummary = true; } }); resourceEvents.hasSummary = hasSummary; if (hasSummary) { var rowsCount = cellMaxEventsCount <= cellMaxEventsCountValue && resourceEvents.rowMaxCount > cellMaxEventsCount ? cellMaxEventsCount : resourceEvents.rowMaxCount; var newRowHeight = (rowsCount + 1) * _this5.config.eventItemLineHeight + (_this5.config.creatable && _this5.config.checkConflict === false ? 20 : 2); if (newRowHeight > resourceEvents.rowHeight) resourceEvents.rowHeight = newRowHeight; } }); } this.renderData = initRenderData; } }, { key: '_startResizing', value: function _startResizing() { this.resizing = true; } }, { key: '_stopResizing', value: function _stopResizing() { this.resizing = false; } }, { key: '_isResizing', value: function _isResizing() { return this.resizing; } }]); return SchedulerData; }(); exports.default = SchedulerData;