@syncfusion/ej2-treegrid
Version:
Essential JS 2 TreeGrid Component
134 lines (133 loc) • 5.28 kB
JavaScript
import { isNullOrUndefined } from '@syncfusion/ej2-base';
import { DataManager } from '@syncfusion/ej2-data';
import { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';
import { getParentData } from '../utils';
/**
* Internal dataoperations for TreeGrid
*
* @hidden
*/
var Sort = /** @class */ (function () {
function Sort(grid) {
Grid.Inject(GridSort);
this.parent = grid;
this.taskIds = [];
this.flatSortedData = [];
this.storedIndex = -1;
this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);
this.addEventListener();
}
/**
* For internal use only - Get the module name.
*
* @private
* @returns {string} Returns Sort module name
*/
Sort.prototype.getModuleName = function () {
return 'sort';
};
/**
* @hidden
*/
Sort.prototype.addEventListener = function () {
this.parent.on('updateModel', this.updateModel, this);
this.parent.on('createSort', this.createdSortedRecords, this);
};
/**
* @hidden
* @returns {void}
*/
Sort.prototype.removeEventListener = function () {
if (this.parent.isDestroyed) {
return;
}
this.parent.off('updateModel', this.updateModel);
this.parent.off('createSort', this.createdSortedRecords);
};
Sort.prototype.createdSortedRecords = function (sortParams) {
var data = sortParams.modifiedData;
var srtQry = sortParams.srtQry;
this.iterateSort(data, srtQry);
this.storedIndex = -1;
sortParams.modifiedData = this.flatSortedData;
this.flatSortedData = [];
};
Sort.prototype.iterateSort = function (data, srtQry) {
var gridQuery = this.parent.query;
var filterQuery = [];
if (!isNullOrUndefined(gridQuery)) {
filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });
}
for (var d = 0; d < data.length; d++) {
if (filterQuery.length > 0 || this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {
if (!isNullOrUndefined(getParentData(this.parent, data[parseInt(d.toString(), 10)].uniqueID, true))) {
this.storedIndex++;
this.flatSortedData[this.storedIndex] = data[parseInt(d.toString(), 10)];
}
}
else {
this.storedIndex++;
this.flatSortedData[this.storedIndex] = data[parseInt(d.toString(), 10)];
}
if (data[parseInt(d.toString(), 10)].hasChildRecords) {
var childSort = (new DataManager(data[parseInt(d.toString(), 10)].childRecords)
.executeLocal(srtQry));
if (this.parent.allowRowDragAndDrop && data[parseInt(d.toString(), 10)].childRecords.indexOf(this.parent.rowDragAndDropModule['draggedRecord']) !== -1 && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {
var dragdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);
childSort.splice(dragdIndex, 1);
var dropdIndex = childSort.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);
if (this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {
childSort.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);
}
else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {
childSort.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);
}
}
this.iterateSort(childSort, srtQry);
}
}
};
/**
* Sorts a column with the given options.
*
* @param {string} columnName - Defines the column name to be sorted.
* @param {SortDirection} direction - Defines the direction of sorting field.
* @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.
* @returns {void}
*/
Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {
this.parent.grid.sortColumn(columnName, direction, isMultiSort);
};
Sort.prototype.removeSortColumn = function (field) {
this.parent.grid.removeSortColumn(field);
};
/**
* The function used to update sortSettings of TreeGrid.
*
* @returns {void}
* @hidden
*/
Sort.prototype.updateModel = function () {
this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);
};
/**
* Clears all the sorted columns of the TreeGrid.
*
* @returns {void}
*/
Sort.prototype.clearSorting = function () {
this.parent.grid.clearSorting();
this.updateModel();
};
/**
* Destroys the Sorting of TreeGrid.
*
* @function destroy
* @returns {void}
*/
Sort.prototype.destroy = function () {
this.removeEventListener();
};
return Sort;
}());
export { Sort };