@syncfusion/ej2-treegrid
Version:
Essential JS 2 TreeGrid Component
877 lines • 50.6 kB
JavaScript
import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';
import { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';
import { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';
import { getObject, getUid } from '@syncfusion/ej2-grids';
import { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';
import * as events from './constant';
/**
* Internal dataoperations for tree grid
*
* @hidden
*/
var DataManipulation = /** @class */ (function () {
function DataManipulation(grid) {
this.addedRecords = 'addedRecords';
this.parent = grid;
this.parentItems = [];
this.taskIds = [];
this.hierarchyData = [];
this.storedIndex = -1;
this.sortedData = [];
this.isSortAction = false;
this.addEventListener();
this.dataResults = {};
this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);
}
/**
* @hidden
* @returns {void}
*/
DataManipulation.prototype.addEventListener = function () {
this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);
this.parent.grid.on('sorting-begin', this.beginSorting, this);
this.parent.on('updateAction', this.updateData, this);
this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);
this.parent.on('dataProcessor', this.dataProcessor, this);
};
/**
* @hidden
* @returns {void}
*/
DataManipulation.prototype.removeEventListener = function () {
if (this.parent.isDestroyed) {
return;
}
this.parent.off(events.remoteExpand, this.collectExpandingRecs);
this.parent.off('updateRemoteLevel', this.updateParentRemoteData);
this.parent.off('updateAction', this.updateData);
this.parent.off('dataProcessor', this.dataProcessor);
this.parent.grid.off('sorting-begin', this.beginSorting);
};
/**
* To destroy the dataModule
*
* @returns {void}
* @hidden
*/
DataManipulation.prototype.destroy = function () {
this.removeEventListener();
};
/**
* @hidden
* @returns {boolean} -Returns whether remote data binding
*/
DataManipulation.prototype.isRemote = function () {
if (!(this.parent.dataSource instanceof DataManager)) {
return false;
}
return true;
// let gridData: DataManager = <DataManager>this.parent.dataSource;
// return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;
};
/**
* Function to manipulate datasource
*
* @param {Object} data - Provide tree grid datasource to convert to flat data
* @hidden
* @returns {void}
*/
DataManipulation.prototype.convertToFlatData = function (data) {
var _this = this;
this.parent.flatData = (!isNullOrUndefined(data) && Object.keys(data).length === 0
&& !(this.parent.dataSource instanceof DataManager) ?
this.parent.dataSource : []);
this.parent.parentData = [];
if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {
var dm = this.parent.dataSource;
if (this.parent.parentIdMapping) {
this.parent.query = isNullOrUndefined(this.parent.query) ?
new Query() : this.parent.query;
if (this.parent.parentIdMapping) {
var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });
if (this.parent.initialRender && !filterKey.length) {
this.parent.query.where(this.parent.parentIdMapping, 'equal', null);
this.parent.query.addParams('IdMapping', this.parent.idMapping);
}
}
if (!this.parent.hasChildMapping) {
var qry = this.parent.query.clone();
qry.queries = [];
qry = qry.select([this.parent.parentIdMapping]);
qry.isCountRequired = true;
dm.executeQuery(qry).then(function (e) {
_this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);
var req;
if (e.result) {
req = 0;
}
else {
req = 1;
}
if (req === 0) {
setValue('grid.contentModule.isLoaded', true, _this.parent);
if (!isNullOrUndefined(_this.zerothLevelData)) {
setValue('cancel', false, _this.zerothLevelData);
getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);
_this.zerothLevelData = null;
}
_this.parent.grid.hideSpinner();
}
});
}
}
}
else if (data instanceof Array) {
this.convertJSONData(data);
}
};
DataManipulation.prototype.convertJSONData = function (data) {
this.hierarchyData = [];
this.taskIds = [];
if (!this.parent.idMapping) {
this.hierarchyData = data;
}
else {
var keys = Object.keys(data);
for (var i = 0; i < keys.length; i++) {
var tempData = data[parseInt(i.toString(), 10)];
this.hierarchyData.push(extend({}, tempData));
if (!isNullOrUndefined(tempData[this.parent.idMapping])) {
this.taskIds.push(tempData[this.parent.idMapping]);
}
}
}
if (this.isSelfReference) {
var selfData = [];
var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()
.group(this.parent.parentIdMapping));
for (var i = 0; i < mappingData.length; i++) {
var groupData = mappingData[parseInt(i.toString(), 10)];
var index = this.taskIds.indexOf(groupData.key);
if (!isNullOrUndefined(groupData.key)) {
if (index > -1) {
var childData = (groupData.items);
this.hierarchyData[parseInt(index.toString(), 10)][this.parent.childMapping] = childData;
continue;
}
}
selfData.push.apply(selfData, groupData.items);
}
this.hierarchyData = this.selfReferenceUpdate(selfData);
}
if (!Object.keys(this.hierarchyData).length) {
var isGantt = 'isGantt';
var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent["" + isGantt];
this.parent.flatData = referenceData ? (this.parent.dataSource) : [];
}
else {
this.createRecords(this.hierarchyData);
}
this.storedIndex = -1;
};
// private crudActions(): void {
// if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {
// let oldUpdate: Function = this.parent.dataSource.adaptor.update;
// this.parent.dataSource.adaptor.update =
// function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {
// value = getPlainData(value);
// return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);
// }
// }
// }
DataManipulation.prototype.selfReferenceUpdate = function (selfData) {
var result = [];
while (this.hierarchyData.length > 0 && selfData.length > 0) {
var index = selfData.indexOf(this.hierarchyData[0]);
if (index === -1) {
this.hierarchyData.shift();
}
else {
result.push(this.hierarchyData.shift());
selfData.splice(index, 1);
}
}
return result;
};
/**
* Function to update the zeroth level parent records in remote binding
*
* @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid
* @hidden
* @returns {void}
*/
DataManipulation.prototype.updateParentRemoteData = function (args) {
var _this = this;
var actionArgs = 'actionArgs';
if (isRemoteData(this.parent) && this.parent.enableVirtualization && args["" + actionArgs].requestType === 'virtualscroll') {
this.parent.hideSpinner();
}
var records = args.result;
if (isRemoteData(this.parent) && this.parent.enableVirtualization && (args["" + actionArgs].requestType === 'virtualscroll' || args["" + actionArgs].action === 'clearFilter' || args["" + actionArgs].searchString === '')) {
this.parent.query.expands = [];
}
if (!this.parent.hasChildMapping && !this.parentItems.length &&
(this.parent.loadChildOnDemand)) {
this.zerothLevelData = args;
setValue('cancel', true, args);
}
else {
if (this.parent.loadChildOnDemand) {
var _loop_1 = function (rec) {
if (isCountRequired(this_1.parent) && records[parseInt(rec.toString(), 10)].hasChildRecords &&
this_1.parent.initialRender) {
records[parseInt(rec.toString(), 10)].expanded = false;
}
if (isRemoteData(this_1.parent) && this_1.parent.enableVirtualization) {
var childRecords_1 = [];
var parent_1 = this_1.parent;
records.filter(function (e) {
if (e["" + parent_1.parentIdMapping] === records[parseInt(rec.toString(), 10)]["" + parent_1.idMapping]) {
childRecords_1.push(e);
}
});
if (childRecords_1.length) {
records[parseInt(rec.toString(), 10)].expanded = true;
}
else if (records[parseInt(rec.toString(), 10)].hasChildRecords) {
records[parseInt(rec.toString(), 10)].expanded = false;
}
}
if (isNullOrUndefined(records[parseInt(rec.toString(), 10)].index)) {
records[parseInt(rec.toString(), 10)].taskData = extend({}, records[parseInt(rec.toString(), 10)]);
records[parseInt(rec.toString(), 10)].uniqueID = getUid(this_1.parent.element.id + '_data_');
setValue('uniqueIDCollection.' + records[parseInt(rec.toString(), 10)].uniqueID, records[parseInt(rec.toString(), 10)], this_1.parent);
if (isRemoteData(this_1.parent) && this_1.parent.enableVirtualization && records[parseInt(rec.toString(), 10)]["" + this_1.parent.parentIdMapping] && (isNullOrUndefined(records[parseInt(rec.toString(), 10)].level) || records[parseInt(rec.toString(), 10)].level === 0)) {
var parentID_1 = records[parseInt(rec.toString(), 10)]["" + this_1.parent.parentIdMapping];
var parentRec = records.find(function (record) { return record["" + _this.parent.idMapping] === parentID_1; });
if (parentRec) {
records[parseInt(rec.toString(), 10)].level = parentRec.level + 1;
}
}
else {
records[parseInt(rec.toString(), 10)].level = 0;
}
records[parseInt(rec.toString(), 10)].index = Math.ceil(Math.random() * 1000);
if ((records[parseInt(rec.toString(), 10)][this_1.parent.hasChildMapping] ||
this_1.parentItems.indexOf(records[parseInt(rec.toString(), 10)][this_1.parent.idMapping]) !== -1)) {
records[parseInt(rec.toString(), 10)].hasChildRecords = true;
}
records[parseInt(rec.toString(), 10)].checkboxState = 'uncheck';
}
};
var this_1 = this;
for (var rec = 0; rec < records.length; rec++) {
_loop_1(rec);
}
}
else {
var dataResults = 'dataResults';
var expandRecord = 'expandRecord';
if (!isNullOrUndefined(records) && !((!this.parent.loadChildOnDemand) && isCountRequired(this.parent) && !isNullOrUndefined(this.parent["" + dataResults]["" + expandRecord])) &&
!(isRemoteData(this.parent) && !this.parent.loadChildOnDemand && args["" + actionArgs].isExpandCollapse && this.parent.enableVirtualization)) {
this.convertToFlatData(records);
}
}
}
if (isRemoteData(this.parent) && !this.parent.loadChildOnDemand && args["" + actionArgs].isExpandCollapse && this.parent.enableVirtualization) {
args.result = records;
}
else if (isRemoteData(this.parent) && this.parent.enableVirtualization && this.parent.loadChildOnDemand) {
args.result = records;
}
else {
args.result = !this.parent.loadChildOnDemand ? this.parent.flatData : records;
}
if (isRemoteData(this.parent) && this.parent.enableVirtualization && !this.parent.loadChildOnDemand
&& this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0
&& this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {
var query = 'query';
var summaryQuery = args["" + query].queries.filter(function (q) { return q.fn === 'onAggregates'; });
args.result = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);
}
this.parent.notify('updateResults', args);
};
/**
* Function to manipulate datasource
*
* @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched
* @param {ITreeData} rowDetails.record - current expanding record
* @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element
* @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element
* @param {boolean} isChild - Specified whether current record is already a child record
* @hidden
* @returns {void}
*/
DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {
var gridRows = this.parent.getRows();
var name = 'name';
if (this.parent.rowTemplate) {
var rows = this.parent.getContentTable().rows;
gridRows = [].slice.call(rows);
}
var childRecord;
if (rowDetails.rows.length > 0) {
if (!isChild) {
rowDetails.record.expanded = true;
}
for (var i = 0; i < rowDetails.rows.length; i++) {
this.parent['toggleRowVisibility'](rowDetails.rows[parseInt(i.toString(), 10)], 'e-childrow-visible');
if (!this.parent.loadChildOnDemand) {
var targetEle = rowDetails.rows[parseInt(i.toString(), 10)].getElementsByClassName('e-treegridcollapse')[0];
childRecord = this.parent.rowTemplate ?
this.parent.grid.getCurrentViewRecords()[rowDetails.rows[parseInt(i.toString(), 10)].rowIndex] :
this.parent.grid.getRowObjectFromUID(rowDetails.rows[parseInt(i.toString(), 10)].getAttribute('data-Uid')).data;
if (!isNullOrUndefined(targetEle) && childRecord.expanded) {
addClass([targetEle], 'e-treegridexpand');
removeClass([targetEle], 'e-treegridcollapse');
}
var childRows = [];
childRows = gridRows.filter(function (r) {
return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));
});
if (childRows.length && childRecord.expanded) {
this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);
}
}
var expandingTd = rowDetails.rows[parseInt(i.toString(), 10)].querySelector('.e-detailrowcollapse');
if (!isNullOrUndefined(expandingTd)) {
this.parent.grid.detailRowModule.expand(expandingTd);
}
}
this.parent.grid.pageSettings.totalRecordsCount += rowDetails.rows.length;
}
else {
this.fetchRemoteChildData({ action: rowDetails["" + name], record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });
}
};
DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {
var _this = this;
var args = { row: rowDetails.parentRow, data: rowDetails.record };
var dm = this.parent.dataSource;
var qry = this.parent.grid.getDataModule().generateQuery();
var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });
qry.queries = clonequries;
qry.isCountRequired = true;
var idMappingValue = parseInt(rowDetails.record[this.parent.idMapping], 10);
if (isNaN(idMappingValue)) {
idMappingValue = rowDetails.record[this.parent.idMapping].toString();
}
if (this.parent.enableVirtualization && rowDetails.action === 'remoteExpand') {
qry.take(this.parent.pageSettings.pageSize);
var expandDetail = [];
expandDetail.push('ExpandingAction', idMappingValue.toString());
qry.expand(expandDetail);
}
else if (this.parent.enableVirtualization && rowDetails.action === 'collapse') {
qry.take(this.parent.grid.pageSettings.pageSize);
var expandDetail = [];
expandDetail.push('CollapsingAction', idMappingValue.toString());
qry.expand(expandDetail);
}
qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);
if (rowDetails.action === 'remoteExpand' && this.parent.grid.filterSettings && this.parent.grid.filterSettings.columns.length) {
var filterqry = this.parent.grid.getDataModule().generateQuery().queries.filter(function (e) { return e.fn !== 'onPage' && typeof e.e.predicates !== 'undefined'; });
qry.queries.push(filterqry[0]);
}
showSpinner(this.parent.element);
dm.executeQuery(qry).then(function (e) {
var remoteExpandedData = 'remoteExpandedData';
var remoteCollapsedData = 'remoteCollapsedData';
var level = 'level';
var datas = _this.parent.grid.currentViewData.slice();
var inx;
var idMapping = _this.parent.idMapping;
if (_this.parent['isGantt'] && _this.parent.loadChildOnDemand && _this.parent.hasChildMapping) {
for (var i = 0; i < _this.parent.grid.currentViewData.length; i++) {
if (rowDetails.record[idMapping] === _this.parent.grid.currentViewData[i][idMapping]) {
inx = i;
break;
}
}
}
else {
inx = datas.indexOf(rowDetails.record);
}
if (_this.parent.enableVirtualization && (rowDetails.action === 'collapse' || rowDetails.action === 'remoteExpand')) {
datas = [];
for (var i = 0; i < inx; i++) {
datas.push(_this.parent.grid.currentViewData[parseInt(i.toString(), 10)]);
}
}
if (inx === -1) {
_this.parent.grid.getRowsObject().forEach(function (rows) {
if (rows.data.uniqueID === rowDetails.record.uniqueID) {
inx = rows.index;
}
});
}
var haveChild = getObject('actual.nextLevel', e);
var result = e.result;
var resultChildData = [];
if (rowDetails.action === 'remoteExpand' && _this.parent.grid.filterModule && _this.parent.grid.filterModule['value']) {
for (var i = 0; i < datas.length; i++) {
if (Object.prototype.hasOwnProperty.call(datas[parseInt(i.toString(), 10)], _this.parent.parentIdMapping) && datas[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping] !== null && datas[parseInt(i.toString(), 10)].level === 0) {
datas.splice(i, 1);
i--;
}
}
for (var i = 0; i < result.length; i++) {
if (rowDetails.record['' + _this.parent.idMapping] !== result[parseInt(i.toString(), 10)]['' + _this.parent.idMapping] &&
rowDetails.record['' + _this.parent.idMapping] === result[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping]) {
if (Object.prototype.hasOwnProperty.call(result, i)) {
resultChildData.push(result[parseInt(i.toString(), 10)]);
}
}
}
result = resultChildData;
}
if (_this.parent.enableVirtualization && rowDetails.action === 'remoteExpand') {
rowDetails.record.childRecords = [];
for (var i = 0; i < result.length; i++) {
if (rowDetails.record['' + _this.parent.idMapping] !== result[parseInt(i.toString(), 10)]['' + _this.parent.idMapping] &&
rowDetails.record['' + _this.parent.idMapping] === result[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping] && Object.prototype.hasOwnProperty.call(result, i)) {
rowDetails.record.childRecords.push(result[parseInt(i.toString(), 10)]);
}
}
}
else {
rowDetails.record.childRecords = result;
}
for (var r = 0; r < result.length; r++) {
var record = result[parseInt(r.toString(), 10)];
if (_this.parent.enableVirtualization && record["" + _this.parent.idMapping] === rowDetails.record["" + _this.parent.idMapping] && rowDetails.action === 'remoteExpand') {
_this.parent["" + remoteExpandedData].push(rowDetails.record);
}
else if (_this.parent.enableVirtualization && record["" + _this.parent.idMapping] === rowDetails.record["" + _this.parent.idMapping] && rowDetails.action === 'collapse') {
for (var i = 0; i < _this.parent["" + remoteExpandedData].length; i++) {
if (rowDetails.record["" + _this.parent.idMapping] === _this.parent["" + remoteExpandedData][parseInt(i.toString(), 10)]["" + _this.parent.idMapping]) {
_this.parent["" + remoteExpandedData].splice(i, 1);
}
}
}
record.taskData = extend({}, record);
if (record["" + _this.parent.parentIdMapping] && _this.parent.enableVirtualization && _this.parent["" + remoteExpandedData].length) {
for (var i = 0; i < _this.parent["" + remoteExpandedData].length; i++) {
if (record["" + _this.parent.parentIdMapping] === _this.parent["" + remoteExpandedData][parseInt(i.toString(), 10)]["" + _this.parent.idMapping]) {
record.level = _this.parent["" + remoteExpandedData][parseInt(i.toString(), 10)]["" + level] + 1;
var parentData = _this.parent["" + remoteExpandedData][parseInt(i.toString(), 10)];
delete parentData.childRecords;
record.parentItem = parentData;
record.parentUniqueID = parentData.uniqueID;
}
}
}
else if (_this.parent.enableVirtualization) {
if ((record["" + _this.parent.hasChildMapping] ||
_this.parentItems.indexOf(record["" + _this.parent.idMapping]) !== -1)
&& !(haveChild && !haveChild[parseInt(r.toString(), 10)])) {
if (isNullOrUndefined(record["" + _this.parent.parentIdMapping])) {
record.level = 0;
if (rowDetails.action === 'remoteExpand') {
record.childRecords = [];
record.childRecords = rowDetails.record.childRecords;
}
}
else {
record.level = rowDetails.record.level;
}
}
else {
var parentData = extend({}, rowDetails.record);
delete parentData.childRecords;
record.parentItem = parentData;
record.parentUniqueID = rowDetails.record.uniqueID;
}
}
else {
record.level = rowDetails.record.level + 1;
var parentData = extend({}, rowDetails.record);
delete parentData.childRecords;
record.parentItem = parentData;
record.parentUniqueID = rowDetails.record.uniqueID;
}
record.index = Math.ceil(Math.random() * 1000);
record.uniqueID = getUid(_this.parent.element.id + '_data_');
if (rowDetails.record["" + _this.parent.idMapping] === record["" + _this.parent.idMapping]) {
rowDetails.record.uniqueID = record.uniqueID;
}
record.checkboxState = 'uncheck';
if (_this.parent.enableVirtualization && isNullOrUndefined(record.level)) {
for (var p = 0; p < _this.parent.grid.currentViewData.length; p++) {
if (_this.parent.grid.currentViewData[parseInt(p.toString(), 10)]["" + _this.parent.idMapping] === record["" + _this.parent.parentIdMapping]) {
record.level = _this.parent.grid.currentViewData[parseInt(p.toString(), 10)]['level'] + 1;
}
}
}
setValue('uniqueIDCollection.' + record.uniqueID, record, _this.parent);
// delete result[r].parentItem.childRecords;
if ((record["" + _this.parent.hasChildMapping] ||
_this.parentItems.indexOf(record["" + _this.parent.idMapping]) !== -1)
&& !(haveChild && !haveChild[parseInt(r.toString(), 10)])) {
record.hasChildRecords = true;
if (_this.parent.enableVirtualization && !_this.parent.loadChildOnDemand) {
for (var i = 0; i < _this.parent["" + remoteCollapsedData].length; i++) {
if (record["" + _this.parent.idMapping] === _this.parent["" + remoteCollapsedData][parseInt(i.toString(), 10)]["" + _this.parent.idMapping]) {
record.expanded = _this.parent["" + remoteCollapsedData][parseInt(i.toString(), 10)]['expanded'];
}
}
if (rowDetails.action === 'collapse' && record["" + _this.parent.idMapping] !== rowDetails.record["" + _this.parent.idMapping] && record.expanded !== false) {
record.expanded = true;
}
else if (rowDetails.action === 'collapse' && record["" + _this.parent.idMapping] === rowDetails.record["" + _this.parent.idMapping]) {
record.expanded = false;
_this.parent["" + remoteCollapsedData].push(rowDetails.record);
}
else if (rowDetails.action === 'remoteExpand') {
for (var i = 0; i < _this.parent.grid.currentViewData.length; i++) {
if (_this.parent.grid.currentViewData[parseInt(i.toString(), 10)]["" + _this.parent.idMapping] === record["" + _this.parent.idMapping]) {
result.splice(r, 1, _this.parent.grid.currentViewData[parseInt(i.toString(), 10)]);
}
}
if (record[_this.parent.idMapping] === rowDetails.record["" + _this.parent.idMapping]) {
for (var i = 0; i < _this.parent["" + remoteCollapsedData].length; i++) {
if (rowDetails.record["" + _this.parent.idMapping] === _this.parent["" + remoteCollapsedData][parseInt(i.toString(), 10)]["" + _this.parent.idMapping]) {
_this.parent["" + remoteCollapsedData].splice(i, 1);
}
}
}
if (record.expanded !== false) {
record.expanded = true;
}
}
}
else if (_this.parent.enableVirtualization && record["" + _this.parent.idMapping] === rowDetails.record["" + _this.parent.idMapping] && rowDetails.action !== 'collapse') {
record.expanded = true;
}
else if (!(_this.parent.enableVirtualization && !_this.parent.loadChildOnDemand)) {
record.expanded = false;
}
}
datas.splice(inx + r + 1, 0, record);
}
setValue('result', datas, e);
setValue('action', 'beforecontentrender', e);
_this.parent.trigger(events.actionComplete, e);
hideSpinner(_this.parent.element);
if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {
var gridQuery = getObject('query', e);
var result_1 = 'result';
if (isNullOrUndefined(gridQuery)) {
gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());
}
if (!isNullOrUndefined(gridQuery)) {
var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });
e["" + result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e["" + result_1], true);
}
}
if (rowDetails.action === 'remoteExpand' && _this.parent.allowPaging && _this.parent.pageSettings.pageSizeMode === 'All') {
_this.parent.grid.pageSettings.totalRecordsCount = _this.parent.grid.pageSettings.totalRecordsCount + result.length;
}
if (_this.parent.enableVirtualization) {
_this.parent.grid.pageSettings.totalRecordsCount = e.count;
}
e.count = _this.parent.grid.pageSettings.totalRecordsCount;
var virtualArgs = {};
if (_this.parent.enableVirtualization) {
_this.remoteVirtualAction(virtualArgs);
}
var notifyArgs = { index: inx, childData: result };
if (_this.parent.enableInfiniteScrolling) {
_this.parent.notify('infinite-remote-expand', notifyArgs);
}
else {
getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);
}
_this.parent.trigger(events.expanded, args);
});
};
DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {
virtualArgs.requestType = 'refresh';
setValue('isExpandCollapse', true, virtualArgs);
var contentModule = getValue('grid.contentModule', this.parent);
var currentInfo = getValue('currentInfo', contentModule);
var prevInfo = getValue('prevInfo', contentModule);
if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {
this.parent.grid.pageSettings.currentPage = prevInfo.page;
}
};
DataManipulation.prototype.beginSorting = function () {
this.isSortAction = true;
if (isRemoteData(this.parent) && this.parent.enableVirtualization) {
var index = this.parent.query.queries.indexOf(this.parent.query.queries.filter(function (q) { return q.fn === 'onSortBy'; })[0]);
if (index !== -1) {
this.parent.query.queries.splice(index, 1);
}
if (this.parent.grid.sortSettings.columns.length === 0) {
this.parent.query.sortBy(null, null);
}
}
};
DataManipulation.prototype.createRecords = function (data, parentRecords) {
var treeGridData = [];
var keys = Object.keys(data);
for (var i = 0, len = keys.length; i < len; i++) {
var currentData = extend({}, data[parseInt(i.toString(), 10)]);
currentData.taskData = data[parseInt(i.toString(), 10)];
var level = 0;
this.storedIndex++;
if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {
currentData.index = this.storedIndex;
}
var childMapping = currentData[this.parent.childMapping];
var hasChildren = !isNullOrUndefined(childMapping) && childMapping.length > 0;
var shouldCount = isCountRequired(this.parent);
var hasChildMapping = currentData[this.parent.hasChildMapping];
if ((hasChildren && !shouldCount) || (hasChildMapping && shouldCount)) {
currentData.hasChildRecords = true;
}
else {
currentData.hasChildRecords = false;
}
if ((!isNullOrUndefined(childMapping) && !shouldCount) ||
(hasChildMapping) && shouldCount) {
if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)
&& isNullOrUndefined(childMapping)) {
currentData.expanded = false;
}
else {
currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])
? currentData[this.parent.expandStateMapping] : true;
}
}
if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {
currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;
}
if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {
this.parent.parentData.push(currentData);
}
currentData.uniqueID = getUid(this.parent.element.id + '_data_');
setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);
if (!isNullOrUndefined(parentRecords)) {
var parentData = extend({}, parentRecords);
delete parentData.childRecords;
delete parentData[this.parent.childMapping];
if (this.isSelfReference) {
delete parentData.taskData[this.parent.childMapping];
}
currentData.parentItem = parentData;
currentData.parentUniqueID = parentData.uniqueID;
level = parentRecords.level + 1;
}
if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {
currentData.level = level;
}
currentData.checkboxState = 'uncheck';
var remoteCollapsedData = 'remoteCollapsedData';
if (this.parent.enableVirtualization && !this.parent.loadChildOnDemand && isRemoteData(this.parent)
&& !this.parent.initialRender) {
if (!currentData.hasChildRecords && isNullOrUndefined(currentData["" + this.parent.parentIdMapping])) {
currentData.hasChildRecords = true;
for (var c = 0; c < this.parent["" + remoteCollapsedData].length; c++) {
if (this.parent["" + remoteCollapsedData][parseInt(c.toString(), 10)]["" + this.parent.idMapping] === currentData["" + this.parent.idMapping]) {
currentData.expanded = false;
}
}
}
else if (currentData.level === 0 && isNullOrUndefined(parentRecords) && !currentData.hasChildRecords) {
currentData.level = currentData.level + 1;
}
if (currentData["" + this.parent.hasChildMapping] && !isNullOrUndefined(currentData["" + this.parent.expandStateMapping])) {
currentData.expanded = currentData["" + this.parent.expandStateMapping];
currentData.hasChildRecords = true;
}
this.parent.flatData.push(currentData);
}
else if (isNullOrUndefined(currentData["" + this.parent.parentIdMapping]) || currentData.parentItem) {
if (!isNullOrUndefined(this.parent.rowDropSettings.targetID)) {
if (!this.parent.rowDragAndDropModule['isDuplicateData'](currentData)) {
this.parent.flatData.push(currentData);
}
}
else {
this.parent.flatData.push(currentData);
}
this.parent['infiniteScrollData'].push(currentData);
}
if (!this.isSelfReference && currentData.level === 0) {
this.parent.parentData.push(currentData);
}
if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {
var record = this.createRecords(currentData[this.parent.childMapping], currentData);
currentData.childRecords = record;
}
treeGridData.push(currentData);
}
return treeGridData;
};
/**
* Function to perform filtering/sorting action for local data
*
* @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid
* @hidden
* @returns {void}
*/
DataManipulation.prototype.dataProcessor = function (args) {
var isExport = getObject('isExport', args);
var expresults = getObject('expresults', args);
var exportType = getObject('exportType', args);
var isPrinting = getObject('isPrinting', args);
var dataObj;
var actionArgs = getObject('actionArgs', args);
var requestType = getObject('requestType', args);
var actionData = getObject('data', args);
var action = getObject('action', args);
var actionAddArgs = actionArgs;
var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];
var dataValue = getObject('data', actionAddArgs);
if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')
&& (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data["" + primaryKeyColumnName])) {
actionAddArgs.data["" + primaryKeyColumnName] = args.result[actionAddArgs.index]["" + primaryKeyColumnName];
dataValue.taskData["" + primaryKeyColumnName] = args.result[actionAddArgs.index]["" + primaryKeyColumnName];
}
if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {
requestType = requestType ? requestType : actionArgs.requestType;
actionData = actionData ? actionData : getObject('data', actionArgs);
action = action ? action : getObject('action', actionArgs);
if (this.parent.editSettings.mode === 'Batch') {
this.batchChanges = this.parent.grid.editModule.getBatchChanges();
}
if (this.parent.isLocalData) {
this.updateAction(actionData, action, requestType);
}
}
if (isExport && !isNullOrUndefined(expresults)) {
dataObj = expresults;
}
else {
dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)
: this.parent.grid.dataSource;
}
var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;
var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)
: results.length;
var qry = new Query();
var gridQuery = getObject('query', args);
var filterQuery;
var searchQuery;
if (!isNullOrUndefined(gridQuery)) {
filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });
searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });
}
if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||
(this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&
(filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {
if (isNullOrUndefined(gridQuery)) {
gridQuery = new Query();
gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);
gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);
}
var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });
var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });
qry.queries = fltrQuery.concat(srchQuery);
var filteredData = new DataManager(results).executeLocal(qry);
this.parent.notify('updateFilterRecs', { data: filteredData });
results = this.dataResults.result;
this.dataResults.result = null;
if (this.parent.grid.aggregates.length > 0) {
var query = getObject('query', args);
if (isNullOrUndefined(gridQuery)) {
gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());
}
if (!isNullOrUndefined(query)) {
var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });
results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);
}
}
}
if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0
&& this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {
var gridQuery_1 = getObject('query', args);
if (isNullOrUndefined(gridQuery_1)) {
gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());
}
var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });
results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);
}
if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {
this.isSortAction = false;
var parentData = this.parent.parentData;
var query = getObject('query', args);
var srtQry = new Query();
for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {
var getColumnByField = 'getColumnByField';
var col = this.parent.grid.renderModule.data["" + getColumnByField](this.parent.grid.
sortSettings.columns[parseInt(srt.toString(), 10)].field);
var compFun = col.sortComparer && isOffline(this.parent) ?
col.sortComparer.bind(col) :
this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].direction;
srtQry.sortBy(this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].field, compFun);
}
var modifiedData = new DataManager(parentData).executeLocal(srtQry);
if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&
this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {
var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);
modifiedData.splice(dragdIndex, 1);
var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);
if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {
modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);
}
else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {
modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);
}
}
var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };
this.parent.notify('createSort', sortArgs);
results = sortArgs.modifiedData;
this.dataResults.result = null;
this.sortedData = results;
this.parent.notify('updateModel', {});
if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {
var isSort = false;
var query_1 = getObject('query', args);
var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });
results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);
}
}
count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)
: results.length;
var temp = this.paging(results, count, isExport, isPrinting, exportType, args);
results = temp.result;
count = temp.count;
args.result = results;
args.count = count;
this.parent.notify('updateResults', args);
};
DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {
if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')
&& (!isPrinting || this.parent.printMode === 'CurrentPage')) {
this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: args });
results = this.dataResults.result;
count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)
: this.dataResults.count;
}
else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')
&& getValue('requestType', args) !== 'save') {
var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);
this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });
results = this.dataResults.result;
count = this.dataResults.count;
}
var isPdfExport = 'isPdfExport';
var isCollapsedStatePersist = 'isCollapsedStatePersist';
if ((isPrinting === true || (args["" + isPdfExport] && (isNullOrUndefined(args["" + isCollapsedStatePersist])
|| args["" + isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {
var actualResults = [];
for (var i = 0; i < results.length; i++) {
var expandStatus = getExpandStatus(this.parent, results[parseInt(i.toString(), 10)], this.parent.parentData);
if (expandStatus) {
actualResults.push(results[parseInt(i.toString(), 10)]);
}
}
results = actualResults;
count = results.length;
}
var value = { result: results, count: count };
return value;
};
DataManipulation.pr