@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.
895 lines • 61.2 kB
JavaScript
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable max-len */
import { extend, isNullOrUndefined, createElement, EventHandler, addClass, append, removeClass, remove, closest, classList } from '@syncfusion/ej2-base';
import { DataManager, Query } from '@syncfusion/ej2-data';
import { TreeView } from '@syncfusion/ej2-navigations';
import { Popup } from '@syncfusion/ej2-popups';
import { Data } from '../actions/data';
import * as cls from '../base/css-constant';
import * as events from '../base/constant';
import * as util from '../base/util';
var ResourceBase = /** @class */ (function () {
function ResourceBase(parent) {
this.resourceCollection = [];
this.leftPixel = 25;
this.resourceDateTree = [];
this.parent = parent;
}
ResourceBase.prototype.renderResourceHeaderIndent = function (tr) {
var resColTd = createElement('td', { className: cls.RESOURCE_LEFT_TD_CLASS });
var resColDiv = createElement('div', { className: cls.RESOURCE_TEXT_CLASS });
if (this.parent.activeViewOptions.headerIndentTemplate) {
var data = { className: [resColTd.className], type: 'emptyCells' };
this.parent.renderHeaderIndentTemplate(data, resColTd);
}
else {
resColTd.appendChild(resColDiv);
}
var args = { elementType: 'emptyCells', element: resColTd };
this.parent.trigger(events.renderCell, args);
tr.appendChild(resColTd);
};
ResourceBase.prototype.hideResourceRows = function (tBody) {
if (this.resourceCollection.length <= 1 || this.parent.virtualScrollModule) {
return;
}
var trCount = this.lastResourceLevel.length;
for (var i = 0; i < trCount; i++) {
var resData = this.lastResourceLevel[parseInt(i.toString(), 10)].resourceData;
var res = this.lastResourceLevel[parseInt(i.toString(), 10)].resource;
if (resData.ClassName === cls.RESOURCE_PARENT_CLASS && !resData[res.expandedField] &&
!isNullOrUndefined(resData[res.expandedField])) {
var trCollection = [].slice.call(tBody.children);
var slicedCollection = trCollection.slice(i + 1, i + (parseInt(resData.Count, 10) + 1));
addClass(slicedCollection, cls.HIDDEN_CLASS);
}
}
};
ResourceBase.prototype.createResourceColumn = function () {
var resColl = this.resourceCollection;
var resDiv = createElement('div', { className: cls.RESOURCE_COLUMN_WRAP_CLASS });
var tbl = this.parent.activeView.createTableLayout(cls.RESOURCE_COLUMN_TABLE_CLASS);
if (!this.parent.uiStateValues.isGroupAdaptive && this.parent.rowAutoHeight && this.parent.activeView.isTimelineView()
&& this.parent.activeViewOptions.group.resources.length > 0) {
addClass([tbl], cls.AUTO_HEIGHT);
}
var tBody = tbl.querySelector('tbody');
var resData = this.generateTreeData(true);
this.countCalculation(resColl.slice(0, -2), resColl.slice(0, -1));
this.renderedResources = this.lastResourceLevel;
if (this.parent.virtualScrollModule) {
var resourceCount = this.parent.virtualScrollModule.getRenderedCount();
this.setExpandedResources();
resData = this.expandedResources.slice(0, resourceCount);
this.renderedResources = resData;
}
append(this.getContentRows(resData), tBody);
this.hideResourceRows(tBody);
tbl.appendChild(tBody);
resDiv.appendChild(tbl);
return resDiv;
};
ResourceBase.prototype.setRenderedResources = function () {
var resColl = this.resourceCollection;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
var temp = this.generateTreeData(true);
this.countCalculation(resColl.slice(0, -2), resColl.slice(0, -1));
this.renderedResources = this.lastResourceLevel;
};
ResourceBase.prototype.setExpandedResources = function () {
var resources = [];
for (var i = 0; i < this.lastResourceLevel.length; i++) {
var resource = this.lastResourceLevel[parseInt(i.toString(), 10)].resourceData;
var count = resource.Count;
resources.push(this.lastResourceLevel[parseInt(i.toString(), 10)]);
var isExpanded = resource[this.lastResourceLevel[parseInt(i.toString(), 10)].resource.expandedField];
if (!isNullOrUndefined(isExpanded) && !isExpanded && count > 0) {
i = i + count;
}
}
this.expandedResources = resources;
};
ResourceBase.prototype.getContentRows = function (resData, isVirtualScroll) {
var resRows = [];
var left;
var rIndex;
var resColl = this.resourceCollection;
var tr = createElement('tr');
var td = createElement('td', { attrs: { tabindex: isVirtualScroll ? '-1' : '0' } });
var existingGroupIndices = this.parent.activeView.getGroupIndices();
for (var i = 0; i < resData.length; i++) {
if (existingGroupIndices.length > 0 && existingGroupIndices.indexOf(resData[parseInt(i.toString(), 10)].groupIndex) > -1) {
continue;
}
var ntd = td.cloneNode();
rIndex = util.findIndexInData(resColl, 'name', resData[parseInt(i.toString(), 10)].resource.name);
if (rIndex === resColl.length - 1) {
extend(resData[parseInt(i.toString(), 10)].resourceData, { ClassName: cls.RESOURCE_CHILD_CLASS });
this.renderedResources[parseInt(i.toString(), 10)].className = [cls.RESOURCE_CHILD_CLASS];
}
else {
extend(resData[parseInt(i.toString(), 10)].resourceData, { ClassName: cls.RESOURCE_PARENT_CLASS });
this.renderedResources[parseInt(i.toString(), 10)].className = [cls.RESOURCE_PARENT_CLASS];
}
left = (rIndex * this.leftPixel) + 'px';
if (resData[parseInt(i.toString(), 10)].resourceData.ClassName === cls.RESOURCE_PARENT_CLASS
&& !isNullOrUndefined(resData[parseInt(i.toString(), 10)].resourceData.Count) && (resData[parseInt(i.toString(), 10)].resourceData.Count > 0)) {
var iconClass = void 0;
if (resData[parseInt(i.toString(), 10)].resourceData[resColl[parseInt(rIndex.toString(), 10)].expandedField] ||
isNullOrUndefined(resData[parseInt(i.toString(), 10)].resourceData[resColl[parseInt(rIndex.toString(), 10)].expandedField])) {
iconClass = cls.RESOURCE_COLLAPSE_CLASS;
}
else {
iconClass = cls.RESOURCE_EXPAND_CLASS;
}
var iconDiv = createElement('div');
addClass([iconDiv], [cls.RESOURCE_TREE_ICON_CLASS, iconClass]);
this.setMargin(iconDiv, left);
ntd.appendChild(iconDiv);
if (this.resourceCollection.length > 1) {
EventHandler.add(iconDiv, 'click', this.onTreeIconClick, this);
}
}
this.parent.activeView.setResourceHeaderContent(ntd, resData[parseInt(i.toString(), 10)], cls.RESOURCE_TEXT_CLASS);
ntd.setAttribute('data-group-index', resData[parseInt(i.toString(), 10)].groupIndex.toString());
ntd.setAttribute('aria-label', resData[parseInt(i.toString(), 10)].resourceData[resData[parseInt(i.toString(), 10)].resource.textField] + ' resource');
if (!this.parent.activeViewOptions.resourceHeaderTemplate) {
this.setMargin(ntd.querySelector('.' + cls.RESOURCE_TEXT_CLASS), left);
}
var classCollection = [cls.RESOURCE_CELLS_CLASS, resData[parseInt(i.toString(), 10)].resourceData.ClassName];
addClass([ntd], classCollection);
var args = { elementType: 'resourceHeader', element: ntd, groupIndex: resData[parseInt(i.toString(), 10)].groupIndex };
this.parent.trigger(events.renderCell, args);
var ntr = tr.cloneNode();
ntr.appendChild(ntd);
resRows.push(ntr);
}
return resRows;
};
ResourceBase.prototype.setMargin = function (element, value) {
if (!this.parent.enableRtl) {
element.style.marginLeft = value;
}
else {
element.style.marginRight = value;
}
};
ResourceBase.prototype.countCalculation = function (parentCollection, wholeCollection) {
var collection;
for (var y = 0; y < parentCollection.length; y++) {
var data = parentCollection[parentCollection.length - (y + 1)].dataSource;
for (var x = 0; x < data.length; x++) {
var totalCount = 0;
if (this.parent.activeViewOptions.group.byGroupID) {
var query = new Query().where(wholeCollection[wholeCollection.length - 1].groupIDField, 'equal', data[parseInt(x.toString(), 10)][parentCollection[parentCollection.length - (y + 1)].idField]);
collection = new DataManager(wholeCollection[wholeCollection.length - 1].dataSource).executeLocal(query);
}
else {
collection = wholeCollection[wholeCollection.length - 1].dataSource;
}
for (var z = 0; z < collection.length; z++) {
totalCount = totalCount + parseInt(collection[parseInt(z.toString(), 10)].Count, 10);
}
totalCount = totalCount + parseInt(data[parseInt(x.toString(), 10)].Count, 10);
extend(data[parseInt(x.toString(), 10)], { Count: totalCount });
}
wholeCollection = wholeCollection.slice(0, -1);
}
};
ResourceBase.prototype.onTreeIconClick = function (e) {
var _this = this;
if (this.parent.eventTooltip) {
this.parent.eventTooltip.close();
}
var target = e.target;
var hide;
var trElement = closest(target, '.' + cls.RESOURCE_PARENT_CLASS)
.parentElement;
var index = parseInt(trElement.children[0].getAttribute('data-group-index'), 10);
var args = {
cancel: false, event: e, groupIndex: index,
requestType: !target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpand' : 'resourceCollapse'
};
this.parent.trigger(events.actionBegin, args, function (actionArgs) {
if (!actionArgs.cancel) {
if (target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS)) {
classList(target, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);
hide = true;
}
else {
classList(target, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);
hide = false;
}
var eventElements = [].slice.call(_this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS + ',.' + cls.MORE_INDICATOR_CLASS));
for (var _i = 0, eventElements_1 = eventElements; _i < eventElements_1.length; _i++) {
var element = eventElements_1[_i];
remove(element);
}
if (_this.parent.virtualScrollModule) {
_this.updateVirtualContent(index, hide, e, target);
}
else {
_this.updateContent(index, hide);
}
var data = { cssProperties: _this.parent.getCssProperties(), module: 'scroll' };
_this.parent.notify(events.scrollUiUpdate, data);
args = {
cancel: false, event: e, groupIndex: index,
requestType: target.classList.contains(cls.RESOURCE_COLLAPSE_CLASS) ? 'resourceExpanded' : 'resourceCollapsed'
};
_this.parent.refreshEvents(false);
_this.parent.trigger(events.actionComplete, args);
}
});
};
ResourceBase.prototype.updateContent = function (index, hide) {
var rowCollection = [];
var workCellCollection = [];
var headerRowCollection = [];
var pNode;
var clickedRes = this.lastResourceLevel[parseInt(index.toString(), 10)].resourceData;
var resRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + 'tr'));
var contentRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' ' + 'tbody tr'));
var eventRows = [].slice.call(this.parent.element.querySelectorAll('.' + cls.CONTENT_WRAP_CLASS + ' .' + cls.APPOINTMENT_CONTAINER_CLASS));
for (var j = 0; j < clickedRes.Count; j++) {
rowCollection.push(resRows[index + j + 1]);
workCellCollection.push(contentRows[index + j + 1]);
headerRowCollection.push(eventRows[index + j + 1]);
}
var clonedCollection = this.lastResourceLevel;
for (var i = 0; i < rowCollection.length; i++) {
var expanded = true;
pNode = rowCollection[parseInt(i.toString(), 10)].children[0].classList.contains(cls.RESOURCE_PARENT_CLASS);
clonedCollection[parseInt(index.toString(), 10)].resourceData[clonedCollection[parseInt(index.toString(), 10)].resource.expandedField] = !hide;
if (hide) {
if (pNode) {
var trElem = rowCollection[parseInt(i.toString(), 10)].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);
if (trElem) {
classList(trElem, [cls.RESOURCE_EXPAND_CLASS], [cls.RESOURCE_COLLAPSE_CLASS]);
}
}
if (!rowCollection[parseInt(i.toString(), 10)].classList.contains(cls.HIDDEN_CLASS)) {
addClass([rowCollection[parseInt(i.toString(), 10)], workCellCollection[parseInt(i.toString(), 10)], headerRowCollection[parseInt(i.toString(), 10)]], cls.HIDDEN_CLASS);
}
}
else {
if (pNode) {
var rowIndex = rowCollection[parseInt(i.toString(), 10)].rowIndex;
if (!clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData[clonedCollection[parseInt(rowIndex.toString(), 10)].resource.expandedField]
&& !isNullOrUndefined(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData[clonedCollection[parseInt(rowIndex.toString(), 10)].resource.expandedField])) {
rowCollection.splice(i + 1, (parseInt(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData.Count, 10)));
workCellCollection.splice(i + 1, (parseInt(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData.Count, 10)));
headerRowCollection.splice(i + 1, (parseInt(clonedCollection[parseInt(rowIndex.toString(), 10)].resourceData.Count, 10)));
expanded = false;
}
if (expanded) {
var trElem = rowCollection[parseInt(i.toString(), 10)].querySelector('.' + cls.RESOURCE_TREE_ICON_CLASS);
if (trElem) {
classList(trElem, [cls.RESOURCE_COLLAPSE_CLASS], [cls.RESOURCE_EXPAND_CLASS]);
}
}
}
if (rowCollection[parseInt(i.toString(), 10)].classList.contains(cls.HIDDEN_CLASS)) {
removeClass([rowCollection[parseInt(i.toString(), 10)], workCellCollection[parseInt(i.toString(), 10)], headerRowCollection[parseInt(i.toString(), 10)]], cls.HIDDEN_CLASS);
}
}
}
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
ResourceBase.prototype.updateVirtualContent = function (index, expand, e, target) {
this.lastResourceLevel[parseInt(index.toString(), 10)].resourceData[this.lastResourceLevel[parseInt(index.toString(), 10)].resource.expandedField] = !expand;
this.setExpandedResources();
var resourceCount = this.parent.virtualScrollModule.getRenderedCount();
var startIndex = this.expandedResources.indexOf(this.renderedResources[0]);
this.parent.virtualScrollModule.existingDataCollection = this.renderedResources;
this.renderedResources = this.expandedResources.slice(startIndex, startIndex + resourceCount);
if (this.renderedResources.length < resourceCount) {
var sIndex = this.expandedResources.length - resourceCount;
sIndex = (sIndex > 0) ? sIndex : 0;
this.renderedResources = this.expandedResources.slice(sIndex, this.expandedResources.length);
}
var virtualTrack = this.parent.element.querySelector('.' + cls.VIRTUAL_TRACK_CLASS);
this.parent.virtualScrollModule.updateVirtualTrackHeight(virtualTrack);
var resTable = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS + ' ' + 'table');
var contentTable = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' ' + 'table');
var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
this.parent.virtualScrollModule.updateContent(resTable, contentTable, eventTable, this.renderedResources);
var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);
if (!isNullOrUndefined(timeIndicator)) {
timeIndicator.style.height =
this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetHeight + 'px';
}
};
ResourceBase.prototype.renderResourceHeader = function () {
var resourceWrapper = createElement('div', { className: cls.RESOURCE_TOOLBAR_CONTAINER });
resourceWrapper.innerHTML = '<div class="' + cls.RESOURCE_HEADER_TOOLBAR + '"><div class="' + cls.RESOURCE_MENU + '">' +
'<div class="e-icons ' + cls.RESOURCE_MENU_ICON + '"></div></div><div class="' + cls.RESOURCE_LEVEL_TITLE + '"></div></div>';
if (this.parent.currentView === 'MonthAgenda') {
var target = this.parent.activeView.getPanel().querySelector('.' + cls.CONTENT_WRAP_CLASS);
target.insertBefore(resourceWrapper, target.querySelector('.' + cls.WRAPPER_CONTAINER_CLASS));
}
else {
this.parent.element.insertBefore(resourceWrapper, this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));
}
this.renderResourceHeaderText();
EventHandler.add(resourceWrapper.querySelector('.' + cls.RESOURCE_MENU_ICON), 'click', this.menuClick, this);
};
ResourceBase.prototype.renderResourceTree = function () {
this.popupOverlay = createElement('div', { className: cls.RESOURCE_TREE_POPUP_OVERLAY });
var treeWrapper = createElement('div', { className: cls.RESOURCE_TREE_POPUP + ' e-popup-close' });
if (this.parent.currentView === 'MonthAgenda') {
var target = this.parent.activeView.getPanel().querySelector('.' + cls.WRAPPER_CONTAINER_CLASS);
target.insertBefore(treeWrapper, target.children[0]);
target.appendChild(this.popupOverlay);
}
else {
this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(treeWrapper);
this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.popupOverlay);
}
var resourceTree = createElement('div', { className: cls.RESOURCE_TREE });
treeWrapper.appendChild(resourceTree);
this.treeViewObj = new TreeView({
cssClass: this.parent.cssClass,
enableRtl: this.parent.enableRtl,
enableHtmlSanitizer: this.parent.enableHtmlSanitizer,
fields: {
dataSource: [].slice.call(this.generateTreeData()),
id: 'resourceId',
text: 'resourceName',
child: 'resourceChild'
},
nodeTemplate: this.parent.resourceHeaderTemplate,
nodeClicked: this.resourceClick.bind(this),
created: this.resourceTreeCreated.bind(this)
});
this.treeViewObj.root = this.parent.root ? this.parent.root : this.parent;
this.treeViewObj.appendTo(resourceTree);
this.treeViewObj.expandAll();
this.treePopup = new Popup(treeWrapper, {
targetType: 'relative',
actionOnScroll: 'none',
content: this.treeViewObj.element,
relateTo: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),
enableRtl: this.parent.enableRtl,
hideAnimation: { name: 'SlideLeftOut', duration: 500 },
showAnimation: { name: 'SlideLeftIn', duration: 500 },
viewPortElement: this.parent.element.querySelector('.' + (this.parent.currentView === 'MonthAgenda' ?
cls.WRAPPER_CONTAINER_CLASS : cls.TABLE_CONTAINER_CLASS))
});
this.parent.on(events.documentClick, this.documentClick, this);
};
ResourceBase.prototype.resourceTreeCreated = function () {
if (this.parent.activeViewOptions.resourceHeaderTemplate && this.parent.portals && this.treeViewObj.portals) {
this.parent.portals = this.parent.portals.concat(this.treeViewObj.portals);
this.parent.renderTemplates();
}
};
ResourceBase.prototype.generateTreeData = function (isTimeLine) {
var _this = this;
var treeCollection = [];
var resTreeColl = [];
var groupIndex = 0;
var _loop_1 = function (i, len) {
var treeHandler = function (treeLevel, index, levelId) {
var resource = _this.resourceCollection[parseInt(index.toString(), 10)];
var treeArgs;
var resObj;
if (!isTimeLine) {
treeArgs = {
resourceId: levelId,
resourceName: treeLevel.resourceData[resource.textField],
resource: treeLevel.resource,
resourceData: treeLevel.resourceData
};
}
else {
resObj = {
type: 'resourceHeader', resource: treeLevel.resource,
resourceData: treeLevel.resourceData, groupIndex: groupIndex,
groupOrder: treeLevel.groupOrder
};
resTreeColl.push(resObj);
groupIndex++;
}
if (treeLevel.child.length > 0 && !isTimeLine) {
treeArgs.resourceChild = [];
}
var count = 1;
for (var _i = 0, _a = treeLevel.child; _i < _a.length; _i++) {
var tree = _a[_i];
if (!isTimeLine) {
treeArgs.resourceChild.push(treeHandler(tree, index + 1, levelId + '-' + count));
}
else {
treeHandler(tree, index + 1, levelId + '-' + count);
}
count += 1;
}
if (isTimeLine) {
extend(resObj.resourceData, { Count: count - 1 });
}
return treeArgs;
};
if (!isTimeLine) {
treeCollection.push(treeHandler(this_1.resourceTreeLevel[parseInt(i.toString(), 10)], 0, (i + 1).toString()));
}
else {
treeHandler(this_1.resourceTreeLevel[parseInt(i.toString(), 10)], 0, (i + 1).toString());
}
};
var this_1 = this;
for (var i = 0, len = this.resourceTreeLevel.length; i < len; i++) {
_loop_1(i, len);
}
if (isTimeLine) {
this.lastResourceLevel = resTreeColl;
return resTreeColl;
}
else {
return treeCollection;
}
};
ResourceBase.prototype.renderResourceHeaderText = function () {
var resource = this.lastResourceLevel[this.parent.uiStateValues.groupIndex];
var headerCollection = [];
var _loop_2 = function (i, len) {
var resourceLevel = this_2.resourceCollection[parseInt(i.toString(), 10)];
var resourceText = resourceLevel.dataSource.filter(function (resData) {
return resData[resourceLevel.idField] === resource.groupOrder[parseInt(i.toString(), 10)];
});
var resourceName = createElement('div', { className: cls.RESOURCE_NAME });
this_2.parent.sanitize(resourceText[0][resourceLevel.textField], resourceName);
headerCollection.push(resourceName);
var levelIcon = createElement('div', { className: 'e-icons e-icon-next' });
headerCollection.push(levelIcon);
};
var this_2 = this;
for (var i = 0, len = resource.groupOrder.length; i < len; i++) {
_loop_2(i, len);
}
headerCollection.pop();
var target = (this.parent.currentView === 'MonthAgenda') ? this.parent.activeView.getPanel() : this.parent.element;
var headerWrapper = target.querySelector('.' + cls.RESOURCE_LEVEL_TITLE);
util.removeChildren(headerWrapper);
for (var _i = 0, headerCollection_1 = headerCollection; _i < headerCollection_1.length; _i++) {
var header = headerCollection_1[_i];
headerWrapper.appendChild(header);
}
if (this.lastResourceLevel.length === 1) {
addClass([this.parent.element.querySelector('.' + cls.RESOURCE_MENU)], cls.DISABLE_CLASS);
}
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
ResourceBase.prototype.menuClick = function (event) {
if (this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP).classList.contains(cls.POPUP_OPEN)) {
this.treePopup.hide();
removeClass([this.popupOverlay], cls.ENABLE_CLASS);
}
else {
var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));
removeClass(treeNodes, 'e-active');
addClass([treeNodes[this.parent.uiStateValues.groupIndex]], 'e-active');
this.treePopup.show();
addClass([this.popupOverlay], cls.ENABLE_CLASS);
}
};
ResourceBase.prototype.selectResourceByIndex = function (groupIndex) {
if (this.lastResourceLevel && groupIndex > -1 && groupIndex < this.lastResourceLevel.length) {
this.triggerEvents(groupIndex);
}
};
ResourceBase.prototype.resourceClick = function (event) {
if (!event.node.classList.contains('e-has-child')) {
this.treePopup.hide();
removeClass([this.popupOverlay], cls.ENABLE_CLASS);
var treeNodes = [].slice.call(this.treeViewObj.element.querySelectorAll('.e-list-item:not(.e-has-child)'));
var groupIndex = treeNodes.indexOf(event.node);
this.triggerEvents(groupIndex, event);
event.event.preventDefault();
}
};
ResourceBase.prototype.triggerEvents = function (groupIndex, event) {
var _this = this;
var args = { cancel: false, event: (event) ? event.event : null, groupIndex: groupIndex, requestType: 'resourceChange' };
this.parent.trigger(events.actionBegin, args, function (actionArgs) {
if (!actionArgs.cancel) {
_this.parent.uiStateValues.groupIndex = actionArgs.groupIndex;
_this.parent.renderModule.render(_this.parent.currentView);
args = {
cancel: false, event: (event) ? event.event : null, groupIndex: _this.parent.uiStateValues.groupIndex, requestType: 'resourceChanged'
};
_this.parent.adaptiveGroupIndex = _this.parent.uiStateValues.groupIndex;
_this.parent.trigger(events.actionComplete, args);
}
});
};
ResourceBase.prototype.documentClick = function (args) {
if (closest(args.event.target, '.' + cls.RESOURCE_TREE_POPUP)) {
return;
}
var treeWrapper = this.parent.element.querySelector('.' + cls.RESOURCE_TREE_POPUP);
if (treeWrapper && treeWrapper.classList.contains(cls.POPUP_OPEN)) {
this.treePopup.hide();
removeClass([this.popupOverlay], cls.ENABLE_CLASS);
}
};
ResourceBase.prototype.bindResourcesData = function (isSetModel) {
var _this = this;
this.parent.showSpinner();
var promises = [];
for (var _i = 0, _a = this.parent.resources; _i < _a.length; _i++) {
var resource = _a[_i];
var dataModule = new Data(this.parent, resource.dataSource, resource.query);
promises.push(dataModule.getData(dataModule.generateQuery()));
}
Promise.all(promises).then(function (e) { return _this.dataManagerSuccess(e, isSetModel); })
.catch(function (e) { return _this.parent.crudModule.dataManagerFailure(e); });
};
ResourceBase.prototype.dataManagerSuccess = function (e, isSetModel) {
if (!this.parent || this.parent && this.parent.isDestroyed) {
return;
}
this.parent.resourceCollection = [];
for (var i = 0, length_1 = e.length; i < length_1; i++) {
var resource = this.parent.resources[parseInt(i.toString(), 10)];
var resourceObj = this.getResourceModel(resource, e[parseInt(i.toString(), 10)].result);
this.parent.resourceCollection.push(resourceObj);
}
this.refreshLayout(isSetModel);
};
ResourceBase.prototype.getResourceModel = function (resource, resourceData) {
var resourceObj = {
field: resource.field,
title: resource.title,
name: resource.name,
allowMultiple: resource.allowMultiple,
dataSource: resourceData || resource.dataSource,
idField: resource.idField,
textField: resource.textField,
groupIDField: resource.groupIDField,
colorField: resource.colorField,
startHourField: resource.startHourField,
endHourField: resource.endHourField,
workDaysField: resource.workDaysField,
expandedField: resource.expandedField,
cssClassField: resource.cssClassField
};
return resourceObj;
};
ResourceBase.prototype.refreshLayout = function (isSetModel) {
if (isNullOrUndefined(this.parent.uiStateValues.groupIndex) || !(this.parent.enablePersistence)) {
this.parent.uiStateValues.groupIndex = 0;
}
this.parent.renderElements(isSetModel);
};
ResourceBase.prototype.setResourceCollection = function () {
var requiredResources = [];
this.resourceCollection = [];
this.colorIndex = null;
if (this.parent.activeViewOptions.group.resources.length > 0) {
for (var _i = 0, _a = this.parent.activeViewOptions.group.resources; _i < _a.length; _i++) {
var resource = _a[_i];
var index_1 = util.findIndexInData(this.parent.resourceCollection, 'name', resource);
if (index_1 >= 0) {
requiredResources.push(this.parent.resourceCollection[parseInt(index_1.toString(), 10)]);
}
}
}
else if (this.parent.resourceCollection.length > 0) {
requiredResources = this.parent.resourceCollection;
}
var index = 0;
for (var _b = 0, requiredResources_1 = requiredResources; _b < requiredResources_1.length; _b++) {
var resource = requiredResources_1[_b];
var resources = this.getResourceModel(resource);
if (resource.name === this.parent.eventSettings.resourceColorField) {
this.colorIndex = index;
}
index++;
this.resourceCollection.push(resources);
}
if (isNullOrUndefined(this.colorIndex)) {
this.colorIndex = this.resourceCollection.length - 1;
}
};
ResourceBase.prototype.generateResourceLevels = function (innerDates, isTimeLine) {
var _this = this;
var resources = this.resourceCollection;
var resTreeGroup = [];
var lastColumnDates = [];
var group = function (resources, index, prevResource, prevResourceData, prevOrder) {
var resTree = [];
var resource = resources[0];
if (resource) {
var data = void 0;
if (prevResourceData && _this.parent.activeViewOptions.group.byGroupID) {
var id_1 = prevResourceData[prevResource.idField];
data = resource.dataSource.filter(function (e) {
return e[resource.groupIDField] === id_1;
});
}
else {
data = resource.dataSource;
}
for (var i = 0; i < data.length; i++) {
var groupOrder = [];
if (prevOrder && prevOrder.length > 0) {
groupOrder = groupOrder.concat(prevOrder);
}
groupOrder.push(data[parseInt(i.toString(), 10)][resource.idField]);
var items = group(resources.slice(1), index + 1, resource, data[parseInt(i.toString(), 10)], groupOrder);
// Here validate child item empty top level resource only
if (index === 0 && items.length === 0 && _this.resourceCollection.length > 1) {
continue;
}
var dateCol = [];
var renderDates = _this.parent.activeView.renderDates;
var resWorkDays = void 0;
if (!_this.parent.activeViewOptions.group.byDate && index + 1 === _this.resourceCollection.length) {
var workDays = data[parseInt(i.toString(), 10)][resource.workDaysField];
var resStartHour = data[parseInt(i.toString(), 10)][resource.startHourField];
var resEndHour = data[parseInt(i.toString(), 10)][resource.endHourField];
if (workDays && workDays.length > 0) {
renderDates = _this.parent.activeView.getRenderDates(workDays);
resWorkDays = workDays;
dateCol = _this.parent.activeView.getDateSlots(renderDates, workDays);
}
else {
resWorkDays = _this.parent.activeViewOptions.workDays;
dateCol = innerDates;
}
var dateSlots = _this.generateCustomHours(dateCol, resStartHour, resEndHour, groupOrder);
lastColumnDates = lastColumnDates.concat(dateSlots);
}
var resCssClass = data[parseInt(i.toString(), 10)][resource.cssClassField];
var slotData = {
type: 'resourceHeader', className: ['e-resource-cells'],
resourceLevelIndex: index, groupOrder: groupOrder,
resource: resource, resourceData: data[parseInt(i.toString(), 10)],
colSpan: _this.parent.activeViewOptions.group.byDate ? 1 : dateCol.length,
renderDates: renderDates, workDays: resWorkDays, cssClass: resCssClass,
child: items
};
resTree.push(slotData);
}
if (!resTreeGroup[parseInt(index.toString(), 10)]) {
resTreeGroup[parseInt(index.toString(), 10)] = [];
}
if (resTree.length > 0) {
resTreeGroup[parseInt(index.toString(), 10)].push(resTree);
}
return resTree;
}
return [];
};
this.resourceTreeLevel = group(resources, 0);
return (isTimeLine) ? [] : this.generateHeaderLevels(resTreeGroup, lastColumnDates, innerDates);
};
ResourceBase.prototype.generateCustomHours = function (renderDates, startHour, endHour, groupOrder) {
var dateSlots = extend([], renderDates, null, true);
for (var _i = 0, dateSlots_1 = dateSlots; _i < dateSlots_1.length; _i++) {
var dateSlot = dateSlots_1[_i];
if (startHour) {
dateSlot.startHour = this.parent.getStartEndTime(startHour);
}
if (endHour) {
dateSlot.endHour = this.parent.getStartEndTime(endHour);
}
if (groupOrder) {
dateSlot.groupOrder = groupOrder;
}
}
return dateSlots;
};
ResourceBase.prototype.generateHeaderLevels = function (resTreeGroup, lastColumnDates, headerDates) {
var headerLevels = [];
for (var i = resTreeGroup.length - 1; i >= 0; i--) {
var temp = 0;
for (var _i = 0, _a = resTreeGroup[parseInt(i.toString(), 10)]; _i < _a.length; _i++) {
var currentLevelChilds = _a[_i];
for (var _b = 0, currentLevelChilds_1 = currentLevelChilds; _b < currentLevelChilds_1.length; _b++) {
var currentLevelChild = currentLevelChilds_1[_b];
if (resTreeGroup[i + 1] && resTreeGroup[i + 1].length > 0) {
var nextLevelChilds = resTreeGroup[parseInt((i + 1).toString(), 10)][parseInt(temp.toString(), 10)];
if (!nextLevelChilds) {
continue;
}
var colSpan = 0;
for (var _c = 0, nextLevelChilds_1 = nextLevelChilds; _c < nextLevelChilds_1.length; _c++) {
var nextLevelChild = nextLevelChilds_1[_c];
if (!this.parent.activeViewOptions.group.byGroupID || (this.parent.activeViewOptions.group.byGroupID &&
nextLevelChild.resourceData[nextLevelChild.resource.groupIDField] ===
currentLevelChild.resourceData[currentLevelChild.resource.idField])) {
colSpan += nextLevelChild.colSpan;
}
}
currentLevelChild.colSpan = colSpan;
}
currentLevelChild.groupIndex = temp;
temp++;
headerLevels[currentLevelChild.resourceLevelIndex] = headerLevels[currentLevelChild.resourceLevelIndex] || [];
headerLevels[currentLevelChild.resourceLevelIndex].push(currentLevelChild);
}
}
}
this.lastResourceLevel = headerLevels.slice(-1)[0] || [];
if (!this.parent.activeViewOptions.group.byDate) {
var index = 0;
for (var _d = 0, _e = this.lastResourceLevel; _d < _e.length; _d++) {
var lastLevelResource = _e[_d];
for (var i = 0; i < lastLevelResource.colSpan; i++) {
lastColumnDates[parseInt(index.toString(), 10)].groupIndex = lastLevelResource.groupIndex;
index++;
}
}
headerLevels.push(lastColumnDates);
return headerLevels;
}
var dateHeaderLevels = [];
var levels = extend([], headerLevels, null, true);
var datesColumn = [];
if (this.parent.activeViewOptions.group.hideNonWorkingDays) {
var renderDates_1 = [];
var dateIndex = 0;
var _loop_3 = function (headerDate) {
this_3.resourceDateTree[parseInt(dateIndex.toString(), 10)] = [];
var currentDateLevels = [];
var _loop_4 = function (j) {
var workDays = this_3.lastResourceLevel[parseInt(j.toString(), 10)].resourceData[this_3.lastResourceLevel[parseInt(j.toString(), 10)].resource.workDaysField];
if (!workDays) {
workDays = this_3.parent.activeViewOptions.workDays;
}
if (workDays.indexOf(headerDate.date.getDay()) !== -1) {
var resTd_1 = extend({}, this_3.lastResourceLevel[parseInt(j.toString(), 10)], null, true);
resTd_1.date = headerDate.date;
this_3.lastResourceLevel[parseInt(j.toString(), 10)].workDays = workDays;
resTd_1.startHour = this_3.parent.getStartEndTime(resTd_1.resourceData[resTd_1.resource.startHourField]) ||
headerDate.startHour;
resTd_1.endHour = this_3.parent.getStartEndTime(resTd_1.resourceData[resTd_1.resource.endHourField]) ||
headerDate.endHour;
this_3.resourceDateTree[parseInt(dateIndex.toString(), 10)].push(resTd_1);
var _loop_5 = function (k) {
if (!currentDateLevels[parseInt(k.toString(), 10)]) {
currentDateLevels[parseInt(k.toString(), 10)] = [];
}
if (k === resTd_1.groupOrder.length - 1) {
if (!renderDates_1[parseInt(j.toString(), 10)]) {
renderDates_1[parseInt(j.toString(), 10)] = [];
}
var filterDates = resTd_1.renderDates.filter(function (x) { return x.getDay() === headerDate.date.getDay(); });
renderDates_1[parseInt(j.toString(), 10)] = renderDates_1[parseInt(j.toString(), 10)].concat(filterDates);
currentDateLevels[parseInt(k.toString(), 10)].push(resTd_1);
return "continue";
}
var currentLevel = levels[parseInt(k.toString(), 10)];
var filteredResource = currentLevel.filter(function (data) {
return data.resourceData[data.resource.idField] === resTd_1.groupOrder[parseInt(k.toString(), 10)];
});
if (filteredResource && filteredResource.length > 0) {
var existedResource = currentDateLevels[parseInt(k.toString(), 10)].filter(function (data) {
return data.resourceData[data.resource.idField] === resTd_1.groupOrder[parseInt(k.toString(), 10)];
});
if (existedResource && existedResource.length > 0) {
existedResource[0].colSpan += 1;
}
else {
var filteredTd = extend({}, filteredResource[0], null, true);
filteredTd.colSpan = 1;
currentDateLevels[parseInt(k.toString(), 10)].push(filteredTd);
}
}
};
for (var k = 0; k < resTd_1.groupOrder.length; k++) {
_loop_5(k);
}
}
};
for (var j = 0; j < this_3.lastResourceLevel.length; j++) {
_loop_4(j);
}
if (currentDateLevels.length > 0) {
for (var l = 0; l < levels.length; l++) {
if (!dateHeaderLevels[parseInt(l.toString(), 10)]) {
dateHeaderLevels[parseInt(l.toString(), 10)] = [];
}
dateHeaderLevels[parseInt(l.toString(), 10)] = dateHeaderLevels[parseInt(l.toString(), 10)].concat(currentDateLevels[parseInt(l.toString(), 10)]);
}
headerDate.colSpan = currentDateLevels[currentDateLevels.length - 1].length;
datesColumn.push(headerDate);
}
dateIndex++;
};
var this_3 = this;
for (var _f = 0, headerDates_1 = headerDates; _f < headerDates_1.length; _f++) {
var headerDate = headerDates_1[_f];
_loop_3(headerDate);
}
this.resourceDateTree = this.resourceDateTree.filter(function (data) { return data.length > 0; });
this.lastResourceLevel.forEach(function (x, index) {
if (renderDates_1[parseInt(index.toString(), 10)]) {
x.renderDates = renderDates_1[parseInt(index.toString(), 10)].sort(function (a, b) { return a.getTime() - b.getTime(); });
}
});
dateHeaderLevels.unshift(datesColumn);
return dateHeaderLevels;
}
var dateColSpan = 0;
for (var _g = 0, _h = levels[0]; _g < _h.length; _g++) {
var firstRowTd = _h[_g];
dateColSpan += firstRowTd.colSpan;
}
for (var _j = 0, headerDates_2 = headerDates; _j < headerDates_2.length; _j++) {
var headerDate = headerDates_2[_j];
headerDate.colSpan = dateColSpan;
datesColumn.push(headerDate);
var resGroup = extend([], levels, null, true);
for (var k = 0, length_2 = resGroup.length; k < length_2; k++) {
if (k === resGroup.length - 1) {
for (var _k = 0, _l = resGroup[parseInt(k.toString(), 10)]; _k < _l.length; _k++) {
var resTd = _l[_k];
resTd.date = headerDate.date;
resTd.workDays = headerDate.workDays;
resTd.startHour = this.parent.getStartEndTime(resTd.resourceData[resTd.resource.startHourField]) ||
headerDate.startHour;
resTd.endHour = this.parent.getStartEndTime(resTd.resourceData[resTd.resource.endHourField]) ||
headerDate.endHour;
}
}
if (!dateHeaderLevels[parseInt(k.toString(), 10)]) {
dateHeaderLevels[parseInt(k.toString(), 10)] = [];
}
dateHeaderLevels[parseInt(k.toString(), 10)] = dateHeaderLevels[parseInt(k.toString(), 10)].concat(resGroup[parseInt(k.toString(), 10)]);
}
}
dateHeaderLevels.unshift(datesColumn);
return dateHeaderLevels;
};
ResourceBase.prototype.setResourceValues = function (eventObj, groupIndex) {
var _this = this;
var setValues = function (index, field, value) {
if (_this.resourceCollection[parseInt(index.toString(), 10)].allowMultiple && _this.parent.activeViewOptions.group.allowGroupEdit) {
eventObj["" + field] = [value];
}
else {
eventObj["" + field] = value;
}
};
if (groupIndex === void 0) {
groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :
this.parent.activeCellsData.groupIndex;
}
if (this.parent.activeViewOptions.group.resources.length > 0 && !isNullOrUndefined(groupIndex)) {
var groupOrder = this.lastResourceLevel[parseInt(groupIndex.toString(), 10)].groupOrder;
for (var index = 0; index < this.resourceCollection.length; index++) {
setValues(index, this.resourceCollection[parseInt(index.toString(), 10)].field, groupOrder[parseInt(index.toString(), 10)]);
}
}
else if (this.parent.resourceCollection.length > 0) {
for (var index = 0; index < this.resourceCollection.length; index++) {
var data = this.resourceCollection[parseInt(index.toString(), 10)].dataSource[0];
if (data) {
setValues(index, this.resourceCollection[parseInt(index.toString(), 10)].field, data[this.resourceCollection[parseInt(index.toString(), 10)].idField]);
}
}
}
};
ResourceBase.prototype.getResourceColor = function (eventObj, groupOrder) {
var colorFieldIndex = (!isNullOrUndefined(groupOrder) &&
this.colorIndex > groupOrder.length - 1) ? groupOrder.length - 1 : this.colorIndex;
var resource = this.resourceCollection[parseInt(colorFieldIndex.toString(), 10)];
if (isNullOrUndefined(groupOrder) && this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {
return undefined;
}
var id = isNullOrUndefined(groupOrder) ? eventObj[resource.field] : groupOrder[parseInt(colorFieldIndex.toString(), 10)];
var data = this.filterData(resource.dataSource, resource.idField, id);
if (data.length > 0) {
return data[0][resource.colorField];
}
return undefined;
};
ResourceBase.prototype.getCssClass = function (eventObj) {
var resource = this.resourceCollection.slice(-1)[0];
if (this.parent.activeViewOptions.group.allowGroupEdit && resource.allowMultiple) {
return undefined;
}
var data = this.filterData(resource.dataSource,