@refinitiv-ui/efx-grid 6.0.28 → 6.0.30
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/core/dist/core.js +3 -2
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/grid/Core.js +2 -2
- package/lib/core/es6/grid/LayoutGrid.js +1 -0
- package/lib/grid/index.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +142 -26
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/ColumnDefinition.d.ts +2 -0
- package/lib/rt-grid/es6/ColumnDefinition.js +6 -0
- package/lib/rt-grid/es6/FieldDefinition.d.ts +4 -0
- package/lib/rt-grid/es6/FieldDefinition.js +27 -1
- package/lib/rt-grid/es6/Grid.d.ts +1 -0
- package/lib/rt-grid/es6/Grid.js +14 -0
- package/lib/rt-grid/es6/RowDefinition.d.ts +1 -1
- package/lib/rt-grid/es6/RowDefinition.js +7 -7
- package/lib/rt-grid/es6/SnapshotFiller.js +3 -0
- package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +6 -0
- package/lib/tr-grid-column-stack/es6/ColumnStack.js +70 -1
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.d.ts +30 -23
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +78 -3
- package/lib/tr-grid-in-cell-editing/es6/InCellEditing.js +24 -10
- package/lib/tr-grid-util/es6/CellPainter.d.ts +2 -1
- package/lib/tr-grid-util/es6/CellPainter.js +53 -15
- package/lib/tr-grid-util/es6/jet/mockDataAPI.js +29 -1
- package/lib/types/es6/ColumnStack.d.ts +6 -0
- package/lib/types/es6/ConditionalColoring.d.ts +30 -23
- package/lib/types/es6/ExtensionOptions.d.ts +2 -0
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +1 -1
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +3 -0
- package/lib/versions.json +4 -4
- package/package.json +6 -2
@@ -590,6 +590,12 @@ ColumnDefinition.prototype.isTimeSeries = function() {
|
|
590
590
|
/** @public
|
591
591
|
* @return {boolean}
|
592
592
|
*/
|
593
|
+
ColumnDefinition.prototype.isTimeSeriesChild = function() {
|
594
|
+
return FieldDefinition.isTimeSeriesChild(this.getField());
|
595
|
+
};
|
596
|
+
/** @public
|
597
|
+
* @return {boolean}
|
598
|
+
*/
|
593
599
|
ColumnDefinition.prototype.isFormulaField = function() {
|
594
600
|
return this._formula ? true : false;
|
595
601
|
};
|
@@ -20,12 +20,16 @@ declare namespace FieldDefinition {
|
|
20
20
|
|
21
21
|
function setFieldCaching(caching: boolean): void;
|
22
22
|
|
23
|
+
function disableTimeSeriesExpansion(disabled: boolean): void;
|
24
|
+
|
23
25
|
function isFormula(field: string): boolean;
|
24
26
|
|
25
27
|
function isAdc(field: string): boolean;
|
26
28
|
|
27
29
|
function isRealTimeField(field: string): boolean;
|
28
30
|
|
31
|
+
function isTimeSeriesChild(field: string): boolean;
|
32
|
+
|
29
33
|
function isTimeSeries(field: string): boolean;
|
30
34
|
|
31
35
|
}
|
@@ -182,6 +182,11 @@ FieldDefinition._lang = 'en';
|
|
182
182
|
* @private
|
183
183
|
*/
|
184
184
|
FieldDefinition._caching = false;
|
185
|
+
/**
|
186
|
+
* @type {boolean}
|
187
|
+
* @private
|
188
|
+
*/
|
189
|
+
FieldDefinition._timeSeriesExpansion = true;
|
185
190
|
|
186
191
|
/**
|
187
192
|
* @type {Object.<string, boolean>}
|
@@ -269,6 +274,14 @@ FieldDefinition.setFieldCaching = function (caching) {
|
|
269
274
|
FieldDefinition._caching = caching;
|
270
275
|
};
|
271
276
|
|
277
|
+
/** @public
|
278
|
+
* @function
|
279
|
+
* @param {boolean} disabled=true if disable it, time series will not be expand
|
280
|
+
*/
|
281
|
+
FieldDefinition.disableTimeSeriesExpansion = function(disabled) {
|
282
|
+
FieldDefinition._timeSeriesExpansion = disabled != false ? false : true;
|
283
|
+
};
|
284
|
+
|
272
285
|
/** @public
|
273
286
|
* @param {string} field
|
274
287
|
* @return {boolean}
|
@@ -301,7 +314,7 @@ FieldDefinition.isRealTimeField = function(field) {
|
|
301
314
|
return false;
|
302
315
|
}
|
303
316
|
|
304
|
-
if(FieldDefinition.
|
317
|
+
if(FieldDefinition.isTimeSeriesChild(field)) {
|
305
318
|
return false;
|
306
319
|
}
|
307
320
|
|
@@ -312,6 +325,14 @@ FieldDefinition.isRealTimeField = function(field) {
|
|
312
325
|
return FieldDefinition.getFieldProperty(field, "IsRealtimeField") !== false;
|
313
326
|
};
|
314
327
|
|
328
|
+
/** @public
|
329
|
+
* @param {string} field
|
330
|
+
* @return {boolean}
|
331
|
+
*/
|
332
|
+
FieldDefinition.isTimeSeriesChild = function(field) {
|
333
|
+
return FieldDefinition.getFieldProperty(field, "timeSeriesChild") ? true : false;
|
334
|
+
};
|
335
|
+
|
315
336
|
/** @public
|
316
337
|
* @param {string} field
|
317
338
|
* @return {boolean}=true if field is time series field
|
@@ -321,6 +342,11 @@ FieldDefinition.isTimeSeries = function (field) {
|
|
321
342
|
return false;
|
322
343
|
}
|
323
344
|
|
345
|
+
// If we disable time series expansion, the grid won't have a time series field.
|
346
|
+
if(!FieldDefinition._timeSeriesExpansion) {
|
347
|
+
return false;
|
348
|
+
}
|
349
|
+
|
324
350
|
// We can check time series using a cache to avoid duplicating checks in regular expressions.
|
325
351
|
var timeSeriesField = FieldDefinition.getFieldProperty(field, "timeSeries");
|
326
352
|
if (timeSeriesField != null) {
|
package/lib/rt-grid/es6/Grid.js
CHANGED
@@ -84,6 +84,7 @@ import { ElementWrapper } from "../../core/es6/grid/components/ElementWrapper.js
|
|
84
84
|
* @property {boolean=} formulaEngine=false If enabled, field with leading equal sign will be treated as a formula and rows will be filled with the calculated values.
|
85
85
|
* @property {number=} adcPollingInterval=0 Length of polling interval for refreshing ADC data in milliseconds. The default value (0) means no polling.
|
86
86
|
* @property {boolean=} fieldCaching=false If enabled, field definition will be caching internal mechanism
|
87
|
+
* @property {boolean=} timeSeriesExpansion=true If disabled, the time series field will be treated as a normal field and not expanded.
|
87
88
|
* @property {string=} childDataField=CHILD_VALUES The given field will be used to store children's static data, such as row color assignment.
|
88
89
|
* @property {boolean=} topSection=true If disabled, title section will not be rendered
|
89
90
|
*/
|
@@ -530,6 +531,11 @@ Grid.prototype._pollingEnabled = true;
|
|
530
531
|
* @private
|
531
532
|
*/
|
532
533
|
Grid.prototype._fieldCaching = false;
|
534
|
+
/** @type {boolean}
|
535
|
+
* @private
|
536
|
+
*/
|
537
|
+
Grid.prototype._timeSeriesExpansion = true;
|
538
|
+
|
533
539
|
/** @type {string}
|
534
540
|
* @private
|
535
541
|
*/
|
@@ -790,6 +796,11 @@ Grid.prototype.initialize = function(gridOption) {
|
|
790
796
|
FieldDefinition.setFieldCaching(t._fieldCaching);
|
791
797
|
}
|
792
798
|
|
799
|
+
if(gridOption["timeSeriesExpansion"] != null) {
|
800
|
+
t._timeSeriesExpansion = gridOption["timeSeriesExpansion"];
|
801
|
+
FieldDefinition.disableTimeSeriesExpansion(!t._timeSeriesExpansion);
|
802
|
+
}
|
803
|
+
|
793
804
|
if (gridOption["icons"] && gridOption["icons"]["rowGrouping"] && gridOption["icons"]["rowGrouping"]["expander"]) {
|
794
805
|
StyleLoader.chainIcon = gridOption["icons"]["rowGrouping"]["expander"];
|
795
806
|
}
|
@@ -1112,6 +1123,9 @@ Grid.prototype.getConfigObject = function (gridOptions) {
|
|
1112
1123
|
if(this._fieldCaching) {
|
1113
1124
|
obj["fieldCaching"] = this._fieldCaching;
|
1114
1125
|
}
|
1126
|
+
if(this._timeSeriesExpansion != true) {
|
1127
|
+
obj["timeSeriesExpansion"] = this._timeSeriesExpansion;
|
1128
|
+
}
|
1115
1129
|
|
1116
1130
|
if(this._childDataField) {
|
1117
1131
|
obj["childDataField"] = this._childDataField;
|
@@ -17,12 +17,12 @@ import { DataTable } from "../../core/es6/data/DataTable.js";
|
|
17
17
|
*/
|
18
18
|
|
19
19
|
/** @typedef {Object} RowDefinition~RowTypes
|
20
|
-
* @property {string} CONTENT="CONTENT"
|
21
|
-
* @property {string} CHAIN="CHAIN"
|
22
|
-
* @property {string} CONSTITUENT="CONSTITUENT"
|
23
|
-
* @property {string} GROUP_HEADER="GROUP_HEADER"
|
24
|
-
* @property {string} SUBGROUP_HEADER="SUBGROUP_HEADER"
|
25
|
-
* @property {string} GROUP_MEMBER="GROUP_MEMBER"
|
20
|
+
* @property {string} CONTENT="CONTENT" Regular row
|
21
|
+
* @property {string} CHAIN="CHAIN" Chain RIC row
|
22
|
+
* @property {string} CONSTITUENT="CONSTITUENT" Constituent row
|
23
|
+
* @property {string} GROUP_HEADER="GROUP_HEADER" Row of segment separator at the very top
|
24
|
+
* @property {string} SUBGROUP_HEADER="SUBGROUP_HEADER" Row of nested segment separator
|
25
|
+
* @property {string} GROUP_MEMBER="GROUP_MEMBER" Child row displayed under segment separator
|
26
26
|
*/
|
27
27
|
|
28
28
|
/** @type {string}
|
@@ -31,7 +31,7 @@ import { DataTable } from "../../core/es6/data/DataTable.js";
|
|
31
31
|
*/
|
32
32
|
var ROW_DEF = "ROW_DEF";
|
33
33
|
|
34
|
-
/** @type {RowDefinition~RowTypes}
|
34
|
+
/** @type {!RowDefinition~RowTypes}
|
35
35
|
* @public
|
36
36
|
* @const
|
37
37
|
*/
|
@@ -381,6 +381,9 @@ SnapshotFiller.prototype._onRTKSuccess = function (fields, serverResult) {
|
|
381
381
|
var dataRow = data2D[i];
|
382
382
|
ric = dataRow[0];
|
383
383
|
|
384
|
+
if (ricMap[ric]) {
|
385
|
+
continue; // we interested only first row of ric
|
386
|
+
}
|
384
387
|
var snapData = ricMap[ric] = {};
|
385
388
|
|
386
389
|
// loop for create rowData for update
|
@@ -129,6 +129,12 @@ declare class ColumnStackPlugin extends GridPlugin {
|
|
129
129
|
|
130
130
|
public moveColumnById(srcCol: number|string|null, destCol?: (number|string)|null): boolean;
|
131
131
|
|
132
|
+
public hideStack(stackId: string): void;
|
133
|
+
|
134
|
+
public showStack(stackId: string): void;
|
135
|
+
|
136
|
+
public isStackHidden(stackId: string): boolean|null|null;
|
137
|
+
|
132
138
|
}
|
133
139
|
|
134
140
|
export default ColumnStackPlugin;
|
@@ -336,6 +336,7 @@ ColumnStackPlugin.prototype.config = function (options) {
|
|
336
336
|
*/
|
337
337
|
ColumnStackPlugin.prototype.getConfigObject = function (gridOptions) {
|
338
338
|
var obj = gridOptions || {};
|
339
|
+
var host = this._host || this._hosts[0];
|
339
340
|
|
340
341
|
var columnOptions = obj["columns"];
|
341
342
|
|
@@ -351,7 +352,7 @@ ColumnStackPlugin.prototype.getConfigObject = function (gridOptions) {
|
|
351
352
|
for(var i = 0; i < memberIndices.length; i++){
|
352
353
|
var colIndex = memberIndices[i];
|
353
354
|
var colOption = columnOptions[colIndex];
|
354
|
-
if(colOption){
|
355
|
+
if(colOption && host.isColumnVisible(colIndex)){
|
355
356
|
colOption.hidden = colIndex !== activeColIndex;
|
356
357
|
}
|
357
358
|
}
|
@@ -1310,6 +1311,10 @@ ColumnStackPlugin.prototype._onColumnRemoved = function (e) {
|
|
1310
1311
|
} else {
|
1311
1312
|
stackOpt.activeColumn = stackOpt.stackRefs[0];
|
1312
1313
|
}
|
1314
|
+
|
1315
|
+
// TODO: Add a proper way to set visibility to activeColumn when activeColumn is changed
|
1316
|
+
var activeColIndex = this._getColumnIndex(stackOpt.activeColumn);
|
1317
|
+
this._setColumnVisibility(activeColIndex, true);
|
1313
1318
|
this._updateUI();
|
1314
1319
|
}
|
1315
1320
|
}
|
@@ -1871,6 +1876,70 @@ ColumnStackPlugin.prototype.moveColumnById = function(srcCol, destCol) {
|
|
1871
1876
|
return dirty;
|
1872
1877
|
};
|
1873
1878
|
|
1879
|
+
/** @private
|
1880
|
+
* @description Set stack visibility to the specific stack
|
1881
|
+
* @param {string} stackId
|
1882
|
+
* @param {boolean} visible
|
1883
|
+
*/
|
1884
|
+
ColumnStackPlugin.prototype._setStackVisibility = function(stackId, visible) {
|
1885
|
+
var stackOption = this._stacks[stackId];
|
1886
|
+
if(!stackOption){
|
1887
|
+
return;
|
1888
|
+
}
|
1889
|
+
|
1890
|
+
if(stackOption["spreading"] && !stackOption["collapsed"]){
|
1891
|
+
var stackRefs = stackOption["stackRefs"];
|
1892
|
+
for(var i = 0; i < stackRefs.length; i++){
|
1893
|
+
var colIndex = this._getColumnIndex(stackRefs[i]);
|
1894
|
+
this._setColumnVisibility(colIndex, visible);
|
1895
|
+
}
|
1896
|
+
} else {
|
1897
|
+
var activeColIndex = this._getColumnIndex(stackOption.activeColumn);
|
1898
|
+
this._setColumnVisibility(activeColIndex, visible);
|
1899
|
+
}
|
1900
|
+
};
|
1901
|
+
|
1902
|
+
/** @public
|
1903
|
+
* @description Hide specific stack from grid
|
1904
|
+
* @param {string} stackId
|
1905
|
+
*/
|
1906
|
+
ColumnStackPlugin.prototype.hideStack = function(stackId) {
|
1907
|
+
if(!stackId){
|
1908
|
+
return;
|
1909
|
+
}
|
1910
|
+
this._setStackVisibility(stackId, false);
|
1911
|
+
};
|
1912
|
+
|
1913
|
+
/** @public
|
1914
|
+
* @description Show specific stack from grid
|
1915
|
+
* @param {string} stackId
|
1916
|
+
*/
|
1917
|
+
ColumnStackPlugin.prototype.showStack = function(stackId) {
|
1918
|
+
if(!stackId){
|
1919
|
+
return;
|
1920
|
+
}
|
1921
|
+
this._setStackVisibility(stackId, true);
|
1922
|
+
};
|
1923
|
+
|
1924
|
+
/** @public
|
1925
|
+
* @description Get hidden status of specific stack
|
1926
|
+
* @param {string} stackId
|
1927
|
+
* @return {boolean|null}
|
1928
|
+
*/
|
1929
|
+
ColumnStackPlugin.prototype.isStackHidden = function(stackId) {
|
1930
|
+
var stackOption = this._stacks[stackId];
|
1931
|
+
var host = this._host || this._hosts[0];
|
1932
|
+
|
1933
|
+
if(!stackOption || !host){
|
1934
|
+
return null;
|
1935
|
+
}
|
1936
|
+
|
1937
|
+
var activeColIndex = this._getColumnIndex(stackOption.activeColumn);
|
1938
|
+
var isVisible = host.isColumnVisible(activeColIndex);
|
1939
|
+
|
1940
|
+
return !isVisible;
|
1941
|
+
};
|
1942
|
+
|
1874
1943
|
|
1875
1944
|
|
1876
1945
|
export default ColumnStackPlugin;
|
@@ -1,39 +1,44 @@
|
|
1
1
|
import {Ext} from '../../tr-grid-util/es6/Ext.js';
|
2
|
-
import {
|
3
|
-
import {
|
2
|
+
import {GridPlugin} from '../../tr-grid-util/es6/GridPlugin.js';
|
3
|
+
import {extendObject, injectCss, prettifyCss} from '../../tr-grid-util/es6/Util.js';
|
4
4
|
import {CellPainter} from '../../tr-grid-util/es6/CellPainter.js';
|
5
5
|
import {FilterBuilder} from '../../tr-grid-util/es6/FilterBuilder.js';
|
6
6
|
import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
|
7
7
|
|
8
8
|
declare namespace ConditionalColoringPlugin {
|
9
9
|
|
10
|
+
type Options = {
|
11
|
+
predefinedColors?: any
|
12
|
+
};
|
13
|
+
|
10
14
|
type ColumnOptions = {
|
11
|
-
conditions?: (ConditionalColoringPlugin.Condition)[],
|
12
|
-
colorText?: (string|boolean),
|
13
|
-
tickColor?: (string|boolean),
|
14
|
-
blinking?: (ConditionalColoringPlugin.Blinking|boolean),
|
15
|
-
field?: string
|
15
|
+
conditions?: (ConditionalColoringPlugin.Condition)[]|null,
|
16
|
+
colorText?: (string|boolean)|null,
|
17
|
+
tickColor?: (string|boolean)|null,
|
18
|
+
blinking?: (ConditionalColoringPlugin.Blinking|boolean)|null,
|
19
|
+
field?: string|null
|
16
20
|
};
|
17
21
|
|
18
22
|
type ConditionalColoringOptions = {
|
19
|
-
conditions?: (ConditionalColoringPlugin.Condition)[],
|
20
|
-
colorText?: (string|boolean),
|
21
|
-
tickColor?: (string|boolean),
|
22
|
-
field?: string
|
23
|
+
conditions?: (ConditionalColoringPlugin.Condition)[]|null,
|
24
|
+
colorText?: (string|boolean)|null,
|
25
|
+
tickColor?: (string|boolean)|null,
|
26
|
+
field?: string|null
|
23
27
|
};
|
24
28
|
|
25
29
|
type Condition = {
|
26
|
-
expression?: (string|((...params: any[]) => any)),
|
27
|
-
backgroundColor?: string,
|
28
|
-
color?: string
|
30
|
+
expression?: (string|((...params: any[]) => any))|null,
|
31
|
+
backgroundColor?: string|null,
|
32
|
+
color?: string|null,
|
33
|
+
cssClass?: string|null
|
29
34
|
};
|
30
35
|
|
31
36
|
type Blinking = {
|
32
|
-
border?: boolean,
|
33
|
-
field?: string,
|
34
|
-
up?: string,
|
35
|
-
down?: string,
|
36
|
-
level?: (string|boolean)
|
37
|
+
border?: boolean|null,
|
38
|
+
field?: string|null,
|
39
|
+
up?: string|null,
|
40
|
+
down?: string|null,
|
41
|
+
level?: (string|boolean)|null
|
37
42
|
};
|
38
43
|
|
39
44
|
}
|
@@ -56,21 +61,23 @@ declare class ConditionalColoringPlugin extends GridPlugin {
|
|
56
61
|
|
57
62
|
public getColumnColoring(colIndex: number, options?: any): ConditionalColoringPlugin.ColumnOptions;
|
58
63
|
|
59
|
-
public setColumnColoring(colIndex: number, columnOptions?: (ConditionalColoringPlugin.ColumnOptions|null)): void;
|
64
|
+
public setColumnColoring(colIndex: number, columnOptions?: (ConditionalColoringPlugin.ColumnOptions|null)|null): void;
|
60
65
|
|
61
|
-
public setConditionalColoring(colIndex: number, coloringOptions?: (ConditionalColoringPlugin.ConditionalColoringOptions|null)): void;
|
66
|
+
public setConditionalColoring(colIndex: number, coloringOptions?: (ConditionalColoringPlugin.ConditionalColoringOptions|null)|null): void;
|
62
67
|
|
63
|
-
public setColumnBlinking(colIndex: number, blinkingOptions?: (boolean|ConditionalColoringPlugin.Blinking), field?: string): void;
|
68
|
+
public setColumnBlinking(colIndex: number, blinkingOptions?: (boolean|ConditionalColoringPlugin.Blinking)|null, field?: string|null): void;
|
64
69
|
|
65
70
|
public blinkRow(rowIndex: number, blinkSignal: number, host?: any): void;
|
66
71
|
|
72
|
+
public setPredefinedColors(predefinedColors: any): void;
|
73
|
+
|
67
74
|
public getColumnPainter(colIndex: number): CellPainter|null;
|
68
75
|
|
69
76
|
public applyColor(colIndex: number, cell: any, rowData?: any): void;
|
70
77
|
|
71
78
|
public static cleanUpPrevRows(): void;
|
72
79
|
|
73
|
-
public static setThemeColors(colors: { [key: string]: string }): void;
|
80
|
+
public static setThemeColors(colors: { [key: string]: string }|null): void;
|
74
81
|
|
75
82
|
public reloadThemeColors(): Promise<any>|null;
|
76
83
|
|
@@ -1,10 +1,15 @@
|
|
1
1
|
import {Ext} from '../../tr-grid-util/es6/Ext.js';
|
2
|
-
import {
|
3
|
-
import {
|
2
|
+
import {GridPlugin} from '../../tr-grid-util/es6/GridPlugin.js';
|
3
|
+
import {extendObject, injectCss, prettifyCss} from '../../tr-grid-util/es6/Util.js';
|
4
4
|
import {CellPainter} from '../../tr-grid-util/es6/CellPainter.js';
|
5
5
|
import {FilterBuilder} from '../../tr-grid-util/es6/FilterBuilder.js';
|
6
6
|
import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
|
7
7
|
|
8
|
+
/** @typedef {Object} ConditionalColoringPlugin~Options
|
9
|
+
* @description The options can be specified by `conditionalColoring` property of the main grid's options
|
10
|
+
* @property {Object=} predefinedColors Predefined color object map for conditional coloring
|
11
|
+
*/
|
12
|
+
|
8
13
|
/** @typedef {Object} ConditionalColoringPlugin~ColumnOptions
|
9
14
|
* @description Extension column options that can be specified on each individual grid's column option:
|
10
15
|
* @property {Array.<ConditionalColoringPlugin~Condition>=} conditions=null List of condition options
|
@@ -27,6 +32,7 @@ import {ElfUtil} from '../../tr-grid-util/es6/ElfUtil.js';
|
|
27
32
|
* @property {(string|Function)=} expression Expression could be `[FIELD_1] > 0`
|
28
33
|
* @property {string=} backgroundColor="" CSS color (e.g. #ffffff, black)
|
29
34
|
* @property {string=} color CSS="" color (e.g. #000000, white)
|
35
|
+
* @property {string=} cssClass cssClass="" Predefined color class name
|
30
36
|
*/
|
31
37
|
|
32
38
|
/** @typedef {(string|boolean|Object)} ConditionalColoringPlugin~Blinking
|
@@ -79,6 +85,10 @@ Ext.inherits(ConditionalColoringPlugin, GridPlugin);
|
|
79
85
|
* @private
|
80
86
|
*/
|
81
87
|
ConditionalColoringPlugin._cleanUpTimer = 0;
|
88
|
+
/** @type {string}
|
89
|
+
* @private
|
90
|
+
*/
|
91
|
+
ConditionalColoringPlugin._controlClass = "predefined-conditional-color";
|
82
92
|
|
83
93
|
/** @type {boolean}
|
84
94
|
* @private
|
@@ -89,6 +99,10 @@ ConditionalColoringPlugin.prototype._blinkingEnabled = false; // WORKAROUND: To
|
|
89
99
|
* @private
|
90
100
|
*/
|
91
101
|
ConditionalColoringPlugin.prototype._pendingFields;
|
102
|
+
/** @type {Object}
|
103
|
+
* @private
|
104
|
+
*/
|
105
|
+
ConditionalColoringPlugin.prototype._predefinedColors = null;
|
92
106
|
|
93
107
|
/** @override
|
94
108
|
* @return {string}
|
@@ -118,6 +132,15 @@ ConditionalColoringPlugin.prototype.initialize = function (host, options) {
|
|
118
132
|
|
119
133
|
hosts.push(host);
|
120
134
|
|
135
|
+
var extOptions = options["conditionalColoring"];
|
136
|
+
if (extOptions) {
|
137
|
+
var predefinedColors = extOptions["predefinedColors"];
|
138
|
+
if (predefinedColors != null && typeof predefinedColors === "object") {
|
139
|
+
this._injectStyles(predefinedColors);
|
140
|
+
host.enableClass(ConditionalColoringPlugin._controlClass);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
121
144
|
if(hosts.length === 1) {
|
122
145
|
this.config(options);
|
123
146
|
} else {
|
@@ -206,6 +229,14 @@ ConditionalColoringPlugin.prototype.config = function (options) {
|
|
206
229
|
ConditionalColoringPlugin.prototype.getConfigObject = function (gridOptions) {
|
207
230
|
var obj = gridOptions || {};
|
208
231
|
|
232
|
+
if(this._predefinedColors != null) {
|
233
|
+
var extOptions = obj["conditionalColoring"];
|
234
|
+
if(!extOptions) {
|
235
|
+
extOptions = obj["conditionalColoring"] = {};
|
236
|
+
}
|
237
|
+
extOptions["predefinedColors"] = this._predefinedColors;
|
238
|
+
}
|
239
|
+
|
209
240
|
var columns = obj.columns;
|
210
241
|
if (!columns) {
|
211
242
|
columns = obj.columns = [];
|
@@ -244,7 +275,8 @@ ConditionalColoringPlugin.prototype.getColumnColoring = function(colIndex, optio
|
|
244
275
|
extendObject(exCondition, conditions[n], [
|
245
276
|
"expression",
|
246
277
|
"backgroundColor",
|
247
|
-
"color"
|
278
|
+
"color",
|
279
|
+
"cssClass"
|
248
280
|
]);
|
249
281
|
|
250
282
|
options.conditions.push(exCondition);
|
@@ -824,6 +856,49 @@ ConditionalColoringPlugin._mergeUpdates = function(e) {
|
|
824
856
|
return changedRows;
|
825
857
|
};
|
826
858
|
/** @private
|
859
|
+
* @param {Object} predefinedColors Predefined color object map
|
860
|
+
*/
|
861
|
+
ConditionalColoringPlugin.prototype._injectStyles = function(predefinedColors) {
|
862
|
+
var prefix = ".tr-grid." + ConditionalColoringPlugin._controlClass + " .tr-lg .cell";
|
863
|
+
var css = [];
|
864
|
+
var ss, styles, value;
|
865
|
+
for (var className in predefinedColors) {
|
866
|
+
css.push(prefix + "." + className);
|
867
|
+
ss = [];
|
868
|
+
styles = predefinedColors[className];
|
869
|
+
|
870
|
+
value = styles["backgroundColor"];
|
871
|
+
if(value) {
|
872
|
+
ss.push("background-color: " + value + ";");
|
873
|
+
}
|
874
|
+
|
875
|
+
value = styles["color"];
|
876
|
+
if(value) {
|
877
|
+
ss.push("color: " + value + ";");
|
878
|
+
}
|
879
|
+
|
880
|
+
css.push(ss);
|
881
|
+
}
|
882
|
+
|
883
|
+
// TODO: support multitable
|
884
|
+
var host = this._hosts[0];
|
885
|
+
|
886
|
+
if(this._styleTag) {
|
887
|
+
this._styleTag.parentNode.removeChild(this._styleTag);
|
888
|
+
this._styleTag = null;
|
889
|
+
}
|
890
|
+
this._styleTag = injectCss(prettifyCss(css), host.getElement());
|
891
|
+
this._predefinedColors = predefinedColors;
|
892
|
+
};
|
893
|
+
/** @public
|
894
|
+
* @param {Object} predefinedColors Predefined color object map
|
895
|
+
*/
|
896
|
+
ConditionalColoringPlugin.prototype.setPredefinedColors = function(predefinedColors) {
|
897
|
+
if(predefinedColors != null && typeof predefinedColors === "object") {
|
898
|
+
this._injectStyles(predefinedColors);
|
899
|
+
}
|
900
|
+
};
|
901
|
+
/** @private
|
827
902
|
* @function
|
828
903
|
* @return {!FilterBuilder}
|
829
904
|
*/
|
@@ -83,6 +83,8 @@ import { CoralItems } from "../../tr-grid-util/es6/CoralItems.js";
|
|
83
83
|
* @description Fired after the text editor has been closed and all operations are done. This is useful to clean up left over resource and get result text entered.
|
84
84
|
* @type {Object}
|
85
85
|
* @property {string=} text Text that user has entered
|
86
|
+
* @property {boolean=} groupHeader if the row is header of row, it will be groupHeader
|
87
|
+
* @property {Object} suggestionDetail Suggestion detail for auto suggest "item-select" event
|
86
88
|
* @property {boolean} cancelled Readonly flag. Indicates whether the commit operation has been cancelled
|
87
89
|
* @property {boolean} committed Readonly flag. The opposite of `cancelled` flag
|
88
90
|
*/
|
@@ -92,6 +94,8 @@ import { CoralItems } from "../../tr-grid-util/es6/CoralItems.js";
|
|
92
94
|
* @type {Object}
|
93
95
|
* @property {string=} text Text that user has entered
|
94
96
|
* @property {boolean=} cancel Set to true to cancel the commit operation.
|
97
|
+
* @property {boolean=} groupHeader if the row is header of row, it will be groupHeader
|
98
|
+
* @property {Object} suggestionDetail Suggestion detail for auto suggest "item-select" event
|
95
99
|
* @example
|
96
100
|
* var cep = new InCellEditingPlugin();
|
97
101
|
* cep.listen("beforeCommit", function(e) {
|
@@ -1450,15 +1454,20 @@ InCellEditingPlugin.prototype._onPopupHide = function (e) {
|
|
1450
1454
|
* @param {Object} event
|
1451
1455
|
*/
|
1452
1456
|
InCellEditingPlugin.prototype._onAutoSuggestItemSelected = function (event) {
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1457
|
+
var eventDetail = event.detail;
|
1458
|
+
if (!eventDetail) {
|
1459
|
+
return;
|
1460
|
+
}
|
1461
|
+
var targetSelected = eventDetail.target;
|
1462
|
+
if (!targetSelected) {
|
1463
|
+
return;
|
1464
|
+
}
|
1465
|
+
var suggestionMethod = eventDetail.method;
|
1466
|
+
// Need to check the details of the methods, another method like a navigation, reset, clear shouldn't commit text
|
1467
|
+
// TODO: We need to handled tab to move. Currently, the property suggestionDetail in 'beforeCommit' event doesn't handlded when we use autosuggest with tab to move.
|
1468
|
+
if (suggestionMethod === "click" || suggestionMethod === "enter") {
|
1469
|
+
this.setText(targetSelected.value);
|
1470
|
+
this._commitText(true, eventDetail.suggestion);
|
1462
1471
|
}
|
1463
1472
|
};
|
1464
1473
|
|
@@ -1554,8 +1563,9 @@ InCellEditingPlugin.prototype._onTextKeyUp = function (e) {
|
|
1554
1563
|
/** Commit text from editor to cell.
|
1555
1564
|
* @private
|
1556
1565
|
* @param {boolean} committed
|
1566
|
+
* @param {Object} suggestionDetail suggestion detail for auto suggest element
|
1557
1567
|
*/
|
1558
|
-
InCellEditingPlugin.prototype._commitText = function (committed) {
|
1568
|
+
InCellEditingPlugin.prototype._commitText = function (committed, suggestionDetail) {
|
1559
1569
|
var t = this;
|
1560
1570
|
var arg = t._activePos;
|
1561
1571
|
if (!t.isEditing() || !arg) {
|
@@ -1566,6 +1576,10 @@ InCellEditingPlugin.prototype._commitText = function (committed) {
|
|
1566
1576
|
var enteredValue = arg["text"] = this.getValue();
|
1567
1577
|
var groupHeader = arg["groupHeader"] || false;
|
1568
1578
|
if (committed) {
|
1579
|
+
if (suggestionDetail) {
|
1580
|
+
// This property is only available when the user commits text from the 'item-select' event of the auto suggest.
|
1581
|
+
arg["suggestionDetail"] = suggestionDetail;
|
1582
|
+
}
|
1569
1583
|
if (t.hasListener("beforeCommit")) {
|
1570
1584
|
t._dispatch("beforeCommit", arg);
|
1571
1585
|
committed = !arg["cancel"];
|