@refinitiv-ui/efx-grid 6.0.26 → 6.0.27
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/core/dist/core.js +41 -6
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/grid/Core.js +1 -1
- package/lib/core/es6/grid/components/Scrollbar.js +6 -0
- package/lib/grid/index.js +1 -1
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +11 -1
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +139 -30
- package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +14 -1
- package/lib/tr-grid-column-stack/es6/ColumnStack.js +323 -187
- package/lib/tr-grid-range-bar/es6/RangeBar.d.ts +4 -0
- package/lib/tr-grid-range-bar/es6/RangeBar.js +8 -0
- package/lib/tr-grid-util/es6/GroupDefinitions.d.ts +5 -1
- package/lib/tr-grid-util/es6/GroupDefinitions.js +34 -5
- package/lib/types/es6/ColumnGrouping.d.ts +11 -1
- package/lib/types/es6/ColumnStack.d.ts +14 -1
- package/lib/versions.json +4 -4
- package/package.json +1 -1
@@ -12,6 +12,7 @@ import { preventDefault } from "../../tr-grid-util/es6/EventDispatcher.js";
|
|
12
12
|
* @property {Array.<string>} fields Fields for stacking. The minimum is 2 fields.
|
13
13
|
* @property {Array.<ColumnStackPlugin~StackDefinition>} stacks List of stacking configuration
|
14
14
|
* @property {boolean=} autoStacking=false If enabled, columns will be auto stacked when new inserted column field match in stack
|
15
|
+
* @property {Function=} clicked=null Event handler when user clicks on stack/expanding icon
|
15
16
|
*/
|
16
17
|
|
17
18
|
/** @typedef {Object} ColumnStackPlugin~ColumnOptions
|
@@ -45,6 +46,18 @@ import { preventDefault } from "../../tr-grid-util/es6/EventDispatcher.js";
|
|
45
46
|
* @property {string=} activeColumn="" Column index or field for set as active column
|
46
47
|
*/
|
47
48
|
|
49
|
+
/** @event ColumnStackPlugin#clicked
|
50
|
+
* @description Fired when user clicks on stack/expanding icon
|
51
|
+
* @type {Object}
|
52
|
+
* @property {number} colIndex
|
53
|
+
* @property {number} rowIndex
|
54
|
+
* @property {Array.<Object>} menuData Data for populating context menu
|
55
|
+
* @property {number} activeIndex
|
56
|
+
* @property {Array.<number>} columnIndices
|
57
|
+
* @property {number} activeColIndex
|
58
|
+
* @property {Event} event Native event argument from click event
|
59
|
+
*/
|
60
|
+
|
48
61
|
/** @constructor
|
49
62
|
* @extends {GridPlugin}
|
50
63
|
*/
|
@@ -55,12 +68,12 @@ var ColumnStackPlugin = function () {
|
|
55
68
|
this._onColumnAdded = this._onColumnAdded.bind(this);
|
56
69
|
this._onStackButtonClicked = this._onStackButtonClicked.bind(this);
|
57
70
|
this._updateUI = this._updateUI.bind(this);
|
58
|
-
this.
|
71
|
+
this._requestStackingByFields = this._requestStackingByFields.bind(this);
|
59
72
|
this._hosts = [];
|
60
73
|
this._stacks = {};
|
61
74
|
|
62
75
|
this._conflator = new Conflator(100, this._updateUI);
|
63
|
-
this._stackConflator = new Conflator(100, this.
|
76
|
+
this._stackConflator = new Conflator(100, this._requestStackingByFields);
|
64
77
|
};
|
65
78
|
|
66
79
|
Ext.inherits(ColumnStackPlugin, GridPlugin);
|
@@ -73,10 +86,11 @@ ColumnStackPlugin.prototype._stacks;
|
|
73
86
|
* @private
|
74
87
|
*/
|
75
88
|
ColumnStackPlugin.prototype._pendingStacks;
|
76
|
-
/**
|
89
|
+
/** A map from stack id to array of fields
|
90
|
+
* @type {Object}
|
77
91
|
* @private
|
78
92
|
*/
|
79
|
-
ColumnStackPlugin.prototype.
|
93
|
+
ColumnStackPlugin.prototype._idToFields = null; // For auto-stacking
|
80
94
|
/** @type {boolean}
|
81
95
|
* @private
|
82
96
|
*/
|
@@ -85,6 +99,10 @@ ColumnStackPlugin.prototype._updating = false;
|
|
85
99
|
* @private
|
86
100
|
*/
|
87
101
|
ColumnStackPlugin.prototype._autoStacking = false;
|
102
|
+
/** @type {boolean}
|
103
|
+
* @private
|
104
|
+
*/
|
105
|
+
ColumnStackPlugin.prototype._stacking = false;
|
88
106
|
|
89
107
|
|
90
108
|
/** @type {number}
|
@@ -213,79 +231,99 @@ ColumnStackPlugin.prototype.config = function (options) {
|
|
213
231
|
columns = [];
|
214
232
|
}
|
215
233
|
|
216
|
-
var i
|
217
|
-
|
218
|
-
|
234
|
+
var i;
|
235
|
+
var colCount = columns.length;
|
236
|
+
for(i = 0; i < colCount; ++i) {
|
237
|
+
this._setUniqueRef(i, {}); // used for further column index getting
|
219
238
|
}
|
220
239
|
|
221
|
-
var sid, stacks = {};
|
222
240
|
var columnStack = options.columnStack;
|
223
|
-
|
241
|
+
var stackId = "";
|
242
|
+
var stacks = {};
|
243
|
+
var hasStack = false;
|
244
|
+
var stackConfig = null;
|
245
|
+
if(columnStack) {
|
246
|
+
this.addListener(columnStack, "clicked");
|
247
|
+
|
224
248
|
if(columnStack.autoStacking != null) {
|
225
249
|
this._autoStacking = columnStack.autoStacking;
|
226
250
|
}
|
227
251
|
|
228
252
|
if(columnStack.fields && columnStack.fields.length > 1) {
|
229
|
-
|
230
|
-
|
231
|
-
|
253
|
+
hasStack = true;
|
254
|
+
stackId = this._generateStackId(); // TODO: Stack id may need to be hardcoded
|
255
|
+
if(!this._idToFields) {
|
256
|
+
this._idToFields = {};
|
257
|
+
}
|
258
|
+
this._idToFields[stackId] = columnStack.fields;
|
259
|
+
stacks[stackId] = {
|
232
260
|
colRefs: columnStack.fields,
|
233
261
|
spreading: columnStack.spreading === true,
|
234
262
|
collapsed: columnStack.collapsed !== false
|
235
263
|
};
|
236
264
|
} else if (columnStack.stacks && columnStack.stacks.length) {
|
265
|
+
hasStack = true;
|
237
266
|
var stackLen = columnStack.stacks.length;
|
238
267
|
for(i = 0; i < stackLen; i++){
|
239
|
-
|
240
|
-
|
268
|
+
stackConfig = columnStack.stacks[i];
|
269
|
+
stackId = stackConfig.id || this._generateStackId();
|
241
270
|
if(stackConfig.collapsed == null){
|
242
271
|
stackConfig.collapsed = true;
|
243
272
|
}
|
244
273
|
if(stackConfig.spreading == null){
|
245
274
|
stackConfig.spreading = false;
|
246
275
|
}
|
247
|
-
stacks[
|
276
|
+
stacks[stackId] = stackConfig;
|
248
277
|
}
|
249
278
|
}
|
250
|
-
}
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
279
|
+
}
|
280
|
+
|
281
|
+
if(!hasStack) {
|
282
|
+
for(i = 0; i < colCount; ++i) {
|
283
|
+
var column = columns[i];
|
284
|
+
var stackOpt = column["stackId"] || column["stack"];
|
285
|
+
if(!stackOpt) {
|
286
|
+
continue;
|
287
|
+
}
|
288
|
+
|
289
|
+
stackId = "";
|
290
|
+
var spreading = false;
|
291
|
+
var collapsed = true;
|
255
292
|
if(typeof stackOpt === "string") {
|
256
|
-
|
257
|
-
stacks[stackOpt] = {
|
258
|
-
colRefs: [],
|
259
|
-
spreading: false
|
260
|
-
};
|
261
|
-
}
|
262
|
-
stacks[stackOpt].colRefs.push(i);
|
293
|
+
stackId = stackOpt;
|
263
294
|
} else if(typeof stackOpt === "object") {
|
264
|
-
|
265
|
-
|
295
|
+
stackConfig = stackOpt;
|
296
|
+
stackId = stackConfig["id"] || "";
|
297
|
+
spreading = stackConfig["spreading"] === true; // WARNING: Only the first column in the stack has an effect
|
298
|
+
collapsed = stackConfig["collapsed"] !== false;
|
299
|
+
}
|
300
|
+
if(stackId) {
|
301
|
+
if(!stacks[stackId]) {
|
302
|
+
stacks[stackId] = {
|
266
303
|
colRefs: [],
|
267
|
-
spreading:
|
268
|
-
collapsed:
|
304
|
+
spreading: spreading, // Default is false (stacking mode)
|
305
|
+
collapsed: collapsed // Default is true (columns are hidden)
|
269
306
|
};
|
307
|
+
hasStack = true;
|
270
308
|
}
|
271
|
-
stacks[
|
309
|
+
stacks[stackId].colRefs.push(i);
|
272
310
|
}
|
273
311
|
}
|
274
312
|
}
|
275
313
|
|
276
314
|
if(this._initializedGrid) {
|
277
|
-
if(
|
278
|
-
this.removeAllStacks(false);
|
315
|
+
if(hasStack){
|
316
|
+
this.removeAllStacks(false); // No UI update
|
317
|
+
for(stackId in stacks) {
|
318
|
+
var config = stacks[stackId];
|
319
|
+
if(!config.colRefs){
|
320
|
+
this._transformStackConfig(config);
|
321
|
+
}
|
322
|
+
this.stackColumns(config.colRefs, stackId, config);
|
323
|
+
}
|
279
324
|
} else {
|
280
325
|
this.removeAllStacks();
|
281
326
|
}
|
282
|
-
for(sid in stacks) {
|
283
|
-
var config = stacks[sid];
|
284
|
-
if(!config.colRefs){
|
285
|
-
this._transformStackConfig(config);
|
286
|
-
}
|
287
|
-
this.stackColumns(config.colRefs, sid, config);
|
288
|
-
}
|
289
327
|
} else {
|
290
328
|
this._pendingStacks = this._pendingStacks || stacks;
|
291
329
|
}
|
@@ -337,7 +375,7 @@ ColumnStackPlugin.prototype.getConfigObject = function (gridOptions) {
|
|
337
375
|
}
|
338
376
|
|
339
377
|
if (this._autoStacking) {
|
340
|
-
var fields = this.
|
378
|
+
var fields = this._idToFields[stackOption.stackId];
|
341
379
|
var activeColumnField = this._getField(activeColIndex);
|
342
380
|
|
343
381
|
stackConfigObj.fields = fields;
|
@@ -361,6 +399,7 @@ ColumnStackPlugin.prototype.getConfigObject = function (gridOptions) {
|
|
361
399
|
};
|
362
400
|
|
363
401
|
/** @override
|
402
|
+
* @ignore
|
364
403
|
*/
|
365
404
|
ColumnStackPlugin.prototype._afterInit = function () {
|
366
405
|
if(this._pendingStacks) {
|
@@ -377,50 +416,80 @@ ColumnStackPlugin.prototype._afterInit = function () {
|
|
377
416
|
// In case of lazy loading
|
378
417
|
// DO something
|
379
418
|
};
|
380
|
-
/**
|
381
|
-
*
|
419
|
+
/** WARNING: This method is slow
|
420
|
+
* @private
|
421
|
+
* @param {Object} stackRef
|
422
|
+
* @param {number=} colCount
|
382
423
|
* @return {number}
|
383
424
|
*/
|
384
|
-
ColumnStackPlugin.prototype._getColumnIndex = function(stackRef) {
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
425
|
+
ColumnStackPlugin.prototype._getColumnIndex = function(stackRef, colCount) {
|
426
|
+
if(stackRef) {
|
427
|
+
if(colCount == null) {
|
428
|
+
colCount = this.getColumnCount();
|
429
|
+
}
|
430
|
+
for(var i = 0; i < colCount; i++) {
|
431
|
+
if(stackRef === this._getUniqueRef(i)) {
|
432
|
+
return i;
|
433
|
+
}
|
434
|
+
}
|
435
|
+
}
|
436
|
+
return -1;
|
437
|
+
};
|
438
|
+
/** WARNING: This method is really slow
|
439
|
+
* @private
|
440
|
+
* @param {!Array.<Object>} stackRefs
|
441
|
+
* @return {!Array.<number>}
|
442
|
+
*/
|
443
|
+
ColumnStackPlugin.prototype._getColumnIndices = function(stackRefs) {
|
444
|
+
var refCount = stackRefs ? stackRefs.length : 0;
|
445
|
+
var ary = new Array(refCount);
|
446
|
+
if(refCount) {
|
447
|
+
var colCount = this.getColumnCount();
|
448
|
+
for(var i = 0; i < refCount; i++) {
|
449
|
+
ary[i] = this._getColumnIndex(stackRefs[i], colCount);
|
392
450
|
}
|
393
451
|
}
|
394
|
-
return
|
452
|
+
return ary;
|
395
453
|
};
|
396
454
|
/** @private
|
397
455
|
* @param {number} colIndex
|
398
|
-
* @param {
|
456
|
+
* @param {!Object} refObj
|
399
457
|
*/
|
400
|
-
ColumnStackPlugin.prototype.
|
401
|
-
|
402
|
-
colData["stack"] = stacking;
|
458
|
+
ColumnStackPlugin.prototype._setUniqueRef = function(colIndex, refObj) {
|
459
|
+
this._newColumnData(colIndex)["stack"] = refObj;
|
403
460
|
};
|
404
461
|
/** @private
|
405
462
|
* @param {number} colIndex
|
406
|
-
* @return {
|
463
|
+
* @return {Object}
|
464
|
+
*/
|
465
|
+
ColumnStackPlugin.prototype._getUniqueRef = function(colIndex) {
|
466
|
+
return this._getColumnOption(colIndex, "stack") || null;
|
467
|
+
};
|
468
|
+
/** @private
|
469
|
+
* @return {!Array.<Object>}
|
407
470
|
*/
|
408
|
-
ColumnStackPlugin.prototype.
|
409
|
-
|
471
|
+
ColumnStackPlugin.prototype._getUniqueRefs = function() {
|
472
|
+
var colCount = this.getColumnCount();
|
473
|
+
var ary = new Array(colCount);
|
474
|
+
for(var c = 0; c < colCount; ++c) {
|
475
|
+
ary[c] = this._getUniqueRef(c);
|
476
|
+
}
|
477
|
+
return ary;
|
410
478
|
};
|
479
|
+
|
411
480
|
/** @private
|
412
481
|
* @param {number} colIndex
|
413
|
-
* @param {
|
482
|
+
* @param {Object} stackOptions
|
414
483
|
*/
|
415
484
|
ColumnStackPlugin.prototype._setColumnStackOptions = function(colIndex, stackOptions) {
|
416
|
-
var
|
417
|
-
if(
|
418
|
-
|
485
|
+
var ref = this._getUniqueRef(colIndex);
|
486
|
+
if(ref) {
|
487
|
+
ref["stackOpt"] = stackOptions;
|
419
488
|
}
|
420
489
|
};
|
421
490
|
/** @private
|
422
|
-
* @param {
|
423
|
-
* @return {
|
491
|
+
* @param {Object} stackConfig
|
492
|
+
* @return {Object} stack config object
|
424
493
|
*/
|
425
494
|
ColumnStackPlugin.prototype._transformStackConfig = function(stackConfig) {
|
426
495
|
stackConfig.colRefs = [];
|
@@ -458,9 +527,9 @@ ColumnStackPlugin.prototype._transformStackConfig = function(stackConfig) {
|
|
458
527
|
* @return {*}
|
459
528
|
*/
|
460
529
|
ColumnStackPlugin.prototype._getColumnStackOptions = function(colIndex) {
|
461
|
-
var
|
462
|
-
if(
|
463
|
-
return
|
530
|
+
var refObj = this._getUniqueRef(colIndex);
|
531
|
+
if(refObj){
|
532
|
+
return refObj["stackOpt"] || null;
|
464
533
|
}
|
465
534
|
return null;
|
466
535
|
};
|
@@ -468,9 +537,9 @@ ColumnStackPlugin.prototype._getColumnStackOptions = function(colIndex) {
|
|
468
537
|
* @param {number} colIndex
|
469
538
|
*/
|
470
539
|
ColumnStackPlugin.prototype._removeColumnStackOptions = function(colIndex) {
|
471
|
-
var
|
472
|
-
if(
|
473
|
-
|
540
|
+
var refObj = this._getUniqueRef(colIndex);
|
541
|
+
if(refObj) {
|
542
|
+
refObj["stackOpt"] = null;
|
474
543
|
}
|
475
544
|
};
|
476
545
|
/** @private
|
@@ -492,28 +561,12 @@ ColumnStackPlugin.prototype._setColumnVisibility = function(colIndex, shown) {
|
|
492
561
|
}
|
493
562
|
};
|
494
563
|
/** @private
|
495
|
-
* @param {
|
496
|
-
* @param {number} destIndex
|
497
|
-
*/
|
498
|
-
ColumnStackPlugin.prototype._moveColumn = function(colIndex, destIndex) {
|
499
|
-
if(colIndex >= 0 && destIndex >= 0 && colIndex !== destIndex) {
|
500
|
-
for(var i = this._hosts.length; --i >= 0;) {
|
501
|
-
this._hosts[i].moveColumn(colIndex, destIndex);
|
502
|
-
}
|
503
|
-
}
|
504
|
-
};
|
505
|
-
/** @private
|
506
|
-
* @param {Array.<object>} stackRefs
|
564
|
+
* @param {Array.<Object>} stackRefs
|
507
565
|
*/
|
508
566
|
ColumnStackPlugin.prototype._moveStackedColumns = function (stackRefs) {
|
509
|
-
var
|
510
|
-
|
511
|
-
|
512
|
-
var destIndex = this._getColumnIndex(stackRefs[0]); // Active Column may be shifted due to the move
|
513
|
-
if(fromIndex < destIndex){
|
514
|
-
destIndex -= 1;
|
515
|
-
}
|
516
|
-
this._moveColumn(fromIndex, destIndex + i);
|
567
|
+
var ary = this._getColumnIndices(stackRefs);
|
568
|
+
if(ary.length > 1) {
|
569
|
+
this.reorderColumns(ary, ary[0]);
|
517
570
|
}
|
518
571
|
};
|
519
572
|
/** @private
|
@@ -709,13 +762,7 @@ ColumnStackPlugin.prototype.getMemberIndices = function(colIndex) {
|
|
709
762
|
return null;
|
710
763
|
}
|
711
764
|
|
712
|
-
|
713
|
-
var len = stackRefs.length;
|
714
|
-
var indices = [];
|
715
|
-
for(var i = 0; i < len; ++i) {
|
716
|
-
indices.push(this._getColumnIndex(stackRefs[i]));
|
717
|
-
}
|
718
|
-
return indices;
|
765
|
+
return this._getColumnIndices(colData.stackRefs);
|
719
766
|
};
|
720
767
|
/** @public
|
721
768
|
* @param {number} colIndex
|
@@ -943,9 +990,10 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
|
|
943
990
|
|
944
991
|
// Save stack fields for
|
945
992
|
if(this._autoStacking){
|
946
|
-
|
947
|
-
|
948
|
-
|
993
|
+
if(!this._idToFields) {
|
994
|
+
this._idToFields = {};
|
995
|
+
}
|
996
|
+
this._idToFields[sid] = fields;
|
949
997
|
}
|
950
998
|
|
951
999
|
var len = colRefs.length;
|
@@ -977,7 +1025,7 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
|
|
977
1025
|
for(i = 0; i < len; ++i) {
|
978
1026
|
colIndex = colRefs[i];
|
979
1027
|
this._setColumnStackOptions(colIndex, stack);
|
980
|
-
stack.stackRefs[i] = this.
|
1028
|
+
stack.stackRefs[i] = this._getUniqueRef(colIndex);
|
981
1029
|
|
982
1030
|
if(colIndex == activeIndex){
|
983
1031
|
stack.activeColumn = stack.stackRefs[i];
|
@@ -1085,8 +1133,8 @@ ColumnStackPlugin.prototype.unstackColumns = function(colIndices) {
|
|
1085
1133
|
this._setColumnVisibility(colIndex, true);
|
1086
1134
|
}
|
1087
1135
|
|
1088
|
-
if(this.
|
1089
|
-
delete this.
|
1136
|
+
if(this._idToFields) {
|
1137
|
+
delete this._idToFields[sid]; // TODO: Clear the map whenever it no longer has a member
|
1090
1138
|
}
|
1091
1139
|
delete this._stacks[sid]; // Remove all reference to the stack
|
1092
1140
|
}
|
@@ -1104,23 +1152,21 @@ ColumnStackPlugin.prototype.unstackColumns = function(colIndices) {
|
|
1104
1152
|
|
1105
1153
|
return dirty;
|
1106
1154
|
};
|
1107
|
-
/** @
|
1108
|
-
* @param {
|
1109
|
-
* @return {boolean} true if
|
1155
|
+
/** @private
|
1156
|
+
* @param {string} stackId
|
1157
|
+
* @return {boolean} Returns true if there is any change
|
1110
1158
|
*/
|
1111
|
-
ColumnStackPlugin.prototype.
|
1112
|
-
var
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
dirty = true;
|
1117
|
-
|
1118
|
-
var stackRefs = stack.stackRefs;
|
1159
|
+
ColumnStackPlugin.prototype._removeStack = function(stackId) {
|
1160
|
+
var stack = this._stacks[stackId];
|
1161
|
+
if(!stack) {
|
1162
|
+
return false;
|
1163
|
+
}
|
1119
1164
|
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1165
|
+
var colIndices = this._getColumnIndices(stack.stackRefs);
|
1166
|
+
var len = colIndices.length;
|
1167
|
+
for(var i = 0; i < len; ++i) {
|
1168
|
+
var colIndex = colIndices[i];
|
1169
|
+
if(colIndex >= 0) {
|
1124
1170
|
if(stack.collapsed && stack.spreading) {
|
1125
1171
|
this.collapseGroup(colIndex, false);
|
1126
1172
|
}
|
@@ -1128,10 +1174,38 @@ ColumnStackPlugin.prototype.removeAllStacks = function(enableUpdateUI) {
|
|
1128
1174
|
this._setColumnVisibility(colIndex, true);
|
1129
1175
|
}
|
1130
1176
|
}
|
1177
|
+
return true;
|
1178
|
+
};
|
1179
|
+
/** @public
|
1180
|
+
* @param {string} stackId
|
1181
|
+
* @return {boolean} Returns true if there is any change
|
1182
|
+
*/
|
1183
|
+
ColumnStackPlugin.prototype.removeStack = function(stackId) {
|
1184
|
+
if(this._idToFields) {
|
1185
|
+
if(this._idToFields[stackId]) {
|
1186
|
+
delete this._idToFields[stackId];
|
1187
|
+
}
|
1188
|
+
}
|
1189
|
+
if(this._removeStack(stackId)) {
|
1190
|
+
this._updateUI();
|
1191
|
+
return true;
|
1192
|
+
}
|
1193
|
+
return false;
|
1194
|
+
};
|
1195
|
+
/** @public
|
1196
|
+
* @param {boolean=} enableUpdateUI=true Set false if you want to remove without update UI
|
1197
|
+
* @return {boolean} true if at least one stacking removed
|
1198
|
+
*/
|
1199
|
+
ColumnStackPlugin.prototype.removeAllStacks = function(enableUpdateUI) {
|
1200
|
+
var dirty = false;
|
1201
|
+
for(var stackId in this._stacks) {
|
1202
|
+
dirty = true;
|
1203
|
+
this._removeStack(stackId);
|
1204
|
+
}
|
1131
1205
|
if(dirty) {
|
1132
|
-
this.
|
1206
|
+
this._idToFields = null;
|
1133
1207
|
this._stacks = {};
|
1134
|
-
if(
|
1208
|
+
if(enableUpdateUI !== false) {
|
1135
1209
|
this._updateUI(); // asyncronous
|
1136
1210
|
}
|
1137
1211
|
}
|
@@ -1210,15 +1284,15 @@ ColumnStackPlugin.prototype._onColumnRemoved = function (e) {
|
|
1210
1284
|
var colData = /** @type{Object} */(e.columnData);
|
1211
1285
|
if(!colData) { return; }
|
1212
1286
|
|
1213
|
-
var
|
1214
|
-
if(!
|
1287
|
+
var stackRef = colData["stack"];
|
1288
|
+
if(!stackRef) { return; }
|
1215
1289
|
|
1216
|
-
var stackOpt =
|
1290
|
+
var stackOpt = stackRef["stackOpt"];
|
1217
1291
|
if(!stackOpt) { return; }
|
1218
1292
|
|
1219
1293
|
// update members
|
1220
1294
|
if(stackOpt.stackRefs) {
|
1221
|
-
var index = stackOpt.stackRefs.indexOf(
|
1295
|
+
var index = stackOpt.stackRefs.indexOf(stackRef);
|
1222
1296
|
if(index > -1) {
|
1223
1297
|
stackOpt.stackRefs.splice(index, 1);
|
1224
1298
|
if(stackOpt.stackRefs.length < 2) {
|
@@ -1248,6 +1322,10 @@ ColumnStackPlugin.prototype._onColumnRemoved = function (e) {
|
|
1248
1322
|
* @param {Object} e
|
1249
1323
|
*/
|
1250
1324
|
ColumnStackPlugin.prototype._onColumnMoved = function (e) {
|
1325
|
+
if(this._stacking) { // during the stacking, there is no need to recalculate stacks
|
1326
|
+
return;
|
1327
|
+
}
|
1328
|
+
|
1251
1329
|
var toIndex = e.toColIndex;
|
1252
1330
|
var stackOpt = this._getColumnStackOptions(toIndex);
|
1253
1331
|
|
@@ -1256,7 +1334,7 @@ ColumnStackPlugin.prototype._onColumnMoved = function (e) {
|
|
1256
1334
|
return;
|
1257
1335
|
}
|
1258
1336
|
|
1259
|
-
var stackRef = this.
|
1337
|
+
var stackRef = this._getUniqueRef(toIndex);
|
1260
1338
|
|
1261
1339
|
var leftStackOpt = this._getColumnStackOptions(toIndex - 1);
|
1262
1340
|
var rightStackOpt = this._getColumnStackOptions(toIndex + 1);
|
@@ -1265,7 +1343,7 @@ ColumnStackPlugin.prototype._onColumnMoved = function (e) {
|
|
1265
1343
|
if(stackOpt) {
|
1266
1344
|
if(stackOpt === leftStackOpt) {
|
1267
1345
|
leftStackOpt.stackRefs.splice(leftStackOpt.stackRefs.indexOf(stackRef), 1);
|
1268
|
-
leftColStackRef = this.
|
1346
|
+
leftColStackRef = this._getUniqueRef(toIndex - 1);
|
1269
1347
|
index = leftStackOpt.stackRefs.indexOf(leftColStackRef);
|
1270
1348
|
if(index > -1) {
|
1271
1349
|
leftStackOpt.stackRefs.splice(index + 1, 0, stackRef);
|
@@ -1279,7 +1357,7 @@ ColumnStackPlugin.prototype._onColumnMoved = function (e) {
|
|
1279
1357
|
return;
|
1280
1358
|
} else if(stackOpt === rightStackOpt) {
|
1281
1359
|
rightStackOpt.stackRefs.splice(rightStackOpt.stackRefs.indexOf(stackRef), 1);
|
1282
|
-
var rightColStackRef = this.
|
1360
|
+
var rightColStackRef = this._getUniqueRef(toIndex + 1);
|
1283
1361
|
index = rightStackOpt.stackRefs.indexOf(rightColStackRef);
|
1284
1362
|
if(index > -1) {
|
1285
1363
|
rightStackOpt.stackRefs.splice(index, 0, stackRef);
|
@@ -1342,7 +1420,7 @@ ColumnStackPlugin.prototype._onColumnMoved = function (e) {
|
|
1342
1420
|
rightStackOpt = this._getColumnStackOptions(rIndex);
|
1343
1421
|
if(leftStackOpt && leftStackOpt.spreading &&
|
1344
1422
|
(leftStackOpt === rightStackOpt)) {
|
1345
|
-
leftColStackRef = this.
|
1423
|
+
leftColStackRef = this._getUniqueRef(toIndex - 1);
|
1346
1424
|
index = leftStackOpt.stackRefs.indexOf(leftColStackRef);
|
1347
1425
|
if(index > -1) {
|
1348
1426
|
leftStackOpt.stackRefs.splice(index + 1, 0, stackRef);
|
@@ -1366,20 +1444,21 @@ ColumnStackPlugin.prototype._onColumnMoved = function (e) {
|
|
1366
1444
|
*/
|
1367
1445
|
ColumnStackPlugin.prototype._onColumnAdded = function (e) {
|
1368
1446
|
var colIndex = e.colIndex;
|
1369
|
-
this.
|
1447
|
+
this._setUniqueRef(colIndex, {});
|
1370
1448
|
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1449
|
+
if (this._autoStacking) {
|
1450
|
+
if(this._idToFields) {
|
1451
|
+
this._requestStackingByFields();
|
1452
|
+
}
|
1453
|
+
} else { // TODO: This logic is too complicated
|
1375
1454
|
// add to group
|
1376
1455
|
var leftStackOpt = this._getColumnStackOptions(colIndex - 1);
|
1377
1456
|
var rightStackOpt = this._getColumnStackOptions(colIndex + 1);
|
1378
1457
|
if(leftStackOpt && (leftStackOpt === rightStackOpt)) {
|
1379
|
-
var leftColStackRef = this.
|
1380
|
-
var stackRef = this.
|
1458
|
+
var leftColStackRef = this._getUniqueRef(colIndex - 1);
|
1459
|
+
var stackRef = this._getUniqueRef(colIndex);
|
1381
1460
|
var index = leftStackOpt.stackRefs.indexOf(leftColStackRef);
|
1382
|
-
if(index > -1) {
|
1461
|
+
if(index > -1) { // TODO: Reuse existing logic instead of modifying states like this
|
1383
1462
|
leftStackOpt.stackRefs.splice(index + 1, 0, stackRef);
|
1384
1463
|
leftStackOpt.activeColumn = leftStackOpt.stackRefs[leftStackOpt.stackRefs.length - 1];
|
1385
1464
|
this._setColumnStackOptions(colIndex, leftStackOpt);
|
@@ -1414,10 +1493,9 @@ ColumnStackPlugin.prototype._onStackButtonClicked = function(e) {
|
|
1414
1493
|
var activeIndex = stackRefs.indexOf(colData.activeColumn);
|
1415
1494
|
|
1416
1495
|
var len = stackRefs.length;
|
1417
|
-
var colIndices =
|
1496
|
+
var colIndices = this._getColumnIndices(stackRefs);
|
1418
1497
|
var menuData = new Array(len);
|
1419
1498
|
for(var i = len; --i >= 0;) {
|
1420
|
-
colIndices[i] = this._getColumnIndex(stackRefs[i]);
|
1421
1499
|
menuData[i] = {
|
1422
1500
|
value: i,
|
1423
1501
|
selected: i === activeIndex,
|
@@ -1438,12 +1516,12 @@ ColumnStackPlugin.prototype._onStackButtonClicked = function(e) {
|
|
1438
1516
|
/** Remove existing stacks and apply persist stack
|
1439
1517
|
* @private
|
1440
1518
|
*/
|
1441
|
-
ColumnStackPlugin.prototype.
|
1519
|
+
ColumnStackPlugin.prototype._requestStackingByFields = function() {
|
1442
1520
|
if(this._stackConflator.conflate()) {
|
1443
1521
|
return;
|
1444
1522
|
}
|
1445
1523
|
|
1446
|
-
var columnStack = this.
|
1524
|
+
var columnStack = this._idToFields;
|
1447
1525
|
if(columnStack){
|
1448
1526
|
this.removeAllStacks(false);
|
1449
1527
|
for(var sid in columnStack){
|
@@ -1462,19 +1540,13 @@ ColumnStackPlugin.prototype._setStack = function() {
|
|
1462
1540
|
* @return {!Array.<number>} Member column indices
|
1463
1541
|
*/
|
1464
1542
|
ColumnStackPlugin.prototype.getStackMemberIndices = function(stackId) {
|
1465
|
-
|
1466
|
-
if(stackId !== null) {
|
1543
|
+
if(stackId) {
|
1467
1544
|
var stack = this._stacks[stackId];
|
1468
1545
|
if(stack){
|
1469
|
-
|
1470
|
-
for(var i = 0; i < stackRefs.length; ++i) {
|
1471
|
-
var stackRef = stackRefs[i];
|
1472
|
-
var colIndex = this._getColumnIndex(stackRef);
|
1473
|
-
memberIndices.push(colIndex);
|
1474
|
-
}
|
1546
|
+
return this._getColumnIndices(stack.stackRefs);
|
1475
1547
|
}
|
1476
1548
|
}
|
1477
|
-
return
|
1549
|
+
return [];
|
1478
1550
|
};
|
1479
1551
|
|
1480
1552
|
/** @public
|
@@ -1571,7 +1643,7 @@ ColumnStackPlugin.prototype.addColumnToStack = function(colRef, stackId) {
|
|
1571
1643
|
|
1572
1644
|
// apply stacking
|
1573
1645
|
this._setColumnStackOptions(colRef, stack);
|
1574
|
-
stack.stackRefs.push(this.
|
1646
|
+
stack.stackRefs.push(this._getUniqueRef(colRef));
|
1575
1647
|
|
1576
1648
|
if(stack.spreading) {
|
1577
1649
|
stack.activeColumn = stack.stackRefs[stack.stackRefs.length - 1];
|
@@ -1587,58 +1659,58 @@ ColumnStackPlugin.prototype.addColumnToStack = function(colRef, stackId) {
|
|
1587
1659
|
};
|
1588
1660
|
|
1589
1661
|
/** @public
|
1590
|
-
* @description Remove specific column from
|
1662
|
+
* @description Remove specific column from its own stack
|
1591
1663
|
* @param {number|string} colRef column field or column index
|
1592
1664
|
*/
|
1593
1665
|
ColumnStackPlugin.prototype.removeColumnFromStack = function(colRef) {
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
return;
|
1598
|
-
}
|
1666
|
+
var colIndex = (typeof colRef === "string") ? this.getColumnIndex(colRef) : colRef;
|
1667
|
+
if(colIndex < 0) {
|
1668
|
+
return;
|
1599
1669
|
}
|
1600
1670
|
|
1601
|
-
var stackId = this.getStackId(
|
1671
|
+
var stackId = this.getStackId(colIndex);
|
1602
1672
|
var stack = this._stacks[stackId];
|
1603
1673
|
if(!stack) {
|
1604
1674
|
return;
|
1605
1675
|
}
|
1606
1676
|
|
1607
|
-
var stackMembers = this.getStackMemberIndices(stackId);
|
1608
1677
|
var stackRefs = stack.stackRefs;
|
1609
|
-
|
1610
|
-
if(
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
var stackRef = stackRefs[i];
|
1617
|
-
var colIndex = this._getColumnIndex(stackRef);
|
1618
|
-
|
1619
|
-
if(colIndex === colRef){
|
1620
|
-
if(isCollapsed) {
|
1621
|
-
this._collapseMember(stackMembers[i], false);
|
1622
|
-
}
|
1623
|
-
stackRefs.splice(i, 1);
|
1624
|
-
break;
|
1678
|
+
var memberCount = stackRefs.length;
|
1679
|
+
if(memberCount <= 2) {
|
1680
|
+
if(memberCount === 2) {
|
1681
|
+
var uniqueObj = this._getUniqueRef(colIndex);
|
1682
|
+
if(uniqueObj === stackRefs[0]) { // If the first column is removed from the stack, move it to the end of stack
|
1683
|
+
// This assumes that the column order is already in correct position
|
1684
|
+
this.moveColumnById(colIndex, this._getColumnIndex(stackRefs[1]) + 1);
|
1625
1685
|
}
|
1626
1686
|
}
|
1687
|
+
this.removeStack(stackId); // updateUI will be called
|
1688
|
+
return;
|
1689
|
+
}
|
1627
1690
|
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1634
|
-
} else {
|
1635
|
-
stack.activeColumn = stackRefs[0];
|
1691
|
+
var colIndices = this.getStackMemberIndices(stackId);
|
1692
|
+
var memberIdx = colIndices.indexOf(colIndex);
|
1693
|
+
var isCollapsed = stack.spreading && stack.collapsed;
|
1694
|
+
if(memberIdx >= 0) {
|
1695
|
+
if(isCollapsed) {
|
1696
|
+
this._collapseMember(colIndices[memberIdx], false); // TODO: This may change the column index
|
1636
1697
|
}
|
1637
|
-
|
1698
|
+
stackRefs.splice(memberIdx, 1); // WARNING: colIndices is out of sync with stackRefs after this line
|
1699
|
+
}
|
1638
1700
|
|
1639
|
-
|
1640
|
-
|
1701
|
+
this._removeColumnStackOptions(colIndex);
|
1702
|
+
this._setColumnVisibility(colIndex, true);
|
1703
|
+
|
1704
|
+
if(stack.spreading) {
|
1705
|
+
stack.activeColumn = stackRefs[stackRefs.length - 1];
|
1706
|
+
stack.collapsed = isCollapsed;
|
1707
|
+
} else {
|
1708
|
+
stack.activeColumn = stackRefs[0];
|
1641
1709
|
}
|
1710
|
+
this._stacks[stackId] = stack; // TODO: This is unnecessary
|
1711
|
+
|
1712
|
+
this.moveColumnById(colIndex, colIndices[memberCount - 1] + 1); // This assumes that the column order is already in correct position
|
1713
|
+
this._updateUI();
|
1642
1714
|
};
|
1643
1715
|
|
1644
1716
|
/** @public
|
@@ -1742,6 +1814,70 @@ ColumnStackPlugin.prototype.getActiveColumnField = function(stackId) {
|
|
1742
1814
|
return field;
|
1743
1815
|
};
|
1744
1816
|
|
1817
|
+
/** @public
|
1818
|
+
* @param {string} stackId
|
1819
|
+
* @param {number|string} colRef Column field or column index
|
1820
|
+
*/
|
1821
|
+
ColumnStackPlugin.prototype.addStackChild = function(stackId, colRef) {
|
1822
|
+
this.addColumnToStack(colRef, stackId);
|
1823
|
+
};
|
1824
|
+
/**
|
1825
|
+
* @public
|
1826
|
+
* @param {string} stackId
|
1827
|
+
* @param {number|string} colRef Column field or column index
|
1828
|
+
*/
|
1829
|
+
ColumnStackPlugin.prototype.removeStackChild = function(stackId, colRef) {
|
1830
|
+
var colIndex = (typeof colRef === "string") ? this.getColumnIndex(colRef) : colRef;
|
1831
|
+
if(colIndex >= 0) {
|
1832
|
+
if(stackId === this.getStackId(colIndex)) {
|
1833
|
+
this.removeColumnFromStack(colIndex);
|
1834
|
+
}
|
1835
|
+
}
|
1836
|
+
};
|
1837
|
+
/** @public
|
1838
|
+
* @function
|
1839
|
+
* @param {number|string} colRef Column field or column index
|
1840
|
+
*/
|
1841
|
+
ColumnStackPlugin.prototype.unsetParent = ColumnStackPlugin.prototype.removeColumnFromStack;
|
1842
|
+
|
1843
|
+
/** Move and reorder the specified columns to position before the destination
|
1844
|
+
* @public
|
1845
|
+
* @param {Array.<number|string>} colList Column list to be reordered
|
1846
|
+
* @param {(number|string)=} destCol Destination column id or index
|
1847
|
+
* @return {boolean}
|
1848
|
+
*/
|
1849
|
+
ColumnStackPlugin.prototype.reorderColumns = function(colList, destCol) {
|
1850
|
+
var dirty = false;
|
1851
|
+
this._stacking = false;
|
1852
|
+
|
1853
|
+
var gridApi = this.getGridApi();
|
1854
|
+
if(gridApi && gridApi.reorderColumns) {
|
1855
|
+
dirty = gridApi.reorderColumns(colList, destCol); // TODO: Support multi-table feature
|
1856
|
+
}
|
1857
|
+
|
1858
|
+
this._stacking = true;
|
1859
|
+
return dirty;
|
1860
|
+
};
|
1861
|
+
/** Move the specified column to position before the destination
|
1862
|
+
* @public
|
1863
|
+
* @param {number|string} srcCol Source column id or index
|
1864
|
+
* @param {(number|string)=} destCol Destination column id or index
|
1865
|
+
* @return {boolean}
|
1866
|
+
*/
|
1867
|
+
ColumnStackPlugin.prototype.moveColumnById = function(srcCol, destCol) {
|
1868
|
+
var dirty = false;
|
1869
|
+
this._stacking = false;
|
1870
|
+
|
1871
|
+
var gridApi = this.getGridApi();
|
1872
|
+
if(gridApi && gridApi.moveColumnById) {
|
1873
|
+
dirty = gridApi.moveColumnById(srcCol, destCol); // TODO: Support multi-table feature
|
1874
|
+
}
|
1875
|
+
|
1876
|
+
this._stacking = true;
|
1877
|
+
return dirty;
|
1878
|
+
};
|
1879
|
+
|
1880
|
+
|
1745
1881
|
|
1746
1882
|
export default ColumnStackPlugin;
|
1747
1883
|
export { ColumnStackPlugin, ColumnStackPlugin as ColumnStack, ColumnStackPlugin as ColumnStackExtension };
|