@refinitiv-ui/efx-grid 6.0.101 → 6.0.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,24 +7,10 @@ import ILayoutGrid from "./ILayoutGrid.js";
7
7
  import LayoutGrid from "./LayoutGrid.js";
8
8
  import ElementWrapper from "./components/ElementWrapper.js";
9
9
  import HScrollbar from "./components/HScrollbar.js";
10
+ import CellBoundPainter from "./util/CellBoundPainter.js";
10
11
  /* eslint-enable */
11
12
 
12
13
 
13
- /** @private
14
- * @function
15
- * @param {number} idx
16
- * @param {number} limit
17
- * @return {number}
18
- */
19
- let _validateIndex = function(idx, limit) {
20
- if(idx > limit) {
21
- return limit;
22
- } else if(idx < 0) {
23
- return 0;
24
- }
25
- return idx;
26
- };
27
-
28
14
  /** @constructor
29
15
  * @ignore
30
16
  * @param {Object=} options
@@ -109,26 +95,10 @@ VirtualizedLayoutGrid.prototype._rowBoundCache = null;
109
95
  * @private
110
96
  */
111
97
  VirtualizedLayoutGrid.prototype._rowSelDirty = false;
112
- /** @type {Element}
113
- * @private
114
- */
115
- VirtualizedLayoutGrid.prototype._cellBound = null;
116
- /** @type {number}
98
+ /** @type {Object}
117
99
  * @private
118
100
  */
119
- VirtualizedLayoutGrid.prototype._cbLftIdx = 0;
120
- /** @type {number}
121
- * @private
122
- */
123
- VirtualizedLayoutGrid.prototype._cbRgtIdx = 0;
124
- /** @type {number}
125
- * @private
126
- */
127
- VirtualizedLayoutGrid.prototype._cbTopIdx = 0;
128
- /** @type {number}
129
- * @private
130
- */
131
- VirtualizedLayoutGrid.prototype._cbBtmIdx = 0;
101
+ VirtualizedLayoutGrid.prototype._cellBoundPainter = null;
132
102
  /** @type {number}
133
103
  * @private
134
104
  */
@@ -181,6 +151,9 @@ VirtualizedLayoutGrid.prototype.dispose = function () {
181
151
  clearTimeout(this._rowBoundTimer);
182
152
  this._rowBoundTimer = 0;
183
153
  }
154
+ if(this._cellBoundPainter) {
155
+ this._cellBoundPainter.dispose();
156
+ }
184
157
  };
185
158
  /** @override */
186
159
  VirtualizedLayoutGrid.prototype.setWidth = function (px) {
@@ -1008,26 +981,20 @@ VirtualizedLayoutGrid.prototype.selectCell = function (colIndex, rowIndex, selec
1008
981
  * @param {number} height
1009
982
  */
1010
983
  VirtualizedLayoutGrid.prototype.setCellBounds = function (colIndex, rowIndex, width, height) {
1011
- let cellBound = this._cellBound;
1012
- if(!cellBound) {
1013
- cellBound = this._cellBound = document.createElement("div");
1014
- cellBound.className = "selection-bound";
984
+ let boundLayer = this._initBoundLayer();
985
+ let cellBoundPainter = this._cellBoundPainter;
986
+ if(!cellBoundPainter) {
987
+ cellBoundPainter = this._cellBoundPainter = new CellBoundPainter({
988
+ boundLayer: boundLayer,
989
+ layoutX: this.getHorizontalLayout(),
990
+ layoutY: this._layoutY,
991
+ hscrollbar: this._hscrollbar,
992
+ calculateColumnBounds: this.calculateColumnBounds.bind(this)
993
+ });
1015
994
  }
1016
- this._initBoundLayer();
1017
-
1018
- // Validate inputs
1019
- let rgtIndex = colIndex + width; // Exclusive
1020
- let btmIndex = rowIndex + height; // Exclusive
1021
995
 
1022
996
  let colCount = this.getColumnCount();
1023
- let rowCount = this._layoutY.getLaneCount();
1024
-
1025
- this._cbLftIdx = _validateIndex(colIndex, colCount);
1026
- this._cbRgtIdx = _validateIndex(rgtIndex, colCount);
1027
- this._cbTopIdx = _validateIndex(rowIndex, rowCount);
1028
- this._cbBtmIdx = _validateIndex(btmIndex, rowCount);
1029
-
1030
- this._updateCellBounds();
997
+ cellBoundPainter.setCellBounds(colIndex, rowIndex, width, height, colCount);
1031
998
  };
1032
999
  /** @public
1033
1000
  * @ignore
@@ -1046,59 +1013,6 @@ VirtualizedLayoutGrid.prototype.getHorizontalLayout = function () {
1046
1013
  VirtualizedLayoutGrid.prototype.calculateColumnBounds = function (lftIdx, rgtIdx, outPositions, outNoBorders) {
1047
1014
  this._grid.calculateColumnBounds(lftIdx, rgtIdx, outPositions, outNoBorders);
1048
1015
  };
1049
- /** @private
1050
- */
1051
- VirtualizedLayoutGrid.prototype._updateCellBounds = function () {
1052
- let cellBound = this._cellBound;
1053
- if(!cellBound) {
1054
- return;
1055
- }
1056
-
1057
- let layoutX = this.getHorizontalLayout();
1058
- let layoutY = this._layoutY;
1059
- let lftIdx = this._cbLftIdx;
1060
- let rgtIdx = this._cbRgtIdx; // Exclusive
1061
- let topIdx = this._cbTopIdx;
1062
- let btmIdx = this._cbBtmIdx; // Exclusive
1063
- let lftPx, rgtPx, topPx, btmPx;
1064
- lftPx = rgtPx = topPx = btmPx = 0;
1065
- if(lftIdx < rgtIdx && topIdx < btmIdx) {
1066
- lftPx = layoutX.getLaneStart(lftIdx);
1067
- rgtPx = layoutX.getLaneEnd(rgtIdx - 1);
1068
- topPx = layoutY.getLaneStart(topIdx);
1069
- btmPx = layoutY.getLaneEnd(btmIdx - 1);
1070
- }
1071
-
1072
- let width = rgtPx - lftPx;
1073
- let height = btmPx - topPx;
1074
- let noBorders = [false, false];
1075
- if(width > 0 && height > 0 && this._hscrollbar) {
1076
- let positions = [0, 0];
1077
- this.calculateColumnBounds(lftIdx, rgtIdx - 1, positions, noBorders);
1078
- lftPx = positions[0];
1079
- rgtPx = positions[1];
1080
- width = rgtPx - lftPx;
1081
- }
1082
-
1083
- if(width > 0) {
1084
- cellBound.style.left = lftPx + "px";
1085
- cellBound.style.top = topPx + "px";
1086
- cellBound.style.width = width + "px";
1087
- cellBound.style.height = height + "px";
1088
-
1089
- cellBound.classList.toggle("no-left-bound", noBorders[0]);
1090
- cellBound.classList.toggle("no-right-bound", noBorders[1]);
1091
-
1092
- if(this._boundLayer) {
1093
- this._boundLayer.appendChild(cellBound);
1094
- }
1095
- } else {
1096
- let pn = cellBound.parentNode;
1097
- if(pn) {
1098
- pn.removeChild(cellBound);
1099
- }
1100
- }
1101
- };
1102
1016
  /** @public
1103
1017
  * @ignore
1104
1018
  * @param {!Array.<Array>} posAry Left and right bound positions in pixel
@@ -1116,6 +1030,7 @@ VirtualizedLayoutGrid.prototype.updateColumnSeparators = function () {
1116
1030
  this._grid.updateColumnSeparators();
1117
1031
  };
1118
1032
  /** @private
1033
+ * @return {Element}
1119
1034
  */
1120
1035
  VirtualizedLayoutGrid.prototype._initBoundLayer = function () {
1121
1036
  let boundLayer = this._boundLayer;
@@ -1124,6 +1039,7 @@ VirtualizedLayoutGrid.prototype._initBoundLayer = function () {
1124
1039
  boundLayer.className = "cover-layer";
1125
1040
  this._element.appendChild(boundLayer);
1126
1041
  }
1042
+ return boundLayer;
1127
1043
  };
1128
1044
  /** @private
1129
1045
  */
@@ -1136,7 +1052,11 @@ VirtualizedLayoutGrid.prototype._requestUpdatingRowBounds = function () {
1136
1052
  */
1137
1053
  VirtualizedLayoutGrid.prototype._updateRowBounds = function () {
1138
1054
  this._rowBoundTimer = 0;
1139
- this._updateCellBounds();
1055
+
1056
+ let cellBoundPainter = this._cellBoundPainter;
1057
+ if(cellBoundPainter) {
1058
+ cellBoundPainter.updateCellBounds();
1059
+ }
1140
1060
 
1141
1061
  if(!this._rowSelDirty) {
1142
1062
  return;
@@ -0,0 +1,16 @@
1
+
2
+
3
+ declare class CellBoundPainter {
4
+
5
+ constructor(ctx: any);
6
+
7
+ public dispose(): void;
8
+
9
+ public setCellBounds(colIndex: number, rowIndex: number, width: number, height: number, colCount: number): void;
10
+
11
+ public updateCellBounds(): void;
12
+
13
+ }
14
+
15
+ export default CellBoundPainter;
16
+ export { CellBoundPainter };
@@ -0,0 +1,171 @@
1
+ /** @private
2
+ * @function
3
+ * @param {number} idx
4
+ * @param {number} limit
5
+ * @return {number}
6
+ */
7
+ let _validateIndex = function(idx, limit) {
8
+ if(idx > limit) {
9
+ return limit;
10
+ } else if(idx < 0) {
11
+ return 0;
12
+ }
13
+ return idx;
14
+ };
15
+
16
+ /** @constructor
17
+ * @param {Object} ctx
18
+ */
19
+ let CellBoundPainter = function (ctx) {
20
+ this._boundLayer = ctx.boundLayer;
21
+ this._layoutX = ctx.layoutX;
22
+ this._layoutY = ctx.layoutY;
23
+ this._hscrollbar = ctx.hscrollbar;
24
+ this._calculateColumnBounds = ctx.calculateColumnBounds;
25
+ };
26
+
27
+ /** @type {Element}
28
+ * @private
29
+ */
30
+ CellBoundPainter.prototype._boundLayer = null;
31
+ /** @type {!TrackLayout}
32
+ * @private
33
+ */
34
+ CellBoundPainter.prototype._layoutX;
35
+ /** @type {!TrackLayout}
36
+ * @private
37
+ */
38
+ CellBoundPainter.prototype._layoutY;
39
+ /** @type {HScrollbar}
40
+ * @private
41
+ */
42
+ CellBoundPainter.prototype._hscrollbar;
43
+ /** @type {Function}
44
+ * @private
45
+ */
46
+ CellBoundPainter.prototype._calculateColumnBounds;
47
+ /** @type {Element}
48
+ * @private
49
+ */
50
+ CellBoundPainter.prototype._cellBound = null;
51
+ /** @type {number}
52
+ * @private
53
+ */
54
+ CellBoundPainter.prototype._cbLftIdx = 0;
55
+ /** @type {number}
56
+ * @private
57
+ */
58
+ CellBoundPainter.prototype._cbRgtIdx = 0;
59
+ /** @type {number}
60
+ * @private
61
+ */
62
+ CellBoundPainter.prototype._cbTopIdx = 0;
63
+ /** @type {number}
64
+ * @private
65
+ */
66
+ CellBoundPainter.prototype._cbBtmIdx = 0;
67
+
68
+ /** @public
69
+ */
70
+ CellBoundPainter.prototype.dispose = function () {
71
+ let cellBound = this._cellBound;
72
+ if(cellBound) {
73
+ let pn = cellBound.parentNode;
74
+ if(pn) {
75
+ pn.removeChild(cellBound);
76
+ }
77
+ this._cellBound = null;
78
+ }
79
+ this._boundLayer = null;
80
+ this._layoutX = null;
81
+ this._layoutY = null;
82
+ this._hscrollbar = null;
83
+ this._calculateColumnBounds = null;
84
+ };
85
+
86
+ /** @public
87
+ * @param {number} colIndex
88
+ * @param {number} rowIndex
89
+ * @param {number} width
90
+ * @param {number} height
91
+ * @param {number} colCount
92
+ */
93
+ CellBoundPainter.prototype.setCellBounds = function (colIndex, rowIndex, width, height, colCount) {
94
+ let cellBound = this._cellBound;
95
+ if(!cellBound) {
96
+ cellBound = this._cellBound = document.createElement("div");
97
+ cellBound.className = "selection-bound";
98
+ }
99
+
100
+ // Validate inputs
101
+ let rgtIndex = colIndex + width; // Exclusive
102
+ let btmIndex = rowIndex + height; // Exclusive
103
+
104
+ let rowCount = this._layoutY.getLaneCount();
105
+
106
+ this._cbLftIdx = _validateIndex(colIndex, colCount);
107
+ this._cbRgtIdx = _validateIndex(rgtIndex, colCount);
108
+ this._cbTopIdx = _validateIndex(rowIndex, rowCount);
109
+ this._cbBtmIdx = _validateIndex(btmIndex, rowCount);
110
+
111
+ this.updateCellBounds();
112
+ };
113
+
114
+ /** @public
115
+ */
116
+ CellBoundPainter.prototype.updateCellBounds = function() {
117
+ let cellBound = this._cellBound;
118
+ if(!cellBound) {
119
+ return;
120
+ }
121
+
122
+ let layoutX = this._layoutX;
123
+ let layoutY = this._layoutY;
124
+ let lftIdx = this._cbLftIdx;
125
+ let rgtIdx = this._cbRgtIdx; // Exclusive
126
+ let topIdx = this._cbTopIdx;
127
+ let btmIdx = this._cbBtmIdx; // Exclusive
128
+ let lftPx, rgtPx, topPx, btmPx;
129
+ lftPx = rgtPx = topPx = btmPx = 0;
130
+ if(lftIdx < rgtIdx && topIdx < btmIdx) {
131
+ lftPx = layoutX.getLaneStart(lftIdx);
132
+ rgtPx = layoutX.getLaneEnd(rgtIdx - 1);
133
+ topPx = layoutY.getLaneStart(topIdx);
134
+ btmPx = layoutY.getLaneEnd(btmIdx - 1);
135
+ }
136
+
137
+ let width = rgtPx - lftPx;
138
+ let height = btmPx - topPx;
139
+ let noBorders = [false, false];
140
+ if(width > 0 && height > 0 && this._hscrollbar) {
141
+ let positions = [0, 0];
142
+ this._calculateColumnBounds(lftIdx, rgtIdx - 1, positions, noBorders);
143
+ lftPx = positions[0];
144
+ rgtPx = positions[1];
145
+ width = rgtPx - lftPx;
146
+ }
147
+
148
+ if(width > 0) {
149
+ cellBound.style.left = lftPx + "px";
150
+ cellBound.style.top = topPx + "px";
151
+ cellBound.style.width = width + "px";
152
+ cellBound.style.height = height + "px";
153
+
154
+ cellBound.classList.toggle("no-left-bound", noBorders[0]);
155
+ cellBound.classList.toggle("no-right-bound", noBorders[1]);
156
+
157
+ if(this._boundLayer) {
158
+ this._boundLayer.appendChild(cellBound);
159
+ }
160
+ } else {
161
+ let pn = cellBound.parentNode;
162
+ if(pn) {
163
+ pn.removeChild(cellBound);
164
+ }
165
+ }
166
+ };
167
+
168
+ CellBoundPainter._proto = CellBoundPainter.prototype;
169
+
170
+ export default CellBoundPainter;
171
+ export { CellBoundPainter };
package/lib/grid/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import {Grid} from "./lib/efx-grid.js";
2
2
  export {Grid}
3
- window.EFX_GRID = { version: "6.0.101" };
3
+ window.EFX_GRID = { version: "6.0.103" };
@@ -14372,6 +14372,11 @@ RowDefinition.prototype._toRealTimeRow = function() {
14372
14372
  this._parent = null;
14373
14373
  this._depthLevel = 0;
14374
14374
 
14375
+ // Add static value to the new allocated row
14376
+ if(this._staticValues) {
14377
+ this.setRowData(this._staticValues);
14378
+ }
14379
+
14375
14380
  this.subscribeForUpdates();
14376
14381
  };
14377
14382
 
@@ -14390,8 +14395,12 @@ RowDefinition.prototype.unlinkChain = function() {
14390
14395
  }
14391
14396
  }
14392
14397
 
14398
+ let staticData = this._getStaticRowData();
14393
14399
  this.unsubscribeForUpdates();
14394
14400
 
14401
+ // Restore static data
14402
+ this.setStaticRowData(staticData);
14403
+
14395
14404
  let view = this._view;
14396
14405
  if(view) {
14397
14406
  let rid = this.getRowId();
@@ -14661,13 +14670,28 @@ RowDefinition.dispose = function(rowDef) {
14661
14670
 
14662
14671
  /** @type {string}
14663
14672
  * @private
14664
- * @const
14673
+ * @constant
14665
14674
  */
14666
14675
  const SYNAPSE_URL =
14667
14676
  "/synapse/service/suggestions/suggest/?"
14668
14677
  + "hits=1" // search only 1 result
14669
14678
  + "&profile=" + encodeURIComponent("Field Selector");
14670
14679
 
14680
+ /** @type {!RegExp}
14681
+ * @private
14682
+ * @constant
14683
+ * @description
14684
+ * ^TR. => start with TR.
14685
+ * [\w]+ => any field with string and value
14686
+ * [\(] => open bucket (
14687
+ * [\w\-\=\,]* => any property name and follow by = EX. SDATE=2011-11-11, PRIOD=123123
14688
+ * (?:EDATE|SDATE) => non-capturing group match EDATE or SDATE
14689
+ * [\w\-\=\,]+ => another propertie param
14690
+ * [\)]$ => end with only )
14691
+ * i => for match both upper and lower cases
14692
+ */
14693
+ const TimeSeriesRegEx = /^TR\.[\w]+\([\w\-\=\,]*(?:EDATE|SDATE)\=+[\w\-\=\,]*[ \w]*\)$/i;
14694
+
14671
14695
  /* @namespace */
14672
14696
  let FieldDefinition = {};
14673
14697
 
@@ -14846,10 +14870,10 @@ FieldDefinition.hasFieldInfo = function(field) {
14846
14870
  /** @public
14847
14871
  * @function
14848
14872
  * @param {string} field
14849
- * @return {Object}
14873
+ * @return {Array}
14850
14874
  */
14851
14875
  FieldDefinition.getTimeSeriesChildren = function(field) {
14852
- return FieldDefinition._timeSeriesChildren[field];
14876
+ return FieldDefinition._timeSeriesChildren[field] || null;
14853
14877
  };
14854
14878
  /** @public
14855
14879
  * @function
@@ -14910,7 +14934,7 @@ FieldDefinition.isRealTimeField = function(field) {
14910
14934
  return false;
14911
14935
  }
14912
14936
 
14913
- if(FieldDefinition.isAdc(field)) {
14937
+ if(FieldDefinition.isAdc(field)) { // Note that all TimeSeries fields are ADC field
14914
14938
  return false;
14915
14939
  }
14916
14940
 
@@ -14922,10 +14946,6 @@ FieldDefinition.isRealTimeField = function(field) {
14922
14946
  return false;
14923
14947
  }
14924
14948
 
14925
- if(FieldDefinition.isTimeSeries(field)) {
14926
- return false;
14927
- }
14928
-
14929
14949
  return FieldDefinition.getFieldProperty(field, "IsRealtimeField") !== false;
14930
14950
  };
14931
14951
 
@@ -14954,21 +14974,10 @@ FieldDefinition.isTimeSeries = function (field) {
14954
14974
  // We can check time series using a cache to avoid duplicating checks in regular expressions.
14955
14975
  let timeSeriesField = FieldDefinition.getFieldProperty(field, "timeSeries");
14956
14976
  if (timeSeriesField != null) {
14957
- return timeSeriesField;
14977
+ return timeSeriesField ? true : false;
14958
14978
  }
14959
14979
 
14960
- /*
14961
- ^TR. => start with TR.
14962
- [\w]+ => any field with string and value
14963
- [\(] => open bucket (
14964
- [\w\-\=\,]* => any property name and follow by = EX. SDATE=2011-11-11, PRIOD=123123
14965
- (?:EDATE|SDATE ) => non-capturing group match EDATE or SDATE
14966
- [\w\-\=\,]+ => another propertie param
14967
- [\)]$ => end with only )
14968
- i => for match both upper and lower cases
14969
- */
14970
- let timeSeriesRegex = /^TR\.[\w]+\([\w\-\=\,]*(?:EDATE|SDATE)\=+[\w\-\=\,]*[ \w]*\)$/i;
14971
- return timeSeriesRegex.test(field);
14980
+ return TimeSeriesRegEx.test(field);
14972
14981
  };
14973
14982
 
14974
14983
  /**