UNPKG

8.37 kBJavaScriptView Raw
1/**
2 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
3 * @version v18.1.2
4 * @link http://www.ag-grid.com/
5 * @license MIT
6 */
7"use strict";
8var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12 return c > 3 && r && Object.defineProperty(target, key, r), r;
13};
14var __metadata = (this && this.__metadata) || function (k, v) {
15 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16};
17Object.defineProperty(exports, "__esModule", { value: true });
18var context_1 = require("../context/context");
19var sortController_1 = require("../sortController");
20var utils_1 = require("../utils");
21var valueService_1 = require("../valueService/valueService");
22var gridOptionsWrapper_1 = require("../gridOptionsWrapper");
23var columnController_1 = require("../columnController/columnController");
24var SortService = (function () {
25 function SortService() {
26 }
27 SortService.prototype.init = function () {
28 this.postSortFunc = this.gridOptionsWrapper.getPostSortFunc();
29 };
30 SortService.prototype.sortAccordingToColumnsState = function (rowNode) {
31 var sortOptions = this.sortController.getSortForRowController();
32 this.sort(rowNode, sortOptions);
33 };
34 SortService.prototype.sort = function (rowNode, sortOptions) {
35 var _this = this;
36 rowNode.childrenAfterSort = rowNode.childrenAfterFilter.slice(0);
37 // we clear out the 'pull down open parents' first, as the values mix up the sorting
38 this.pullDownDataForHideOpenParents(rowNode, true);
39 var sortActive = utils_1._.exists(sortOptions) && sortOptions.length > 0;
40 if (sortActive) {
41 // RE https://ag-grid.atlassian.net/browse/AG-444
42 //Javascript sort is non deterministic when all the array items are equals
43 //ie Comparator always returns 0, so if you want to ensure the array keeps its
44 //order, then you need to add an additional sorting condition manually, in this
45 //case we are going to inspect the original array position
46 var sortedRowNodes = rowNode.childrenAfterSort.map(function (it, pos) {
47 return { currentPos: pos, rowNode: it };
48 });
49 sortedRowNodes.sort(this.compareRowNodes.bind(this, sortOptions));
50 rowNode.childrenAfterSort = sortedRowNodes.map(function (sorted) { return sorted.rowNode; });
51 }
52 this.updateChildIndexes(rowNode);
53 this.pullDownDataForHideOpenParents(rowNode, false);
54 // sort any groups recursively
55 rowNode.childrenAfterFilter.forEach(function (child) {
56 if (child.hasChildren()) {
57 _this.sort(child, sortOptions);
58 }
59 });
60 if (this.postSortFunc) {
61 this.postSortFunc(rowNode.childrenAfterSort);
62 }
63 };
64 SortService.prototype.compareRowNodes = function (sortOptions, sortedNodeA, sortedNodeB) {
65 var nodeA = sortedNodeA.rowNode;
66 var nodeB = sortedNodeB.rowNode;
67 // Iterate columns, return the first that doesn't match
68 for (var i = 0, len = sortOptions.length; i < len; i++) {
69 var sortOption = sortOptions[i];
70 // let compared = compare(nodeA, nodeB, sortOption.column, sortOption.inverter === -1);
71 var isInverted = sortOption.inverter === -1;
72 var valueA = this.getValue(nodeA, sortOption.column);
73 var valueB = this.getValue(nodeB, sortOption.column);
74 var comparatorResult = void 0;
75 if (sortOption.column.getColDef().comparator) {
76 //if comparator provided, use it
77 comparatorResult = sortOption.column.getColDef().comparator(valueA, valueB, nodeA, nodeB, isInverted);
78 }
79 else {
80 //otherwise do our own comparison
81 comparatorResult = utils_1._.defaultComparator(valueA, valueB, this.gridOptionsWrapper.isAccentedSort());
82 }
83 if (comparatorResult !== 0) {
84 return comparatorResult * sortOption.inverter;
85 }
86 }
87 // All matched, we make is so that the original sort order is kept:
88 return sortedNodeA.currentPos - sortedNodeB.currentPos;
89 };
90 SortService.prototype.getValue = function (nodeA, column) {
91 return this.valueService.getValue(column, nodeA);
92 };
93 SortService.prototype.updateChildIndexes = function (rowNode) {
94 if (utils_1._.missing(rowNode.childrenAfterSort)) {
95 return;
96 }
97 rowNode.childrenAfterSort.forEach(function (child, index) {
98 var firstChild = index === 0;
99 var lastChild = index === rowNode.childrenAfterSort.length - 1;
100 child.setFirstChild(firstChild);
101 child.setLastChild(lastChild);
102 child.setChildIndex(index);
103 });
104 };
105 SortService.prototype.pullDownDataForHideOpenParents = function (rowNode, clearOperation) {
106 var _this = this;
107 if (utils_1._.missing(rowNode.childrenAfterSort)) {
108 return;
109 }
110 if (!this.gridOptionsWrapper.isGroupHideOpenParents()) {
111 return;
112 }
113 rowNode.childrenAfterSort.forEach(function (childRowNode) {
114 var groupDisplayCols = _this.columnController.getGroupDisplayColumns();
115 groupDisplayCols.forEach(function (groupDisplayCol) {
116 var showRowGroup = groupDisplayCol.getColDef().showRowGroup;
117 if (typeof showRowGroup !== 'string') {
118 console.error('ag-Grid: groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup');
119 return;
120 }
121 var displayingGroupKey = showRowGroup;
122 var rowGroupColumn = _this.columnController.getPrimaryColumn(displayingGroupKey);
123 var thisRowNodeMatches = rowGroupColumn === childRowNode.rowGroupColumn;
124 if (thisRowNodeMatches) {
125 return;
126 }
127 if (clearOperation) {
128 // if doing a clear operation, we clear down the value for every possible group column
129 childRowNode.setGroupValue(groupDisplayCol.getId(), null);
130 }
131 else {
132 // if doing a set operation, we set only where the pull down is to occur
133 var parentToStealFrom = childRowNode.getFirstChildOfFirstChild(rowGroupColumn);
134 if (parentToStealFrom) {
135 childRowNode.setGroupValue(groupDisplayCol.getId(), parentToStealFrom.key);
136 }
137 }
138 });
139 });
140 };
141 __decorate([
142 context_1.Autowired('sortController'),
143 __metadata("design:type", sortController_1.SortController)
144 ], SortService.prototype, "sortController", void 0);
145 __decorate([
146 context_1.Autowired('columnController'),
147 __metadata("design:type", columnController_1.ColumnController)
148 ], SortService.prototype, "columnController", void 0);
149 __decorate([
150 context_1.Autowired('valueService'),
151 __metadata("design:type", valueService_1.ValueService)
152 ], SortService.prototype, "valueService", void 0);
153 __decorate([
154 context_1.Autowired('gridOptionsWrapper'),
155 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
156 ], SortService.prototype, "gridOptionsWrapper", void 0);
157 __decorate([
158 context_1.PostConstruct,
159 __metadata("design:type", Function),
160 __metadata("design:paramtypes", []),
161 __metadata("design:returntype", void 0)
162 ], SortService.prototype, "init", null);
163 SortService = __decorate([
164 context_1.Bean('sortService')
165 ], SortService);
166 return SortService;
167}());
168exports.SortService = SortService;