UNPKG

@syncfusion/ej2-treegrid

Version:
134 lines (133 loc) 5.28 kB
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 };