@refinitiv-ui/efx-grid 6.0.33 → 6.0.35
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/column-dragging/es6/ColumnDragging.js +50 -40
- package/lib/core/dist/core.js +210 -38
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/data/DataTable.d.ts +3 -1
- package/lib/core/es6/data/DataTable.js +27 -9
- package/lib/core/es6/data/DataView.d.ts +2 -0
- package/lib/core/es6/data/DataView.js +12 -1
- package/lib/core/es6/data/Segment.d.ts +2 -0
- package/lib/core/es6/data/Segment.js +16 -0
- package/lib/core/es6/data/SegmentCollection.d.ts +1 -3
- package/lib/core/es6/data/SegmentCollection.js +25 -18
- package/lib/core/es6/grid/Core.d.ts +12 -0
- package/lib/core/es6/grid/Core.js +64 -2
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +13 -7
- package/lib/grid/index.js +1 -1
- package/lib/grid/themes/halo/dark/efx-grid.js +1 -1
- package/lib/grid/themes/halo/dark/es5/all-elements.js +1 -1
- package/lib/grid/themes/halo/efx-grid.less +3 -1
- package/lib/grid/themes/halo/light/efx-grid.js +1 -1
- package/lib/grid/themes/halo/light/es5/all-elements.js +1 -1
- package/lib/rt-grid/dist/rt-grid.js +766 -293
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/ColumnDefinition.js +13 -8
- package/lib/rt-grid/es6/DataConnector.js +3 -2
- package/lib/rt-grid/es6/Grid.d.ts +3 -1
- package/lib/rt-grid/es6/Grid.js +148 -40
- package/lib/rt-grid/es6/RowDefSorter.d.ts +5 -5
- package/lib/rt-grid/es6/RowDefSorter.js +165 -71
- package/lib/rt-grid/es6/RowDefinition.d.ts +7 -2
- package/lib/rt-grid/es6/RowDefinition.js +48 -10
- package/lib/rt-grid/es6/SnapshotFiller.d.ts +1 -0
- package/lib/rt-grid/es6/SnapshotFiller.js +1 -11
- package/lib/tr-grid-column-selection/es6/ColumnSelection.js +66 -0
- package/lib/tr-grid-column-stack/es6/ColumnStack.d.ts +2 -0
- package/lib/tr-grid-column-stack/es6/ColumnStack.js +38 -13
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.d.ts +12 -5
- package/lib/tr-grid-conditional-coloring/es6/ConditionalColoring.js +128 -42
- package/lib/tr-grid-heat-map/es6/HeatMap.d.ts +3 -3
- package/lib/tr-grid-heat-map/es6/HeatMap.js +13 -2
- package/lib/tr-grid-row-dragging/es6/RowDragging.d.ts +2 -1
- package/lib/tr-grid-row-dragging/es6/RowDragging.js +153 -17
- package/lib/tr-grid-rowcoloring/es6/RowColoring.js +3 -2
- package/lib/tr-grid-textformatting/es6/TextFormatting.d.ts +20 -20
- package/lib/tr-grid-textformatting/es6/TextFormatting.js +37 -138
- package/lib/tr-grid-util/es6/CellPainter.d.ts +1 -1
- package/lib/tr-grid-util/es6/CellPainter.js +56 -55
- package/lib/tr-grid-util/es6/DragUI.js +7 -3
- package/lib/tr-grid-util/es6/FieldFormatter.js +6 -2
- package/lib/tr-grid-util/es6/NumberFormatter.js +23 -11
- package/lib/tr-grid-util/es6/Util.d.ts +3 -0
- package/lib/tr-grid-util/es6/Util.js +53 -0
- package/lib/tr-grid-util/es6/jet/DataGenerator.js +36 -33
- package/lib/types/es6/ColumnStack.d.ts +2 -0
- package/lib/types/es6/ConditionalColoring.d.ts +12 -5
- package/lib/types/es6/Core/data/DataTable.d.ts +3 -1
- package/lib/types/es6/Core/data/DataView.d.ts +2 -0
- package/lib/types/es6/Core/data/Segment.d.ts +2 -0
- package/lib/types/es6/Core/data/SegmentCollection.d.ts +1 -3
- package/lib/types/es6/Core/grid/Core.d.ts +4 -0
- package/lib/types/es6/Core/grid/plugins/SortableTitlePlugin.d.ts +1 -0
- package/lib/types/es6/HeatMap.d.ts +3 -3
- package/lib/types/es6/RealtimeGrid/Grid.d.ts +3 -1
- package/lib/types/es6/RealtimeGrid/RowDefSorter.d.ts +5 -5
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +7 -2
- package/lib/types/es6/RealtimeGrid/SnapshotFiller.d.ts +1 -0
- package/lib/types/es6/RowDragging.d.ts +2 -1
- package/lib/types/es6/TextFormatting.d.ts +20 -20
- package/lib/versions.json +9 -9
- package/package.json +1 -1
@@ -1,70 +1,147 @@
|
|
1
|
+
import { cloneObject } from "../../tr-grid-util/es6/Util.js";
|
2
|
+
|
3
|
+
/** @private
|
4
|
+
* @param {*} a
|
5
|
+
* @param {*} b
|
6
|
+
* @param {number} order
|
7
|
+
* @return {number}
|
8
|
+
*/
|
9
|
+
var _defaultCompare = function(a, b, order) {
|
10
|
+
if(a == null || a !== a) {
|
11
|
+
if(b == null || b !== b) {
|
12
|
+
return 0;
|
13
|
+
}
|
14
|
+
return 1;
|
15
|
+
}
|
16
|
+
if(b == null || b !== b) {
|
17
|
+
return -1;
|
18
|
+
}
|
19
|
+
|
20
|
+
if(a < b) {
|
21
|
+
return -order;
|
22
|
+
}
|
23
|
+
if(b < a) {
|
24
|
+
return order;
|
25
|
+
}
|
26
|
+
return 0;
|
27
|
+
};
|
28
|
+
|
1
29
|
/** @constructor
|
2
30
|
*/
|
3
31
|
var RowDefSorter = function() {
|
4
32
|
this._defaultSorter = this._defaultSorter.bind(this);
|
5
33
|
this._dataSorter = this._dataSorter.bind(this);
|
6
34
|
this._rowDefSorter = this._rowDefSorter.bind(this);
|
35
|
+
this._multiColumnsSorter = this._multiColumnsSorter.bind(this);
|
7
36
|
|
8
|
-
this.
|
37
|
+
this._globalContext = {};
|
38
|
+
this._sortParams = [];
|
39
|
+
this._ctxCaches = [];
|
9
40
|
};
|
10
41
|
|
11
|
-
|
12
|
-
/** @type {string}
|
42
|
+
/** @type {!Object}
|
13
43
|
* @private
|
14
44
|
*/
|
15
|
-
RowDefSorter.prototype.
|
16
|
-
/** @type {!
|
45
|
+
RowDefSorter.prototype._globalContext;
|
46
|
+
/** @type {!Array.<Array>}
|
47
|
+
* @private
|
48
|
+
*/
|
49
|
+
RowDefSorter.prototype._sortParams;
|
50
|
+
/** @type {!Array.<Object>}
|
17
51
|
* @private
|
18
52
|
*/
|
19
|
-
RowDefSorter.prototype.
|
20
|
-
/** @type {
|
53
|
+
RowDefSorter.prototype._ctxCaches;
|
54
|
+
/** @type {Array}
|
21
55
|
* @private
|
22
56
|
*/
|
23
|
-
RowDefSorter.prototype.
|
57
|
+
RowDefSorter.prototype._primaryParams;
|
24
58
|
|
25
59
|
|
26
60
|
/** @public
|
27
61
|
*/
|
28
62
|
RowDefSorter.prototype.dispose = function() {
|
29
|
-
this.
|
30
|
-
this.
|
63
|
+
this._globalContext = {}; // Clear any existing reference
|
64
|
+
this._sortParams.length = 0;
|
65
|
+
this._ctxCaches.length = 0;
|
66
|
+
this._primaryParams = null;
|
31
67
|
};
|
32
68
|
|
33
69
|
/** @public
|
34
|
-
* @param {boolean=} rowSorting=false
|
35
70
|
* @return {Function}
|
36
71
|
*/
|
37
|
-
RowDefSorter.prototype.getSorter = function(
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
72
|
+
RowDefSorter.prototype.getSorter = function() {
|
73
|
+
this._primaryParams = null;
|
74
|
+
var sortCount = this._sortParams.length;
|
75
|
+
if(sortCount === 1) {
|
76
|
+
var params = this._primaryParams = this._sortParams[0];
|
77
|
+
var sortLogic = params[1];
|
78
|
+
if(sortLogic) {
|
79
|
+
var rowSorting = params[3];
|
80
|
+
return rowSorting ? this._rowDefSorter : this._dataSorter;
|
81
|
+
} else {
|
82
|
+
return this._defaultSorter;
|
83
|
+
}
|
84
|
+
} else if(sortCount > 1) {
|
85
|
+
return this._multiColumnsSorter;
|
42
86
|
}
|
43
|
-
};
|
44
|
-
/** @public
|
45
|
-
* @param {Function=} func
|
46
|
-
*/
|
47
|
-
RowDefSorter.prototype.setSortLogic = function(func) {
|
48
|
-
this._sortLogic = (typeof func === "function") ? func : null;
|
49
|
-
};
|
50
87
|
|
88
|
+
return RowDefSorter._noSorting;
|
89
|
+
};
|
51
90
|
|
52
91
|
/** @public
|
53
|
-
* @param {string}
|
92
|
+
* @param {string} key
|
93
|
+
* @param {*} value
|
54
94
|
*/
|
55
|
-
RowDefSorter.prototype.
|
56
|
-
if(
|
57
|
-
|
95
|
+
RowDefSorter.prototype.reset = function() {
|
96
|
+
if(this._sortParams.length) {
|
97
|
+
this._sortParams.length = 0;
|
58
98
|
}
|
59
|
-
this._sortContext["field"] = this._field = field;
|
60
|
-
this._sortContext["formattedField"] = field + "_FORMATTED";
|
61
99
|
};
|
62
100
|
/** @public
|
63
101
|
* @param {string} key
|
64
102
|
* @param {*} value
|
65
103
|
*/
|
66
104
|
RowDefSorter.prototype.setContext = function(key, value) {
|
67
|
-
this.
|
105
|
+
this._globalContext[key] = value;
|
106
|
+
};
|
107
|
+
/** @public
|
108
|
+
* @param {string} field
|
109
|
+
* @param {Function} logic
|
110
|
+
* @param {boolean} rowSorting
|
111
|
+
* @param {string} order
|
112
|
+
* @param {number} colIndex
|
113
|
+
* @param {*} colDef
|
114
|
+
*/
|
115
|
+
RowDefSorter.prototype.addColumnContext = function(field, logic, rowSorting, order, colIndex, colDef) {
|
116
|
+
if(!field) {
|
117
|
+
field = "";
|
118
|
+
}
|
119
|
+
var sortPriority = this._sortParams.length;
|
120
|
+
var ctx = this._ctxCaches[sortPriority];
|
121
|
+
if(!ctx) {
|
122
|
+
ctx = this._ctxCaches[sortPriority] = cloneObject(this._globalContext);
|
123
|
+
}
|
124
|
+
var orderNum = 0;
|
125
|
+
if(order === "a") {
|
126
|
+
orderNum = 1;
|
127
|
+
} else if(order === "d") {
|
128
|
+
orderNum = -1;
|
129
|
+
}
|
130
|
+
|
131
|
+
var params = [
|
132
|
+
field, // 0
|
133
|
+
(typeof logic === "function") ? logic : null, // 1
|
134
|
+
ctx, // 2
|
135
|
+
rowSorting, // 3
|
136
|
+
orderNum // 4
|
137
|
+
];
|
138
|
+
|
139
|
+
ctx["colIndex"] = colIndex;
|
140
|
+
ctx["field"] = field;
|
141
|
+
ctx["formattedField"] = field + "_FORMATTED";
|
142
|
+
ctx["colDef"] = colDef;
|
143
|
+
|
144
|
+
this._sortParams.push(params);
|
68
145
|
};
|
69
146
|
|
70
147
|
/** @private
|
@@ -73,32 +150,7 @@ RowDefSorter.prototype.setContext = function(key, value) {
|
|
73
150
|
* @param {number} order
|
74
151
|
* @return {number}
|
75
152
|
*/
|
76
|
-
RowDefSorter.
|
77
|
-
var orderA = rowDefA.getGroupOrder();
|
78
|
-
var orderB = rowDefB.getGroupOrder();
|
79
|
-
if(orderA !== orderB) {
|
80
|
-
return orderA - orderB; // Regardless of sort order
|
81
|
-
}
|
82
|
-
|
83
|
-
var a = rowDefA.getData(this._field);
|
84
|
-
var b = rowDefB.getData(this._field);
|
85
|
-
|
86
|
-
if(a == null || a !== a) {
|
87
|
-
if(b == null || b !== b) {
|
88
|
-
return 0;
|
89
|
-
}
|
90
|
-
return 1;
|
91
|
-
}
|
92
|
-
if(b == null || b !== b) {
|
93
|
-
return -1;
|
94
|
-
}
|
95
|
-
|
96
|
-
if(a < b) {
|
97
|
-
return -order;
|
98
|
-
}
|
99
|
-
if(b < a) {
|
100
|
-
return order;
|
101
|
-
}
|
153
|
+
RowDefSorter._noSorting = function(rowDefA, rowDefB, order) {
|
102
154
|
return 0;
|
103
155
|
};
|
104
156
|
/** @private
|
@@ -107,16 +159,30 @@ RowDefSorter.prototype._defaultSorter = function(rowDefA, rowDefB, order) {
|
|
107
159
|
* @param {number} order
|
108
160
|
* @return {number}
|
109
161
|
*/
|
162
|
+
RowDefSorter.prototype._defaultSorter = function(rowDefA, rowDefB, order) {
|
163
|
+
var field = this._primaryParams[0];
|
164
|
+
return _defaultCompare(
|
165
|
+
rowDefA.getData(field),
|
166
|
+
rowDefB.getData(field),
|
167
|
+
order
|
168
|
+
);
|
169
|
+
};
|
170
|
+
/** @private
|
171
|
+
* @param {RowDefinition} rowDefA
|
172
|
+
* @param {RowDefinition} rowDefB
|
173
|
+
* @param {number} order
|
174
|
+
* @return {number}
|
175
|
+
*/
|
110
176
|
RowDefSorter.prototype._dataSorter = function(rowDefA, rowDefB, order) {
|
111
|
-
var
|
112
|
-
var
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
177
|
+
var params = this._primaryParams;
|
178
|
+
var field = params[0];
|
179
|
+
var sortLogic = params[1];
|
180
|
+
return sortLogic(
|
181
|
+
rowDefA.getData(field),
|
182
|
+
rowDefB.getData(field),
|
183
|
+
order,
|
184
|
+
params[2]
|
185
|
+
);
|
120
186
|
};
|
121
187
|
/** @private
|
122
188
|
* @param {RowDefinition} rowDefA
|
@@ -125,13 +191,41 @@ RowDefSorter.prototype._dataSorter = function(rowDefA, rowDefB, order) {
|
|
125
191
|
* @return {number}
|
126
192
|
*/
|
127
193
|
RowDefSorter.prototype._rowDefSorter = function(rowDefA, rowDefB, order) {
|
128
|
-
var
|
129
|
-
var
|
130
|
-
|
131
|
-
|
194
|
+
var params = this._primaryParams;
|
195
|
+
var sortLogic = params[1];
|
196
|
+
return sortLogic(rowDefA, rowDefB, order, params[2]);
|
197
|
+
};
|
198
|
+
/** @private
|
199
|
+
* @param {RowDefinition} rowDefA
|
200
|
+
* @param {RowDefinition} rowDefB
|
201
|
+
* @param {number} primaryOrder
|
202
|
+
* @return {number}
|
203
|
+
*/
|
204
|
+
RowDefSorter.prototype._multiColumnsSorter = function(rowDefA, rowDefB, primaryOrder) {
|
205
|
+
var sortParams = this._sortParams;
|
206
|
+
var sortCount = sortParams.length;
|
207
|
+
for(var i = 0; i < sortCount; ++i) {
|
208
|
+
var params = sortParams[i];
|
209
|
+
var field = params[0];
|
210
|
+
var sortLogic = params[1];
|
211
|
+
var ctx = params[2];
|
212
|
+
var rowSorting = params[3];
|
213
|
+
var orderNum = params[4];
|
214
|
+
var ret = 0;
|
215
|
+
if(sortLogic) {
|
216
|
+
if(rowSorting) {
|
217
|
+
ret = sortLogic(rowDefA, rowDefB, orderNum, ctx);
|
218
|
+
} else {
|
219
|
+
ret = sortLogic(rowDefA.getData(field), rowDefB.getData(field), orderNum, ctx);
|
220
|
+
}
|
221
|
+
} else {
|
222
|
+
ret = _defaultCompare(rowDefA.getData(field), rowDefB.getData(field), orderNum);
|
223
|
+
}
|
224
|
+
if(ret) {
|
225
|
+
return ret;
|
226
|
+
}
|
132
227
|
}
|
133
|
-
|
134
|
-
return this._sortLogic(rowDefA, rowDefB, order, this._sortContext);
|
228
|
+
return 0;
|
135
229
|
};
|
136
230
|
|
137
231
|
export default RowDefSorter;
|
@@ -6,6 +6,7 @@ declare namespace RowDefinition {
|
|
6
6
|
|
7
7
|
type Options = {
|
8
8
|
ric?: string|null,
|
9
|
+
permId?: string|null,
|
9
10
|
values?: (any[]|any)|null,
|
10
11
|
fields?: (string)[]|null,
|
11
12
|
asChain?: boolean|null,
|
@@ -36,7 +37,7 @@ declare class RowDefinition {
|
|
36
37
|
|
37
38
|
public initialize(rowOptions?: RowDefinition.Options|null): void;
|
38
39
|
|
39
|
-
public setContent(userInput: string): boolean;
|
40
|
+
public setContent(userInput: string, permId?: string|null): boolean;
|
40
41
|
|
41
42
|
public getRowId(): string;
|
42
43
|
|
@@ -70,6 +71,10 @@ declare class RowDefinition {
|
|
70
71
|
|
71
72
|
public getRic(): string;
|
72
73
|
|
74
|
+
public getPermId(): string;
|
75
|
+
|
76
|
+
public getSymbol(): string;
|
77
|
+
|
73
78
|
public getDisplayText(): string;
|
74
79
|
|
75
80
|
public getLabel(): string|null|null;
|
@@ -138,7 +143,7 @@ declare const ROW_DEF: string;
|
|
138
143
|
|
139
144
|
declare const ROW_TYPES: RowDefinition.RowTypes;
|
140
145
|
|
141
|
-
declare function rowData(userInput: string): boolean;
|
146
|
+
declare function rowData(userInput: string, permId?: string|null): boolean;
|
142
147
|
|
143
148
|
export {RowDefinition, ROW_DEF, ROW_TYPES};
|
144
149
|
export default RowDefinition;
|
@@ -7,6 +7,7 @@ import { DataTable } from "../../core/es6/data/DataTable.js";
|
|
7
7
|
/** @typedef {Object} RowDefinition~Options
|
8
8
|
* @description RowDefinition options
|
9
9
|
* @property {string=} ric="" RIC for real-time fields. Prefixing 0# to the ric is equivalent to specifying asChain property.
|
10
|
+
* @property {string=} permId="" Organization PermId to be used instead of ric for private company.
|
10
11
|
* @property {(Array|Object)=} values=null Values for static data
|
11
12
|
* @property {Array.<string>=} fields=null Field that corresponds to the given static values
|
12
13
|
* @property {boolean=} asChain=false The given ric will be treated as a chain
|
@@ -88,6 +89,10 @@ RowDefinition.prototype._ric = ""; // Contains no 0#
|
|
88
89
|
/** @type {string}
|
89
90
|
* @private
|
90
91
|
*/
|
92
|
+
RowDefinition.prototype._permId = "";
|
93
|
+
/** @type {string}
|
94
|
+
* @private
|
95
|
+
*/
|
91
96
|
RowDefinition.prototype._displayText = "";
|
92
97
|
/** @type {string|null}
|
93
98
|
* @private
|
@@ -213,13 +218,20 @@ RowDefinition.prototype.initialize = function(rowOptions) {
|
|
213
218
|
|
214
219
|
var val = rowOptions["ric"];
|
215
220
|
if(val != null) {
|
216
|
-
this.
|
221
|
+
this._ric = val;
|
222
|
+
}
|
223
|
+
val = rowOptions["permId"];
|
224
|
+
if(val != null) {
|
225
|
+
this._permId = val;
|
226
|
+
}
|
227
|
+
if(this._ric || this._permId){
|
228
|
+
this.setContent(this._ric, this._permId); // this._dataId is modified
|
217
229
|
}
|
230
|
+
|
218
231
|
val = rowOptions["chainRic"];
|
219
232
|
if(val != null) {
|
220
233
|
this._chainRic = val;
|
221
234
|
}
|
222
|
-
|
223
235
|
val = rowOptions["values"];
|
224
236
|
// eslint-disable-next-line no-undefined
|
225
237
|
if(val !== undefined) {
|
@@ -273,10 +285,11 @@ RowDefinition.prototype._initializeAsConstituent = function(rowOptions) {
|
|
273
285
|
}
|
274
286
|
};
|
275
287
|
/** @public
|
276
|
-
* @param {string} userInput
|
288
|
+
* @param {string} userInput RIC
|
289
|
+
* @param {string=} permId=null Organization PermId, which use for getting ADC data for private company
|
277
290
|
* @return {boolean} True if there is any change otherwise false
|
278
291
|
*/
|
279
|
-
RowDefinition.prototype.setContent = function(userInput) {
|
292
|
+
RowDefinition.prototype.setContent = function(userInput, permId) {
|
280
293
|
if(this._autoGenerated) { // AutoGenerated RowDefinition cannot be changed by user input
|
281
294
|
return false;
|
282
295
|
}
|
@@ -287,7 +300,15 @@ RowDefinition.prototype.setContent = function(userInput) {
|
|
287
300
|
userInput += "";
|
288
301
|
}
|
289
302
|
|
290
|
-
|
303
|
+
var dirty = (this._userInput !== userInput);
|
304
|
+
if(this._permId !== permId){
|
305
|
+
this._permId = permId || "";
|
306
|
+
if(!userInput){
|
307
|
+
this._displayText = this._permId;
|
308
|
+
dirty = true;
|
309
|
+
}
|
310
|
+
}
|
311
|
+
if(!dirty) {
|
291
312
|
return false;
|
292
313
|
}
|
293
314
|
|
@@ -314,7 +335,7 @@ RowDefinition.prototype.setContent = function(userInput) {
|
|
314
335
|
this._displayText = this._ric; // No 0#
|
315
336
|
}
|
316
337
|
|
317
|
-
this._dataId = this._rowId + this.
|
338
|
+
this._dataId = this._rowId + this.getSymbol(); // JET/RTK will generate data id to be rowId (given from this rowDef) + ric;
|
318
339
|
|
319
340
|
// This will work for runtime ric modification, but not for first initilization.
|
320
341
|
if(!this.subscribeForUpdates()) {
|
@@ -342,6 +363,11 @@ RowDefinition.prototype.getConfigObject = function(rowOptions) {
|
|
342
363
|
obj["ric"] = val;
|
343
364
|
}
|
344
365
|
|
366
|
+
val = this._permId;
|
367
|
+
if(val) {
|
368
|
+
obj["permId"] = val;
|
369
|
+
}
|
370
|
+
|
345
371
|
val = this._chainRic;
|
346
372
|
if(val) {
|
347
373
|
obj["chainRic"] = val;
|
@@ -587,6 +613,18 @@ RowDefinition.prototype.getRic = function() {
|
|
587
613
|
/** @public
|
588
614
|
* @return {string}
|
589
615
|
*/
|
616
|
+
RowDefinition.prototype.getPermId = function() {
|
617
|
+
return this._permId;
|
618
|
+
};
|
619
|
+
/** @public
|
620
|
+
* @return {string}
|
621
|
+
*/
|
622
|
+
RowDefinition.prototype.getSymbol = function() {
|
623
|
+
return this._ric || this._permId;
|
624
|
+
};
|
625
|
+
/** @public
|
626
|
+
* @return {string}
|
627
|
+
*/
|
590
628
|
RowDefinition.prototype.getDisplayText = function() {
|
591
629
|
if(this._label != null) { // Empty string is allowed
|
592
630
|
return this._label;
|
@@ -652,7 +690,7 @@ RowDefinition.prototype.isAutoGenerated = function() {
|
|
652
690
|
* @return {boolean}
|
653
691
|
*/
|
654
692
|
RowDefinition.prototype.isRealTimeRow = function() {
|
655
|
-
if(!this.
|
693
|
+
if(!this.getRic()) { // Empty row
|
656
694
|
return false;
|
657
695
|
}
|
658
696
|
if(this.isRowHeader()) {
|
@@ -669,7 +707,7 @@ RowDefinition.prototype.isRealTimeRow = function() {
|
|
669
707
|
* @return {boolean} If a subscription is made, return true.
|
670
708
|
*/
|
671
709
|
RowDefinition.prototype.subscribeForUpdates = function() {
|
672
|
-
if(!this.isRealTimeRow()) {
|
710
|
+
if(!this.isRealTimeRow() && !this.getPermId()) {
|
673
711
|
return false;
|
674
712
|
}
|
675
713
|
|
@@ -683,14 +721,14 @@ RowDefinition.prototype.subscribeForUpdates = function() {
|
|
683
721
|
if(this.isChain()) {
|
684
722
|
this._subId = subs["addChain"](this._chainRic || this._ric, this._rowId); // Some chain require 0# symbol to populate its constituents
|
685
723
|
// TODO: Handle Dynamic chain such as .PG.PA
|
686
|
-
} else {
|
724
|
+
} else if(this._ric) {
|
687
725
|
this._subId = subs["addRic"](this._ric, this._rowId);
|
688
726
|
}
|
689
727
|
|
690
728
|
if(prevRowData) {
|
691
729
|
this._dc.setRowData(this._dataId, prevRowData); // TODO: We may need to create a new object instead of prevRowData for data correctness
|
692
730
|
} else {
|
693
|
-
this._dc.setRowData(this._dataId, {"X_RIC_NAME": this.
|
731
|
+
this._dc.setRowData(this._dataId, {"X_RIC_NAME": this.getSymbol(), "ROW_DEF": this}); // Trigger data update immediately
|
694
732
|
}
|
695
733
|
return true;
|
696
734
|
};
|
@@ -2,6 +2,7 @@ import Grid from "./Grid.js";
|
|
2
2
|
import {Ext} from "../../tr-grid-util/es6/Ext.js";
|
3
3
|
import {EventDispatcher} from "../../tr-grid-util/es6/EventDispatcher.js";
|
4
4
|
import {FieldDefinition} from "./FieldDefinition.js";
|
5
|
+
import { isEmptyObject } from "../../tr-grid-util/es6/Util.js";
|
5
6
|
|
6
7
|
declare class SnapshotFiller extends EventDispatcher {
|
7
8
|
|
@@ -3,17 +3,7 @@ import Grid from "./Grid.js";
|
|
3
3
|
import {Ext} from "../../tr-grid-util/es6/Ext.js";
|
4
4
|
import {EventDispatcher} from "../../tr-grid-util/es6/EventDispatcher.js";
|
5
5
|
import {FieldDefinition} from "./FieldDefinition.js";
|
6
|
-
|
7
|
-
/** @private
|
8
|
-
* @param {Object} obj
|
9
|
-
* @return {boolean}
|
10
|
-
*/
|
11
|
-
var isEmptyObject = function (obj) {
|
12
|
-
for (var key in obj) {
|
13
|
-
return false;
|
14
|
-
}
|
15
|
-
return true;
|
16
|
-
};
|
6
|
+
import { isEmptyObject } from "../../tr-grid-util/es6/Util.js";
|
17
7
|
|
18
8
|
/** This class make requesting ADC field easier by encapsulating JET.Data APIs and mapping data to the row
|
19
9
|
* @constructor
|
@@ -38,6 +38,8 @@ var ColumnSelectionPlugin = function ColumnSelectionPlugin(options) {
|
|
38
38
|
t._onReselection = t._onReselection.bind(t);
|
39
39
|
t._onThemeLoaded = t._onThemeLoaded.bind(t);
|
40
40
|
t._onColumnPositionChanged = t._onColumnPositionChanged.bind(t);
|
41
|
+
t._onBeforeBatchOperation = t._onBeforeBatchOperation.bind(t);
|
42
|
+
t._onAfterBatchOperation = t._onAfterBatchOperation.bind(t);
|
41
43
|
t._updateMenuIcon = t._updateMenuIcon.bind(t);
|
42
44
|
t._hosts = [];
|
43
45
|
|
@@ -121,6 +123,12 @@ ColumnSelectionPlugin.prototype._menuPosition = "outside";
|
|
121
123
|
|
122
124
|
ColumnSelectionPlugin.prototype._cgp = null; // Column grouping extension
|
123
125
|
|
126
|
+
/** @type {Array.<string>}
|
127
|
+
* @private
|
128
|
+
*/
|
129
|
+
|
130
|
+
ColumnSelectionPlugin.prototype._prevSelectedCols = {}; // previous selected columns during batch operation
|
131
|
+
|
124
132
|
/** @public
|
125
133
|
* @return {string}
|
126
134
|
*/
|
@@ -156,6 +164,8 @@ ColumnSelectionPlugin.prototype.initialize = function (host, options) {
|
|
156
164
|
host.listen("columnRemoved", this._onColumnRemoved);
|
157
165
|
host.listen("columnAdded", this._onColumnAdded);
|
158
166
|
host.listen("columnPositionChanged", this._onColumnPositionChanged);
|
167
|
+
host.listen("beforeBatchOperation", this._onBeforeBatchOperation);
|
168
|
+
host.listen("afterBatchOperation", this._onAfterBatchOperation);
|
159
169
|
this.config(options);
|
160
170
|
|
161
171
|
if (ColumnSelectionPlugin._stylePromise) {
|
@@ -1098,6 +1108,62 @@ ColumnSelectionPlugin.prototype._onReselection = function (e) {
|
|
1098
1108
|
this._activeGrid.focus();
|
1099
1109
|
};
|
1100
1110
|
/** @private
|
1111
|
+
* @param {Object} e
|
1112
|
+
*/
|
1113
|
+
|
1114
|
+
|
1115
|
+
ColumnSelectionPlugin.prototype._onBeforeBatchOperation = function (e) {
|
1116
|
+
var host = this._activeGrid;
|
1117
|
+
|
1118
|
+
if (this._hasSelection && e["batchType"] === "reset") {
|
1119
|
+
var colCount = this.getColumnCount();
|
1120
|
+
|
1121
|
+
for (var i = 0; i < colCount; ++i) {
|
1122
|
+
if (this.isSelectedColumn(i)) {
|
1123
|
+
var colId = host.getColumnId(i);
|
1124
|
+
var field = host.getColumnField(i);
|
1125
|
+
|
1126
|
+
if (colId) {
|
1127
|
+
this._prevSelectedCols[colId] = field;
|
1128
|
+
} else {
|
1129
|
+
this._prevSelectedCols[field] = "";
|
1130
|
+
}
|
1131
|
+
}
|
1132
|
+
}
|
1133
|
+
|
1134
|
+
this.clearAllSelections(); //clear all to improve performance during add/remove operation
|
1135
|
+
}
|
1136
|
+
};
|
1137
|
+
/** @private
|
1138
|
+
* @param {Object} e
|
1139
|
+
*/
|
1140
|
+
|
1141
|
+
|
1142
|
+
ColumnSelectionPlugin.prototype._onAfterBatchOperation = function (e) {
|
1143
|
+
if (e["batchType"] === "reset") {
|
1144
|
+
var prevSelectedCols = Object.keys(this._prevSelectedCols);
|
1145
|
+
var prevSelectedCount = prevSelectedCols.length;
|
1146
|
+
|
1147
|
+
if (prevSelectedCount) {
|
1148
|
+
this.clearAllSelections();
|
1149
|
+
|
1150
|
+
for (var i = 0; i < prevSelectedCount; i++) {
|
1151
|
+
var colId = prevSelectedCols[i];
|
1152
|
+
var field = this._prevSelectedCols[colId];
|
1153
|
+
var prevSelectedIndex = this.getColumnIndex(colId);
|
1154
|
+
|
1155
|
+
if (prevSelectedIndex < 0) {
|
1156
|
+
prevSelectedIndex = this.getColumnIndex(field);
|
1157
|
+
}
|
1158
|
+
|
1159
|
+
this.setSelectedColumn(prevSelectedIndex, true);
|
1160
|
+
}
|
1161
|
+
|
1162
|
+
this._prevSelectedCols = {};
|
1163
|
+
}
|
1164
|
+
}
|
1165
|
+
};
|
1166
|
+
/** @private
|
1101
1167
|
* @param {KeyboardEvent} e
|
1102
1168
|
* @return {boolean}
|
1103
1169
|
*/
|
@@ -137,6 +137,8 @@ declare class ColumnStackPlugin extends GridPlugin {
|
|
137
137
|
|
138
138
|
public isStackHidden(stackId: string): boolean|null|null;
|
139
139
|
|
140
|
+
public moveStack(stackId: string, destCol?: (number|string)|null): boolean;
|
141
|
+
|
140
142
|
}
|
141
143
|
|
142
144
|
export default ColumnStackPlugin;
|
@@ -1314,16 +1314,7 @@ ColumnStackPlugin.prototype._onColumnRemoved = function (e) {
|
|
1314
1314
|
delete this._stacks[stackOpt.stackId];
|
1315
1315
|
}
|
1316
1316
|
} else {
|
1317
|
-
|
1318
|
-
stackOpt.activeColumn = stackOpt.stackRefs[stackOpt.stackRefs.length - 1];
|
1319
|
-
} else {
|
1320
|
-
stackOpt.activeColumn = stackOpt.stackRefs[0];
|
1321
|
-
}
|
1322
|
-
|
1323
|
-
// TODO: Add a proper way to set visibility to activeColumn when activeColumn is changed
|
1324
|
-
var activeColIndex = this._getColumnIndex(stackOpt.activeColumn);
|
1325
|
-
this._setColumnVisibility(activeColIndex, true);
|
1326
|
-
this._updateUI();
|
1317
|
+
this._updateActiveColumn(stackOpt);
|
1327
1318
|
}
|
1328
1319
|
}
|
1329
1320
|
}
|
@@ -1876,11 +1867,11 @@ ColumnStackPlugin.prototype.unsetParent = ColumnStackPlugin.prototype.removeColu
|
|
1876
1867
|
*/
|
1877
1868
|
ColumnStackPlugin.prototype.reorderColumns = function(colList, destCol) {
|
1878
1869
|
var dirty = false;
|
1879
|
-
this._stacking =
|
1870
|
+
this._stacking = true;
|
1880
1871
|
|
1881
|
-
this._reorderColumns(colList, destCol);
|
1872
|
+
dirty = this._reorderColumns(colList, destCol);
|
1882
1873
|
|
1883
|
-
this._stacking =
|
1874
|
+
this._stacking = false;
|
1884
1875
|
return dirty;
|
1885
1876
|
};
|
1886
1877
|
/** Move the specified column to position before the destination
|
@@ -1922,6 +1913,26 @@ ColumnStackPlugin.prototype._setStackVisibility = function(stackId, visible) {
|
|
1922
1913
|
}
|
1923
1914
|
};
|
1924
1915
|
|
1916
|
+
/** @private
|
1917
|
+
* @description Check for active column in a stack if it needs an update.
|
1918
|
+
* @param {Object} stackOpt
|
1919
|
+
*/
|
1920
|
+
ColumnStackPlugin.prototype._updateActiveColumn = function(stackOpt) {
|
1921
|
+
if(!stackOpt) { return; }
|
1922
|
+
|
1923
|
+
var stackRefs = stackOpt["stackRefs"];
|
1924
|
+
if(!stackRefs || !stackRefs.length) { return; }
|
1925
|
+
|
1926
|
+
if(stackRefs.indexOf(stackOpt.activeColumn) === -1) {
|
1927
|
+
stackOpt.activeColumn = stackOpt["spreading"] ? stackRefs[stackRefs.length - 1] : stackRefs[0];
|
1928
|
+
|
1929
|
+
// TODO: Add a proper way to set visibility to activeColumn when activeColumn is changed
|
1930
|
+
var activeColIndex = this._getColumnIndex(stackOpt.activeColumn);
|
1931
|
+
this._setColumnVisibility(activeColIndex, true);
|
1932
|
+
this._updateUI();
|
1933
|
+
}
|
1934
|
+
};
|
1935
|
+
|
1925
1936
|
/** @public
|
1926
1937
|
* @description Hide specific stack from grid
|
1927
1938
|
* @param {string} stackId
|
@@ -1962,6 +1973,20 @@ ColumnStackPlugin.prototype.isStackHidden = function(stackId) {
|
|
1962
1973
|
|
1963
1974
|
return !isVisible;
|
1964
1975
|
};
|
1976
|
+
/** Move an entire stack to position before the destination
|
1977
|
+
* @public
|
1978
|
+
* @param {string} stackId Stack id to be moved
|
1979
|
+
* @param {(number|string)=} destCol Destination column id or index
|
1980
|
+
* @return {boolean}
|
1981
|
+
*/
|
1982
|
+
ColumnStackPlugin.prototype.moveStack = function(stackId, destCol) {
|
1983
|
+
if(!stackId){
|
1984
|
+
return false;
|
1985
|
+
}
|
1986
|
+
var colList = this.getStackMemberIds(stackId);
|
1987
|
+
var dirty = this.reorderColumns(colList, destCol);
|
1988
|
+
return dirty;
|
1989
|
+
};
|
1965
1990
|
|
1966
1991
|
|
1967
1992
|
|