@refinitiv-ui/efx-grid 6.0.64 → 6.0.66

Sign up to get free protection for your applications and to get access to all the features.
@@ -54,8 +54,6 @@ declare class ColumnDefinition {
54
54
 
55
55
  public dispose(): void;
56
56
 
57
- public _initializeTimeSeriesChild(columnOption?: ColumnDefinition.Options|string|null): void;
58
-
59
57
  public initialize(columnOption?: ColumnDefinition.Options|null): void;
60
58
 
61
59
  public getId(): string;
@@ -276,7 +276,7 @@ ColumnDefinition.prototype.dispose = function() {
276
276
  // TODO: Remove any related reference from this._fnEngine
277
277
  };
278
278
 
279
- /** @public
279
+ /** @private
280
280
  * @param {ColumnDefinition~Options|string=} columnOption
281
281
  */
282
282
  ColumnDefinition.prototype._initializeTimeSeriesChild = function(columnOption) {
@@ -179,8 +179,6 @@ declare class Grid extends EventDispatcher {
179
179
 
180
180
  public setColumnSorter(colRef: Grid.ColumnReference|null, func?: ColumnDefinition.SortLogic|null): void;
181
181
 
182
- public _initDuplicateRicData(rowDef: RowDefinition|null): void;
183
-
184
182
  public insertRow(rowOption?: (RowDefinition.Options|string)|null, rowRef?: Grid.RowReference|null): RowDefinition|null;
185
183
 
186
184
  public insertRows(rowOptions: (RowDefinition.Options|string)[]|null, rowRef?: Grid.RowReference|null, opt_fields?: (string)[]|null): void;
@@ -1544,7 +1544,7 @@ Grid.prototype.replaceColumn = function (columnOption, colRef) {
1544
1544
  colConfig["minWidth"] = value;
1545
1545
  }
1546
1546
 
1547
- value = core.isColumnVisible(colIndex);
1547
+ value = core.getColumnVisibility(colIndex, 0); // flag 0 means get only core api hidden state
1548
1548
  if(!value) {
1549
1549
  colConfig["hidden"] = true;
1550
1550
  }
@@ -2284,7 +2284,7 @@ Grid.prototype.setColumnSorter = function(colRef, func) {
2284
2284
 
2285
2285
 
2286
2286
  /** Initialize data for the given rowDef from another rowDef with the same RIC
2287
- * @public
2287
+ * @private
2288
2288
  * @param {RowDefinition} rowDef
2289
2289
  */
2290
2290
  Grid.prototype._initDuplicateRicData = function(rowDef) {
@@ -557,7 +557,7 @@ ColumnFormattingPlugin.prototype.getColumnAlignment = function(colIndex) {
557
557
  }
558
558
  return "default";
559
559
  };
560
- /** Return true if at lease one column is hidden
560
+ /** Return true if at lease one column is hidden. If grid contains only columns hidden by stacking this will return false
561
561
  * @public
562
562
  * @return {boolean}
563
563
  */
@@ -570,7 +570,7 @@ ColumnFormattingPlugin.prototype.hasHiddenColumn = function() {
570
570
  }
571
571
  return false;
572
572
  };
573
- /** Check if the specified column is hidden
573
+ /** Check if the specified column is hidden. Column hidden by stacking is not considered as hidden column.
574
574
  * @public
575
575
  * @param {number} colIndex
576
576
  * @return {boolean}
@@ -578,7 +578,8 @@ ColumnFormattingPlugin.prototype.hasHiddenColumn = function() {
578
578
  ColumnFormattingPlugin.prototype.isColumnHidden = function(colIndex) {
579
579
  var grid = this._hosts[0];
580
580
  if(grid) {
581
- return !grid.isColumnVisible(colIndex);
581
+ var visible = grid.getColumnVisibility(colIndex, 0);
582
+ return !visible;
582
583
  }
583
584
  return false;
584
585
  };
@@ -142,7 +142,7 @@ declare class ColumnStackPlugin extends GridPlugin {
142
142
 
143
143
  public moveColumnById(srcCol: number|string|null, destCol?: (number|string)|null): boolean;
144
144
 
145
- public hideStack(stackId: string): void;
145
+ public hideStack(stackId: string, hidden?: boolean|null): void;
146
146
 
147
147
  public showStack(stackId: string): void;
148
148
 
@@ -129,10 +129,12 @@ var ColumnStackPlugin = function () {
129
129
  this._onStackButtonClicked = this._onStackButtonClicked.bind(this);
130
130
  this._updateUI = this._updateUI.bind(this);
131
131
  this._toColumnId = this._toColumnId.bind(this);
132
+ this._requestFilterRefresh = this._requestFilterRefresh.bind(this);
132
133
 
133
134
  this._hosts = [];
134
135
  this._groupDefs = new GroupDefinitions();
135
136
 
137
+ this._filterConflator = new Conflator(50, this._requestFilterRefresh);
136
138
  this._conflator = new Conflator(50, this._updateUI);
137
139
  };
138
140
 
@@ -275,6 +277,7 @@ ColumnStackPlugin.prototype.unload = function (host) {
275
277
 
276
278
  if(this._hosts.length <= 0) {
277
279
  this._conflator.reset();
280
+ this._filterConflator.reset();
278
281
  this._groupDefs.removeAllGroups();
279
282
  }
280
283
  this._dispose();
@@ -537,11 +540,26 @@ ColumnStackPlugin.prototype._hideStackedColumns = function(stack, colRefs, activ
537
540
  */
538
541
  ColumnStackPlugin.prototype._setColumnVisibility = function(colIndex, shown) {
539
542
  if(colIndex >= 0) {
543
+ var dirty = false;
540
544
  for(var g = this._hosts.length; --g >= 0;) {
541
- this._hosts[g].setColumnVisibility(colIndex, shown, 2);
545
+ dirty |= this._hosts[g].setColumnVisibility(colIndex, shown, 2);
546
+ }
547
+
548
+ if(dirty){
549
+ this._requestFilterRefresh();
542
550
  }
543
551
  }
544
552
  };
553
+ /** @private */
554
+ ColumnStackPlugin.prototype._requestFilterRefresh = function() {
555
+ if(this._filterConflator.conflate()) {
556
+ return;
557
+ }
558
+ var rfp = this._getPlugin("RowFilteringPlugin");
559
+ if(rfp && rfp["refresh"]) {
560
+ rfp["refresh"]();
561
+ }
562
+ };
545
563
  /** @private
546
564
  * @param {Array} colRefs Array of column index, id, or field
547
565
  */
@@ -1042,10 +1060,6 @@ ColumnStackPlugin.prototype.stackColumns = function(colRefs, stackId, options) {
1042
1060
 
1043
1061
  this._groupDefs.setGroup(sid, stack);
1044
1062
 
1045
- var cfp = this._getPlugin("ColumnFilterPlugin");
1046
- if(cfp) {
1047
- cfp["refresh"]();
1048
- }
1049
1063
  this._updateUI(); // asyncronuos
1050
1064
  return true;
1051
1065
  };
@@ -1205,10 +1219,6 @@ ColumnStackPlugin.prototype.unstackColumns = function(colIndices) {
1205
1219
  }
1206
1220
  }
1207
1221
  if(dirty) {
1208
- var cfp = this._getPlugin("ColumnFilterPlugin");
1209
- if(cfp) {
1210
- cfp["refresh"]();
1211
- }
1212
1222
  this._updateUI(); // asyncronuos
1213
1223
  }
1214
1224
 
@@ -1345,10 +1355,6 @@ ColumnStackPlugin.prototype._setActiveColumn = function(stack, newActiveColumn)
1345
1355
  csp.dispatchSelectionChanged();
1346
1356
  }
1347
1357
  }
1348
- var cfp = this._getPlugin("ColumnFilterPlugin");
1349
- if(cfp) {
1350
- cfp["refresh"]();
1351
- }
1352
1358
  return true;
1353
1359
  };
1354
1360
 
@@ -1975,29 +1981,6 @@ ColumnStackPlugin.prototype.moveColumnById = function(srcCol, destCol) {
1975
1981
  return this._moveColumnById(srcCol, destCol);
1976
1982
  };
1977
1983
 
1978
- /** @private
1979
- * @description Set stack visibility to the specific stack
1980
- * @param {string} stackId
1981
- * @param {boolean} visible
1982
- */
1983
- ColumnStackPlugin.prototype._setStackVisibility = function(stackId, visible) {
1984
- var stackOption = this._groupDefs.getGroup(stackId);
1985
- if(!stackOption){
1986
- return;
1987
- }
1988
-
1989
- if(stackOption.spreading && !stackOption.collapsed){
1990
- var children = stackOption.children;
1991
- for(var i = 0; i < children.length; i++){
1992
- this._setColumnVisibility(this.getColumnIndex(children[i]), visible);
1993
- }
1994
- } else {
1995
- var activeColIndex = this.getColumnIndex(stackOption.activeColumn);
1996
- this._setColumnVisibility(activeColIndex, visible);
1997
- }
1998
- };
1999
-
2000
-
2001
1984
  /** @private
2002
1985
  * @description Check for active column in a stack if it needs an update.
2003
1986
  * @param {Object} stackOpt
@@ -2016,12 +1999,26 @@ ColumnStackPlugin.prototype._updateActiveColumn = function(stackOpt) {
2016
1999
  /** @public
2017
2000
  * @description Hide specific stack from grid
2018
2001
  * @param {string} stackId
2002
+ * @param {boolean=} hidden
2019
2003
  */
2020
- ColumnStackPlugin.prototype.hideStack = function(stackId) {
2004
+ ColumnStackPlugin.prototype.hideStack = function(stackId, hidden) {
2021
2005
  if(!stackId){
2022
2006
  return;
2023
2007
  }
2024
- this._setStackVisibility(stackId, false);
2008
+ var stackOption = this._groupDefs.getGroup(stackId);
2009
+ if(!stackOption){
2010
+ return;
2011
+ }
2012
+
2013
+ if(hidden == null){
2014
+ hidden = true;
2015
+ }
2016
+ var children = stackOption.children;
2017
+ for(var i = 0; i < children.length; i++){
2018
+ for(var g = this._hosts.length; --g >= 0;) {
2019
+ this._hosts[g].hideColumn(this.getColumnIndex(children[i]), hidden);
2020
+ }
2021
+ }
2025
2022
  };
2026
2023
 
2027
2024
  /** @public
@@ -2032,7 +2029,7 @@ ColumnStackPlugin.prototype.showStack = function(stackId) {
2032
2029
  if(!stackId){
2033
2030
  return;
2034
2031
  }
2035
- this._setStackVisibility(stackId, true);
2032
+ this.hideStack(stackId, false);
2036
2033
  };
2037
2034
 
2038
2035
  /** @public
@@ -8,7 +8,8 @@ import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
8
8
  declare namespace ConditionalColoringPlugin {
9
9
 
10
10
  type Options = {
11
- predefinedColors?: any
11
+ predefinedColors?: any,
12
+ blinkingDuration?: number|null
12
13
  };
13
14
 
14
15
  type ColumnOptions = {
@@ -27,10 +28,11 @@ declare namespace ConditionalColoringPlugin {
27
28
  };
28
29
 
29
30
  type Condition = {
30
- expression?: (string|((...params: any[]) => any))|null,
31
+ expression?: (string|((...params: any[]) => any)|any[])|null,
31
32
  backgroundColor?: string|null,
32
33
  color?: string|null,
33
- cssClass?: string|null
34
+ cssClass?: string|null,
35
+ field?: string|null
34
36
  };
35
37
 
36
38
  type Blinking = {
@@ -38,7 +40,8 @@ declare namespace ConditionalColoringPlugin {
38
40
  field?: string|null,
39
41
  up?: string|null,
40
42
  down?: string|null,
41
- level?: (string|boolean)|null
43
+ level?: (string|boolean)|null,
44
+ duration?: number|null
42
45
  };
43
46
 
44
47
  type ColorText = {
@@ -70,7 +73,7 @@ declare class ConditionalColoringPlugin extends GridPlugin {
70
73
 
71
74
  public setColumnColoring(colIndex: number, columnOptions?: (ConditionalColoringPlugin.ColumnOptions|null)|null): void;
72
75
 
73
- public setConditionalColoring(colIndex: number, coloringOptions?: (ConditionalColoringPlugin.ConditionalColoringOptions|null)|null): void;
76
+ public setConditionalColoring(colIndex: number, coloringOptions?: ConditionalColoringPlugin.ConditionalColoringOptions|null): void;
74
77
 
75
78
  public setColumnBlinking(colIndex: number, blinkingOptions?: (boolean|ConditionalColoringPlugin.Blinking)|null, field?: string|null): void;
76
79
 
@@ -8,31 +8,49 @@ import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
8
8
  /** @typedef {Object} ConditionalColoringPlugin~Options
9
9
  * @description The options can be specified by `conditionalColoring` property of the main grid's options
10
10
  * @property {Object=} predefinedColors Predefined color object map for conditional coloring
11
+ * @property {number=} blinkingDuration=250 Blinking duration in milliseconds
11
12
  */
12
13
 
13
14
  /** @typedef {Object} ConditionalColoringPlugin~ColumnOptions
14
- * @description Extension column options that can be specified on each individual grid's column option:
15
+ * @description Extension column options that can be specified on each Grid column configuration object
15
16
  * @property {Array.<ConditionalColoringPlugin~Condition>=} conditions=null List of condition options
16
17
  * @property {(string|boolean|ConditionalColoringPlugin~ColorText)=} colorText=null A shorthand for specifying default condition based on the field.
17
18
  * @property {(string|boolean|ConditionalColoringPlugin~ColorText)=} tickColor=null Alias of colorText.
18
19
  * @property {(string|boolean|ConditionalColoringPlugin~Blinking)=} blinking=null Blink Options. If specified, the cell will be blinked on data change.
19
- * @property {string=} field
20
+ * @property {string=} field Field for Grid column configuration object
20
21
  */
21
22
 
22
23
  /** @typedef {Object} ConditionalColoringPlugin~ConditionalColoringOptions
23
- * @description Extension column options that can be specified on each individual grid's column option:
24
+ * @description Available options for changing conditional coloring at runtime
24
25
  * @property {Array.<ConditionalColoringPlugin~Condition>=} conditions=null List of condition options
25
26
  * @property {(string|boolean|ConditionalColoringPlugin~ColorText)=} colorText=null A shorthand for specifying default condition based on the field.
26
- * @property {(string|boolean|ConditionalColoringPlugin~ColorText)=} tickColor=null Alias of colorText.
27
- * @property {string=} field
27
+ * @property {(string|boolean|ConditionalColoringPlugin~ColorText)=} tickColor=null Alias of colorText
28
+ * @property {string=} field Field to be used for all conditions, overriding the field defined in ColumnOptions
28
29
  */
29
30
 
30
31
  /** @typedef {Object} ConditionalColoringPlugin~Condition
31
- * @description Available options describing `condition` object
32
- * @property {(string|Function)=} expression Expression could be `[FIELD_1] > 0`
32
+ * @description Properties defining colors and conditioning
33
+ * @property {(string|Function|Array)=} expression The expression can be in the following forms: text, function, and 2 dimentional array
33
34
  * @property {string=} backgroundColor="" CSS color (e.g. #ffffff, black)
34
35
  * @property {string=} color CSS="" color (e.g. #000000, white)
35
36
  * @property {string=} cssClass cssClass="" Predefined color class name
37
+ * @property {string=} field Field to be used for this specific condition, overriding the field defined in ConditionalColoringOptions
38
+ * @example
39
+ * var conditions1 = [ // Add cssClass for any value that is greater than or equal to 10, and less than or equal to 20
40
+ * {expression: [["GTE", 10, "AND"], ["LTE", 20]], cssClass: "predefinedColors"}
41
+ * ];
42
+ * var conditions2 = [ // Add background color for any fieldA value that is not blank value (e.g., null, undefined, 0, false, empty string)
43
+ * {
44
+ * expression: function(rowData) {
45
+ * return rowData["fieldA"] ? true : false;
46
+ * },
47
+ * backgroundColor: "blue",
48
+ * field: "fieldA"
49
+ * }
50
+ * ];
51
+ * var conditions3 = [ // Add text color for any fieldA value that is not equal to 10
52
+ * {expression: "[fieldA] != 10", color: "red"}
53
+ * ];
36
54
  */
37
55
 
38
56
  /** @typedef {(string|boolean|Object)} ConditionalColoringPlugin~Blinking
@@ -43,6 +61,7 @@ import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
43
61
  * @property {string=} up CSS color (e.g. #00ff00, green)
44
62
  * @property {string=} down CSS color (e.g. #ff0000, red)
45
63
  * @property {(string|boolean)=} level CSS color (e.g. #33333, grey). If false value is specified, blinking for level color is disabled.
64
+ * @property {number=} duration If specified, this will override blinking duration from extension option. Blinking duration in milliseconds
46
65
  */
47
66
 
48
67
  /** @typedef {(string|boolean|Object)} ConditionalColoringPlugin~ColorText
@@ -126,6 +145,10 @@ ConditionalColoringPlugin.prototype._pendingFields;
126
145
  * @private
127
146
  */
128
147
  ConditionalColoringPlugin.prototype._predefinedColors = null;
148
+ /** @type {number}
149
+ * @private
150
+ */
151
+ ConditionalColoringPlugin.prototype._blinkingDuration = 250;
129
152
  /** @type {string}
130
153
  * @private
131
154
  */
@@ -171,6 +194,10 @@ ConditionalColoringPlugin.prototype.initialize = function (host, options) {
171
194
  this._injectPredefinedColors(host);
172
195
  host.enableClass(ConditionalColoringPlugin._controlClass);
173
196
  }
197
+ var blinkingDuration = extOptions["blinkingDuration"];
198
+ if(blinkingDuration != null && typeof blinkingDuration === "number"){
199
+ this._blinkingDuration = blinkingDuration;
200
+ }
174
201
  }
175
202
 
176
203
  if(hosts.length === 1) {
@@ -303,15 +330,24 @@ ConditionalColoringPlugin.prototype.getColumnColoring = function(colIndex, optio
303
330
  if (Array.isArray(conditions) && conditions.length > 0) {
304
331
  options.conditions = [];
305
332
 
333
+ var returnedFields = [
334
+ "expression",
335
+ "backgroundColor",
336
+ "color",
337
+ "cssClass",
338
+ "field"
339
+ ];
306
340
  var count = conditions.length;
307
341
  for (var n = 0; n < count; n++) {
308
342
  var exCondition = {};
309
- extendObject(exCondition, conditions[n], [
310
- "expression",
311
- "backgroundColor",
312
- "color",
313
- "cssClass"
314
- ]);
343
+ var cond = conditions[n];
344
+ extendObject(exCondition, cond, returnedFields);
345
+ if(typeof exCondition["expression"] === "function") {
346
+ var origExp = cond["origExpression"];
347
+ if(origExp) {
348
+ exCondition["expression"] = origExp;
349
+ }
350
+ }
315
351
 
316
352
  options.conditions.push(exCondition);
317
353
  }
@@ -555,18 +591,18 @@ ConditionalColoringPlugin.prototype.setColumnColoring = function (colIndex, colu
555
591
 
556
592
  /** @public
557
593
  * @param {number} colIndex
558
- * @param {(ConditionalColoringPlugin~ConditionalColoringOptions|null)=} coloringOptions
594
+ * @param {ConditionalColoringPlugin~ConditionalColoringOptions=} coloringOptions
559
595
  */
560
596
  ConditionalColoringPlugin.prototype.setConditionalColoring = function (colIndex, coloringOptions) {
561
597
  var colData = this._newColumnData(colIndex);
598
+
599
+ colData["conditions"] = null; // WARNING: This clears existing user states
562
600
  if(coloringOptions) {
563
601
  // Save column config state
564
- colData["conditions"] = coloringOptions["conditions"];
565
602
  colData["colorText"] = coloringOptions["colorText"];
566
603
  colData["tickColor"] = coloringOptions["tickColor"];
567
604
  colData["field"] = coloringOptions["field"];
568
605
  } else {
569
- colData["conditions"] = null;
570
606
  colData["colorText"] = null;
571
607
  colData["tickColor"] = null;
572
608
  }
@@ -583,6 +619,7 @@ ConditionalColoringPlugin.prototype.setConditionalColoring = function (colIndex,
583
619
  }
584
620
 
585
621
  if(colorOptions.hasColor) { // Set new coloring
622
+ colData["conditions"] = coloringOptions["conditions"]; // WARNING: This stores user object
586
623
  var newFieldsMap = colorOptions.fields;
587
624
  if (!painter) {
588
625
  painter = colData["painter"] = new CellPainter();
@@ -685,6 +722,8 @@ ConditionalColoringPlugin.prototype.setColumnBlinking = function (colIndex, blin
685
722
  this._removeDataFields(prevField, colIndex, BLINKING_TYPE);
686
723
  }
687
724
  }
725
+ var blinkDuration = bOptions.duration || this._blinkingDuration;
726
+ painter.setBlinkingDuration(blinkDuration);
688
727
  painter.disableLevelColor(bOptions.level === false);
689
728
  if (bOptions.customColor) {
690
729
  painter.addBlink(newBlinkingField, bOptions.up, bOptions.down, bOptions.level, bOptions.border);
@@ -774,6 +813,7 @@ ConditionalColoringPlugin.prototype._prepareBlinkingOptions = function (colIndex
774
813
  } else if(typeof blinkingOptions === "object") {
775
814
  blinkField = /** @type{string} */(blinkingOptions["field"]) || field;
776
815
  bOptions.border = blinkingOptions["border"];
816
+ bOptions.duration = blinkingOptions["duration"];
777
817
  if (blinkingOptions["up"] || blinkingOptions["down"] || blinkingOptions["level"]) {
778
818
  bOptions.customColor = true;
779
819
  bOptions.up = blinkingOptions["up"];
@@ -784,52 +824,81 @@ ConditionalColoringPlugin.prototype._prepareBlinkingOptions = function (colIndex
784
824
  bOptions.level = false;
785
825
  }
786
826
  }
787
-
788
827
  bOptions.field = ConditionalColoringPlugin._convertKeyword(blinkField, field);
789
828
  bOptions.inputField = blinkField;
790
829
  return bOptions;
791
830
  };
792
831
 
832
+ /** @private
833
+ * @param {Object} obj
834
+ * @param {Array|string} entries
835
+ */
836
+ var _addMapEntries = function(obj, entries) {
837
+ if(entries) {
838
+ if(Array.isArray(entries)) {
839
+ var len = entries.length;
840
+ for(var i = 0; i < len; ++i) {
841
+ obj[entries[i]] = true;
842
+ }
843
+ } else {
844
+ obj[entries] = true;
845
+ }
846
+ }
847
+ };
793
848
  /** @private
794
849
  * @param {number} colIndex
795
850
  * @param {ConditionalColoringPlugin~ColumnOptions} columnOptions
796
851
  * @return {!Object}
797
852
  */
798
853
  ConditionalColoringPlugin.prototype._prepareColorOptions = function(colIndex, columnOptions) {
799
- var colorOptions = {};
800
854
  if(!columnOptions) {
801
- return colorOptions;
855
+ return {};
802
856
  }
803
857
  var colField = this._getField(colIndex);
804
- var field = /** @type{string} */(columnOptions["field"]) || colField;
805
858
  var inputField = columnOptions["inputField"] || ""; // The value is from user so it can be "THIS_COLUMN" or null
806
- colorOptions["inputField"] = inputField; // Used to retain state on Column Format Dialog
807
- field = ConditionalColoringPlugin._convertKeyword(inputField, field);
859
+ var field = ConditionalColoringPlugin._convertKeyword(inputField, colField);
860
+ if(columnOptions["field"]) {
861
+ field = /** @type{string} */(columnOptions["field"]);
862
+ }
863
+
864
+ var hasColor = 0;
865
+ var fieldMap = {};
808
866
 
809
867
  // Check if there is another type of coloring
810
- // "colorText" option has more priority than "tickColor"
811
868
  var colorText = columnOptions["colorText"] || columnOptions["tickColor"];
812
869
  var conditions = columnOptions["conditions"];
813
870
  var conditionCount = conditions ? conditions.length : 0;
871
+ var colorOptions = {};
814
872
  if(conditionCount) {
815
- colorOptions.hasColor = 1;
816
- colorOptions.fields = {};
817
873
  colorOptions.condColoring = {};
818
874
  colorOptions.condColoring.conditions = conditions;
819
875
 
820
- var formatter = (field == colField) ? columnOptions["textFormatter"] : null;
876
+ var formatter = (field == colField) ? columnOptions["textFormatter"] : null; // TODO: This text formatter is not used or defined any where
821
877
  var builder = ConditionalColoringPlugin.getFilterBuilder();
822
878
 
823
- // WARNING: Builder has to have field first
824
- builder.setFieldDefinition(field, formatter, field);
825
-
826
879
  for(var i = conditionCount; --i >= 0;) {
827
880
  var cond = conditions[i];
828
- var exp = cond["expression"];
829
- if(!exp && field) { // Build Expression from condition
830
- var oper = cond["condition"];
881
+ var exp = cond ? cond["expression"] : null;
882
+ if(Array.isArray(exp)) {
883
+ var fieldPerCon = cond["field"] || field;
884
+ cond["expression"] = builder.parse(exp, fieldPerCon, null, fieldPerCon); // WARNING: This alters user object
885
+ if(cond["expression"]) {
886
+ cond["origExpression"] = exp;
887
+ hasColor = 1;
888
+ fieldMap[fieldPerCon] = true;
889
+ }
890
+ } else if(typeof exp === "function") {
891
+ hasColor = 1;
892
+ _addMapEntries(fieldMap, cond["fields"] || cond["field"]);
893
+ } else if(typeof exp === "string") {
894
+ hasColor = 1;
895
+ _addMapEntries(fieldMap, _getFieldsFromExpression(exp));
896
+ } else if(field && cond["condition"]) {
897
+ hasColor = 1;
898
+ builder.setFieldDefinition(field, formatter, field); // TODO: Each condition could have different fields
899
+ var oper = cond["condition"]; // WARNING: This condition is used by Format dialog. It's undocumented
831
900
  var value1 = cond["value1"];
832
- var value2 = cond["value1"];
901
+ var value2 = cond["value2"];
833
902
 
834
903
  if(oper !== "BTW") {
835
904
  builder.addCondition(oper, value1);
@@ -837,26 +906,16 @@ ConditionalColoringPlugin.prototype._prepareColorOptions = function(colIndex, co
837
906
  builder.addCondition("GTE", value1);
838
907
  builder.addCondition("LTE", value2);
839
908
  }
840
- exp = builder.buildFilter();
841
- cond["expression"] = exp;
842
- colorOptions.fields[field] = true;
843
- } else {
844
- // Get fields from expression string
845
- var expFields = _getFieldsFromExpression(exp);
846
- for(var n = 0; n < expFields.length; n++) {
847
- colorOptions.fields[expFields[n]] = true;
848
- }
909
+ cond["expression"] = builder.buildFilter();
910
+ fieldMap[field] = true;
849
911
  }
850
912
  }
851
913
  } else if(colorText) {
852
- colorOptions.hasColor = 1;
853
- colorOptions.fields = {};
854
914
  colorOptions.colorText = {};
855
915
  colorOptions.colorText.useThemeColors = true;
856
- var type = typeof colorText;
857
- if(type === "string") {
916
+ if(typeof colorText === "string") {
858
917
  field = colorText;
859
- } else if(type === "object") {
918
+ } else if(typeof colorText === "object") {
860
919
  field = /** @type{string} */(colorText["field"]) || field;
861
920
 
862
921
  if (colorText["upClass"] || colorText["downClass"] || colorText["levelClass"]) {
@@ -866,11 +925,22 @@ ConditionalColoringPlugin.prototype._prepareColorOptions = function(colIndex, co
866
925
  colorOptions.colorText.levelClass = colorText["levelClass"];
867
926
  }
868
927
  }
869
- colorOptions.colorText.field = field;
870
- colorOptions.fields[field] = true;
928
+
929
+ if(field) {
930
+ colorOptions.colorText.field = field;
931
+ hasColor = 1;
932
+ fieldMap[field] = true;
933
+ }
934
+ }
935
+
936
+ if(hasColor) {
937
+ colorOptions.hasColor = 1;
938
+ colorOptions.fields = fieldMap;
939
+ colorOptions["inputField"] = inputField; // Used to retain state on Column Format Dialog
940
+ return colorOptions;
871
941
  }
872
942
 
873
- return colorOptions;
943
+ return {};
874
944
  };
875
945
  /** @private
876
946
  * @function
@@ -881,7 +951,7 @@ ConditionalColoringPlugin.prototype._prepareColorOptions = function(colIndex, co
881
951
  ConditionalColoringPlugin._convertKeyword = function(userInput, fallback) {
882
952
  if(userInput) {
883
953
  // Note that THIS_COLUMN is a special keyword that needs to be converted before usage
884
- return userInput.indexOf("THIS_COLUMN") > -1 ? fallback : userInput;
954
+ return userInput.indexOf("THIS_COLUMN") < 0 ? userInput : fallback;
885
955
  }
886
956
  return fallback;
887
957
  };
@@ -1301,38 +1301,23 @@ RowFilteringPlugin.prototype._setTimerForUpdatingIcons = function () {
1301
1301
 
1302
1302
  RowFilteringPlugin.prototype.refresh = function () {
1303
1303
  this._dvTimerId = 0;
1304
+ this._activeColFilters = this._columnFilters; //check cstp
1304
1305
 
1305
- var cstkp = this._getPlugin("ColumnStackingPlugin");
1306
+ var cstkp = this._getPlugin("ColumnStackPlugin");
1306
1307
 
1307
- this._activeColFilters = this._columnFilters;
1308
-
1309
- if (cstkp && this._activeColFilters.length) {
1308
+ if (cstkp) {
1310
1309
  var colIndex, cfo;
1310
+ var host = this._hosts[0];
1311
1311
 
1312
1312
  var colCount = this._getColumnCount();
1313
1313
 
1314
- var hasInactiveColumn = false;
1314
+ this._activeColFilters = [];
1315
1315
 
1316
1316
  for (colIndex = 0; colIndex < colCount; ++colIndex) {
1317
1317
  cfo = this._getColumnFilterOption(colIndex);
1318
1318
 
1319
- if (cfo) {
1320
- if (cstkp.isInactiveStackedColumn(colIndex)) {
1321
- hasInactiveColumn = true;
1322
- break;
1323
- }
1324
- }
1325
- }
1326
-
1327
- if (hasInactiveColumn) {
1328
- this._activeColFilters = [];
1329
-
1330
- for (colIndex = 0; colIndex < colCount; ++colIndex) {
1331
- cfo = this._getColumnFilterOption(colIndex);
1332
-
1333
- if (cfo && !cstkp.isInactiveStackedColumn(colIndex)) {
1334
- this._activeColFilters.push(cfo);
1335
- }
1319
+ if (cfo && host.getColumnVisibility(colIndex, 2)) {
1320
+ this._activeColFilters.push(cfo);
1336
1321
  }
1337
1322
  }
1338
1323
  }
@@ -12,8 +12,8 @@ declare namespace CellPainter {
12
12
  };
13
13
 
14
14
  type Condition = {
15
- field: string,
16
- expression: CellPainter.Expression|string|null,
15
+ expression: string|((...params: any[]) => any)|null,
16
+ field?: string|null,
17
17
  backgroundColor?: string|null,
18
18
  color?: string|null,
19
19
  fontSize?: string|null,
@@ -136,6 +136,8 @@ declare class CellPainter {
136
136
 
137
137
  public disableLevelColor(disabled?: boolean|null): void;
138
138
 
139
+ public setBlinkingDuration(duration: number): void;
140
+
139
141
  }
140
142
 
141
143
  export default CellPainter;