UNPKG

14 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};
17var __param = (this && this.__param) || function (paramIndex, decorator) {
18 return function (target, key) { decorator(target, key, paramIndex); }
19};
20Object.defineProperty(exports, "__esModule", { value: true });
21var gridOptionsWrapper_1 = require("../gridOptionsWrapper");
22var logger_1 = require("../logger");
23var columnUtils_1 = require("../columnController/columnUtils");
24var columnKeyCreator_1 = require("./columnKeyCreator");
25var originalColumnGroup_1 = require("../entities/originalColumnGroup");
26var column_1 = require("../entities/column");
27var context_1 = require("../context/context");
28var utils_1 = require("../utils");
29var defaultColumnTypes_1 = require("../entities/defaultColumnTypes");
30// takes in a list of columns, as specified by the column definitions, and returns column groups
31var BalancedColumnTreeBuilder = (function () {
32 function BalancedColumnTreeBuilder() {
33 }
34 BalancedColumnTreeBuilder.prototype.setBeans = function (loggerFactory) {
35 this.logger = loggerFactory.create('BalancedColumnTreeBuilder');
36 };
37 BalancedColumnTreeBuilder.prototype.createForAutoGroups = function (autoGroupCols, gridBalancedTree) {
38 var _this = this;
39 var autoColBalancedTree = [];
40 autoGroupCols.forEach(function (col) {
41 var fakeTreeItem = _this.createAutoGroupTreeItem(gridBalancedTree, col);
42 autoColBalancedTree.push(fakeTreeItem);
43 });
44 return autoColBalancedTree;
45 };
46 BalancedColumnTreeBuilder.prototype.createAutoGroupTreeItem = function (balancedColumnTree, column) {
47 var dept = this.findDept(balancedColumnTree);
48 // at the end, this will be the top of the tree item.
49 var nextChild = column;
50 for (var i = dept - 1; i >= 0; i--) {
51 var autoGroup = new originalColumnGroup_1.OriginalColumnGroup(null, "FAKE_PATH_" + column.getId() + "}_" + i, true, i);
52 this.context.wireBean(autoGroup);
53 autoGroup.setChildren([nextChild]);
54 nextChild = autoGroup;
55 }
56 // at this point, the nextChild is the top most item in the tree
57 return nextChild;
58 };
59 BalancedColumnTreeBuilder.prototype.findDept = function (balancedColumnTree) {
60 var dept = 0;
61 var pointer = balancedColumnTree;
62 while (pointer && pointer[0] && pointer[0] instanceof originalColumnGroup_1.OriginalColumnGroup) {
63 dept++;
64 pointer = pointer[0].getChildren();
65 }
66 return dept;
67 };
68 BalancedColumnTreeBuilder.prototype.createBalancedColumnGroups = function (abstractColDefs, primaryColumns) {
69 // column key creator dishes out unique column id's in a deterministic way,
70 // so if we have two grids (that cold be master/slave) with same column definitions,
71 // then this ensures the two grids use identical id's.
72 var columnKeyCreator = new columnKeyCreator_1.ColumnKeyCreator();
73 // create am unbalanced tree that maps the provided definitions
74 var unbalancedTree = this.recursivelyCreateColumns(abstractColDefs, 0, columnKeyCreator, primaryColumns);
75 var treeDept = this.findMaxDept(unbalancedTree, 0);
76 this.logger.log('Number of levels for grouped columns is ' + treeDept);
77 var balancedTree = this.balanceColumnTree(unbalancedTree, 0, treeDept, columnKeyCreator);
78 this.columnUtils.depthFirstOriginalTreeSearch(balancedTree, function (child) {
79 if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
80 child.setupExpandable();
81 }
82 });
83 return {
84 balancedTree: balancedTree,
85 treeDept: treeDept
86 };
87 };
88 BalancedColumnTreeBuilder.prototype.balanceColumnTree = function (unbalancedTree, currentDept, columnDept, columnKeyCreator) {
89 var _this = this;
90 var result = [];
91 // go through each child, for groups, recurse a level deeper,
92 // for columns we need to pad
93 unbalancedTree.forEach(function (child) {
94 if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
95 var originalGroup = child;
96 var newChildren = _this.balanceColumnTree(originalGroup.getChildren(), currentDept + 1, columnDept, columnKeyCreator);
97 originalGroup.setChildren(newChildren);
98 result.push(originalGroup);
99 }
100 else {
101 var newChild = child;
102 for (var i = columnDept - 1; i >= currentDept; i--) {
103 var newColId = columnKeyCreator.getUniqueKey(null, null);
104 var colGroupDefMerged = _this.createMergedColGroupDef(null);
105 var paddedGroup = new originalColumnGroup_1.OriginalColumnGroup(colGroupDefMerged, newColId, true, currentDept);
106 _this.context.wireBean(paddedGroup);
107 paddedGroup.setChildren([newChild]);
108 newChild = paddedGroup;
109 }
110 result.push(newChild);
111 }
112 });
113 return result;
114 };
115 BalancedColumnTreeBuilder.prototype.findMaxDept = function (treeChildren, dept) {
116 var maxDeptThisLevel = dept;
117 for (var i = 0; i < treeChildren.length; i++) {
118 var abstractColumn = treeChildren[i];
119 if (abstractColumn instanceof originalColumnGroup_1.OriginalColumnGroup) {
120 var originalGroup = abstractColumn;
121 var newDept = this.findMaxDept(originalGroup.getChildren(), dept + 1);
122 if (maxDeptThisLevel < newDept) {
123 maxDeptThisLevel = newDept;
124 }
125 }
126 }
127 return maxDeptThisLevel;
128 };
129 BalancedColumnTreeBuilder.prototype.recursivelyCreateColumns = function (abstractColDefs, level, columnKeyCreator, primaryColumns) {
130 var _this = this;
131 var result = [];
132 if (!abstractColDefs) {
133 return result;
134 }
135 abstractColDefs.forEach(function (abstractColDef) {
136 var newGroupOrColumn;
137 if (_this.isColumnGroup(abstractColDef)) {
138 newGroupOrColumn = _this.createColumnGroup(columnKeyCreator, primaryColumns, abstractColDef, level);
139 }
140 else {
141 newGroupOrColumn = _this.createColumn(columnKeyCreator, primaryColumns, abstractColDef);
142 }
143 result.push(newGroupOrColumn);
144 });
145 return result;
146 };
147 BalancedColumnTreeBuilder.prototype.createColumnGroup = function (columnKeyCreator, primaryColumns, colGroupDef, level) {
148 var colGroupDefMerged = this.createMergedColGroupDef(colGroupDef);
149 var groupId = columnKeyCreator.getUniqueKey(colGroupDefMerged.groupId, null);
150 var originalGroup = new originalColumnGroup_1.OriginalColumnGroup(colGroupDefMerged, groupId, false, level);
151 this.context.wireBean(originalGroup);
152 var children = this.recursivelyCreateColumns(colGroupDefMerged.children, level + 1, columnKeyCreator, primaryColumns);
153 originalGroup.setChildren(children);
154 return originalGroup;
155 };
156 BalancedColumnTreeBuilder.prototype.createMergedColGroupDef = function (colGroupDef) {
157 var colGroupDefMerged = {};
158 utils_1.Utils.assign(colGroupDefMerged, this.gridOptionsWrapper.getDefaultColGroupDef());
159 utils_1.Utils.assign(colGroupDefMerged, colGroupDef);
160 this.checkForDeprecatedItems(colGroupDefMerged);
161 return colGroupDefMerged;
162 };
163 BalancedColumnTreeBuilder.prototype.createColumn = function (columnKeyCreator, primaryColumns, colDef) {
164 var colDefMerged = this.mergeColDefs(colDef);
165 this.checkForDeprecatedItems(colDefMerged);
166 var colId = columnKeyCreator.getUniqueKey(colDefMerged.colId, colDefMerged.field);
167 var column = new column_1.Column(colDefMerged, colId, primaryColumns);
168 this.context.wireBean(column);
169 return column;
170 };
171 BalancedColumnTreeBuilder.prototype.mergeColDefs = function (colDef) {
172 // start with empty merged definition
173 var colDefMerged = {};
174 // merge properties from default column definitions
175 utils_1.Utils.assign(colDefMerged, this.gridOptionsWrapper.getDefaultColDef());
176 // merge properties from column type properties
177 if (colDef.type) {
178 this.assignColumnTypes(colDef, colDefMerged);
179 }
180 // merge properties from column definitions
181 utils_1.Utils.assign(colDefMerged, colDef);
182 return colDefMerged;
183 };
184 BalancedColumnTreeBuilder.prototype.assignColumnTypes = function (colDef, colDefMerged) {
185 var typeKeys;
186 if (colDef.type instanceof Array) {
187 var invalidArray = colDef.type.some(function (a) { return typeof a !== 'string'; });
188 if (invalidArray) {
189 console.warn("ag-grid: if colDef.type is supplied an array it should be of type 'string[]'");
190 }
191 else {
192 typeKeys = colDef.type;
193 }
194 }
195 else if (typeof colDef.type === 'string') {
196 typeKeys = colDef.type.split(',');
197 }
198 else {
199 console.warn("ag-grid: colDef.type should be of type 'string' | 'string[]'");
200 return;
201 }
202 // merge user defined with default column types
203 var allColumnTypes = utils_1.Utils.assign({}, this.gridOptionsWrapper.getColumnTypes(), defaultColumnTypes_1.DefaultColumnTypes);
204 typeKeys.forEach(function (t) {
205 var typeColDef = allColumnTypes[t.trim()];
206 if (typeColDef) {
207 utils_1.Utils.assign(colDefMerged, typeColDef);
208 }
209 else {
210 console.warn("ag-grid: colDef.type '" + t + "' does not correspond to defined gridOptions.columnTypes");
211 }
212 });
213 };
214 BalancedColumnTreeBuilder.prototype.checkForDeprecatedItems = function (colDef) {
215 if (colDef) {
216 var colDefNoType = colDef; // take out the type, so we can access attributes not defined in the type
217 if (colDefNoType.group !== undefined) {
218 console.warn('ag-grid: colDef.group is invalid, please check documentation on how to do grouping as it changed in version 3');
219 }
220 if (colDefNoType.headerGroup !== undefined) {
221 console.warn('ag-grid: colDef.headerGroup is invalid, please check documentation on how to do grouping as it changed in version 3');
222 }
223 if (colDefNoType.headerGroupShow !== undefined) {
224 console.warn('ag-grid: colDef.headerGroupShow is invalid, should be columnGroupShow, please check documentation on how to do grouping as it changed in version 3');
225 }
226 if (colDefNoType.suppressRowGroup !== undefined) {
227 console.warn('ag-grid: colDef.suppressRowGroup is deprecated, please use colDef.type instead');
228 }
229 if (colDefNoType.suppressAggregation !== undefined) {
230 console.warn('ag-grid: colDef.suppressAggregation is deprecated, please use colDef.type instead');
231 }
232 if (colDefNoType.suppressRowGroup || colDefNoType.suppressAggregation) {
233 console.warn('ag-grid: colDef.suppressAggregation and colDef.suppressRowGroup are deprecated, use allowRowGroup, allowPivot and allowValue instead');
234 }
235 if (colDefNoType.displayName) {
236 console.warn("ag-grid: Found displayName " + colDefNoType.displayName + ", please use headerName instead, displayName is deprecated.");
237 colDefNoType.headerName = colDefNoType.displayName;
238 }
239 }
240 };
241 // if object has children, we assume it's a group
242 BalancedColumnTreeBuilder.prototype.isColumnGroup = function (abstractColDef) {
243 return abstractColDef.children !== undefined;
244 };
245 __decorate([
246 context_1.Autowired('gridOptionsWrapper'),
247 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
248 ], BalancedColumnTreeBuilder.prototype, "gridOptionsWrapper", void 0);
249 __decorate([
250 context_1.Autowired('columnUtils'),
251 __metadata("design:type", columnUtils_1.ColumnUtils)
252 ], BalancedColumnTreeBuilder.prototype, "columnUtils", void 0);
253 __decorate([
254 context_1.Autowired('context'),
255 __metadata("design:type", context_1.Context)
256 ], BalancedColumnTreeBuilder.prototype, "context", void 0);
257 __decorate([
258 __param(0, context_1.Qualifier('loggerFactory')),
259 __metadata("design:type", Function),
260 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
261 __metadata("design:returntype", void 0)
262 ], BalancedColumnTreeBuilder.prototype, "setBeans", null);
263 BalancedColumnTreeBuilder = __decorate([
264 context_1.Bean('balancedColumnTreeBuilder')
265 ], BalancedColumnTreeBuilder);
266 return BalancedColumnTreeBuilder;
267}());
268exports.BalancedColumnTreeBuilder = BalancedColumnTreeBuilder;