@refinitiv-ui/efx-grid 6.0.128 → 6.0.130
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.
- package/lib/core/dist/core.js +258 -20
- package/lib/core/dist/core.min.js +1 -1
- package/lib/core/es6/data/DataCache.js +29 -0
- package/lib/core/es6/data/DataTable.d.ts +4 -0
- package/lib/core/es6/data/DataTable.js +117 -1
- package/lib/core/es6/data/DataView.d.ts +6 -0
- package/lib/core/es6/data/DataView.js +43 -0
- package/lib/core/es6/data/SegmentCollection.d.ts +2 -0
- package/lib/core/es6/data/SegmentCollection.js +21 -0
- package/lib/core/es6/grid/Core.js +39 -10
- package/lib/core/es6/grid/plugins/SortableTitlePlugin.js +9 -9
- package/lib/grid/index.js +1 -1
- package/lib/row-segmenting/es6/RowSegmenting.d.ts +6 -0
- package/lib/row-segmenting/es6/RowSegmenting.js +62 -11
- package/lib/rt-grid/dist/rt-grid.js +337 -55
- package/lib/rt-grid/dist/rt-grid.min.js +1 -1
- package/lib/rt-grid/es6/DataConnector.js +1 -1
- package/lib/rt-grid/es6/Grid.d.ts +2 -0
- package/lib/rt-grid/es6/Grid.js +90 -23
- package/lib/rt-grid/es6/RowDefinition.d.ts +1 -1
- package/lib/rt-grid/es6/RowDefinition.js +26 -20
- package/lib/tr-grid-cell-selection/es6/CellSelection.d.ts +3 -2
- package/lib/tr-grid-cell-selection/es6/CellSelection.js +1100 -1124
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.d.ts +2 -1
- package/lib/tr-grid-column-grouping/es6/ColumnGrouping.js +8 -2
- package/lib/tr-grid-row-filtering/es6/RowFiltering.js +2 -2
- package/lib/types/es6/CellSelection.d.ts +3 -2
- package/lib/types/es6/ColumnGrouping.d.ts +2 -1
- package/lib/types/es6/Core/data/DataTable.d.ts +4 -0
- package/lib/types/es6/Core/data/DataView.d.ts +6 -0
- package/lib/types/es6/Core/data/SegmentCollection.d.ts +2 -0
- package/lib/types/es6/RealtimeGrid/Grid.d.ts +2 -0
- package/lib/types/es6/RealtimeGrid/RowDefinition.d.ts +1 -1
- package/lib/types/es6/RowSegmenting.d.ts +6 -0
- package/lib/versions.json +6 -6
- package/package.json +1 -1
| @@ -8966,6 +8966,35 @@ DataCache.prototype.cloneRowData = function (rid) { | |
| 8966 8966 | 
             
            	return values;
         | 
| 8967 8967 | 
             
            };
         | 
| 8968 8968 |  | 
| 8969 | 
            +
            /**
         | 
| 8970 | 
            +
             * @protected
         | 
| 8971 | 
            +
             * @ignore
         | 
| 8972 | 
            +
             * @param {string} fromRid
         | 
| 8973 | 
            +
             * @param {string} toRid
         | 
| 8974 | 
            +
             * @return {boolean}
         | 
| 8975 | 
            +
             */
         | 
| 8976 | 
            +
            DataCache.prototype._replaceRowId = function(fromRid, toRid) {
         | 
| 8977 | 
            +
            	let rows = this._rows;
         | 
| 8978 | 
            +
            	if(rows[fromRid]) {
         | 
| 8979 | 
            +
            		rows[toRid] = rows[fromRid];
         | 
| 8980 | 
            +
            		delete rows[fromRid];
         | 
| 8981 | 
            +
            		return true;
         | 
| 8982 | 
            +
            	}
         | 
| 8983 | 
            +
            	return false;
         | 
| 8984 | 
            +
            };
         | 
| 8985 | 
            +
            /**
         | 
| 8986 | 
            +
             * @public
         | 
| 8987 | 
            +
             * @ignore
         | 
| 8988 | 
            +
             * @param {Object} ridPair
         | 
| 8989 | 
            +
             */
         | 
| 8990 | 
            +
            DataCache.prototype.replaceRowIds = function(ridPair) {
         | 
| 8991 | 
            +
            	if(typeof ridPair === "object") {
         | 
| 8992 | 
            +
            		for(let oldRid in ridPair) {
         | 
| 8993 | 
            +
            			this._replaceRowId(oldRid, ridPair[oldRid]);
         | 
| 8994 | 
            +
            		}
         | 
| 8995 | 
            +
            	}
         | 
| 8996 | 
            +
            };
         | 
| 8997 | 
            +
             | 
| 8969 8998 | 
             
            /** Deprecated. Built-in Data Service is deprecated due to the lack of flexibility.
         | 
| 8970 8999 | 
             
             * @public
         | 
| 8971 9000 | 
             
             * @ignore
         | 
| @@ -10173,6 +10202,27 @@ SegmentCollection.prototype.getSegmentIds = function() { | |
| 10173 10202 | 
             
            };
         | 
| 10174 10203 |  | 
| 10175 10204 |  | 
| 10205 | 
            +
            /** @public
         | 
| 10206 | 
            +
            * @param {Array.<string>} segmentIds
         | 
| 10207 | 
            +
            * @param {boolean=} bool
         | 
| 10208 | 
            +
            * @return {boolean} Returns true if there is any change. Otherwise, returns false
         | 
| 10209 | 
            +
            */
         | 
| 10210 | 
            +
            SegmentCollection.prototype.collapseSegments = function(segmentIds, bool) {
         | 
| 10211 | 
            +
            	if(this._segmentCount) {
         | 
| 10212 | 
            +
            		let dirty = 0;
         | 
| 10213 | 
            +
            		let len = segmentIds.length;
         | 
| 10214 | 
            +
            		for (let i = 0; i < len; i++) {
         | 
| 10215 | 
            +
            			let rowId = segmentIds[i];
         | 
| 10216 | 
            +
            			dirty |= this._segments[rowId].collapse(bool);
         | 
| 10217 | 
            +
             | 
| 10218 | 
            +
            		}
         | 
| 10219 | 
            +
            		if(dirty) {
         | 
| 10220 | 
            +
            			return true;
         | 
| 10221 | 
            +
            		}
         | 
| 10222 | 
            +
            	}
         | 
| 10223 | 
            +
            	return false;
         | 
| 10224 | 
            +
            };
         | 
| 10225 | 
            +
             | 
| 10176 10226 | 
             
            /** @public
         | 
| 10177 10227 | 
             
            * @param {string} segmentId
         | 
| 10178 10228 | 
             
            * @param {boolean=} bool
         | 
| @@ -11412,6 +11462,45 @@ DataTable.prototype.swapRow = function(fromIndex, toIndex) { // No event is fire | |
| 11412 11462 | 
             
            	this._rids[toIndex] = rid;
         | 
| 11413 11463 | 
             
            };
         | 
| 11414 11464 |  | 
| 11465 | 
            +
            /**
         | 
| 11466 | 
            +
            * @protected
         | 
| 11467 | 
            +
            * @override
         | 
| 11468 | 
            +
            * @ignore
         | 
| 11469 | 
            +
            * @param {string} fromRid
         | 
| 11470 | 
            +
            * @param {string} toRid
         | 
| 11471 | 
            +
            * @return {boolean}
         | 
| 11472 | 
            +
            */
         | 
| 11473 | 
            +
            DataTable.prototype._replaceRowId = function(fromRid, toRid) {
         | 
| 11474 | 
            +
            	let rids = this._rids;
         | 
| 11475 | 
            +
            	let idx = rids.indexOf(fromRid);
         | 
| 11476 | 
            +
            	if(idx >= 0) {
         | 
| 11477 | 
            +
            		rids[idx] = toRid;
         | 
| 11478 | 
            +
            		this._rows[toRid] = this._rows[fromRid];
         | 
| 11479 | 
            +
            		delete this._rows[fromRid];
         | 
| 11480 | 
            +
            		this._prevData[toRid] = this._prevData[fromRid];
         | 
| 11481 | 
            +
            		delete this._prevData[fromRid];
         | 
| 11482 | 
            +
            		return true;
         | 
| 11483 | 
            +
            	}
         | 
| 11484 | 
            +
            	return false;
         | 
| 11485 | 
            +
            };
         | 
| 11486 | 
            +
            /**
         | 
| 11487 | 
            +
            * @public
         | 
| 11488 | 
            +
            * @override
         | 
| 11489 | 
            +
            * @ignore
         | 
| 11490 | 
            +
            * @param {Object} ridPair
         | 
| 11491 | 
            +
            */
         | 
| 11492 | 
            +
            DataTable.prototype.replaceRowIds = function(ridPair) {
         | 
| 11493 | 
            +
            	if(typeof ridPair === "object") {
         | 
| 11494 | 
            +
            		let dirty = false;
         | 
| 11495 | 
            +
            		for(let oldRid in ridPair) {
         | 
| 11496 | 
            +
            			dirty |= this._replaceRowId(oldRid, ridPair[oldRid]);
         | 
| 11497 | 
            +
            		}
         | 
| 11498 | 
            +
            		if(dirty) {
         | 
| 11499 | 
            +
            			this.dispatchGlobalChange();
         | 
| 11500 | 
            +
            		}
         | 
| 11501 | 
            +
            	}
         | 
| 11502 | 
            +
            };
         | 
| 11503 | 
            +
             | 
| 11415 11504 | 
             
            /** @public
         | 
| 11416 11505 | 
             
            * @function
         | 
| 11417 11506 | 
             
            * @param {string} rid
         | 
| @@ -11553,6 +11642,55 @@ DataTable.prototype.isFrozen = function() { | |
| 11553 11642 | 
             
            	return this._frozen;
         | 
| 11554 11643 | 
             
            };
         | 
| 11555 11644 |  | 
| 11645 | 
            +
            /**
         | 
| 11646 | 
            +
            * @public
         | 
| 11647 | 
            +
            * @param {Array.<string>} rids
         | 
| 11648 | 
            +
            * @param {boolean=} enabled
         | 
| 11649 | 
            +
            * @return {boolean} Return true if there is any change
         | 
| 11650 | 
            +
            */
         | 
| 11651 | 
            +
            DataTable.prototype.setSegmentSeparators = function(rids, enabled) {
         | 
| 11652 | 
            +
            	let change = false;
         | 
| 11653 | 
            +
            	if (rids) {
         | 
| 11654 | 
            +
            		let len = rids.length;
         | 
| 11655 | 
            +
            		let segmentChanged = false;
         | 
| 11656 | 
            +
            		for (let i = 0; i < len; i++) {
         | 
| 11657 | 
            +
            			if(enabled !== false) {
         | 
| 11658 | 
            +
            				let rid = rids[i];
         | 
| 11659 | 
            +
            				if (!this._segments) {
         | 
| 11660 | 
            +
            					this._segments = new data_SegmentCollection();
         | 
| 11661 | 
            +
            					this._segments.addEventListener("subSegmentChanged", this._onSubSegmentChanged);
         | 
| 11662 | 
            +
            				}
         | 
| 11663 | 
            +
            				if(this._autoSegmentFilling) {
         | 
| 11664 | 
            +
            					let parentId = this._segments.getParentRowId(rid);
         | 
| 11665 | 
            +
            					if(parentId) {
         | 
| 11666 | 
            +
            						this._segments.removeSegmentChild(parentId, rid);
         | 
| 11667 | 
            +
            					}
         | 
| 11668 | 
            +
            				}
         | 
| 11669 | 
            +
            				segmentChanged = this._segments.addSegment(rid);
         | 
| 11670 | 
            +
            			} else if (this._segments) { // remove case
         | 
| 11671 | 
            +
            				let segment = this._segments.getSegment(rid);
         | 
| 11672 | 
            +
            				if(segment) {
         | 
| 11673 | 
            +
            					if(this._segments.removeSegment(rid)) {
         | 
| 11674 | 
            +
            						change = true;
         | 
| 11675 | 
            +
            						if(!this._segments.getSegmentCount()) {
         | 
| 11676 | 
            +
            							this._segments = null;
         | 
| 11677 | 
            +
            						}
         | 
| 11678 | 
            +
            					}
         | 
| 11679 | 
            +
            				}
         | 
| 11680 | 
            +
            			}
         | 
| 11681 | 
            +
             | 
| 11682 | 
            +
            		}
         | 
| 11683 | 
            +
            		if (enabled !== false && segmentChanged) {
         | 
| 11684 | 
            +
            			this._segments.calcSegmentOrder(this._rids);
         | 
| 11685 | 
            +
            			change = true;
         | 
| 11686 | 
            +
            		}
         | 
| 11687 | 
            +
            		if(change) {
         | 
| 11688 | 
            +
            			this.dispatchGlobalChange();
         | 
| 11689 | 
            +
            		}
         | 
| 11690 | 
            +
            	}
         | 
| 11691 | 
            +
            	return change;
         | 
| 11692 | 
            +
             | 
| 11693 | 
            +
            };
         | 
| 11556 11694 |  | 
| 11557 11695 | 
             
            /**
         | 
| 11558 11696 | 
             
            * @public
         | 
| @@ -11579,7 +11717,7 @@ DataTable.prototype.setSegmentSeparator = function(rid, enabled) { | |
| 11579 11717 | 
             
            				this._segments.calcSegmentOrder(this._rids);
         | 
| 11580 11718 | 
             
            				change = true;
         | 
| 11581 11719 | 
             
            			}
         | 
| 11582 | 
            -
            		} else if(this._segments) {
         | 
| 11720 | 
            +
            		} else if(this._segments) { // mean remove separator
         | 
| 11583 11721 | 
             
            			let segment = this._segments.getSegment(rid);
         | 
| 11584 11722 | 
             
            			if(segment) {
         | 
| 11585 11723 | 
             
            				memberCount = segment.getChildCount();
         | 
| @@ -11805,6 +11943,34 @@ DataTable.prototype.addSegmentChildren = function(segmentId, rids, dataIds) { | |
| 11805 11943 | 
             
            	}
         | 
| 11806 11944 | 
             
            	return false;
         | 
| 11807 11945 | 
             
            };
         | 
| 11946 | 
            +
             | 
| 11947 | 
            +
            /** @public
         | 
| 11948 | 
            +
            * @param {Array.<Object>} segmentArr Segment array that contain "segmentId", "rowIds" to set segment children
         | 
| 11949 | 
            +
            * @return {boolean} Return true if there is any change
         | 
| 11950 | 
            +
            */
         | 
| 11951 | 
            +
            DataTable.prototype.setSegmentChildren = function(segmentArr) {
         | 
| 11952 | 
            +
            	if(!this._segments) {
         | 
| 11953 | 
            +
            		return false;
         | 
| 11954 | 
            +
            	}
         | 
| 11955 | 
            +
            	this.removeAllSegmentChildren();
         | 
| 11956 | 
            +
            	let len = segmentArr.length;
         | 
| 11957 | 
            +
            	let dirty;
         | 
| 11958 | 
            +
            	for (let i = 0; i < len; i++) {
         | 
| 11959 | 
            +
            		let obj = segmentArr[i];
         | 
| 11960 | 
            +
            		if(this._segments.addSegmentChildren(obj.segmentId, obj.rowIds)) {
         | 
| 11961 | 
            +
            			dirty = true;
         | 
| 11962 | 
            +
            		}
         | 
| 11963 | 
            +
            	}
         | 
| 11964 | 
            +
            	if(dirty) {
         | 
| 11965 | 
            +
            		this._sort(null);
         | 
| 11966 | 
            +
            		this._dispatchPositionChange(); // Force rerendering, even if there is no position change
         | 
| 11967 | 
            +
             | 
| 11968 | 
            +
            		this.requestClassifying();
         | 
| 11969 | 
            +
            		return true;
         | 
| 11970 | 
            +
            	}
         | 
| 11971 | 
            +
             | 
| 11972 | 
            +
            	return false;
         | 
| 11973 | 
            +
            };
         | 
| 11808 11974 | 
             
            /** @public
         | 
| 11809 11975 | 
             
            * @param {string} segmentId Row id
         | 
| 11810 11976 | 
             
            * @param {string} rid Row id
         | 
| @@ -12687,12 +12853,6 @@ const ROW_TYPES = { | |
| 12687 12853 | 
             
            	GROUP_MEMBER: "GROUP_MEMBER"
         | 
| 12688 12854 | 
             
            };
         | 
| 12689 12855 |  | 
| 12690 | 
            -
            /** @type {RegExp}
         | 
| 12691 | 
            -
            * @private
         | 
| 12692 | 
            -
            * @const
         | 
| 12693 | 
            -
            */
         | 
| 12694 | 
            -
            const ROW_ID_PATTERN = /^_[^_]+_$/;
         | 
| 12695 | 
            -
             | 
| 12696 12856 | 
             
            /** @private
         | 
| 12697 12857 | 
             
            * @function
         | 
| 12698 12858 | 
             
            * @param {Object} obj
         | 
| @@ -12737,6 +12897,11 @@ RowDefinition._runningId = 0; | |
| 12737 12897 | 
             
            * @private
         | 
| 12738 12898 | 
             
            */
         | 
| 12739 12899 | 
             
            RowDefinition._childDataField = "CHILD_VALUES";
         | 
| 12900 | 
            +
            /** @type {RegExp}
         | 
| 12901 | 
            +
            * @private
         | 
| 12902 | 
            +
            * @const
         | 
| 12903 | 
            +
            */
         | 
| 12904 | 
            +
            RowDefinition.ROW_ID_PATTERN = /^_[^_]+_$/;
         | 
| 12740 12905 | 
             
            //#region Private Members
         | 
| 12741 12906 | 
             
            /** @type {string}
         | 
| 12742 12907 | 
             
            * @private
         | 
| @@ -12892,7 +13057,7 @@ RowDefinition.prototype.initialize = function(rowOptions) { | |
| 12892 13057 | 
             
            	if(!this._autoGenerated) {
         | 
| 12893 13058 | 
             
            		let userRowId = rowOptions["rowId"];
         | 
| 12894 13059 | 
             
            		if(userRowId && typeof userRowId === "string") {
         | 
| 12895 | 
            -
            			if(userRowId.match(ROW_ID_PATTERN)) {
         | 
| 13060 | 
            +
            			if(userRowId.match(RowDefinition.ROW_ID_PATTERN)) {
         | 
| 12896 13061 | 
             
            				console.warn("Please change the rowId format to avoid duplicated rows' id causing unexpected behavior.");
         | 
| 12897 13062 | 
             
            			} else {
         | 
| 12898 13063 | 
             
            				this._rowId = userRowId;
         | 
| @@ -13543,12 +13708,7 @@ RowDefinition.prototype.isRealTimeRow = function() { | |
| 13543 13708 | 
             
            * @return {boolean} If a subscription is made, return true.
         | 
| 13544 13709 | 
             
            */
         | 
| 13545 13710 | 
             
            RowDefinition.prototype.subscribeForUpdates = function(subs) {
         | 
| 13546 | 
            -
            	if(subs) {
         | 
| 13547 | 
            -
            		this._subs = subs;
         | 
| 13548 | 
            -
            	} else {
         | 
| 13549 | 
            -
            		subs = this._subs;
         | 
| 13550 | 
            -
            	}
         | 
| 13551 | 
            -
            	if(!subs) {
         | 
| 13711 | 
            +
            	if(!(subs  || this._subs)) {
         | 
| 13552 13712 | 
             
            		return false;
         | 
| 13553 13713 | 
             
            	}
         | 
| 13554 13714 | 
             
            	if(!this.isRealTimeRow() && !this.getPermId()) {
         | 
| @@ -13556,7 +13716,11 @@ RowDefinition.prototype.subscribeForUpdates = function(subs) { | |
| 13556 13716 | 
             
            	}
         | 
| 13557 13717 | 
             
            	// TODO: Check if the same subscription is being made.
         | 
| 13558 13718 | 
             
            	this.unsubscribeForUpdates();
         | 
| 13559 | 
            -
             | 
| 13719 | 
            +
            	if(subs) {
         | 
| 13720 | 
            +
            		this._subs = subs;
         | 
| 13721 | 
            +
            	} else {
         | 
| 13722 | 
            +
            		subs = this._subs;
         | 
| 13723 | 
            +
            	}
         | 
| 13560 13724 | 
             
            	if(this.isChain()) {
         | 
| 13561 13725 | 
             
            		let symbol = this._chainRic;
         | 
| 13562 13726 | 
             
            		if(!symbol){
         | 
| @@ -13580,14 +13744,17 @@ RowDefinition.prototype.subscribeForUpdates = function(subs) { | |
| 13580 13744 | 
             
            };
         | 
| 13581 13745 | 
             
            /** Unsubscribe existing real-time data service. Static data is maintained
         | 
| 13582 13746 | 
             
            * @public
         | 
| 13747 | 
            +
            * @param {boolean=} keepData
         | 
| 13583 13748 | 
             
            * @returns {null} Always return null
         | 
| 13584 13749 | 
             
            */
         | 
| 13585 | 
            -
            RowDefinition.prototype.unsubscribeForUpdates = function() {
         | 
| 13750 | 
            +
            RowDefinition.prototype.unsubscribeForUpdates = function(keepData) {
         | 
| 13586 13751 | 
             
            	if(this.isSubscribing()) { // Only normal real-time rows and chains have both subId and subscription object
         | 
| 13587 13752 | 
             
            		this._subs["removeSubscription"](this._subId);
         | 
| 13588 13753 | 
             
            		this._subId = "";
         | 
| 13589 | 
            -
            		 | 
| 13590 | 
            -
             | 
| 13754 | 
            +
            		if(!keepData) {
         | 
| 13755 | 
            +
            			this.resetUpdates();
         | 
| 13756 | 
            +
            			this.resetRowData(); // Real-time data is removed while static data is maintained
         | 
| 13757 | 
            +
            		}
         | 
| 13591 13758 | 
             
            	}
         | 
| 13592 13759 | 
             
            	return null;
         | 
| 13593 13760 | 
             
            };
         | 
| @@ -13806,8 +13973,9 @@ RowDefinition.prototype.addConstituent = function(ric) { | |
| 13806 13973 | 
             
            /** Used to convert autogenerated row to regular real-time row
         | 
| 13807 13974 | 
             
            * @public
         | 
| 13808 13975 | 
             
            * @ignore
         | 
| 13976 | 
            +
            * @param {string=} userRowId
         | 
| 13809 13977 | 
             
            */
         | 
| 13810 | 
            -
            RowDefinition.prototype.toRealTimeRow = function() {
         | 
| 13978 | 
            +
            RowDefinition.prototype.toRealTimeRow = function(userRowId) {
         | 
| 13811 13979 | 
             
            	if(!this.isConstituent()) {
         | 
| 13812 13980 | 
             
            		return; // Only a constituent can be converted to a real-time row
         | 
| 13813 13981 | 
             
            	}
         | 
| @@ -13818,7 +13986,11 @@ RowDefinition.prototype.toRealTimeRow = function() { | |
| 13818 13986 | 
             
            	this._parent = null;
         | 
| 13819 13987 | 
             
            	this._depthLevel = 0;
         | 
| 13820 13988 |  | 
| 13821 | 
            -
            	 | 
| 13989 | 
            +
            	if(userRowId) {
         | 
| 13990 | 
            +
            		this._rowId = userRowId;
         | 
| 13991 | 
            +
            		this._userId = true;
         | 
| 13992 | 
            +
            	}
         | 
| 13993 | 
            +
             | 
| 13822 13994 | 
             
            	this.subscribeForUpdates(subs); // Static data remains intact
         | 
| 13823 13995 | 
             
            };
         | 
| 13824 13996 |  | 
| @@ -13829,7 +14001,7 @@ RowDefinition.prototype.unlinkChain = function() { | |
| 13829 14001 | 
             
            		return;
         | 
| 13830 14002 | 
             
            	}
         | 
| 13831 14003 |  | 
| 13832 | 
            -
            	this.unsubscribeForUpdates(); // Static data remains intact
         | 
| 14004 | 
            +
            	this.unsubscribeForUpdates(true); // Static data remains intact
         | 
| 13833 14005 |  | 
| 13834 14006 | 
             
            	let view = this._view;
         | 
| 13835 14007 | 
             
            	if(view) {
         | 
| @@ -31421,6 +31593,23 @@ DataView.prototype.synchronizeRowOrder = function() { | |
| 31421 31593 | 
             
            		this._dt._sort(this._sortingDefs);
         | 
| 31422 31594 | 
             
            	}
         | 
| 31423 31595 | 
             
            };
         | 
| 31596 | 
            +
            /**
         | 
| 31597 | 
            +
            * @public
         | 
| 31598 | 
            +
            * @param {Array<string>} rowIds
         | 
| 31599 | 
            +
            * @param {boolean=} enabled
         | 
| 31600 | 
            +
            * @return {boolean} Return true if there is any change
         | 
| 31601 | 
            +
            */
         | 
| 31602 | 
            +
            DataView.prototype.setSegmentSeparators = function(rowIds, enabled) {
         | 
| 31603 | 
            +
            	if(rowIds) {
         | 
| 31604 | 
            +
            		enabled = enabled !== false;
         | 
| 31605 | 
            +
            		if(enabled) {
         | 
| 31606 | 
            +
            			this.synchronizeRowOrder();
         | 
| 31607 | 
            +
            		}
         | 
| 31608 | 
            +
            		// TODO: Force expanding of segment before unsetting segment separator
         | 
| 31609 | 
            +
            		return this._dt.setSegmentSeparators(rowIds, enabled);
         | 
| 31610 | 
            +
            	}
         | 
| 31611 | 
            +
            	return false;
         | 
| 31612 | 
            +
            };
         | 
| 31424 31613 | 
             
            /** Set visible row as segment separator (hidden or filtered rows cannot be a segment separator)
         | 
| 31425 31614 | 
             
            * @public
         | 
| 31426 31615 | 
             
            * @param {string|number} rowRef Row id or row index
         | 
| @@ -31521,6 +31710,22 @@ DataView.prototype.collapseSegment = function(rowRef, collapsed) { | |
| 31521 31710 | 
             
            	return false;
         | 
| 31522 31711 | 
             
            };
         | 
| 31523 31712 | 
             
            /** @public
         | 
| 31713 | 
            +
            * @param {Array<string|number>} rowIds
         | 
| 31714 | 
            +
            * @param {boolean=} collapsed
         | 
| 31715 | 
            +
            * @return {boolean} Return true if there is any change
         | 
| 31716 | 
            +
            */
         | 
| 31717 | 
            +
            DataView.prototype.collapseSegments = function(rowIds, collapsed) {
         | 
| 31718 | 
            +
            	collapsed = collapsed !== false;
         | 
| 31719 | 
            +
            	let segments = this._dt._getSegmentSeparators();
         | 
| 31720 | 
            +
            	if(segments) {
         | 
| 31721 | 
            +
            		if(segments.collapseSegments(rowIds, collapsed)) {
         | 
| 31722 | 
            +
            			this._refreshAndNotify(); // dispatch global change event
         | 
| 31723 | 
            +
            			return true;
         | 
| 31724 | 
            +
            		}
         | 
| 31725 | 
            +
            	}
         | 
| 31726 | 
            +
            	return false;
         | 
| 31727 | 
            +
            };
         | 
| 31728 | 
            +
            /** @public
         | 
| 31524 31729 | 
             
            * @param {string|number} rowRef Row id or row index
         | 
| 31525 31730 | 
             
            * @param {boolean=} expanded
         | 
| 31526 31731 | 
             
            * @return {boolean} Return true if there is any change
         | 
| @@ -31599,6 +31804,16 @@ DataView.prototype.addSegmentChildren = function(segmentRef, rowRefs, dataIds) { | |
| 31599 31804 | 
             
            	return false;
         | 
| 31600 31805 | 
             
            };
         | 
| 31601 31806 | 
             
            /** @public
         | 
| 31807 | 
            +
            * @param {Array<Object>} segmentArr Segment array that contain "segmentId", "rowIds" to set segment children
         | 
| 31808 | 
            +
            * @return {boolean} Return true if there is any change
         | 
| 31809 | 
            +
            */
         | 
| 31810 | 
            +
            DataView.prototype.setSegmentChildren = function(segmentArr) {
         | 
| 31811 | 
            +
            	if(this._dt._getSegmentSeparators()) {
         | 
| 31812 | 
            +
            		return this._dt.setSegmentChildren(segmentArr);
         | 
| 31813 | 
            +
            	}
         | 
| 31814 | 
            +
            	return false;
         | 
| 31815 | 
            +
            };
         | 
| 31816 | 
            +
            /** @public
         | 
| 31602 31817 | 
             
            * @param {string|number} segmentRef Row id or row index
         | 
| 31603 31818 | 
             
            * @param {string|number} rowRef Row id, row index
         | 
| 31604 31819 | 
             
            * @return {boolean} Return true if there is any change
         | 
| @@ -36302,7 +36517,7 @@ Core.prototype._hasPendingRowChange = false; | |
| 36302 36517 | 
             
            * @return {string}
         | 
| 36303 36518 | 
             
            */
         | 
| 36304 36519 | 
             
            Core.getVersion = function () {
         | 
| 36305 | 
            -
            	return "5.1. | 
| 36520 | 
            +
            	return "5.1.129";
         | 
| 36306 36521 | 
             
            };
         | 
| 36307 36522 | 
             
            /** {@link ElementWrapper#dispose}
         | 
| 36308 36523 | 
             
            * @override
         | 
| @@ -42177,7 +42392,7 @@ DataConnector.prototype._fieldChangedConflator = null; | |
| 42177 42392 | 
             
            * @private
         | 
| 42178 42393 | 
             
            */
         | 
| 42179 42394 | 
             
            DataConnector.prototype._ricChangedConflator = null;
         | 
| 42180 | 
            -
            /** @type {Object.<string, RowDefinition | 
| 42395 | 
            +
            /** @type {Object.<string, Array.<RowDefinition>>}
         | 
| 42181 42396 | 
             
            * @private
         | 
| 42182 42397 | 
             
            */
         | 
| 42183 42398 | 
             
            DataConnector.prototype._rowDefMap = null;
         | 
| @@ -43467,7 +43682,15 @@ SortableTitlePlugin.prototype.isSorting = function () { | |
| 43467 43682 | 
             
            * @fires SortableTitlePlugin#columnSorted
         | 
| 43468 43683 | 
             
            */
         | 
| 43469 43684 | 
             
            SortableTitlePlugin.prototype.sortColumn = function (colRef, sortOrder, opt_arg) {
         | 
| 43470 | 
            -
            	this. | 
| 43685 | 
            +
            	let sortOptions = this._prepareSorting(colRef, sortOrder);
         | 
| 43686 | 
            +
            	this._sortColumn(sortOptions, opt_arg);
         | 
| 43687 | 
            +
            	if (opt_arg && opt_arg["isUserAction"]) { // Currently, the 'isUserAction' flag is triggered by a user clicking on the title and clicking the filter dialog. TODO: preClicked should be firing too.
         | 
| 43688 | 
            +
            		let ce = {};
         | 
| 43689 | 
            +
            		ce["colIndex"] = sortOptions.colIndex;
         | 
| 43690 | 
            +
            		ce["sortOrder"] = this.getSortOrder(sortOptions.colIndex);
         | 
| 43691 | 
            +
            		ce["dataColumnName"] = this.getColumnSortingField(sortOptions.colIndex); // This should be deprecated
         | 
| 43692 | 
            +
            		this._dispatch("clicked", ce);
         | 
| 43693 | 
            +
            	}
         | 
| 43471 43694 | 
             
            };
         | 
| 43472 43695 |  | 
| 43473 43696 | 
             
            /** Sort multiple columns at once
         | 
| @@ -43866,14 +44089,6 @@ SortableTitlePlugin.prototype._proceedSorting = function (hitObj) { | |
| 43866 44089 | 
             
            		if(grid && grid["focus"]) {
         | 
| 43867 44090 | 
             
            			grid["focus"]();
         | 
| 43868 44091 | 
             
            		}
         | 
| 43869 | 
            -
             | 
| 43870 | 
            -
            		if (this._hasListener("clicked")) {
         | 
| 43871 | 
            -
            			let ce = {};
         | 
| 43872 | 
            -
            			ce["colIndex"] = colIndex;
         | 
| 43873 | 
            -
            			ce["sortOrder"] = this.getSortOrder(colIndex);
         | 
| 43874 | 
            -
            			ce["dataColumnName"] = this.getColumnSortingField(colIndex); // This should be deprecated
         | 
| 43875 | 
            -
            			this._dispatch("clicked", ce);
         | 
| 43876 | 
            -
            		}
         | 
| 43877 44092 | 
             
            	}
         | 
| 43878 44093 | 
             
            };
         | 
| 43879 44094 |  | 
| @@ -44787,6 +45002,14 @@ SortableTitlePlugin._proto = SortableTitlePlugin.prototype; | |
| 44787 45002 | 
             
            * @description Fired only when a row will be removed through Grid's API and before occurring of the actual removal
         | 
| 44788 45003 | 
             
            */
         | 
| 44789 45004 |  | 
| 45005 | 
            +
            /** @event Grid#beforeUnlinked
         | 
| 45006 | 
            +
            * @description Trigger before unlinking a chain row.
         | 
| 45007 | 
            +
            * @type {Object}
         | 
| 45008 | 
            +
            * @property {RowDefinition} chain An row definition object of a chain row.
         | 
| 45009 | 
            +
            * @property {boolean} collapsed Collapsing state of a chain row.
         | 
| 45010 | 
            +
            * @property {Object} ridMap A map of constituent rics and row ids used to customize row ids.
         | 
| 45011 | 
            +
            */
         | 
| 45012 | 
            +
             | 
| 44790 45013 | 
             
            /** @private
         | 
| 44791 45014 | 
             
            * @param {RowDefinition} rowDef
         | 
| 44792 45015 | 
             
            * @return {Object}
         | 
| @@ -45136,6 +45359,10 @@ Grid.prototype._formulaConflator = null; | |
| 45136 45359 | 
             
            */
         | 
| 45137 45360 | 
             
            Grid.prototype._chainConflator = null;
         | 
| 45138 45361 | 
             
            /** @private
         | 
| 45362 | 
            +
            * @type {Object}
         | 
| 45363 | 
            +
            */
         | 
| 45364 | 
            +
            Grid.prototype._constituentMap = null;
         | 
| 45365 | 
            +
            /** @private
         | 
| 45139 45366 | 
             
            * @type {number}
         | 
| 45140 45367 | 
             
            */
         | 
| 45141 45368 | 
             
            Grid.prototype._clientWidth = NaN;
         | 
| @@ -45217,11 +45444,6 @@ Grid.prototype._topSection = true; | |
| 45217 45444 | 
             
            * @private
         | 
| 45218 45445 | 
             
            */
         | 
| 45219 45446 | 
             
            Grid.prototype._focusingArgs = null;
         | 
| 45220 | 
            -
            /** @type {boolean}
         | 
| 45221 | 
            -
            * @private
         | 
| 45222 | 
            -
            */
         | 
| 45223 | 
            -
            Grid.prototype._unlinking = false;
         | 
| 45224 | 
            -
             | 
| 45225 45447 |  | 
| 45226 45448 | 
             
            /** @public
         | 
| 45227 45449 | 
             
            */
         | 
| @@ -47306,6 +47528,7 @@ Grid.prototype.removeAllRows = function() { | |
| 47306 47528 | 
             
            	this._dcConflator.reset();
         | 
| 47307 47529 | 
             
            	this._formulaConflator.reset();
         | 
| 47308 47530 | 
             
            	this._chainConflator.reset();
         | 
| 47531 | 
            +
            	this._constituentMap = null;
         | 
| 47309 47532 | 
             
            	this._connector.removeAllRics();
         | 
| 47310 47533 |  | 
| 47311 47534 | 
             
            	// TODO: This logic should also be in the core grid
         | 
| @@ -47449,13 +47672,41 @@ Grid.prototype.unlinkChain = function(rowRef) { | |
| 47449 47672 | 
             
            		return;
         | 
| 47450 47673 | 
             
            	}
         | 
| 47451 47674 |  | 
| 47452 | 
            -
            	this._unlinking = true;
         | 
| 47453 | 
            -
             | 
| 47454 47675 | 
             
            	let childRowDefs = rowDef.getDescendants(); // TODO: Support nested child
         | 
| 47455 47676 | 
             
            	if(childRowDefs) {
         | 
| 47456 | 
            -
            		 | 
| 47457 | 
            -
             | 
| 47458 | 
            -
             | 
| 47677 | 
            +
            		let len = childRowDefs.length;
         | 
| 47678 | 
            +
            		let ridMap = {};
         | 
| 47679 | 
            +
            		for(let i = 0; i < len; i++) {
         | 
| 47680 | 
            +
            			ridMap[childRowDefs[i].getRic()] = "";
         | 
| 47681 | 
            +
            		}
         | 
| 47682 | 
            +
            		let collapsed = rowDef.isChainCollapsed();
         | 
| 47683 | 
            +
            		let args = {
         | 
| 47684 | 
            +
            			chain: rowDef,
         | 
| 47685 | 
            +
            			collapsed: collapsed,
         | 
| 47686 | 
            +
            			ridMap: ridMap
         | 
| 47687 | 
            +
            		};
         | 
| 47688 | 
            +
            		this._dispatch("beforeUnlinked", args);
         | 
| 47689 | 
            +
             | 
| 47690 | 
            +
            		if(!collapsed) {
         | 
| 47691 | 
            +
            			let rowIdChanged = false;
         | 
| 47692 | 
            +
            			let ridPair = {};
         | 
| 47693 | 
            +
            			for(let i = 0; i < len; i++) {
         | 
| 47694 | 
            +
            				let childRowDef = childRowDefs[i];
         | 
| 47695 | 
            +
            				let mappedRowId = ridMap[childRowDef.getRic()];
         | 
| 47696 | 
            +
            				if(mappedRowId) {
         | 
| 47697 | 
            +
            					if(mappedRowId.match(RowDefinition.ROW_ID_PATTERN)) {
         | 
| 47698 | 
            +
            						console.warn("Please change the rowId format to avoid duplicated rows' id causing unexpected behavior.");
         | 
| 47699 | 
            +
            						mappedRowId = "";
         | 
| 47700 | 
            +
            					} else {
         | 
| 47701 | 
            +
            						rowIdChanged = true;
         | 
| 47702 | 
            +
            						ridPair[childRowDef.getRowId()] = mappedRowId;
         | 
| 47703 | 
            +
            					}
         | 
| 47704 | 
            +
            				}
         | 
| 47705 | 
            +
            				childRowDef.toRealTimeRow(mappedRowId);
         | 
| 47706 | 
            +
            			}
         | 
| 47707 | 
            +
            			if(rowIdChanged) {
         | 
| 47708 | 
            +
            				this._dc.replaceRowIds(ridPair);
         | 
| 47709 | 
            +
            				this._dt.replaceRowIds(ridPair);
         | 
| 47459 47710 | 
             
            			}
         | 
| 47460 47711 | 
             
            		} else {
         | 
| 47461 47712 | 
             
            			this._removeConstituentRows(childRowDefs);
         | 
| @@ -47463,8 +47714,6 @@ Grid.prototype.unlinkChain = function(rowRef) { | |
| 47463 47714 | 
             
            	}
         | 
| 47464 47715 |  | 
| 47465 47716 | 
             
            	rowDef.unlinkChain();
         | 
| 47466 | 
            -
             | 
| 47467 | 
            -
            	this._unlinking = false;
         | 
| 47468 47717 | 
             
            };
         | 
| 47469 47718 |  | 
| 47470 47719 | 
             
            /** Alias to setRic
         | 
| @@ -47778,6 +48027,15 @@ Grid.prototype.getAllRics = function() { | |
| 47778 48027 | 
             
            Grid.prototype.hasRic = function() {
         | 
| 47779 48028 | 
             
            	return this._connector.hasRic();
         | 
| 47780 48029 | 
             
            };
         | 
| 48030 | 
            +
            /** Returns RIC of given row reference.
         | 
| 48031 | 
            +
            * @public
         | 
| 48032 | 
            +
            * @param {(string|number)=} rowRef
         | 
| 48033 | 
            +
            * @return {string}
         | 
| 48034 | 
            +
            */
         | 
| 48035 | 
            +
            Grid.prototype.getRic = function(rowRef) {
         | 
| 48036 | 
            +
            	let rowDef = this.getRowDefinition(rowRef);
         | 
| 48037 | 
            +
            	return rowDef.getRic();
         | 
| 48038 | 
            +
            };
         | 
| 47781 48039 | 
             
            /** A shorthand to set row data based on index of the specified row. It is better to keep rowDefinition object for updating data directly as row index can be changed by sorting and filtering.
         | 
| 47782 48040 | 
             
            * @public
         | 
| 47783 48041 | 
             
            * @param {Grid~RowReference} rowRef
         | 
| @@ -48205,15 +48463,15 @@ Grid.prototype._onQuote2PostUpdate = function (e) { | |
| 48205 48463 | 
             
            * @param {Object} e
         | 
| 48206 48464 | 
             
             */
         | 
| 48207 48465 | 
             
            Grid.prototype._onQ2DataChanged = function (e) {
         | 
| 48208 | 
            -
            	let  | 
| 48209 | 
            -
            	let rowDef = this._getRowDefinitionById(subId);
         | 
| 48466 | 
            +
            	let rowDef = this._getRowDefinitionById(e["subId"]);
         | 
| 48210 48467 | 
             
            	if(!rowDef) {
         | 
| 48211 48468 | 
             
            		return; // WARNING: This should not be happened because row has been removed but the data is still received
         | 
| 48212 48469 | 
             
            	}
         | 
| 48213 48470 |  | 
| 48471 | 
            +
            	let ric = e["ric"];
         | 
| 48214 48472 | 
             
            	let values = e["values"];
         | 
| 48215 48473 | 
             
            	if (values) {
         | 
| 48216 | 
            -
            		let  | 
| 48474 | 
            +
            		let duplicateRics = null;
         | 
| 48217 48475 | 
             
            		if(rowDef.verifyConstituent(ric)) {
         | 
| 48218 48476 | 
             
            			let parentDef = rowDef;
         | 
| 48219 48477 | 
             
            			let childDef = parentDef.getConstituent(ric);
         | 
| @@ -48224,15 +48482,28 @@ Grid.prototype._onQ2DataChanged = function (e) { | |
| 48224 48482 | 
             
            				if(!childDef) {
         | 
| 48225 48483 | 
             
            					return; // Parent chain is not alive
         | 
| 48226 48484 | 
             
            				}
         | 
| 48485 | 
            +
            				duplicateRics = this._connector.getRowDefByRic(ric);
         | 
| 48227 48486 | 
             
            				this._connector.addRic(childDef); // TODO: JET/RTK should not re-subscribe this
         | 
| 48487 | 
            +
            				if(!this._constituentMap) {
         | 
| 48488 | 
            +
            					this._constituentMap = {};
         | 
| 48489 | 
            +
            				}
         | 
| 48490 | 
            +
            				this._constituentMap[childDef.getRowId()] = childDef;
         | 
| 48228 48491 | 
             
            				this._registerConstituents(childDef);
         | 
| 48229 48492 | 
             
            			}
         | 
| 48230 48493 | 
             
            		}
         | 
| 48231 48494 |  | 
| 48495 | 
            +
            		if(duplicateRics && duplicateRics.length) {
         | 
| 48496 | 
            +
            			let duplicateRic = duplicateRics[0];
         | 
| 48497 | 
            +
            			duplicateRic.cloneRowData(values, values);
         | 
| 48498 | 
            +
            		}
         | 
| 48499 | 
            +
             | 
| 48232 48500 | 
             
            		rowDef.setRowData(values); // Trigger data changes
         | 
| 48233 | 
            -
            	} else  | 
| 48234 | 
            -
            		rowDef. | 
| 48235 | 
            -
            		 | 
| 48501 | 
            +
            	} else { // The constituent is requested to be removed by the real-time data provider
         | 
| 48502 | 
            +
            		let childDef = rowDef.getConstituent(ric); // WARNING: normal ric and its delayed version must match with the one first given
         | 
| 48503 | 
            +
            		if(childDef) {
         | 
| 48504 | 
            +
            			childDef.setParent(null); // Manually remove child reference from its parent
         | 
| 48505 | 
            +
            			this._removeRow(childDef);
         | 
| 48506 | 
            +
            		}
         | 
| 48236 48507 | 
             
            	}
         | 
| 48237 48508 | 
             
            };
         | 
| 48238 48509 |  | 
| @@ -48243,6 +48514,9 @@ Grid.prototype._registerConstituents = function(rowDef) { | |
| 48243 48514 | 
             
            	if(this._chainConflator.conflate(rowDef)) {
         | 
| 48244 48515 | 
             
            		return;
         | 
| 48245 48516 | 
             
            	}
         | 
| 48517 | 
            +
             | 
| 48518 | 
            +
            	this._constituentMap = null;
         | 
| 48519 | 
            +
             | 
| 48246 48520 | 
             
            	let view = this._dv;
         | 
| 48247 48521 | 
             
            	let dt = view ? view.getDataSource() : null;
         | 
| 48248 48522 | 
             
            	if(!dt) {
         | 
| @@ -48552,14 +48826,21 @@ Grid.prototype._onDataComposed = function(e) { | |
| 48552 48826 | 
             
            		return; // Cannot do data composition if there is no change in data
         | 
| 48553 48827 | 
             
            	}
         | 
| 48554 48828 |  | 
| 48555 | 
            -
            	 | 
| 48556 | 
            -
            	if(!rowData) {
         | 
| 48829 | 
            +
            	if(!e["rowData"]) {
         | 
| 48557 48830 | 
             
            		return; // Row could already be removed or global change event is sent
         | 
| 48558 48831 | 
             
            	}
         | 
| 48559 48832 |  | 
| 48560 | 
            -
            	let  | 
| 48833 | 
            +
            	let rowId = e["rid"];
         | 
| 48834 | 
            +
            	let rowDef = this._getRowDefinitionById(rowId);
         | 
| 48561 48835 | 
             
            	if(!rowDef) {
         | 
| 48562 | 
            -
            		 | 
| 48836 | 
            +
            		rowDef = this._constituentMap ? this._constituentMap[rowId] : null; // Row def could be in pending for adding to view
         | 
| 48837 | 
            +
            		if(!rowDef) {
         | 
| 48838 | 
            +
            			return; // Somehow the given row id is invalid
         | 
| 48839 | 
            +
            		}
         | 
| 48840 | 
            +
            		if(rowDef.isDisposed()) {
         | 
| 48841 | 
            +
            			this._constituentMap[rowId] = null;
         | 
| 48842 | 
            +
            			return;
         | 
| 48843 | 
            +
            		}
         | 
| 48563 48844 | 
             
            	}
         | 
| 48564 48845 |  | 
| 48565 48846 | 
             
            	if(this._autoDateConversion) { // auto data conversion
         | 
| @@ -49133,7 +49414,8 @@ Grid.prototype._onTabNavigation = function(e) { | |
| 49133 49414 | 
             
            */
         | 
| 49134 49415 | 
             
            Grid.prototype._getEventHandlers = function() {
         | 
| 49135 49416 | 
             
            	return {
         | 
| 49136 | 
            -
            		"tabNavigation": this._onTabNavigation
         | 
| 49417 | 
            +
            		"tabNavigation": this._onTabNavigation,
         | 
| 49418 | 
            +
            		"q2DataChanged": this._onQ2DataChanged
         | 
| 49137 49419 | 
             
            	};
         | 
| 49138 49420 | 
             
            };
         | 
| 49139 49421 |  |