@syncfusion/ej2-pivotview 20.1.61 → 20.2.39

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.
Files changed (142) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/ej2-pivotview.umd.min.js +2 -2
  3. package/dist/ej2-pivotview.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-pivotview.es2015.js +391 -157
  5. package/dist/es6/ej2-pivotview.es2015.js.map +1 -1
  6. package/dist/es6/ej2-pivotview.es5.js +403 -166
  7. package/dist/es6/ej2-pivotview.es5.js.map +1 -1
  8. package/dist/global/ej2-pivotview.min.js +2 -2
  9. package/dist/global/ej2-pivotview.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/helpers/e2e/index.js +9 -7
  12. package/helpers/e2e/pivotfieldlist.js +47 -31
  13. package/helpers/e2e/pivotview.js +68 -52
  14. package/package.json +22 -22
  15. package/src/base/engine.js +13 -11
  16. package/src/base/olap/engine.js +14 -2
  17. package/src/base/olap/mdx-query.js +1 -1
  18. package/src/common/actions/event-base.d.ts +4 -2
  19. package/src/common/actions/event-base.js +18 -10
  20. package/src/common/actions/field-list.js +2 -1
  21. package/src/common/actions/pivot-button.js +4 -4
  22. package/src/common/base/constant.d.ts +8 -0
  23. package/src/common/base/constant.js +8 -0
  24. package/src/common/base/css-constant.d.ts +16 -0
  25. package/src/common/base/css-constant.js +16 -0
  26. package/src/common/calculatedfield/calculated-field.js +24 -15
  27. package/src/common/conditionalformatting/conditional-formatting.js +5 -5
  28. package/src/common/grouping-bar/grouping-bar.js +1 -1
  29. package/src/common/popups/aggregate-menu.js +4 -3
  30. package/src/common/popups/drillthrough-dialog.js +5 -4
  31. package/src/common/popups/error-dialog.js +1 -1
  32. package/src/common/popups/filter-dialog.js +25 -14
  33. package/src/common/popups/formatting-dialog.js +2 -2
  34. package/src/common/popups/grouping.js +14 -7
  35. package/src/common/popups/toolbar.js +11 -10
  36. package/src/pivotchart/base/pivotchart.js +16 -6
  37. package/src/pivotfieldlist/base/field-list-model.d.ts +5 -0
  38. package/src/pivotfieldlist/base/field-list.d.ts +4 -0
  39. package/src/pivotfieldlist/base/field-list.js +11 -6
  40. package/src/pivotfieldlist/renderer/dialog-renderer.js +17 -9
  41. package/src/pivotfieldlist/renderer/tree-renderer.d.ts +4 -0
  42. package/src/pivotfieldlist/renderer/tree-renderer.js +102 -8
  43. package/src/pivotview/actions/virtualscroll.d.ts +1 -0
  44. package/src/pivotview/actions/virtualscroll.js +61 -32
  45. package/src/pivotview/base/pivotview-model.d.ts +7 -0
  46. package/src/pivotview/base/pivotview.d.ts +6 -0
  47. package/src/pivotview/base/pivotview.js +25 -12
  48. package/src/pivotview/renderer/render.js +4 -1
  49. package/styles/bootstrap-dark.css +166 -33
  50. package/styles/bootstrap.css +166 -33
  51. package/styles/bootstrap4.css +167 -37
  52. package/styles/bootstrap5-dark.css +210 -46
  53. package/styles/bootstrap5.css +210 -46
  54. package/styles/fabric-dark.css +166 -33
  55. package/styles/fabric.css +166 -33
  56. package/styles/fluent-dark.css +184 -50
  57. package/styles/fluent.css +184 -50
  58. package/styles/highcontrast-light.css +166 -33
  59. package/styles/highcontrast.css +166 -33
  60. package/styles/material-dark.css +166 -33
  61. package/styles/material.css +166 -33
  62. package/styles/pivotfieldlist/_bootstrap-dark-definition.scss +10 -0
  63. package/styles/pivotfieldlist/_bootstrap-definition.scss +10 -0
  64. package/styles/pivotfieldlist/_bootstrap4-definition.scss +11 -1
  65. package/styles/pivotfieldlist/_bootstrap5-definition.scss +15 -6
  66. package/styles/pivotfieldlist/_fabric-dark-definition.scss +10 -1
  67. package/styles/pivotfieldlist/_fabric-definition.scss +10 -0
  68. package/styles/pivotfieldlist/_fluent-definition.scss +18 -8
  69. package/styles/pivotfieldlist/_fusionnew-definition.scss +189 -0
  70. package/styles/pivotfieldlist/_highcontrast-definition.scss +10 -0
  71. package/styles/pivotfieldlist/_highcontrast-light-definition.scss +10 -0
  72. package/styles/pivotfieldlist/_layout.scss +31 -15
  73. package/styles/pivotfieldlist/_material-dark-definition.scss +10 -0
  74. package/styles/pivotfieldlist/_material-definition.scss +10 -0
  75. package/styles/pivotfieldlist/_material3-definition.scss +190 -0
  76. package/styles/pivotfieldlist/_tailwind-definition.scss +19 -10
  77. package/styles/pivotfieldlist/_theme.scss +142 -7
  78. package/styles/pivotfieldlist/bootstrap-dark.css +147 -11
  79. package/styles/pivotfieldlist/bootstrap.css +147 -11
  80. package/styles/pivotfieldlist/bootstrap4.css +148 -12
  81. package/styles/pivotfieldlist/bootstrap5-dark.css +152 -16
  82. package/styles/pivotfieldlist/bootstrap5.css +152 -16
  83. package/styles/pivotfieldlist/fabric-dark.css +147 -11
  84. package/styles/pivotfieldlist/fabric.css +147 -11
  85. package/styles/pivotfieldlist/fluent-dark.css +155 -19
  86. package/styles/pivotfieldlist/fluent.css +155 -19
  87. package/styles/pivotfieldlist/highcontrast-light.css +147 -11
  88. package/styles/pivotfieldlist/highcontrast.css +147 -11
  89. package/styles/pivotfieldlist/icons/_bootstrap-dark.scss +5 -0
  90. package/styles/pivotfieldlist/icons/_bootstrap.scss +5 -0
  91. package/styles/pivotfieldlist/icons/_bootstrap4.scss +5 -0
  92. package/styles/pivotfieldlist/icons/_bootstrap5.scss +5 -0
  93. package/styles/pivotfieldlist/icons/_fabric-dark.scss +5 -0
  94. package/styles/pivotfieldlist/icons/_fabric.scss +5 -0
  95. package/styles/pivotfieldlist/icons/_fluent.scss +5 -0
  96. package/styles/pivotfieldlist/icons/_fusionnew.scss +352 -0
  97. package/styles/pivotfieldlist/icons/_highcontrast-light.scss +5 -0
  98. package/styles/pivotfieldlist/icons/_highcontrast.scss +5 -0
  99. package/styles/pivotfieldlist/icons/_material-dark.scss +5 -0
  100. package/styles/pivotfieldlist/icons/_material.scss +4 -0
  101. package/styles/pivotfieldlist/icons/_material3.scss +352 -0
  102. package/styles/pivotfieldlist/icons/_tailwind-dark.scss +4 -0
  103. package/styles/pivotfieldlist/icons/_tailwind.scss +4 -0
  104. package/styles/pivotfieldlist/material-dark.css +147 -11
  105. package/styles/pivotfieldlist/material.css +147 -11
  106. package/styles/pivotfieldlist/tailwind-dark.css +156 -22
  107. package/styles/pivotfieldlist/tailwind.css +157 -22
  108. package/styles/pivotview/_bootstrap-dark-definition.scss +4 -2
  109. package/styles/pivotview/_bootstrap-definition.scss +4 -2
  110. package/styles/pivotview/_bootstrap4-definition.scss +4 -2
  111. package/styles/pivotview/_bootstrap5-definition.scss +9 -8
  112. package/styles/pivotview/_fabric-dark-definition.scss +4 -1
  113. package/styles/pivotview/_fabric-definition.scss +4 -2
  114. package/styles/pivotview/_fluent-definition.scss +11 -9
  115. package/styles/pivotview/_fusionnew-definition.scss +131 -0
  116. package/styles/pivotview/_highcontrast-definition.scss +4 -2
  117. package/styles/pivotview/_highcontrast-light-definition.scss +4 -2
  118. package/styles/pivotview/_layout.scss +3 -17
  119. package/styles/pivotview/_material-dark-definition.scss +4 -1
  120. package/styles/pivotview/_material-definition.scss +4 -2
  121. package/styles/pivotview/_material3-definition.scss +131 -0
  122. package/styles/pivotview/_tailwind-definition.scss +8 -5
  123. package/styles/pivotview/_theme.scss +47 -27
  124. package/styles/pivotview/bootstrap-dark.css +19 -22
  125. package/styles/pivotview/bootstrap.css +19 -22
  126. package/styles/pivotview/bootstrap4.css +19 -25
  127. package/styles/pivotview/bootstrap5-dark.css +58 -30
  128. package/styles/pivotview/bootstrap5.css +58 -30
  129. package/styles/pivotview/fabric-dark.css +19 -22
  130. package/styles/pivotview/fabric.css +19 -22
  131. package/styles/pivotview/fluent-dark.css +29 -31
  132. package/styles/pivotview/fluent.css +29 -31
  133. package/styles/pivotview/highcontrast-light.css +19 -22
  134. package/styles/pivotview/highcontrast.css +19 -22
  135. package/styles/pivotview/icons/_fusionnew.scss +183 -0
  136. package/styles/pivotview/icons/_material3.scss +183 -0
  137. package/styles/pivotview/material-dark.css +19 -22
  138. package/styles/pivotview/material.css +19 -22
  139. package/styles/pivotview/tailwind-dark.css +27 -31
  140. package/styles/pivotview/tailwind.css +27 -31
  141. package/styles/tailwind-dark.css +183 -53
  142. package/styles/tailwind.css +184 -53
@@ -1134,14 +1134,14 @@ var PivotChart = /** @class */ (function () {
1134
1134
  var aggregateType = this.parent.dataType === 'olap' ? '' : this.parent.localeObj.getConstant(measureField.aggregateType);
1135
1135
  var measureAggregatedName = (this.parent.dataType === 'olap' ? '' : aggregateType + ' ' +
1136
1136
  this.parent.localeObj.getConstant('of') + ' ') + measureField.caption;
1137
- var formattedText = this.accumulationType.indexOf(this.parent.chartSettings.chartSeries.type) < 0 ?
1138
- args.text.split('<b>')[1].split('</b>')[0] : this.engineModule.pivotValues[rowIndex][colIndex].formattedText;
1137
+ var formattedText = this.engineModule.pivotValues[rowIndex][colIndex].formattedText;
1139
1138
  var formatField = this.engineModule.formatFields[measureField.id];
1140
- var formattedValue = ((formatField && formatField.format && formatField.format.toLowerCase().match(/n|p|c/) !== null &&
1139
+ var valueFormat = this.engineModule.getFormattedValue(args.point.y, measureField.id, formattedText);
1140
+ var formattedValue = (formatField && formatField.format && formatField.format.toLowerCase().match(/n|p|c/) !== null &&
1141
1141
  this.chartSettings.useGroupingSeparator) ? this.parent.dataType === 'olap' ?
1142
- this.engineModule.getFormattedValue(args.point.y, measureField.id, formattedText) :
1143
- this.parent.engineModule.getFormattedValue(args.point.y, measureField.id).formattedText :
1144
- formattedText);
1142
+ valueFormat.toString() :
1143
+ valueFormat.formattedText :
1144
+ formattedText;
1145
1145
  var columnText = (args.series.name ? args.series.name.split(' | ')[0] : args.data.seriesName.split(' | ')[0]);
1146
1146
  var rowText = args.point.x;
1147
1147
  if (this.parent.tooltipTemplate && this.parent.getTooltipTemplate() !== undefined || this.chartSettings.tooltip.template) {
@@ -1470,6 +1470,16 @@ var PivotChart = /** @class */ (function () {
1470
1470
  args.text = '';
1471
1471
  }
1472
1472
  }
1473
+ if (args.axis.name !== 'primaryXAxis') {
1474
+ var formatField = this.engineModule.formatFields[args.axis.name];
1475
+ var valueFormat = this.engineModule.getFormattedValue(args.value, args.axis.name, args.text);
1476
+ var formattedValue = ((formatField && formatField.format && formatField.format.toLowerCase().match(/n|p|c/) !== null &&
1477
+ this.chartSettings.useGroupingSeparator) ? this.parent.dataType === 'olap' ?
1478
+ valueFormat.toString() :
1479
+ valueFormat.formattedText :
1480
+ args.value.toString());
1481
+ args.text = formattedValue;
1482
+ }
1473
1483
  this.parent.trigger(events.chartAxisLabelRender, args);
1474
1484
  };
1475
1485
  PivotChart.prototype.multiLevelLabelClick = function (args) {
@@ -86,6 +86,11 @@ export interface PivotFieldListModel extends ComponentModel{
86
86
  */
87
87
  allowCalculatedField?: boolean;
88
88
 
89
+ /**
90
+ * It enables the search option in the field list UI, which can be used to search specific fields at runtime.
91
+ */
92
+ enableFieldSearching?: boolean;
93
+
89
94
  /**
90
95
  * Allows you to create a pivot button with "Values" as a caption used to display in the field list UI.
91
96
  * It helps you to plot the value fields to either column or row axis during runtime.
@@ -190,6 +190,10 @@ export declare class PivotFieldList extends Component<HTMLElement> implements IN
190
190
  * @default false
191
191
  */
192
192
  allowCalculatedField: boolean;
193
+ /**
194
+ * It enables the search option in the field list UI, which can be used to search specific fields at runtime.
195
+ */
196
+ enableFieldSearching: boolean;
193
197
  /**
194
198
  * Allows you to create a pivot button with "Values" as a caption used to display in the field list UI.
195
199
  * It helps you to plot the value fields to either column or row axis during runtime.
@@ -635,6 +635,8 @@ var PivotFieldList = /** @class */ (function (_super) {
635
635
  }
636
636
  requireRefresh = true;
637
637
  break;
638
+ case 'enableFieldSearching':
639
+ this.refresh();
638
640
  }
639
641
  if (requireRefresh) {
640
642
  this.fieldListRender();
@@ -678,7 +680,7 @@ var PivotFieldList = /** @class */ (function (_super) {
678
680
  customProperties.enableValueSorting = _this.staticPivotGridModule ?
679
681
  _this.staticPivotGridModule.enableValueSorting : _this.enableValueSorting;
680
682
  if (_this.dataSourceSettings.mode !== 'Server') {
681
- _this.engineModule.renderEngine(_this.dataSourceSettings, customProperties, _this.getValueCellInfo.bind(_this), _this.getHeaderSortInfo.bind(_this));
683
+ _this.engineModule.renderEngine(_this.dataSourceSettings, customProperties, _this.aggregateCellInfo ? _this.getValueCellInfo.bind(_this) : undefined, _this.onHeadersSort ? _this.getHeaderSortInfo.bind(_this) : undefined);
682
684
  }
683
685
  _this.pivotFieldList = _this.engineModule.fieldList;
684
686
  var eventArgs = {
@@ -694,7 +696,7 @@ var PivotFieldList = /** @class */ (function (_super) {
694
696
  });
695
697
  }
696
698
  else if (_this.dataType === 'olap') {
697
- _this.olapEngineModule.renderEngine(_this.dataSourceSettings, _this.frameCustomProperties(_this.olapEngineModule.fieldListData, _this.olapEngineModule.fieldList), _this.getHeaderSortInfo.bind(_this));
699
+ _this.olapEngineModule.renderEngine(_this.dataSourceSettings, _this.frameCustomProperties(_this.olapEngineModule.fieldListData, _this.olapEngineModule.fieldList), _this.onHeadersSort ? _this.getHeaderSortInfo.bind(_this) : undefined);
698
700
  _this.pivotFieldList = _this.olapEngineModule.fieldList;
699
701
  var eventArgs = {
700
702
  pivotFieldList: _this.pivotFieldList,
@@ -772,10 +774,10 @@ var PivotFieldList = /** @class */ (function (_super) {
772
774
  this.fieldListSpinnerElement = this.element.querySelector('.e-pivotfieldlist-container');
773
775
  }
774
776
  if (this.spinnerTemplate) {
775
- createSpinner({ target: this.fieldListSpinnerElement, template: this.spinnerTemplate }, this.createElement);
777
+ createSpinner({ target: this.fieldListSpinnerElement, template: this.spinnerTemplate, cssClass: this.cssClass ? this.cssClass : undefined }, this.createElement);
776
778
  }
777
779
  else {
778
- createSpinner({ target: this.fieldListSpinnerElement }, this.createElement);
780
+ createSpinner({ target: this.fieldListSpinnerElement, cssClass: this.cssClass ? this.cssClass : undefined }, this.createElement);
779
781
  }
780
782
  var args;
781
783
  args = {
@@ -935,7 +937,7 @@ var PivotFieldList = /** @class */ (function (_super) {
935
937
  pivot.lastFilterInfo = {};
936
938
  }
937
939
  else {
938
- pivot.engineModule.renderEngine(pivot.dataSourceSettings, customProperties, pivot.getValueCellInfo.bind(pivot), pivot.getHeaderSortInfo.bind(pivot));
940
+ pivot.engineModule.renderEngine(pivot.dataSourceSettings, customProperties, pivot.aggregateCellInfo ? pivot.getValueCellInfo.bind(pivot) : undefined, pivot.onHeadersSort ? pivot.getHeaderSortInfo.bind(pivot) : undefined);
939
941
  }
940
942
  }
941
943
  }
@@ -1033,7 +1035,7 @@ var PivotFieldList = /** @class */ (function (_super) {
1033
1035
  }
1034
1036
  }
1035
1037
  else {
1036
- pivot.olapEngineModule.renderEngine(pivot.dataSourceSettings, customProperties, pivot.getHeaderSortInfo.bind(pivot));
1038
+ pivot.olapEngineModule.renderEngine(pivot.dataSourceSettings, customProperties, pivot.onHeadersSort ? pivot.getHeaderSortInfo.bind(pivot) : undefined);
1037
1039
  }
1038
1040
  pivot.lastSortInfo = {};
1039
1041
  pivot.lastAggregationInfo = {};
@@ -1282,6 +1284,9 @@ var PivotFieldList = /** @class */ (function (_super) {
1282
1284
  __decorate([
1283
1285
  Property(false)
1284
1286
  ], PivotFieldList.prototype, "allowCalculatedField", void 0);
1287
+ __decorate([
1288
+ Property(false)
1289
+ ], PivotFieldList.prototype, "enableFieldSearching", void 0);
1285
1290
  __decorate([
1286
1291
  Property(false)
1287
1292
  ], PivotFieldList.prototype, "showValuesButton", void 0);
@@ -43,6 +43,12 @@ var DialogRenderer = /** @class */ (function () {
43
43
  if (this.parent.cssClass) {
44
44
  addClass([fieldListWrappper], this.parent.cssClass);
45
45
  }
46
+ if (this.parent.enableFieldSearching) {
47
+ addClass([fieldListWrappper], cls.FIELD_LIST_SEARCH_MODE_CLASS);
48
+ }
49
+ else {
50
+ removeClass([fieldListWrappper], cls.FIELD_LIST_SEARCH_MODE_CLASS);
51
+ }
46
52
  this.parentElement = createElement('div', { className: cls.CONTAINER_CLASS });
47
53
  this.parent.element.appendChild(fieldListWrappper);
48
54
  if (this.parent.isAdaptive) {
@@ -87,13 +93,14 @@ var DialogRenderer = /** @class */ (function () {
87
93
  checked: true,
88
94
  enableRtl: this.parent.enableRtl,
89
95
  locale: this.parent.locale,
90
- change: this.onCheckChange.bind(this)
96
+ change: this.onCheckChange.bind(this),
97
+ cssClass: this.parent.cssClass
91
98
  });
92
99
  this.deferUpdateCheckBox.isStringTemplate = true;
93
100
  this.deferUpdateCheckBox.appendTo('#' + this.parent.element.id + 'DeferUpdateCheckBox');
94
101
  this.deferUpdateApplyButton = new Button({
95
102
  cssClass: cls.DEFER_APPLY_BUTTON + ' ' + cls.DEFER_UPDATE_BUTTON + (this.parent.renderMode === 'Popup' ?
96
- (' ' + cls.BUTTON_FLAT_CLASS) : ''),
103
+ (' ' + cls.BUTTON_FLAT_CLASS) : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
97
104
  content: this.parent.localeObj.getConstant('apply'),
98
105
  enableRtl: this.parent.enableRtl,
99
106
  locale: this.parent.locale,
@@ -106,7 +113,7 @@ var DialogRenderer = /** @class */ (function () {
106
113
  }
107
114
  this.deferUpdateCancelButton = new Button({
108
115
  cssClass: cls.DEFER_CANCEL_BUTTON + ' ' + cls.CANCEL_BUTTON_CLASS + (this.parent.renderMode === 'Popup' ?
109
- (' ' + cls.BUTTON_FLAT_CLASS) : ''),
116
+ (' ' + cls.BUTTON_FLAT_CLASS) : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
110
117
  content: this.parent.allowDeferLayoutUpdate ? this.parent.localeObj.getConstant('cancel') :
111
118
  this.parent.localeObj.getConstant('close'),
112
119
  enableRtl: this.parent.enableRtl, isPrimary: !this.parent.allowDeferLayoutUpdate, locale: this.parent.locale
@@ -224,7 +231,7 @@ var DialogRenderer = /** @class */ (function () {
224
231
  var buttons = [{
225
232
  click: this.showFieldListDialog.bind(this),
226
233
  buttonModel: {
227
- cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,
234
+ cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
228
235
  iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,
229
236
  isPrimary: true
230
237
  }
@@ -232,7 +239,7 @@ var DialogRenderer = /** @class */ (function () {
232
239
  click: this.showCalculatedField.bind(this),
233
240
  buttonModel: {
234
241
  cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +
235
- ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,
242
+ ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
236
243
  iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS, enableRtl: this.parent.enableRtl,
237
244
  isPrimary: true
238
245
  }
@@ -370,7 +377,8 @@ var DialogRenderer = /** @class */ (function () {
370
377
  height: '100%',
371
378
  enableRtl: this.parent.enableRtl,
372
379
  locale: this.parent.locale,
373
- selected: this.tabSelect.bind(this)
380
+ selected: this.tabSelect.bind(this),
381
+ cssClass: this.parent.cssClass
374
382
  });
375
383
  if (this.parent.renderMode === 'Fixed') {
376
384
  layoutFooter.appendChild(this.createAddButton());
@@ -416,7 +424,7 @@ var DialogRenderer = /** @class */ (function () {
416
424
  }
417
425
  });
418
426
  var calculateField = new Button({
419
- cssClass: cls.CALCULATED_FIELD_CLASS + ' ' + cls.ICON_DISABLE,
427
+ cssClass: cls.CALCULATED_FIELD_CLASS + ' ' + cls.ICON_DISABLE + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
420
428
  content: this.parent.localeObj.getConstant('CalculatedField'),
421
429
  enableRtl: this.parent.enableRtl, locale: this.parent.locale
422
430
  });
@@ -436,12 +444,12 @@ var DialogRenderer = /** @class */ (function () {
436
444
  var calculatedButton = createElement('div', {});
437
445
  var calculateField = new Button({
438
446
  cssClass: cls.ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +
439
- ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE,
447
+ ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + ' ' + cls.ICON_DISABLE + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
440
448
  iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,
441
449
  enableRtl: this.parent.enableRtl, locale: this.parent.locale
442
450
  });
443
451
  var fieldList = new Button({
444
- cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS,
452
+ cssClass: cls.ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + cls.BUTTON_SMALL_CLASS + ' ' + cls.BUTTON_ROUND_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
445
453
  iconCss: cls.ICON + ' ' + cls.ADD_ICON_CLASS,
446
454
  enableRtl: this.parent.enableRtl, locale: this.parent.locale
447
455
  });
@@ -15,6 +15,10 @@ export declare class TreeViewRenderer implements IAction {
15
15
  private editorSearch;
16
16
  private selectedNodes;
17
17
  private fieldListSort;
18
+ private fieldSearch;
19
+ private nonSearchList;
20
+ private isSearching;
21
+ private parentIDs;
18
22
  /** Constructor for render module
19
23
  * @param {PivotFieldList} parent - Instance of field list.
20
24
  */
@@ -4,7 +4,7 @@ import * as cls from '../../common/base/css-constant';
4
4
  import * as events from '../../common/base/constant';
5
5
  import { TreeView } from '@syncfusion/ej2-navigations';
6
6
  import { Dialog } from '@syncfusion/ej2-popups';
7
- import { MaskedTextBox } from '@syncfusion/ej2-inputs';
7
+ import { MaskedTextBox, TextBox } from '@syncfusion/ej2-inputs';
8
8
  import { PivotUtil } from '../../base/util';
9
9
  /**
10
10
  * Module to render Field List
@@ -16,6 +16,8 @@ var TreeViewRenderer = /** @class */ (function () {
16
16
  */
17
17
  function TreeViewRenderer(parent) {
18
18
  this.selectedNodes = [];
19
+ this.isSearching = false;
20
+ this.parentIDs = [];
19
21
  this.parent = parent;
20
22
  this.addEventListener();
21
23
  }
@@ -36,15 +38,42 @@ var TreeViewRenderer = /** @class */ (function () {
36
38
  className: cls.FIELD_HEADER_CLASS,
37
39
  innerHTML: this.parent.localeObj.getConstant('allFields')
38
40
  });
39
- var treeOuterDiv = createElement('div', { className: cls.FIELD_LIST_TREE_CLASS + '-outer-div' });
41
+ var searchWrapper = createElement('div', {
42
+ id: this.parent.element.id + '_SearchDiv', attrs: { 'tabindex': '-1' },
43
+ className: cls.FIELD_LIST_SEARCH_CLASS
44
+ });
45
+ var searchInput = createElement('input', { attrs: { 'type': 'text' } });
46
+ searchWrapper.appendChild(searchInput);
47
+ this.fieldSearch = new TextBox({
48
+ placeholder: this.parent.localeObj.getConstant('search'),
49
+ enableRtl: this.parent.enableRtl,
50
+ locale: this.parent.locale,
51
+ cssClass: cls.FIELD_LIST_SEARCH_INPUT_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
52
+ input: this.textChange.bind(this),
53
+ showClearButton: true
54
+ });
55
+ this.fieldSearch.isStringTemplate = true;
56
+ this.fieldSearch.appendTo(searchInput);
57
+ this.fieldSearch.addIcon('append', cls.FIELD_LIST_SEARCH_ICON_CLASS + ' ' + cls.ICON);
58
+ var promptDiv = createElement('div', {
59
+ className: cls.EMPTY_MEMBER_CLASS + ' ' + cls.ICON_DISABLE,
60
+ innerHTML: this.parent.localeObj.getConstant('noMatches')
61
+ });
62
+ var treeOuterDiv = createElement('div', {
63
+ className: cls.FIELD_LIST_TREE_OUTER_DIV_CLASS + ' ' + cls.TREE_CONTAINER
64
+ });
40
65
  this.treeViewElement = createElement('div', {
41
66
  id: this.parent.element.id + '_TreeView',
42
67
  className: cls.FIELD_LIST_CLASS + ' ' + (this.parent.dataType === 'olap' ? cls.OLAP_FIELD_LIST_CLASS : '')
43
68
  });
44
- var fieldHeaderWrappper = createElement('div', { className: 'e-field-header-container' });
69
+ var fieldHeaderWrappper = createElement('div', { className: cls.FIELD_HEADER_CONTAINER_CLASS });
45
70
  fieldHeaderWrappper.appendChild(treeHeader);
46
71
  fieldTable.appendChild(fieldHeaderWrappper);
47
72
  this.updateSortElements(fieldHeaderWrappper);
73
+ if (this.parent.enableFieldSearching) {
74
+ fieldTable.appendChild(searchWrapper);
75
+ fieldTable.appendChild(promptDiv);
76
+ }
48
77
  treeOuterDiv.appendChild(this.treeViewElement);
49
78
  fieldTable.appendChild(treeOuterDiv);
50
79
  this.parentElement.appendChild(fieldTable);
@@ -168,6 +197,40 @@ var TreeViewRenderer = /** @class */ (function () {
168
197
  if (args.node.querySelector('.' + cls.NODE_CHECK_CLASS)) {
169
198
  addClass([args.node.querySelector('.' + cls.LIST_TEXT_CLASS)], cls.LIST_SELECT_CLASS);
170
199
  }
200
+ if (this.parent.enableFieldSearching && this.isSearching) {
201
+ var liElement = args.node;
202
+ if (this.parent.dataType === 'olap') {
203
+ var id = liElement.getAttribute('data-uid');
204
+ var searchItem = this.parent.pivotCommon.eventBase.searchListItem;
205
+ for (var i = 0; i < this.parentIDs.length; i++) {
206
+ if (id === this.parentIDs[i]) {
207
+ addClass([liElement], cls.ICON_DISABLE);
208
+ }
209
+ for (var _i = 0, searchItem_1 = searchItem; _i < searchItem_1.length; _i++) {
210
+ var li2 = searchItem_1[_i];
211
+ var parentID = this.parent.pivotCommon.eventBase.getParentIDs(this.fieldTable, li2.getAttribute('data-uid'), []);
212
+ if (PivotUtil.inArray(id, parentID) > -1) {
213
+ removeClass([liElement], cls.ICON_DISABLE);
214
+ break;
215
+ }
216
+ }
217
+ }
218
+ }
219
+ else {
220
+ for (var i = 0; i < this.nonSearchList.length; i++) {
221
+ if (liElement.textContent === this.nonSearchList[i].textContent) {
222
+ addClass([liElement], cls.ICON_DISABLE);
223
+ break;
224
+ }
225
+ else {
226
+ if (liElement.innerText === this.nonSearchList[i].textContent) {
227
+ addClass([liElement], cls.ICON_DISABLE);
228
+ break;
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
171
234
  };
172
235
  TreeViewRenderer.prototype.updateOlapTreeNode = function (args) {
173
236
  var allowDrag = false;
@@ -223,12 +286,12 @@ var TreeViewRenderer = /** @class */ (function () {
223
286
  buttons: [{
224
287
  click: this.closeTreeDialog.bind(this),
225
288
  buttonModel: {
226
- cssClass: cls.CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel')
289
+ cssClass: cls.CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel')
227
290
  }
228
291
  }, {
229
292
  click: this.onFieldAdd.bind(this),
230
293
  buttonModel: {
231
- cssClass: cls.OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('add'),
294
+ cssClass: cls.OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('add'),
232
295
  isPrimary: true
233
296
  }
234
297
  }],
@@ -257,7 +320,7 @@ var TreeViewRenderer = /** @class */ (function () {
257
320
  });
258
321
  var editorSearch = createElement('input', { attrs: { 'type': 'text' } });
259
322
  searchWrapper.appendChild(editorSearch);
260
- var treeOuterDiv = createElement('div', { className: cls.EDITOR_TREE_CONTAINER_CLASS + '-outer-div' });
323
+ var treeOuterDiv = createElement('div', { className: cls.FIELD_LIST_TREE_OUTER_DIV_CLASS });
261
324
  var treeViewContainer = createElement('div', {
262
325
  className: cls.EDITOR_TREE_CONTAINER_CLASS + ' ' + (this.parent.dataType === 'olap' ? 'e-olap-field-list-tree' : '')
263
326
  });
@@ -267,7 +330,7 @@ var TreeViewRenderer = /** @class */ (function () {
267
330
  placeholder: this.parent.localeObj.getConstant('search'),
268
331
  enableRtl: this.parent.enableRtl,
269
332
  locale: this.parent.locale,
270
- cssClass: cls.EDITOR_SEARCH_CLASS,
333
+ cssClass: cls.EDITOR_SEARCH_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
271
334
  change: this.textChange.bind(this)
272
335
  });
273
336
  this.editorSearch.isStringTemplate = true;
@@ -303,14 +366,41 @@ var TreeViewRenderer = /** @class */ (function () {
303
366
  };
304
367
  TreeViewRenderer.prototype.textChange = function (e) {
305
368
  this.parent.pivotCommon.eventBase.searchTreeNodes(e, this.fieldTable, true);
306
- var promptDiv = this.fieldDialog.element.querySelector('.' + cls.EMPTY_MEMBER_CLASS);
369
+ var promptDiv;
370
+ var treeOuterDiv;
371
+ if (this.parent.isAdaptive) {
372
+ promptDiv = this.fieldDialog.element.querySelector('.' + cls.EMPTY_MEMBER_CLASS);
373
+ }
374
+ else {
375
+ promptDiv = this.parentElement.querySelector('.' + cls.EMPTY_MEMBER_CLASS);
376
+ treeOuterDiv = this.parentElement.querySelector('.' + cls.TREE_CONTAINER);
377
+ }
307
378
  var liList = [].slice.call(this.fieldTable.element.querySelectorAll('li'));
308
379
  var disabledList = [].slice.call(this.fieldTable.element.querySelectorAll('li.' + cls.ICON_DISABLE));
309
380
  if (liList.length === disabledList.length) {
310
381
  removeClass([promptDiv], cls.ICON_DISABLE);
382
+ if (!this.parent.isAdaptive) {
383
+ addClass([treeOuterDiv], cls.ICON_DISABLE);
384
+ removeClass([treeOuterDiv], cls.FIELD_LIST_TREE_OUTER_DIV_SEARCH_CLASS);
385
+ }
311
386
  }
312
387
  else {
313
388
  addClass([promptDiv], cls.ICON_DISABLE);
389
+ if (!this.parent.isAdaptive) {
390
+ removeClass([treeOuterDiv], cls.ICON_DISABLE);
391
+ addClass([treeOuterDiv], cls.FIELD_LIST_TREE_OUTER_DIV_SEARCH_CLASS);
392
+ }
393
+ }
394
+ this.isSearching = disabledList.length > 0 ? true : false;
395
+ this.nonSearchList = disabledList;
396
+ if (this.parent.dataType === 'olap') {
397
+ this.parentIDs = [];
398
+ for (var i = 0; i < liList.length; i++) {
399
+ if (liList[i].classList.contains("e-level-1")) {
400
+ var id = liList[i].getAttribute('data-uid');
401
+ this.parentIDs.push(id);
402
+ }
403
+ }
314
404
  }
315
405
  };
316
406
  TreeViewRenderer.prototype.dragStart = function (args) {
@@ -965,6 +1055,10 @@ var TreeViewRenderer = /** @class */ (function () {
965
1055
  this.editorSearch.destroy();
966
1056
  this.editorSearch = null;
967
1057
  }
1058
+ if (this.fieldSearch && !this.fieldSearch.isDestroyed) {
1059
+ this.fieldSearch.destroy();
1060
+ this.fieldSearch = null;
1061
+ }
968
1062
  };
969
1063
  return TreeViewRenderer;
970
1064
  }());
@@ -32,6 +32,7 @@ export declare class VirtualScroll {
32
32
  private onCustomScrollbarScroll;
33
33
  private onTouchScroll;
34
34
  private update;
35
+ private enginePopulatedEventMethod;
35
36
  private setPageXY;
36
37
  private common;
37
38
  private onHorizondalScroll;
@@ -1,6 +1,8 @@
1
1
  import { EventHandler, setStyleAttribute, Browser } from '@syncfusion/ej2-base';
2
2
  import { contentReady } from '../../common/base/constant';
3
3
  import * as cls from '../../common/base/css-constant';
4
+ import { PivotUtil } from '../../base/util';
5
+ import * as events from '../../common/base/constant';
4
6
  /**
5
7
  * `VirtualScroll` module is used to handle scrolling behavior.
6
8
  */
@@ -145,8 +147,12 @@ var VirtualScroll = /** @class */ (function () {
145
147
  };
146
148
  };
147
149
  VirtualScroll.prototype.update = function (mHdr, mCont, top, left, e) {
150
+ var _this = this;
148
151
  this.parent.isScrolling = true;
149
152
  var engine = this.parent.dataType === 'pivot' ? this.parent.engineModule : this.parent.olapEngineModule;
153
+ var args = {
154
+ dataSourceSettings: PivotUtil.getClonedDataSourceSettings(this.parent.dataSourceSettings)
155
+ };
150
156
  if (this.parent.pageSettings && engine.pageSettings) {
151
157
  if (this.direction === 'vertical') {
152
158
  var rowValues = this.parent.dataType === 'pivot' ?
@@ -158,25 +164,29 @@ var VirtualScroll = /** @class */ (function () {
158
164
  // this.parent.hideWaitingPopup();
159
165
  return;
160
166
  }
167
+ this.parent.actionObj.actionName = events.verticalScroll;
168
+ this.parent.actionBeginMethod();
161
169
  this.parent.showWaitingPopup();
162
170
  this.parent.scrollPosObject.vertical = section;
163
- engine.pageSettings.rowCurrentPage = section > 1 ? section : 1;
164
- var rowStartPos = 0;
165
- if (this.parent.dataType === 'pivot') {
166
- if (this.parent.dataSourceSettings.mode === 'Server') {
167
- this.parent.getEngine('onScroll', null, null, null, null, null, null);
171
+ this.parent.pageSettings.rowCurrentPage = engine.pageSettings.rowCurrentPage = section > 1 ? section : 1;
172
+ var rowStartPos_1 = 0;
173
+ this.parent.trigger(events.enginePopulating, args, function (observedArgs) {
174
+ if (_this.parent.dataType === 'pivot') {
175
+ if (_this.parent.dataSourceSettings.mode === 'Server') {
176
+ _this.parent.getEngine('onScroll', null, null, null, null, null, null);
177
+ }
178
+ else {
179
+ _this.parent.engineModule.generateGridData(_this.parent.dataSourceSettings, true, _this.parent.engineModule.headerCollection);
180
+ rowStartPos_1 = _this.parent.engineModule.rowStartPos;
181
+ }
168
182
  }
169
183
  else {
170
- this.parent.engineModule.generateGridData(this.parent.dataSourceSettings, true, this.parent.engineModule.headerCollection);
171
- rowStartPos = this.parent.engineModule.rowStartPos;
184
+ _this.parent.olapEngineModule.scrollPage('scroll');
185
+ rowStartPos_1 = _this.parent.olapEngineModule.pageRowStartPos;
172
186
  }
173
- }
174
- else {
175
- this.parent.olapEngineModule.scrollPage('scroll');
176
- rowStartPos = this.parent.olapEngineModule.pageRowStartPos;
177
- }
178
- this.parent.pivotValues = engine.pivotValues;
179
- var exactPage = Math.ceil(rowStartPos / (this.parent.pageSettings.rowSize * rowValues));
187
+ _this.enginePopulatedEventMethod(engine);
188
+ });
189
+ var exactPage = Math.ceil(rowStartPos_1 / (this.parent.pageSettings.rowSize * rowValues));
180
190
  var pos = exactSize * exactPage -
181
191
  (engine.rowFirstLvl * rowValues * this.parent.gridSettings.rowHeight);
182
192
  this.parent.scrollPosObject.verticalSection = pos;
@@ -191,32 +201,51 @@ var VirtualScroll = /** @class */ (function () {
191
201
  // this.parent.hideWaitingPopup();
192
202
  return;
193
203
  }
204
+ this.parent.actionObj.actionName = events.horizontalScroll;
205
+ this.parent.actionBeginMethod();
194
206
  this.parent.showWaitingPopup();
195
- var pivot = this.parent;
196
- pivot.scrollPosObject.horizontal = section;
197
- engine.pageSettings.columnCurrentPage = section > 1 ? section : 1;
198
- var colStartPos = 0;
199
- if (pivot.dataType === 'pivot') {
200
- if (this.parent.dataSourceSettings.mode === 'Server') {
201
- this.parent.getEngine('onScroll', null, null, null, null, null, null);
207
+ var pivot_1 = this.parent;
208
+ pivot_1.scrollPosObject.horizontal = section;
209
+ this.parent.pageSettings.columnCurrentPage = engine.pageSettings.columnCurrentPage = section > 1 ? section : 1;
210
+ var colStartPos_1 = 0;
211
+ this.parent.trigger(events.enginePopulating, args, function (observedArgs) {
212
+ if (pivot_1.dataType === 'pivot') {
213
+ if (_this.parent.dataSourceSettings.mode === 'Server') {
214
+ _this.parent.getEngine('onScroll', null, null, null, null, null, null);
215
+ }
216
+ else {
217
+ pivot_1.engineModule.generateGridData(pivot_1.dataSourceSettings, true, pivot_1.engineModule.headerCollection);
218
+ colStartPos_1 = pivot_1.engineModule.colStartPos;
219
+ }
202
220
  }
203
221
  else {
204
- pivot.engineModule.generateGridData(pivot.dataSourceSettings, true, pivot.engineModule.headerCollection);
205
- colStartPos = pivot.engineModule.colStartPos;
222
+ pivot_1.olapEngineModule.scrollPage('scroll');
223
+ colStartPos_1 = pivot_1.olapEngineModule.pageColStartPos;
206
224
  }
207
- }
208
- else {
209
- pivot.olapEngineModule.scrollPage('scroll');
210
- colStartPos = pivot.olapEngineModule.pageColStartPos;
211
- }
212
- pivot.pivotValues = engine.pivotValues;
213
- var exactPage = Math.ceil(colStartPos / (pivot.pageSettings.columnSize * colValues));
225
+ _this.enginePopulatedEventMethod(engine);
226
+ });
227
+ var exactPage = Math.ceil(colStartPos_1 / (pivot_1.pageSettings.columnSize * colValues));
214
228
  var pos = exactSize * exactPage - (engine.colFirstLvl *
215
- colValues * pivot.gridSettings.columnWidth);
216
- pivot.scrollPosObject.horizontalSection = pos;
229
+ colValues * pivot_1.gridSettings.columnWidth);
230
+ pivot_1.scrollPosObject.horizontalSection = pos;
231
+ }
232
+ this.parent.actionObj.actionName = this.parent.getActionCompleteName();
233
+ if (this.parent.actionObj.actionName) {
234
+ this.parent.actionCompleteMethod();
217
235
  }
218
236
  }
219
237
  };
238
+ VirtualScroll.prototype.enginePopulatedEventMethod = function (engine, control) {
239
+ var _this = this;
240
+ var pivot = control ? control : this.parent;
241
+ var eventArgs = {
242
+ dataSourceSettings: pivot.dataSourceSettings,
243
+ pivotValues: pivot.pivotValues
244
+ };
245
+ pivot.trigger(events.enginePopulated, eventArgs, function (observedArgs) {
246
+ _this.parent.pivotValues = engine.pivotValues;
247
+ });
248
+ };
220
249
  VirtualScroll.prototype.setPageXY = function () {
221
250
  var _this = this;
222
251
  return function (e) {
@@ -565,6 +565,13 @@ export interface PivotViewModel extends ComponentModel{
565
565
  */
566
566
  allowCalculatedField?: boolean;
567
567
 
568
+ /**
569
+ * It enables the search option in the field list UI, which can be used to search specific fields at runtime.
570
+ * > This option is only available when the pivot table's built-in popup field list is enabled using the `showFieldList` property.
571
+ * @default false
572
+ */
573
+ enableFieldSearching?: boolean;
574
+
568
575
  /**
569
576
  * Allows you to sort individual value field and its aggregated values either in row or column axis to ascending or descending order.
570
577
  * You can sort the values by clicking directly on the value field header positioned either in row or column axis of the pivot table.
@@ -799,6 +799,12 @@ export declare class PivotView extends Component<HTMLElement> implements INotify
799
799
  * @default false
800
800
  */
801
801
  allowCalculatedField: boolean;
802
+ /**
803
+ * It enables the search option in the field list UI, which can be used to search specific fields at runtime.
804
+ * > This option is only available when the pivot table's built-in popup field list is enabled using the `showFieldList` property.
805
+ * @default false
806
+ */
807
+ enableFieldSearching: boolean;
802
808
  /**
803
809
  * Allows you to sort individual value field and its aggregated values either in row or column axis to ascending or descending order.
804
810
  * You can sort the values by clicking directly on the value field header positioned either in row or column axis of the pivot table.