@refinitiv-ui/efx-grid 6.0.70 → 6.0.72

Sign up to get free protection for your applications and to get access to all the features.
@@ -570,7 +570,7 @@ Core.prototype._firstRendered = false;
570
570
  * @return {string}
571
571
  */
572
572
  Core.getVersion = function () {
573
- return "5.1.78";
573
+ return "5.1.81";
574
574
  };
575
575
  /** {@link ElementWrapper#dispose}
576
576
  * @override
@@ -5441,7 +5441,7 @@ Core.prototype._onRowHeightChanged = function (e) {
5441
5441
  // TODO: Set row height one by one is not good
5442
5442
  for(var j = 0; j < len; ++j) {
5443
5443
  var evt = evts[j];
5444
- var section = /** @type {ILayoutGrid} */(evt["sender"]);
5444
+ var section = /** @type {ILayoutGrid} */(evt["section"]);
5445
5445
  if(!this._containsSection(section)) {
5446
5446
  continue; // The section is no longer contained in this grid
5447
5447
  }
@@ -775,7 +775,14 @@ VirtualizedLayoutGrid.prototype.getFirstIndexInView = function () {
775
775
 
776
776
  /** @inheritDoc */
777
777
  VirtualizedLayoutGrid.prototype.getLastIndexInView = function () {
778
- return this._firstIndex + this._getInnerRowCount() - 1;
778
+ var li = this._firstIndex + this._getInnerRowCount() - 1;
779
+ var core = this._grid._getContext();
780
+ var dv = core.getDataSource();
781
+ var actualLastIndex = dv ? dv.getRowCount() - 1 : -1;
782
+ if (li > actualLastIndex) { //Avoid incorrect index because the delay of row count synchronization after filtering
783
+ return actualLastIndex;
784
+ }
785
+ return li;
779
786
  };
780
787
 
781
788
  /** @inheritDoc */
@@ -137,7 +137,7 @@ class FilterDialog extends BasicElement {
137
137
  constructor() {
138
138
  super();
139
139
 
140
- this._updateDialogHeight = this._updateDialogHeight.bind(this);
140
+ this._onWindowResized = this._onWindowResized.bind(this);
141
141
  this._afterDialogOpened = this._afterDialogOpened.bind(this);
142
142
 
143
143
  this.lang = "en";
@@ -155,7 +155,7 @@ class FilterDialog extends BasicElement {
155
155
  "autoRepositioning": false,
156
156
  "uiBlocking": true
157
157
  });
158
- this._dialogHeightTimerId = 0;
158
+ this._winResizedTimer = 0;
159
159
  ElementObserver.addLanguageListener(this);
160
160
  }
161
161
 
@@ -436,13 +436,7 @@ class FilterDialog extends BasicElement {
436
436
  }
437
437
 
438
438
  this._cancelBtn.focus(); // Keep focus on cancel button when open dialog
439
- var positionUpdated = this._updateDialogHeight(true);
440
- if(!this._firstRendered) {
441
- this._firstRendered = true;
442
- if(!positionUpdated) {
443
- this._popup.updatePosition();
444
- }
445
- }
439
+ this._updateDialogHeight(); // position of the popup element will always be updated
446
440
 
447
441
  var popupElem = this._popup.getElement();
448
442
  if(popupElem) {// After all changes, ensure that visibility is reset back
@@ -488,9 +482,9 @@ class FilterDialog extends BasicElement {
488
482
  */
489
483
  _onPopupHidden() {
490
484
  this.isShown = false; // For backward compatability
491
- if (this._dialogHeightTimerId) {
492
- clearTimeout(this._dialogHeightTimerId);
493
- this._dialogHeightTimerId = 0;
485
+ if (this._winResizedTimer) {
486
+ clearTimeout(this._winResizedTimer);
487
+ this._winResizedTimer = 0;
494
488
  }
495
489
  }
496
490
 
@@ -498,10 +492,18 @@ class FilterDialog extends BasicElement {
498
492
  * @private
499
493
  */
500
494
  _onWindowResize() {
501
- if(!this._dialogHeightTimerId && this.isShown){
502
- this._dialogHeightTimerId = setTimeout(this._updateDialogHeight, 500);
495
+ if(!this._winResizedTimer && this.isShown){
496
+ this._winResizedTimer = setTimeout(this._onWindowResized, 400);
503
497
  }
504
498
  }
499
+ /**
500
+ * @private
501
+ */
502
+ _onWindowResized() {
503
+ this._winResizedTimer = 0;
504
+ this._updateDialogHeight();
505
+ }
506
+
505
507
 
506
508
  /**
507
509
  * @public
@@ -577,7 +579,7 @@ class FilterDialog extends BasicElement {
577
579
  e.preventDefault();
578
580
  e.stopPropagation();
579
581
  this._updateFilterModeSelectionUI();
580
- this._updateDialogHeight(true);
582
+ this._updateDialogHeight();
581
583
  }
582
584
 
583
585
  /**
@@ -674,7 +676,7 @@ class FilterDialog extends BasicElement {
674
676
 
675
677
  if(useUTCTime) {
676
678
  ary2D.forEach(function(itm) {
677
- item[3] = true;
679
+ itm[3] = true;
678
680
  });
679
681
  }
680
682
 
@@ -810,63 +812,102 @@ class FilterDialog extends BasicElement {
810
812
  }
811
813
  }
812
814
 
813
- // Params is an array
814
- if (Array.isArray(userConditions)) {
815
- let conditions = /** @type{Array} */ (userConditions);
816
- const con1 = conditions[0] || [];
817
- const con2 = conditions[1] || [];
818
- const con2Complete = con2.length > 1 && con2[0] && con2[1];
819
- const connector = con1[2] || "";
820
- const firstRadioState = connector !== "OR" || !con2Complete;
821
- const isDateTimeField = toDateTimeType(this.fieldDataType) ? true : false;
822
- if (isDateTimeField) {
823
- if (con1[0]) {
824
- this._dateTimeComboBoxes[0].value = con1[0];
825
- this._dateTimePickers[0].value = con1[1] ? this._getDateString(con1[1]) : "";
826
-
827
- if (con2Complete) {
828
- this._dateTimeComboBoxes[1].value = con2[0];
829
- this._dateTimePickers[1].value = con2[1] ? this._getDateString(con2[1]) : "";
830
- }
815
+ if (!Array.isArray(userConditions)) {
816
+ return;
817
+ }
818
+
819
+ const con1 = userConditions[0];
820
+ var validCon1 = false;
821
+ var conOp1 = "";
822
+ var conVal1 = "";
823
+ var connector = "";
824
+ if(Array.isArray(con1)) {
825
+ conOp1 = con1[0];
826
+ if(con1.length && con1[0]) {
827
+ conVal1 = con1[1];
828
+ if(conVal1 || conVal1 === 0 || conVal1 === false) {
829
+ validCon1 = true;
830
+ connector = con1[2] || "";
831
+ } else {
832
+ conVal1 = "";
831
833
  }
832
- this._dateTimeRadioBtns[0].checked = firstRadioState;
833
- this._dateTimeRadioBtns[1].checked = !firstRadioState;
834
- } else {
835
- if (con1[0]) {
836
- this._generalComboBoxes[0].value = con1[0];
837
- this._generalComboBoxes[1].value = con1[1] || "";
834
+ }
835
+ }
838
836
 
839
- if (con2Complete) {
840
- this._generalComboBoxes[2].value = con2[0];
841
- this._generalComboBoxes[3].value = con2[1] || "";
842
- }
837
+ const con2 = userConditions[1];
838
+ var validCon2 = false;
839
+ var conOp2 = "";
840
+ var conVal2 = "";
841
+ if(validCon1 && Array.isArray(con2)) {
842
+ conOp2 = con2[0];
843
+ if(con2.length && conOp2) {
844
+ conVal2 = con2[1];
845
+ if(conVal2 || conVal2 === 0 || conVal2 === false) {
846
+ validCon2 = true;
847
+ } else {
848
+ conVal2 = "";
843
849
  }
844
- this._generalRadioBtns[0].checked = firstRadioState;
845
- this._generalRadioBtns[1].checked = !firstRadioState;
846
850
  }
847
851
  }
852
+
853
+ var firstRadioState = true;
854
+ if(validCon1 && validCon2) {
855
+ firstRadioState = connector !== "OR";
856
+ }
857
+
858
+ if (toDateTimeType(this.fieldDataType)) {
859
+ if (validCon1) {
860
+ this._updateConditionUIs(this._dateTimeComboBoxes[0], this._dateTimePickers[0], conOp1, this._getDateString(conVal1));
861
+ }
862
+ if (validCon2) {
863
+ this._updateConditionUIs(this._dateTimeComboBoxes[1], this._dateTimePickers[1], conOp2, this._getDateString(conVal2));
864
+ }
865
+ this._updateConnectorUIs(this._dateTimeRadioBtns, firstRadioState);
866
+ } else {
867
+ if (validCon1) {
868
+ this._updateConditionUIs(this._generalComboBoxes[0], this._generalComboBoxes[1], conOp1, conVal1);
869
+ }
870
+ if (validCon2) {
871
+ this._updateConditionUIs(this._generalComboBoxes[2], this._generalComboBoxes[3], conOp2, conVal2);
872
+ }
873
+ this._updateConnectorUIs(this._generalRadioBtns, firstRadioState);
874
+ }
848
875
  }
849
- /**
850
- * @private
851
- * @param {boolean=} afterOpened
876
+ /** @private
877
+ * @param {Element} opCombobox
878
+ * @param {Element} valuePicker
879
+ * @param {string} opValue
880
+ * @param {string} value
881
+ */
882
+ _updateConditionUIs(opCombobox, valuePicker, opValue, value) {
883
+ opCombobox.value = opValue;
884
+ valuePicker.value = value;
885
+ }
886
+ /** @private
887
+ * @param {Array.<Element>} connectors
888
+ * @param {boolean} connectorValue
889
+ */
890
+ _updateConnectorUIs(connectors, connectorValue) {
891
+ connectors[0].checked = connectorValue;
892
+ connectors[1].checked = !connectorValue;
893
+ }
894
+ /** @private
852
895
  * @returns {boolean}
853
896
  */
854
- _updateDialogHeight(afterOpened) {
855
- if(!afterOpened) {
856
- this._dialogHeightTimerId = 0;
857
- }
858
-
859
- this._popup.updatePosition(false); // update position without fallback
897
+ _updateDialogHeight() {
860
898
  this._rootContainer.classList.remove("compact");
861
899
  this._rootContainer.style.height = "";
900
+ this._popup.updatePosition(false); // update position without fallback
862
901
 
863
902
  const position = Dom.getRelativePosition(this, document.body);
864
903
  const dialogHeight = this.offsetHeight;
865
- const windowHeight = window.innerHeight;
904
+ const windowHeight = window.innerHeight - 5; // Add some buffer
866
905
  const dialogCoverage = position.y + dialogHeight;
867
906
  const heightDiff = dialogCoverage - windowHeight;
868
907
 
908
+ var heightChange = false;
869
909
  if(heightDiff > 0) {
910
+ heightChange = true;
870
911
  const isAdvancedFilter = this._isAdvancedFilterMode();
871
912
  const minHeight = isAdvancedFilter ? 262 : 216;
872
913
  let newHeight = dialogHeight - heightDiff;
@@ -879,10 +920,10 @@ class FilterDialog extends BasicElement {
879
920
  if(newHeight < compactThreshold){
880
921
  this._rootContainer.classList.add("compact");
881
922
  }
882
- this._popup.updatePosition();
883
- return true;
884
923
  }
885
- return false;
924
+
925
+ this._popup.updatePosition(); // This must be called to apply fallback or height change
926
+ return heightChange;
886
927
  }
887
928
  /**
888
929
  * @private
@@ -928,14 +969,10 @@ class FilterDialog extends BasicElement {
928
969
  * @return {string}
929
970
  */
930
971
  _getDateString(date) {
931
- var dateString = "";
932
- var dateFormat = "yyyy-MM-dd";
933
972
  if(!(date instanceof Date)){
934
973
  date = new Date(date);
935
974
  }
936
- dateString = DateTime.format(date.getTime(), dateFormat, this.useUTCTime ? "GMT" : "LOCAL");
937
-
938
- return dateString;
975
+ return DateTime.format(date.getTime(), "yyyy-MM-dd", this.useUTCTime ? "GMT" : "LOCAL");
939
976
  }
940
977
 
941
978
  /**
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.70" };
3
+ window.EFX_GRID = { version: "6.0.72" };
@@ -677,6 +677,12 @@ ColumnStackPlugin.prototype._updateUI = function() {
677
677
  }
678
678
  this._updating = false;
679
679
  };
680
+ /** @private */
681
+ ColumnStackPlugin.prototype._forceUpdateUI = function() {
682
+ this._conflator.disable();
683
+ this._updateUI();
684
+ this._conflator.enable();
685
+ };
680
686
  /** @private
681
687
  * @param {number} colIndex
682
688
  * @param {boolean} collapsed
@@ -1365,7 +1371,7 @@ ColumnStackPlugin.prototype._onPreSectionRender = function (e) {
1365
1371
  if (e["sectionType"] !== "title") {
1366
1372
  return;
1367
1373
  }
1368
- this._updateUI(); // asyncronuos
1374
+ this._forceUpdateUI();
1369
1375
  };
1370
1376
  /** @private
1371
1377
  * @param {Object} e
@@ -564,7 +564,6 @@ FilterInputPlugin.prototype._createFilterUI = function (colOpt) {
564
564
  case "ef-combo-box":
565
565
  elem.multiple = true;
566
566
  elem.data = CoralItems.create(colOpt.entries);
567
- elem.addEventListener("opened-changed", this._onOpenedChanged, false);
568
567
 
569
568
  if (elemTrigger != false && elemTrigger != "") {
570
569
  elem.addEventListener("value-changed", this._onInputChanged, false);
@@ -664,6 +663,13 @@ FilterInputPlugin.prototype._retrieveColumnOption = function (colIndex, colDef)
664
663
  var option = this._newExtColumnOption(colIndex);
665
664
 
666
665
  if (filterOption) {
666
+ var type = filterOption["type"];
667
+
668
+ if (typeof type == "string") {
669
+ type = type.toLowerCase();
670
+ option["type"] = type;
671
+ }
672
+
667
673
  var defaultLogic = filterOption["filterLogic"] || filterOption["defaultLogic"];
668
674
 
669
675
  if (defaultLogic != null) {
@@ -674,6 +680,10 @@ FilterInputPlugin.prototype._retrieveColumnOption = function (colIndex, colDef)
674
680
  }
675
681
  }
676
682
 
683
+ if (type == "multiselect" && option._comparingLogic === FilterInputPlugin._containingFilter) {
684
+ option._comparingLogic = FilterInputPlugin._multiSelectionFilter;
685
+ }
686
+
677
687
  var disabled = filterOption["disabled"];
678
688
 
679
689
  if (disabled != null) {
@@ -686,17 +696,6 @@ FilterInputPlugin.prototype._retrieveColumnOption = function (colIndex, colDef)
686
696
  option["placeholder"] = placeholder;
687
697
  }
688
698
 
689
- var type = filterOption["type"];
690
-
691
- if (typeof type == "string") {
692
- type = type.toLowerCase();
693
- option["type"] = type;
694
-
695
- if (type == "multiselect") {
696
- option._comparingLogic = FilterInputPlugin._multiSelectionFilter;
697
- }
698
- }
699
-
700
699
  var entries = filterOption["entries"];
701
700
 
702
701
  if (Array.isArray(entries)) {
@@ -981,10 +980,13 @@ FilterInputPlugin.prototype._onInputChanged = function (e) {
981
980
  FilterInputPlugin.prototype._onOpenedChanged = function (e) {
982
981
  if (e.detail.value) {
983
982
  //open
984
- e.currentTarget.style.setProperty('pointer-events', 'none');
983
+ e.currentTarget.style.pointerEvents = "none";
985
984
  } else {
986
985
  //close
987
- e.currentTarget.style.removeProperty('pointer-events');
986
+ var ect = e.currentTarget;
987
+ setTimeout(function () {
988
+ ect.style.pointerEvents = "";
989
+ });
988
990
  }
989
991
  };
990
992
  /** @private
@@ -1023,7 +1025,7 @@ FilterInputPlugin._rtCompareRow = function (filterOptions, rowData, rid) {
1023
1025
  };
1024
1026
  /** @private
1025
1027
  * @function
1026
- * @param {Array<string>} ary
1028
+ * @param {Array<string|number>} ary
1027
1029
  * @return {Object}
1028
1030
  */
1029
1031
 
@@ -1035,7 +1037,14 @@ FilterInputPlugin._createMapObject = function (ary) {
1035
1037
  var count = ary.length;
1036
1038
 
1037
1039
  for (var i = 0; i < count; i++) {
1038
- var str = ary[i].toLowerCase();
1040
+ var key = ary[i];
1041
+
1042
+ if (key == null || key === "") {
1043
+ continue;
1044
+ }
1045
+
1046
+ var str = FilterInputPlugin._transformToLowercaseString(key);
1047
+
1039
1048
  textMap[str] = true;
1040
1049
  }
1041
1050
  }
@@ -18,7 +18,7 @@ declare namespace InCellEditingPlugin {
18
18
  popupElement?: Element|null,
19
19
  doubleClick?: boolean|null,
20
20
  tabToMove?: boolean|null,
21
- contentSource?: boolean|null,
21
+ contentSource?: string|null,
22
22
  inlineStyling?: boolean|null,
23
23
  disablingScroll?: boolean|null,
24
24
  uiBlocking?: boolean|null,
@@ -30,7 +30,8 @@ declare namespace InCellEditingPlugin {
30
30
  beforeRowCommit?: ((...params: any[]) => any)|null,
31
31
  rowEditorClosed?: ((...params: any[]) => any)|null,
32
32
  autoSuggest?: Element|null,
33
- closingOnScroll?: boolean|null
33
+ closingOnScroll?: boolean|null,
34
+ autoHiding?: boolean|null
34
35
  };
35
36
 
36
37
  type Cache = {
@@ -17,7 +17,7 @@ import { CoralItems } from "../../tr-grid-util/es6/CoralItems.js";
17
17
  * @property {Element=} popupElement=null Element to be attached under the editor
18
18
  * @property {boolean=} doubleClick=true If disabled, double click will not trigger editor
19
19
  * @property {boolean=} tabToMove=false If enabled, pressing tab key while editor is active will open editor on the next editable cell.
20
- * @property {boolean=} contentSource="textContent" By default, the text in the editor will be populated with textContent of the target cell. Use "field" to populated data from grid's data model. Use "empty" to shows empty editor.
20
+ * @property {string=} contentSource="textContent" By default, the text in the editor will be populated with textContent of the target cell. Use "field" to populated data from grid's data model. Use "empty" to shows empty editor.
21
21
  * @property {boolean=} inlineStyling=false force inline styles regardless of elf version.
22
22
  * @property {boolean=} disablingScroll=false Scrollbar will be frozen when editor opened. Deprecated in favor of uiBlocking
23
23
  * @property {boolean=} uiBlocking=false append transparent overlay to block ui interaction
@@ -29,7 +29,8 @@ import { CoralItems } from "../../tr-grid-util/es6/CoralItems.js";
29
29
  * @property {Function=} beforeRowCommit=null Handler before committing from all editors in the row
30
30
  * @property {Function=} rowEditorClosed=null Handler after closing of all editors
31
31
  * @property {Element=} autoSuggest=null Element of ef-autosuggest or atlas-autosuggest for handled with input cell
32
- * @property {boolean=} closingOnScroll=true If disabled, scrolling will not automatically close editor. autoHiding, closingOnScroll
32
+ * @property {boolean=} closingOnScroll=true If disabled, the editor will not be automatically closed when scrolling grid.
33
+ * @property {boolean=} autoHiding=true If disabled, the editor will not be automatically closed when losing its focus.
33
34
  */
34
35
 
35
36
  /** @typedef {Object} InCellEditingPlugin~Cache
@@ -337,6 +338,10 @@ InCellEditingPlugin.prototype._rowClosing = false;
337
338
  * @private
338
339
  */
339
340
  InCellEditingPlugin.prototype._closingOnScroll = true;
341
+ /** @type {boolean}
342
+ * @private
343
+ */
344
+ InCellEditingPlugin.prototype._autoHiding = true;
340
345
  /** @type {number}
341
346
  * @private
342
347
  */
@@ -627,6 +632,9 @@ InCellEditingPlugin.prototype.config = function (options) {
627
632
  if (pluginOption["closingOnScroll"] == false) {
628
633
  t._closingOnScroll = false;
629
634
  }
635
+ if (pluginOption["autoHiding"] == false) {
636
+ t._autoHiding = false;
637
+ }
630
638
 
631
639
  // event callback
632
640
  t.addListener(pluginOption, "preEditorOpening");
@@ -638,6 +646,25 @@ InCellEditingPlugin.prototype.config = function (options) {
638
646
  t.addListener(pluginOption, "rowEditorClosed");
639
647
  };
640
648
 
649
+ /** @private
650
+ * @param {Object} obj
651
+ * @param {string} propName
652
+ * @param {boolean} propValue
653
+ * @param {boolean} defaultValue
654
+ * @returns {number} dirty
655
+ */
656
+ var _setBooleanOption = function _setBooleanOption(obj, propName, propValue, defaultValue) {
657
+ if (defaultValue) {
658
+ if (!propValue) {
659
+ obj[propName] = false;
660
+ return true;
661
+ }
662
+ } else if (propValue) {
663
+ obj[propName] = true;
664
+ return true;
665
+ }
666
+ return false;
667
+ };
641
668
  /** Get a current state of grid and extension config
642
669
  * @public
643
670
  * @param {Object=} out_obj
@@ -680,20 +707,28 @@ InCellEditingPlugin.prototype.getConfigObject = function (out_obj) {
680
707
  }
681
708
  }
682
709
  var extOptions = obj.inCellEditing;
710
+ var dirty = 0;
683
711
  if (!extOptions) {
684
- extOptions = obj.inCellEditing = {};
685
- }
686
- extOptions.balloonMode = this._balloonMode;
687
- extOptions.editableTitle = this._editableTitle;
688
- extOptions.editableContent = this._editableContent;
689
- extOptions.tabToMove = this._tabToMove;
690
- extOptions.autoCommitText = this._autoCommitText;
691
- extOptions.dataBinding = this._dataBinding;
692
- extOptions.contentSource = this._contentSource;
693
- extOptions.doubleClick = this._dblClick;
694
- extOptions.inlineStyling = this._inlineStyling;
695
- extOptions.disablingScroll = this._disablingScroll;
696
- extOptions.uiBlocking = this._uiBlocking;
712
+ extOptions = {};
713
+ }
714
+ dirty |= _setBooleanOption(extOptions, "balloonMode", this._balloonMode, false);
715
+ dirty |= _setBooleanOption(extOptions, "editableTitle", this._editableTitle, false);
716
+ dirty |= _setBooleanOption(extOptions, "tabToMove", this._tabToMove, false);
717
+ dirty |= _setBooleanOption(extOptions, "autoCommitText", this._autoCommitText, false);
718
+ dirty |= _setBooleanOption(extOptions, "dataBinding", this._dataBinding, true);
719
+ dirty |= _setBooleanOption(extOptions, "doubleClick", this._dblClick, true);
720
+ dirty |= _setBooleanOption(extOptions, "inlineStyling", this._inlineStyling, false);
721
+ dirty |= _setBooleanOption(extOptions, "disablingScroll", this._disablingScroll, false);
722
+ dirty |= _setBooleanOption(extOptions, "uiBlocking", this._uiBlocking, false);
723
+ dirty |= _setBooleanOption(extOptions, "closingOnScroll", this._closingOnScroll, true);
724
+ dirty |= _setBooleanOption(extOptions, "autoHiding", this._autoHiding, true);
725
+ if (this._contentSource !== "textContent") {
726
+ dirty = 1;
727
+ extOptions.contentSource = this._contentSource;
728
+ }
729
+ if (dirty) {
730
+ obj.inCellEditing = extOptions;
731
+ }
697
732
  return obj;
698
733
  };
699
734
 
@@ -1081,6 +1116,9 @@ InCellEditingPlugin.prototype._openEditor = function (e, host, arg) {
1081
1116
  arg["segmentSeparator"] = dataSource.isSegmentSeparator(rowId);
1082
1117
  arg["groupHeader"] = dataSource.getGroupByRowId(rowId);
1083
1118
  arg["rowData"] = this._getRow(dataSource, rowId);
1119
+ if (dataSource["stall"]) {
1120
+ dataSource["stall"](true);
1121
+ }
1084
1122
  }
1085
1123
 
1086
1124
  // Initialize UIs
@@ -1142,7 +1180,7 @@ InCellEditingPlugin.prototype._openEditor = function (e, host, arg) {
1142
1180
  }
1143
1181
  balloonPopup.enableUIBlocking(t._uiBlocking);
1144
1182
  balloonPopup.addEventListener("hidden", t._onPopupHide);
1145
- balloonPopup.disableAutoHiding(false);
1183
+ balloonPopup.disableAutoHiding(!t._autoHiding);
1146
1184
  balloonPopup.disableHideOnScroll(true);
1147
1185
  balloonPopup.attachTo(cell.getElement());
1148
1186
  balloonPopup.show(true, parentElement);
@@ -1675,8 +1713,17 @@ InCellEditingPlugin.prototype._commitText = function (committed, suggestionDetai
1675
1713
  t._activeInCellCache.balloonPopup.hide();
1676
1714
  }
1677
1715
  Dom.removeParent(t._customElement);
1678
- t._freezeScrolling(arg["grid"], false);
1679
- arg["grid"].focus();
1716
+ var grid = arg["grid"];
1717
+ if (grid) {
1718
+ t._freezeScrolling(grid, false);
1719
+ grid.focus();
1720
+ }
1721
+ var dataSource = arg["dataSource"];
1722
+ if (dataSource) {
1723
+ if (dataSource["stall"]) {
1724
+ dataSource["stall"](false);
1725
+ }
1726
+ }
1680
1727
  t._activePos = t._activeCell = t._prevContent = t._lastActiveGrid = t._activeInCellCache = null;
1681
1728
  };
1682
1729
 
@@ -1,6 +1,6 @@
1
1
  import {Ext} from "../../tr-grid-util/es6/Ext.js";
2
2
  import {GridPlugin} from "../../tr-grid-util/es6/GridPlugin.js";
3
- import {FilterBuilder} from "../../tr-grid-util/es6/FilterBuilder.js";
3
+ import {FilterBuilder, stringToDateObject} from "../../tr-grid-util/es6/FilterBuilder.js";
4
4
  import {FilterOperators} from "../../tr-grid-util/es6/FilterOperators.js";
5
5
  import {ElfUtil} from "../../tr-grid-util/es6/ElfUtil.js";
6
6
  import { injectCss, prettifyCss } from "../../tr-grid-util/es6/Util.js";
@@ -113,8 +113,6 @@ declare class RowFilteringPlugin extends GridPlugin {
113
113
 
114
114
  public getColumnFilterStates(): any[];
115
115
 
116
- public getUniqueValues(field: string, formatter?: ((...params: any[]) => any)|null, fmtField?: string|null, rawDataAccessor?: ((...params: any[]) => any)|null, formattedDataAccessor?: ((...params: any[]) => any)|null, filterFuncs?: ((...params: any[]) => any)|null, selectedItems?: any): any;
117
-
118
116
  public openDialog(colIndex: number, runtimeDialogOptions?: RowFilteringPlugin.FilterDialogOptions|null): void;
119
117
 
120
118
  public enableEmptySegmentFiltering(enabled?: boolean|null): void;