@syncfusion/ej2-schedule
Version:
Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.
740 lines (739 loc) • 38.4 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
/* eslint-disable @typescript-eslint/no-explicit-any */
import { EventHandler, formatUnit, isNullOrUndefined, createElement, addClass, append, prepend, remove, extend } from '@syncfusion/ej2-base';
import { ViewBase } from './view-base';
import { MonthEvent } from '../event-renderer/month';
import * as util from '../base/util';
import * as event from '../base/constant';
import * as cls from '../base/css-constant';
/**
* month view
*/
var Month = /** @class */ (function (_super) {
__extends(Month, _super);
function Month(parent) {
var _this = _super.call(this, parent) || this;
_this.dayNameFormat = 'wide';
_this.viewClass = 'e-month-view';
_this.isInverseTableSelect = false;
_this.monthEvent = null;
_this.monthDates = {};
return _this;
}
Month.prototype.addEventListener = function () {
this.parent.on(event.scrollUiUpdate, this.onScrollUIUpdate, this);
this.parent.on(event.dataReady, this.onDataReady, this);
this.parent.on(event.cellClick, this.onCellClick, this);
};
Month.prototype.removeEventListener = function () {
if (this.parent) {
this.parent.off(event.scrollUiUpdate, this.onScrollUIUpdate);
this.parent.off(event.dataReady, this.onDataReady);
this.parent.off(event.cellClick, this.onCellClick);
}
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Month.prototype.onDataReady = function (args) {
this.monthEvent = new MonthEvent(this.parent);
this.monthEvent.renderAppointments();
this.parent.notify(event.eventsLoaded, {});
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Month.prototype.onCellClick = function (event) { };
Month.prototype.onContentScroll = function (e) {
if (!this.skipPersistenceSave) {
this.parent.removeNewEventElement();
this.parent.notify(event.virtualScroll, e);
this.scrollTopPanel(e.target);
this.scrollLeftPanel(e.target);
this.parent.uiStateValues.top = e.target.scrollTop;
this.parent.uiStateValues.left = e.target.scrollLeft;
this.setPersistence();
}
};
Month.prototype.scrollLeftPanel = function (target) {
var leftPanel = this.getLeftPanelElement();
if (leftPanel) {
leftPanel.scrollTop = target.scrollTop;
}
};
Month.prototype.getLeftPanelElement = function () {
return this.element.querySelector('.' + cls.WEEK_NUMBER_WRAPPER_CLASS);
};
Month.prototype.onScrollUIUpdate = function (args) {
var headerHeight = this.getHeaderBarHeight();
var header = this.getDatesHeaderElement();
var content = this.getContentAreaElement();
var height = this.parent.element.offsetHeight - headerHeight - header.offsetHeight;
var leftPanel = this.getLeftPanelElement();
if (this.parent.height !== 'auto') {
this.setContentHeight(content, leftPanel, height);
}
var scrollBarWidth = util.getScrollBarWidth();
header.firstElementChild.style[args.cssProperties.rtlBorder] = '';
header.style[args.cssProperties.rtlPadding] = '';
if (content.offsetWidth - content.clientWidth > 0) {
header.firstElementChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';
header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';
}
else {
header.firstElementChild.style[args.cssProperties.border] = '';
header.style[args.cssProperties.padding] = '';
}
this.setColWidth(content);
if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
if (leftPanel) {
leftPanel.scrollTop = top_1;
}
content.scrollTop = top_1;
if (this.parent.uiStateValues.isInitial) {
this.scrollToSelectedDate();
this.parent.uiStateValues.isInitial = false;
}
else {
content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
args.scrollPosition.left;
}
}
this.retainScrollPosition();
};
Month.prototype.scrollToSelectedDate = function () {
var selectedDate = new Date(this.parent.selectedDate);
selectedDate.setHours(0, 0, 0, 0);
var headerCell = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date="'
+ selectedDate.getTime().toString() + '"]');
var content = this.getContentAreaElement();
if (!isNullOrUndefined(headerCell)) {
content.scrollLeft = !this.parent.enableRtl ?
headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);
}
else {
content.scrollLeft = 0;
}
if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
this.parent.uiStateValues.left = 0;
}
};
Month.prototype.setContentHeight = function (content, leftPanelElement, height) {
content.style.height = 'auto';
if (this.parent.currentView === 'Month') {
content.style.height = formatUnit(height);
}
if (leftPanelElement) {
if (this.parent.currentView === 'MonthAgenda') {
height = (this.parent.activeViewOptions.interval > 1) ?
this.getContentAreaElement().firstElementChild.offsetHeight :
this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight;
}
leftPanelElement.style.height = 'auto';
leftPanelElement.style.height = formatUnit(height - this.getScrollXIndent(content));
}
};
Month.prototype.generateColumnLevels = function () {
var colLevels = [];
var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);
if (this.parent.activeViewOptions.group.resources.length > 0) {
colLevels = this.parent.resourceBase.generateResourceLevels(level);
if (this.parent.currentView === 'MonthAgenda') {
colLevels = [level];
}
if (this.parent.uiStateValues.isGroupAdaptive && this.parent.resourceBase.lastResourceLevel.length > 0) {
var resourceLevel = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];
var levels_1 = this.getDateSlots(resourceLevel.renderDates, resourceLevel.workDays);
if (this.parent.activeViewOptions.group.byDate && this.parent.activeViewOptions.group.hideNonWorkingDays) {
var index = levels_1.findIndex(function (x, index) {
return index !== 0 && x.date.getDay() === levels_1[0].date.getDay();
});
levels_1 = index > -1 ? levels_1.slice(0, index) : levels_1;
}
colLevels = [levels_1];
}
}
else {
colLevels.push(level);
}
this.colLevels = colLevels;
return colLevels;
};
Month.prototype.getDateSlots = function (renderDates, workDays) {
var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : workDays.length;
var dateSlots = [];
var isCurrentMonth = this.isCurrentMonth(this.parent.selectedDate);
for (var col = 0; col < count; col++) {
var classList = [cls.HEADER_CELLS_CLASS];
var currentDateIndex = renderDates.slice(0, count).map(function (date) { return date.getDay(); });
if (isCurrentMonth && currentDateIndex.indexOf(this.parent.currentTimezoneDate.getDay()) === col) {
classList.push(cls.CURRENT_DAY_CLASS);
}
dateSlots.push({ date: renderDates[parseInt(col.toString(), 10)], type: 'monthDay', className: classList, colSpan: 1, workDays: workDays });
}
return dateSlots;
};
Month.prototype.getDayNameFormat = function () {
if (this.parent.isAdaptive || this.parent.activeViewOptions.group.resources.length > 0) {
return 'abbreviated';
}
return 'wide';
};
Month.prototype.renderLayout = function (type) {
this.dayNameFormat = this.getDayNameFormat();
this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));
var clsList = [this.viewClass];
clsList.push(type);
if (this.parent.activeViewOptions.group.byDate) {
clsList.push('e-by-date');
if (this.parent.currentView !== 'Month') {
this.parent.activeViewOptions.group.hideNonWorkingDays = false;
}
}
if (this.parent.activeViewOptions.allowVirtualScrolling && !this.parent.uiStateValues.isGroupAdaptive) {
clsList.push(cls.VIRTUAL_SCROLL_CLASS);
}
if (this.parent.rowAutoHeight && this.parent.eventSettings.ignoreWhitespace) {
clsList.push(cls.IGNORE_WHITESPACE);
}
addClass([this.element], clsList);
this.renderPanel(type);
this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));
this.element.querySelector('table').setAttribute('role', 'presentation');
this.colLevels = this.generateColumnLevels();
this.renderHeader();
this.renderContent();
var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;
if (this.parent.uiStateValues.isGroupAdaptive && !target.querySelector('.' + cls.RESOURCE_TOOLBAR_CONTAINER)) {
this.renderResourceMobileLayout();
}
this.parent.notify(event.contentReady, {});
if (this.parent.uiStateValues.isCustomMonth) {
this.parent.uiStateValues.isCustomMonth = false;
}
};
Month.prototype.refreshHeader = function () {
remove(this.element.querySelector('tbody tr'));
this.renderHeader();
this.parent.notify(event.contentReady, {});
var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);
var contentWrapper = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
if (dateHeader) {
dateHeader.scrollLeft = this.parent.uiStateValues.left;
}
if (contentWrapper) {
contentWrapper.scrollLeft = this.parent.uiStateValues.left;
}
};
Month.prototype.wireCellEvents = function (element) {
EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);
EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);
if (!this.parent.isAdaptive) {
EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
}
};
Month.prototype.renderHeader = function () {
var tr = createElement('tr');
this.renderLeftIndent(tr);
var dateTd = createElement('td');
dateTd.appendChild(this.renderDatesHeader());
tr.appendChild(dateTd);
prepend([tr], this.element.querySelector('tbody'));
};
Month.prototype.renderLeftIndent = function (tr) {
if (this.parent.activeViewOptions.showWeekNumber) {
tr.appendChild(createElement('td', { className: 'e-left-indent' }));
}
};
Month.prototype.renderContent = function () {
if (this.parent.activeViewOptions.group.resources.length > 0) {
this.parent.resourceBase.renderedResources = extend([], this.parent.resourceBase.lastResourceLevel, null, true);
}
var tr = createElement('tr');
if (this.parent.activeViewOptions.showWeekNumber) {
tr.appendChild(this.renderWeekNumberContent());
}
var workTd = createElement('td');
var levels = this.colLevels.slice(0);
if (this.parent.virtualScrollModule) {
this.resetColLevels();
}
var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });
var contentArea = this.renderContentArea();
if (this.parent.currentView === 'Month') {
wrap.appendChild(contentArea);
}
else {
var monthAgendaWrapper = createElement('div', { className: cls.TABLE_CONTAINER_CLASS });
monthAgendaWrapper.appendChild(contentArea);
wrap.appendChild(monthAgendaWrapper);
}
EventHandler.add(wrap, 'scroll', this.onContentScroll, this);
workTd.appendChild(wrap);
tr.appendChild(workTd);
if (this.parent.virtualScrollModule) {
this.colLevels = levels;
this.parent.virtualScrollModule.renderVirtualTrack(wrap);
}
this.element.querySelector('tbody').appendChild(tr);
this.renderAppointmentContainer();
};
Month.prototype.renderWeekNumberContent = function () {
var dateCol = this.renderDates.map(function (date) { return new Date(+date); });
var td = createElement('td');
var contentWrapper = createElement('div', { className: cls.WEEK_NUMBER_WRAPPER_CLASS });
td.appendChild(contentWrapper);
var contentWrapTable = this.createTableLayout();
contentWrapper.appendChild(contentWrapTable);
var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :
this.parent.activeViewOptions.workDays.length;
for (var i = 0, length_1 = (this.renderDates.length / noOfDays); i < length_1; i++) {
var dates = dateCol.splice(0, noOfDays);
var weekNumber = this.parent.getWeekNumberContent(dates);
contentWrapTable.querySelector('tbody').appendChild(this.createWeekNumberElement(weekNumber));
}
return td;
};
Month.prototype.renderAppointmentContainer = function () {
//Here needs to render mobile view appointment details on selected date
};
Month.prototype.renderDatesHeader = function () {
var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });
var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });
container.appendChild(wrap);
var table = this.createTableLayout();
if (this.parent.currentView === 'Month') {
var thead = createElement('thead');
thead.appendChild(createElement('tr'));
prepend([thead], table);
}
this.createColGroup(table, this.colLevels[this.colLevels.length - 1]);
var trEle = createElement('tr');
for (var i = 0; i < this.colLevels.length; i++) {
var level = this.colLevels[parseInt(i.toString(), 10)];
var ntr = trEle.cloneNode();
for (var j = 0; j < level.length; j++) {
var td = level[parseInt(j.toString(), 10)];
ntr.appendChild(this.createHeaderCell(td));
}
table.querySelector('tbody').appendChild(ntr);
}
wrap.appendChild(table);
return container;
};
Month.prototype.createHeaderCell = function (td) {
var tdEle = createElement('td');
this.addAttributes(td, tdEle);
if (td.type === 'monthDay') {
var ele = createElement('span', { innerHTML: util.capitalizeFirstWord(this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()], 'single') });
tdEle.appendChild(ele);
}
if (td.type === 'resourceHeader') {
this.setResourceHeaderContent(tdEle, td);
}
if (td.type === 'dateHeader') {
addClass([tdEle], cls.DATE_HEADER_CLASS);
tdEle.setAttribute('data-date', td.date.getTime().toString());
if (this.parent.activeViewOptions.dateHeaderTemplate) {
var cellArgs = { date: td.date, type: td.type };
var elementId = this.parent.element.id + '_';
var viewName = this.parent.activeViewOptions.dateHeaderTemplateName;
var templateId = elementId + viewName + 'dateHeaderTemplate';
var dateTemplate = [].slice.call(this.parent.getDateHeaderTemplate()(cellArgs, this.parent, 'dateHeaderTemplate', templateId, false, undefined, undefined, this.parent.root));
if (dateTemplate && dateTemplate.length) {
append(dateTemplate, tdEle);
}
}
else {
var ele = createElement('span', { className: cls.NAVIGATE_CLASS });
var skeleton = 'full';
var title = this.parent.globalize.formatDate(td.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });
ele.setAttribute('title', util.capitalizeFirstWord(title, 'multiple'));
var innerText = (this.parent.calendarUtil.isMonthStart(td.date) && !this.isCurrentDate(td.date) && !this.parent.isAdaptive) ?
this.parent.globalize.formatDate(td.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) :
this.parent.globalize.formatDate(td.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() });
ele.innerHTML = util.capitalizeFirstWord(innerText, 'single');
tdEle.appendChild(ele);
}
this.wireCellEvents(tdEle);
}
var args = { elementType: td.type, element: tdEle, date: td.date, groupIndex: td.groupIndex };
this.parent.trigger(event.renderCell, args);
return tdEle;
};
Month.prototype.getContentSlots = function () {
if (!(this.colLevels[this.colLevels.length - 1] && this.colLevels[this.colLevels.length - 1][0])) {
return [];
}
var slotDatas = [];
var prepareSlots = function (rowIndex, renderDate, resData, classList) {
var data = {
date: new Date(+renderDate), groupIndex: resData.groupIndex, workDays: resData.workDays,
type: 'monthCells', className: classList || [cls.WORK_CELLS_CLASS]
};
if (!slotDatas[parseInt(rowIndex.toString(), 10)]) {
slotDatas[parseInt(rowIndex.toString(), 10)] = [];
}
slotDatas[parseInt(rowIndex.toString(), 10)].push(data);
};
var includeResource = this.parent.currentView !== 'MonthAgenda' &&
this.parent.activeViewOptions.group.resources.length > 0;
if (includeResource && !this.parent.uiStateValues.isGroupAdaptive && !this.parent.activeViewOptions.group.byDate) {
for (var _i = 0, _a = this.colLevels[this.colLevels.length - 2]; _i < _a.length; _i++) {
var res = _a[_i];
var dates = res.renderDates.map(function (date) { return new Date(+date); });
var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : res.workDays.length;
for (var i = 0; i < (res.renderDates.length / count); i++) {
var colDates = dates.splice(0, count);
for (var _b = 0, colDates_1 = colDates; _b < colDates_1.length; _b++) {
var colDate = colDates_1[_b];
prepareSlots(i, colDate, res);
}
}
}
}
else {
var dates = this.renderDates.map(function (date) { return new Date(+date); });
var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH :
this.parent.activeViewOptions.workDays.length;
var level = this.colLevels.slice(0, 1)[0];
var startIndex = this.renderDates.map(Number).indexOf(+level[0].date);
for (var i = 0; i < (this.renderDates.length / count); i++) {
var colDates = dates.splice(0, count);
var k = startIndex;
var _loop_1 = function (j) {
var colDate = colDates[parseInt(k.toString(), 10)];
k++;
if (includeResource) {
var lastRow = this_1.colLevels[(this_1.colLevels.length - 1)];
var rowCount = lastRow.length / count;
var resourcesTd = lastRow.slice(0, rowCount);
if (this_1.parent.activeViewOptions.group.hideNonWorkingDays) {
resourcesTd = lastRow.filter(function (x) { return x.date.getDay() === colDate.getDay(); });
if (resourcesTd.length === 0) {
j = j - 1;
return out_j_1 = j, "continue";
}
}
for (var resIndex = 0; resIndex < resourcesTd.length; resIndex++) {
var clsList = void 0;
if (resIndex !== 0) {
clsList = [cls.WORK_CELLS_CLASS, cls.DISABLE_DATE];
}
prepareSlots(i, colDate, resourcesTd[parseInt(resIndex.toString(), 10)], clsList);
}
}
else {
prepareSlots(i, colDate, this_1.colLevels[this_1.colLevels.length - 1][0]);
}
out_j_1 = j;
};
var this_1 = this, out_j_1;
for (var j = startIndex; j < (this.colLevels[0].length + startIndex) && j < colDates.length; j++) {
_loop_1(j);
j = out_j_1;
}
}
}
return slotDatas;
};
Month.prototype.updateClassList = function (data) {
if (!this.isCustomMonth() && this.isOtherMonth(data.date)) {
data.className.push(cls.OTHERMONTH_CLASS);
}
if (!this.parent.isMinMaxDate(data.date)) {
data.className.push(cls.DISABLE_DATES);
}
this.updateSelectedCellClass(data);
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Month.prototype.updateSelectedCellClass = function (data) {
return;
};
Month.prototype.isOtherMonth = function (date) {
return date.getTime() < this.monthDates.start.getTime() || date.getTime() > this.monthDates.end.getTime();
};
Month.prototype.renderContentArea = function () {
var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);
this.setAriaAttributes(tbl);
this.addAutoHeightClass(tbl);
if (this.parent.currentView === 'TimelineMonth') {
this.createColGroup(tbl, this.colLevels[this.colLevels.length - 1]);
}
var monthDate = new Date(this.parent.selectedDate.getTime());
this.monthDates = {
start: this.parent.calendarUtil.firstDateOfMonth(monthDate),
end: this.parent.calendarUtil.lastDateOfMonth(util.addMonths(monthDate, this.parent.activeViewOptions.interval - 1))
};
var tBody = tbl.querySelector('tbody');
append(this.getContentRows(), tBody);
this.wireCellEvents(tBody);
return tbl;
};
Month.prototype.getContentRows = function () {
var trows = [];
var tr = createElement('tr');
var td = createElement('td');
var slotDatas = this.getContentSlots();
var isTimeline = this.parent.currentView === 'TimelineMonth';
var existingGroupIndices = isTimeline ? this.getGroupIndices() : [];
for (var row = 0; row < slotDatas.length; row++) {
if (existingGroupIndices.length > 0 &&
existingGroupIndices.indexOf(slotDatas[parseInt(row.toString(), 10)][0].groupIndex) > -1) {
continue;
}
var ntr = tr.cloneNode();
for (var col = 0; col < slotDatas[parseInt(row.toString(), 10)].length; col++) {
var ntd = this.createContentTd(slotDatas[parseInt(row.toString(), 10)][parseInt(col.toString(), 10)], td);
ntr.appendChild(ntd);
}
trows.push(ntr);
}
return trows;
};
Month.prototype.createContentTd = function (data, td) {
var ntd = td.cloneNode();
if (data.colSpan) {
ntd.setAttribute('colspan', data.colSpan.toString());
}
this.updateClassList(data);
var type = data.type;
if (data.className.indexOf(cls.RESOURCE_PARENT_CLASS) !== -1) {
data.className.push(cls.RESOURCE_GROUP_CELLS_CLASS);
type = 'resourceGroupCells';
}
if (this.parent.workHours.highlight && this.isWorkDay(data.date, data.workDays)) {
data.className.push(cls.WORKDAY_CLASS);
}
if (this.isCurrentDate(data.date)) {
data.className.push(cls.CURRENTDATE_CLASS);
}
addClass([ntd], data.className);
ntd.setAttribute('data-date', data.date.getTime().toString());
if (!isNullOrUndefined(data.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {
var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :
data.groupIndex;
ntd.setAttribute('data-group-index', '' + groupIndex);
}
this.renderDateHeaderElement(data, ntd);
if (this.parent.activeViewOptions.cellTemplate) {
var args_1 = { date: data.date, type: type, groupIndex: data.groupIndex };
var scheduleId = this.parent.element.id + '_';
var viewName = this.parent.activeViewOptions.cellTemplateName;
var templateId = scheduleId + viewName + 'cellTemplate';
var cellTemplate = [].slice.call(this.parent.getCellTemplate()(args_1, this.parent, 'cellTemplate', templateId, false, undefined, undefined, this.parent.root));
append(cellTemplate, ntd);
}
var args = { elementType: type, element: ntd, date: data.date, groupIndex: data.groupIndex };
this.parent.trigger(event.renderCell, args);
return ntd;
};
Month.prototype.renderDateHeaderElement = function (data, ntd) {
if (this.parent.currentView === 'TimelineMonth') {
return;
}
var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });
if (this.parent.activeViewOptions.cellHeaderTemplate) {
var args = { date: data.date, type: data.type, groupIndex: data.groupIndex };
var scheduleId = this.parent.element.id + '_';
var viewName = this.parent.activeViewOptions.cellHeaderTemplateName;
var templateId = scheduleId + viewName + 'cellHeaderTemplate';
var cellHeaderTemplate = [].slice.call(this.parent.getCellHeaderTemplate()(args, this.parent, 'cellHeaderTemplate', templateId, false, undefined, undefined, this.parent.root));
append(cellHeaderTemplate, dateHeader);
}
else {
var innerText = (this.parent.calendarUtil.isMonthStart(data.date) && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?
this.parent.globalize.formatDate(data.date, { format: 'MMM d', calendar: this.parent.getCalendarMode() }) :
this.parent.globalize.formatDate(data.date, { skeleton: 'd', calendar: this.parent.getCalendarMode() });
dateHeader.innerHTML = util.capitalizeFirstWord(innerText, 'single');
}
ntd.appendChild(dateHeader);
if (this.getModuleName() === 'month') {
addClass([dateHeader], cls.NAVIGATE_CLASS);
var skeleton = 'full';
var announcementText = this.parent.globalize.formatDate(data.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });
ntd.setAttribute('aria-label', announcementText);
}
};
Month.prototype.getMonthStart = function (currentDate) {
var useDisplayDate = this.parent.currentView === 'Month' && !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && !(this.parent.uiStateValues.isSwipeScroll) &&
(this.parent.uiStateValues.isCustomMonth || this.isCustomRange());
var date = useDisplayDate ? this.parent.activeViewOptions.displayDate : !(this.parent.uiStateValues.isCustomMonth ||
(!this.parent.uiStateValues.isSwipeScroll && this.isCustomRange())) && this.isCustomMonth() ? currentDate :
this.parent.calendarUtil.firstDateOfMonth(currentDate);
var monthStart = util.getWeekFirstDate(date, this.parent.activeViewOptions.firstDayOfWeek);
return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());
};
Month.prototype.getMonthEnd = function (currentDate) {
if (this.isCustomMonth()) {
var start = this.getMonthStart(currentDate);
var numberOfDays = util.WEEK_LENGTH * (this.parent.activeViewOptions.numberOfWeeks > 0 ?
this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS);
return util.addDays(start, (numberOfDays - 1));
}
else {
var endDate = util.addMonths(currentDate, this.parent.activeViewOptions.interval - 1);
var lastWeekOfMonth = util.getWeekFirstDate(this.parent.calendarUtil.lastDateOfMonth(endDate), this.parent.activeViewOptions.firstDayOfWeek);
return util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);
}
};
Month.prototype.isCustomRange = function () {
var dates = this.parent.getCurrentViewDates();
if (dates && dates.length > 0) {
var selectedTime = util.resetTime(this.parent.selectedDate).getTime();
var weekFirstDate = util.getWeekFirstDate(dates[dates.length - 1], this.parent.activeViewOptions.firstDayOfWeek);
return !(selectedTime >= util.getWeekFirstDate(dates[0], this.parent.activeViewOptions.firstDayOfWeek).getTime() &&
selectedTime <= util.addDays(weekFirstDate, 6).getTime());
}
return false;
};
Month.prototype.getRenderDates = function (workDays, selectedDate) {
if (selectedDate === void 0) { selectedDate = this.parent.selectedDate; }
var renderDates = [];
var currentDate = util.resetTime(selectedDate);
var start = this.getMonthStart(currentDate);
var monthEnd = this.getMonthEnd(currentDate);
do {
if (this.parent.activeViewOptions.showWeekend) {
renderDates.push(start);
}
else {
if (this.isWorkDay(start, workDays)) {
renderDates.push(start);
}
}
start = util.addDays(start, 1);
if (start.getHours() > 0) {
start = util.resetTime(start);
}
} while (start.getTime() <= monthEnd.getTime());
if (!workDays) {
this.renderDates = renderDates;
}
if (this.parent.headerModule) {
this.parent.headerModule.previousNextIconHandler();
}
return renderDates;
};
Month.prototype.getNextPreviousDate = function (type) {
if (this.isCustomMonth()) {
var dates = this.parent.getCurrentViewDates();
var date = util.getWeekFirstDate(type === 'Next' ? dates[dates.length - 1]
: dates[0], this.parent.activeViewOptions.firstDayOfWeek);
return util.addDays(date, type === 'Next' ? util.WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ?
this.parent.activeViewOptions.numberOfWeeks : util.DEFAULT_WEEKS) * util.WEEK_LENGTH);
}
else {
return util.addMonths(this.parent.selectedDate, ((type === 'Next' ? 1 : -1) * this.parent.activeViewOptions.interval));
}
};
Month.prototype.getStartDate = function () {
return this.getMonthStart(this.parent.selectedDate);
};
Month.prototype.getEndDate = function () {
return this.getMonthEnd(this.parent.selectedDate);
};
Month.prototype.getEndDateFromStartDate = function (start) {
return util.addDays(new Date(start.getTime()), 1);
};
Month.prototype.getDateRangeText = function (startDate, dateCollection) {
if (startDate === void 0) { startDate = this.parent.selectedDate; }
if (dateCollection === void 0) { dateCollection = null; }
if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {
var maxNumberOfDaysPerWeek = 7;
startDate = !isNullOrUndefined(dateCollection) && dateCollection.length > maxNumberOfDaysPerWeek - 1
? dateCollection[maxNumberOfDaysPerWeek - 1] : startDate;
var endDate = void 0;
var updateCustomRange = false;
if (this.isCustomMonth()) {
var dates = !isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection :
this.parent.getCurrentViewDates();
updateCustomRange = dates[0].getMonth() !== dates[dates.length - 1].getMonth() ||
dates[0].getFullYear() !== dates[dates.length - 1].getFullYear();
if (updateCustomRange) {
startDate = dates[0];
endDate = dates[dates.length - 1];
}
}
var isUpdateDateRange = (this.parent.currentView !== 'Month' || !this.isCustomMonth());
if (this.parent.activeViewOptions.interval > 1 && isUpdateDateRange || updateCustomRange) {
endDate = endDate ? endDate : util.addMonths(util.lastDateOfMonth(startDate), this.parent.activeViewOptions.interval - 1);
if (startDate.getFullYear() === endDate.getFullYear()) {
var monthNames = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' - ' +
(this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() })) +
this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
return util.capitalizeFirstWord(monthNames, 'single');
}
var text = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' ' +
startDate.getFullYear() + ' - ' +
this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() }) +
this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
return util.capitalizeFirstWord(text, 'single');
}
var format = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';
return util.capitalizeFirstWord(this.parent.globalize.formatDate(startDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single');
}
return this.formatDateRange(!isNullOrUndefined(dateCollection) && dateCollection.length > 0 ? dateCollection[0] :
this.parent.selectedDate);
};
Month.prototype.getLabelText = function (view) {
var viewStr = view.charAt(0).toLowerCase() + view.substring(1);
return this.formatViewLabel(viewStr, this.getStartDate(), this.getEndDate());
};
Month.prototype.createWeekNumberElement = function (text) {
var tr = createElement('tr');
var td = createElement('td', {
className: cls.WEEK_NUMBER_CLASS,
attrs: { 'title': (text ? this.parent.localeObj.getConstant('week') + ' ' + text : '') },
innerHTML: (text || '')
});
tr.appendChild(td);
var args = { elementType: 'weekNumberCell', element: td };
this.parent.trigger(event.renderCell, args);
return tr;
};
Month.prototype.unWireEvents = function () {
var contentScrollableEle = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
if (contentScrollableEle) {
EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll);
}
};
Month.prototype.isCustomMonth = function () {
return this.parent.currentView === 'Month' &&
(!isNullOrUndefined(this.parent.activeViewOptions.displayDate) || this.parent.activeViewOptions.numberOfWeeks > 0);
};
Month.prototype.getModuleName = function () {
return 'month';
};
Month.prototype.destroy = function () {
if (!this.parent || this.parent && this.parent.isDestroyed) {
this.parent = null;
return;
}
if (this.element) {
if (this.monthEvent) {
this.monthEvent.destroy();
this.monthEvent = null;
}
this.unWireEvents();
if (this.parent.resourceBase) {
this.parent.resourceBase.destroy();
}
if (this.parent.scheduleTouchModule) {
this.parent.scheduleTouchModule.resetValues();
}
_super.prototype.destroy.call(this);
}
};
return Month;
}(ViewBase));
export { Month };