@syncfusion/ej2-pivotview 20.1.57 → 20.2.36

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 (145) hide show
  1. package/CHANGELOG.md +28 -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 +462 -193
  5. package/dist/es6/ej2-pivotview.es2015.js.map +1 -1
  6. package/dist/es6/ej2-pivotview.es5.js +466 -196
  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.d.ts +1 -1
  16. package/src/base/engine.js +126 -78
  17. package/src/base/olap/mdx-query.js +1 -1
  18. package/src/base/util.js +2 -2
  19. package/src/common/actions/event-base.d.ts +4 -2
  20. package/src/common/actions/event-base.js +45 -10
  21. package/src/common/actions/field-list.js +2 -1
  22. package/src/common/actions/pivot-button.js +4 -4
  23. package/src/common/base/css-constant.d.ts +16 -0
  24. package/src/common/base/css-constant.js +16 -0
  25. package/src/common/calculatedfield/calculated-field.js +24 -15
  26. package/src/common/conditionalformatting/conditional-formatting.js +5 -5
  27. package/src/common/grouping-bar/grouping-bar.js +1 -1
  28. package/src/common/popups/aggregate-menu.js +4 -3
  29. package/src/common/popups/drillthrough-dialog.js +10 -10
  30. package/src/common/popups/error-dialog.js +1 -1
  31. package/src/common/popups/filter-dialog.js +25 -14
  32. package/src/common/popups/formatting-dialog.js +2 -2
  33. package/src/common/popups/grouping.js +14 -7
  34. package/src/common/popups/toolbar.d.ts +1 -0
  35. package/src/common/popups/toolbar.js +26 -16
  36. package/src/pivotchart/base/pivotchart.js +3 -0
  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 +5 -0
  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/drill-through.js +2 -2
  44. package/src/pivotview/actions/excel-export.js +2 -1
  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 +9 -3
  48. package/src/pivotview/model/chartsettings-model.d.ts +2 -2
  49. package/src/pivotview/model/chartsettings.d.ts +2 -2
  50. package/src/pivotview/model/chartsettings.js +2 -2
  51. package/src/pivotview/renderer/render.js +18 -3
  52. package/styles/bootstrap-dark.css +165 -32
  53. package/styles/bootstrap.css +165 -32
  54. package/styles/bootstrap4.css +166 -36
  55. package/styles/bootstrap5-dark.css +209 -45
  56. package/styles/bootstrap5.css +209 -45
  57. package/styles/fabric-dark.css +165 -32
  58. package/styles/fabric.css +165 -32
  59. package/styles/fluent-dark.css +183 -49
  60. package/styles/fluent.css +183 -49
  61. package/styles/highcontrast-light.css +165 -32
  62. package/styles/highcontrast.css +165 -32
  63. package/styles/material-dark.css +165 -32
  64. package/styles/material.css +165 -32
  65. package/styles/pivotfieldlist/_bootstrap-dark-definition.scss +10 -0
  66. package/styles/pivotfieldlist/_bootstrap-definition.scss +10 -0
  67. package/styles/pivotfieldlist/_bootstrap4-definition.scss +11 -1
  68. package/styles/pivotfieldlist/_bootstrap5-definition.scss +15 -6
  69. package/styles/pivotfieldlist/_fabric-dark-definition.scss +10 -1
  70. package/styles/pivotfieldlist/_fabric-definition.scss +10 -0
  71. package/styles/pivotfieldlist/_fluent-definition.scss +18 -8
  72. package/styles/pivotfieldlist/_fusionnew-definition.scss +189 -0
  73. package/styles/pivotfieldlist/_highcontrast-definition.scss +10 -0
  74. package/styles/pivotfieldlist/_highcontrast-light-definition.scss +10 -0
  75. package/styles/pivotfieldlist/_layout.scss +30 -14
  76. package/styles/pivotfieldlist/_material-dark-definition.scss +10 -0
  77. package/styles/pivotfieldlist/_material-definition.scss +10 -0
  78. package/styles/pivotfieldlist/_material3-definition.scss +189 -0
  79. package/styles/pivotfieldlist/_tailwind-definition.scss +19 -10
  80. package/styles/pivotfieldlist/_theme.scss +142 -7
  81. package/styles/pivotfieldlist/bootstrap-dark.css +146 -10
  82. package/styles/pivotfieldlist/bootstrap.css +146 -10
  83. package/styles/pivotfieldlist/bootstrap4.css +147 -11
  84. package/styles/pivotfieldlist/bootstrap5-dark.css +151 -15
  85. package/styles/pivotfieldlist/bootstrap5.css +151 -15
  86. package/styles/pivotfieldlist/fabric-dark.css +146 -10
  87. package/styles/pivotfieldlist/fabric.css +146 -10
  88. package/styles/pivotfieldlist/fluent-dark.css +154 -18
  89. package/styles/pivotfieldlist/fluent.css +154 -18
  90. package/styles/pivotfieldlist/highcontrast-light.css +146 -10
  91. package/styles/pivotfieldlist/highcontrast.css +146 -10
  92. package/styles/pivotfieldlist/icons/_bootstrap-dark.scss +5 -0
  93. package/styles/pivotfieldlist/icons/_bootstrap.scss +5 -0
  94. package/styles/pivotfieldlist/icons/_bootstrap4.scss +5 -0
  95. package/styles/pivotfieldlist/icons/_bootstrap5.scss +5 -0
  96. package/styles/pivotfieldlist/icons/_fabric-dark.scss +5 -0
  97. package/styles/pivotfieldlist/icons/_fabric.scss +5 -0
  98. package/styles/pivotfieldlist/icons/_fluent.scss +5 -0
  99. package/styles/pivotfieldlist/icons/_fusionnew.scss +352 -0
  100. package/styles/pivotfieldlist/icons/_highcontrast-light.scss +5 -0
  101. package/styles/pivotfieldlist/icons/_highcontrast.scss +5 -0
  102. package/styles/pivotfieldlist/icons/_material-dark.scss +5 -0
  103. package/styles/pivotfieldlist/icons/_material.scss +4 -0
  104. package/styles/pivotfieldlist/icons/_material3.scss +352 -0
  105. package/styles/pivotfieldlist/icons/_tailwind-dark.scss +4 -0
  106. package/styles/pivotfieldlist/icons/_tailwind.scss +4 -0
  107. package/styles/pivotfieldlist/material-dark.css +146 -10
  108. package/styles/pivotfieldlist/material.css +146 -10
  109. package/styles/pivotfieldlist/tailwind-dark.css +155 -21
  110. package/styles/pivotfieldlist/tailwind.css +156 -21
  111. package/styles/pivotview/_bootstrap-dark-definition.scss +4 -2
  112. package/styles/pivotview/_bootstrap-definition.scss +4 -2
  113. package/styles/pivotview/_bootstrap4-definition.scss +4 -2
  114. package/styles/pivotview/_bootstrap5-definition.scss +9 -8
  115. package/styles/pivotview/_fabric-dark-definition.scss +4 -1
  116. package/styles/pivotview/_fabric-definition.scss +4 -2
  117. package/styles/pivotview/_fluent-definition.scss +11 -9
  118. package/styles/pivotview/_fusionnew-definition.scss +131 -0
  119. package/styles/pivotview/_highcontrast-definition.scss +4 -2
  120. package/styles/pivotview/_highcontrast-light-definition.scss +4 -2
  121. package/styles/pivotview/_layout.scss +3 -17
  122. package/styles/pivotview/_material-dark-definition.scss +4 -1
  123. package/styles/pivotview/_material-definition.scss +4 -2
  124. package/styles/pivotview/_material3-definition.scss +131 -0
  125. package/styles/pivotview/_tailwind-definition.scss +8 -5
  126. package/styles/pivotview/_theme.scss +47 -27
  127. package/styles/pivotview/bootstrap-dark.css +19 -22
  128. package/styles/pivotview/bootstrap.css +19 -22
  129. package/styles/pivotview/bootstrap4.css +19 -25
  130. package/styles/pivotview/bootstrap5-dark.css +58 -30
  131. package/styles/pivotview/bootstrap5.css +58 -30
  132. package/styles/pivotview/fabric-dark.css +19 -22
  133. package/styles/pivotview/fabric.css +19 -22
  134. package/styles/pivotview/fluent-dark.css +29 -31
  135. package/styles/pivotview/fluent.css +29 -31
  136. package/styles/pivotview/highcontrast-light.css +19 -22
  137. package/styles/pivotview/highcontrast.css +19 -22
  138. package/styles/pivotview/icons/_fusionnew.scss +183 -0
  139. package/styles/pivotview/icons/_material3.scss +183 -0
  140. package/styles/pivotview/material-dark.css +19 -22
  141. package/styles/pivotview/material.css +19 -22
  142. package/styles/pivotview/tailwind-dark.css +27 -31
  143. package/styles/pivotview/tailwind.css +27 -31
  144. package/styles/tailwind-dark.css +182 -52
  145. package/styles/tailwind.css +183 -52
@@ -3,7 +3,7 @@ import { DataManager, Deferred, Query } from '@syncfusion/ej2-data';
3
3
  import { Dialog, Tooltip, createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';
4
4
  import { ColumnChooser, CommandColumn, ContextMenu, Edit, ExcelExport, Freeze, Grid, Page, PdfExport, Reorder, Resize, Selection, Toolbar, VirtualScroll, getObject, headerRefreshed, setStyleAndAttributes } from '@syncfusion/ej2-grids';
5
5
  import { Accordion, ContextMenu as ContextMenu$1, Menu, Tab, Toolbar as Toolbar$1, TreeView } from '@syncfusion/ej2-navigations';
6
- import { ColorPicker, MaskedTextBox, NumericTextBox } from '@syncfusion/ej2-inputs';
6
+ import { ColorPicker, MaskedTextBox, NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';
7
7
  import { CheckBoxSelection, DropDownList, MultiSelect } from '@syncfusion/ej2-dropdowns';
8
8
  import { DateTimePicker } from '@syncfusion/ej2-calendars';
9
9
  import { DropDownButton } from '@syncfusion/ej2-splitbuttons';
@@ -862,9 +862,9 @@ class PivotUtil {
862
862
  }
863
863
  else if (type === true) {
864
864
  sortOrder === 'Ascending' ?
865
- (sortMembersOrder.sort((a, b) => (a.actualText === 'Grand Total' || b.actualText === 'Grand Total') ? 0 : (Number(a.actualText.toString().match(/\d+/)[0]) > Number(b.actualText.toString().match(/\d+/)[0])) ? 1 : ((Number(b.actualText.toString().match(/\d+/)[0]) > Number(a.actualText.toString().match(/\d+/)[0])) ? -1 : 0))) :
865
+ (sortMembersOrder.sort((a, b) => (a.actualText === 'Grand Total' || b.actualText === 'Grand Total') ? 0 : (a.actualText === 'Out of Range') ? 1 : (b.actualText === 'Out of Range') ? -1 : (Number(a.actualText.toString().match(/\d+/)) > Number(b.actualText.toString().match(/\d+/))) ? 1 : ((Number(b.actualText.toString().match(/\d+/)) > Number(a.actualText.toString().match(/\d+/))) ? -1 : 0))) :
866
866
  sortOrder === 'Descending' ?
867
- (sortMembersOrder.sort((a, b) => (a.actualText === 'Grand Total' || b.actualText === 'Grand Total') ? 0 : (Number(a.actualText.toString().match(/\d+/)[0]) < Number(b.actualText.toString().match(/\d+/)[0])) ? 1 : ((Number(b.actualText.toString().match(/\d+/)[0]) < Number(a.actualText.toString().match(/\d+/)[0])) ? -1 : 0))) :
867
+ (sortMembersOrder.sort((a, b) => (a.actualText === 'Grand Total' || b.actualText === 'Grand Total') ? 0 : (a.actualText === 'Out of Range') ? -1 : (b.actualText === 'Out of Range') ? 1 : (Number(a.actualText.toString().match(/\d+/)) < Number(b.actualText.toString().match(/\d+/))) ? 1 : ((Number(b.actualText.toString().match(/\d+/)) < Number(a.actualText.toString().match(/\d+/))) ? -1 : 0))) :
868
868
  sortMembersOrder;
869
869
  }
870
870
  else {
@@ -2536,8 +2536,8 @@ class PivotEngine {
2536
2536
  let mPos = this.fieldList[measure].index;
2537
2537
  let aggregate = this.fieldList[measure].aggregateType;
2538
2538
  this.rawIndexObject = {};
2539
- value = (type === 'row' ? this.getAggregateValue(rows[i].index, columns.indexObject, mPos, aggregate) :
2540
- this.getAggregateValue(columns.index, rows[i].indexObject, mPos, aggregate));
2539
+ value = (type === 'row' ? this.getAggregateValue(rows[i].index, columns.indexObject, mPos, aggregate, false) :
2540
+ this.getAggregateValue(columns.index, rows[i].indexObject, mPos, aggregate, false));
2541
2541
  let cellDetails = {
2542
2542
  fieldName: measure,
2543
2543
  row: rows[i],
@@ -3202,68 +3202,92 @@ class PivotEngine {
3202
3202
  return headers;
3203
3203
  }
3204
3204
  performFilterCommonUpdate(filterItem, headersInfo, addPos) {
3205
- let rawHeaders = headersInfo.axis === 'row' ? this.rMembers : this.cMembers;
3206
- let filterObjects = {};
3207
- for (let item of this.filterMembers) {
3208
- filterObjects[item] = item;
3209
- }
3210
- if (this.fieldFilterMem[filterItem.name]) {
3211
- rawHeaders = this.performFilterDeletion(headersInfo.headers, filterItem, headersInfo, filterObjects, 0);
3212
- }
3213
- if (addPos.length > 0 && headersInfo.fields.length > 0) {
3214
- this.frameHeaderObjectsCollection = true;
3215
- if (headersInfo.fields.filter((item) => { return item.showNoDataItems; }).length > 0) {
3216
- for (let i = 0; i < this.data.length; i++) {
3217
- addPos.push(i);
3205
+ if (headersInfo.axis === 'row' || headersInfo.axis === 'column') {
3206
+ let rawHeaders = headersInfo.axis === 'row' ? this.rMembers : this.cMembers;
3207
+ let filterObjects = {};
3208
+ for (let item of this.filterMembers) {
3209
+ filterObjects[item] = item;
3210
+ }
3211
+ if (this.fieldFilterMem[filterItem.name]) {
3212
+ rawHeaders = this.performFilterDeletion(headersInfo.headers, filterItem, headersInfo, filterObjects, 0);
3213
+ }
3214
+ if (addPos.length > 0 && headersInfo.fields.length > 0) {
3215
+ this.frameHeaderObjectsCollection = true;
3216
+ if (headersInfo.fields.filter((item) => { return item.showNoDataItems; }).length > 0) {
3217
+ for (let i = 0; i < this.data.length; i++) {
3218
+ addPos.push(i);
3219
+ }
3220
+ //addPos = (this.data as any).map((item, pos) => { return pos; });
3221
+ }
3222
+ /* eslint-disable */
3223
+ this.headerObjectsCollection['parent'] = this.getIndexedHeaders(headersInfo.fields, this.data, 0, addPos, headersInfo.axis, '');
3224
+ rawHeaders = this.performFilterAddition(rawHeaders, headersInfo.fields, headersInfo);
3225
+ let headerNames = {};
3226
+ for (let header of rawHeaders) {
3227
+ headerNames[header.valueSort.levelName.toString()] = header.valueSort.levelName.toString();
3228
+ }
3229
+ let excessHeaders = this.headerObjectsCollection['parent'].filter((header) => {
3230
+ return !headerNames[header.valueSort.levelName.toString()];
3231
+ });
3232
+ let grandHeader = rawHeaders.filter((item) => { return item.type === 'grand sum'; });
3233
+ if (grandHeader.length > 0) {
3234
+ rawHeaders.pop();
3235
+ }
3236
+ /* eslint-enable */
3237
+ rawHeaders = this.getSortedHeaders(rawHeaders.concat(excessHeaders), this.fieldList[headersInfo.fields[0].name].sort).concat(grandHeader);
3238
+ if (headersInfo.axis === 'row') {
3239
+ this.cMembers = this.getIndexedHeaders(this.columns, this.data, 0, this.filterMembers, 'column', '');
3240
+ this.insertAllMember(this.cMembers, this.filterMembers, '', 'column');
3241
+ }
3242
+ else {
3243
+ this.rMembers = this.getIndexedHeaders(this.rows, this.data, 0, this.filterMembers, 'row', '');
3244
+ this.insertAllMember(this.rMembers, this.filterMembers, '', 'row');
3218
3245
  }
3219
- //addPos = (this.data as any).map((item, pos) => { return pos; });
3220
3246
  }
3221
- /* eslint-disable */
3222
- this.headerObjectsCollection['parent'] = this.getIndexedHeaders(headersInfo.fields, this.data, 0, addPos, headersInfo.axis, '');
3223
- rawHeaders = this.performFilterAddition(rawHeaders, headersInfo.fields, headersInfo);
3224
- let headerNames = {};
3225
- for (let header of rawHeaders) {
3226
- headerNames[header.valueSort.levelName.toString()] = header.valueSort.levelName.toString();
3227
- }
3228
- let excessHeaders = this.headerObjectsCollection['parent'].filter((header) => {
3229
- return !headerNames[header.valueSort.levelName.toString()];
3230
- });
3231
- let grandHeader = rawHeaders.filter((item) => { return item.type === 'grand sum'; });
3232
- if (grandHeader.length > 0) {
3233
- rawHeaders.pop();
3247
+ if (headersInfo.axis === 'row') {
3248
+ this.rowCount = 0;
3234
3249
  }
3235
- /* eslint-enable */
3236
- rawHeaders = this.getSortedHeaders(rawHeaders.concat(excessHeaders), this.fieldList[headersInfo.fields[0].name].sort).concat(grandHeader);
3250
+ else {
3251
+ this.columnCount = 0;
3252
+ }
3253
+ this.updateHeadersCount(rawHeaders, headersInfo.axis, 0, headersInfo.fields, 'plus', false);
3237
3254
  if (headersInfo.axis === 'row') {
3238
- this.cMembers = this.getIndexedHeaders(this.columns, this.data, 0, this.filterMembers, 'column', '');
3239
- this.insertAllMember(this.cMembers, this.filterMembers, '', 'column');
3255
+ if (headersInfo.position > 0) {
3256
+ this.insertPosition(this.rows, this.data, 0, this.filterMembers, 'row', '', rawHeaders);
3257
+ }
3258
+ this.insertTotalPosition(rawHeaders);
3259
+ this.rMembers = this.headerCollection.rowHeaders = rawHeaders;
3260
+ this.headerCollection.rowHeadersCount = this.rowCount;
3240
3261
  }
3241
3262
  else {
3242
- this.rMembers = this.getIndexedHeaders(this.rows, this.data, 0, this.filterMembers, 'row', '');
3243
- this.insertAllMember(this.rMembers, this.filterMembers, '', 'row');
3263
+ if (headersInfo.position > 0) {
3264
+ this.insertPosition(this.columns, this.data, 0, this.filterMembers, 'column', '', rawHeaders);
3265
+ }
3266
+ this.insertTotalPosition(rawHeaders);
3267
+ this.cMembers = this.headerCollection.columnHeaders = rawHeaders;
3268
+ this.headerCollection.columnHeadersCount = this.columnCount;
3244
3269
  }
3245
3270
  }
3246
- if (headersInfo.axis === 'row') {
3247
- this.rowCount = 0;
3248
- }
3249
3271
  else {
3272
+ let showNoDataItems = (this.rows[0] && this.rows[0].showNoDataItems) || (this.columns[0] && this.columns[0].showNoDataItems);
3273
+ if (this.rows.length > 0) {
3274
+ this.rMembers = this.getIndexedHeaders(this.rows, this.data, 0, showNoDataItems ? addPos : this.filterMembers, 'row', '');
3275
+ }
3276
+ if (this.columns.length > 0) {
3277
+ this.cMembers = this.getIndexedHeaders(this.columns, this.data, 0, showNoDataItems ? addPos : this.filterMembers, 'column', '');
3278
+ }
3279
+ this.insertAllMembersCommon();
3280
+ this.rowCount = 0;
3250
3281
  this.columnCount = 0;
3251
- }
3252
- this.updateHeadersCount(rawHeaders, headersInfo.axis, 0, headersInfo.fields, 'plus', false);
3253
- if (headersInfo.axis === 'row') {
3254
- if (headersInfo.position > 0) {
3255
- this.insertPosition(this.rows, this.data, 0, this.filterMembers, 'row', '', rawHeaders);
3282
+ this.updateHeadersCount(this.cMembers, 'column', 0, this.columns, 'plus', false);
3283
+ this.updateHeadersCount(this.rMembers, 'row', 0, this.rows, 'plus', false);
3284
+ if (showNoDataItems) {
3285
+ this.insertPosition(this.rows, this.data, 0, this.filterMembers, 'row', '', this.rMembers);
3286
+ this.insertPosition(this.columns, this.data, 0, this.filterMembers, 'column', '', this.cMembers);
3256
3287
  }
3257
- this.insertTotalPosition(rawHeaders);
3258
- this.rMembers = this.headerCollection.rowHeaders = rawHeaders;
3288
+ this.headerCollection.rowHeaders = this.rMembers;
3259
3289
  this.headerCollection.rowHeadersCount = this.rowCount;
3260
- }
3261
- else {
3262
- if (headersInfo.position > 0) {
3263
- this.insertPosition(this.columns, this.data, 0, this.filterMembers, 'column', '', rawHeaders);
3264
- }
3265
- this.insertTotalPosition(rawHeaders);
3266
- this.cMembers = this.headerCollection.columnHeaders = rawHeaders;
3290
+ this.headerCollection.columnHeaders = this.cMembers;
3267
3291
  this.headerCollection.columnHeadersCount = this.columnCount;
3268
3292
  }
3269
3293
  this.applyValueSorting();
@@ -3384,15 +3408,13 @@ class PivotEngine {
3384
3408
  }
3385
3409
  else {
3386
3410
  alphaNumbervalue.push(headers[i]);
3411
+ break;
3387
3412
  }
3388
3413
  }
3389
- if (stringValue.length > 1) {
3390
- stringValue = this.sortHeaders(fieldName, childrens, headers, childrens.sort, childrens.type);
3391
- }
3392
3414
  if (alphaNumbervalue.length > 0) {
3393
3415
  alphaNumbervalue = this.sortHeaders(fieldName, childrens, headers, childrens.sort, childrens.isAlphanumeric);
3394
3416
  }
3395
- return headers = nullValue.concat(alphaNumbervalue, stringValue);
3417
+ return headers;
3396
3418
  }
3397
3419
  else {
3398
3420
  return this.sortHeaders(fieldName, childrens, headers, sortOrder, childrens.type);
@@ -3549,7 +3571,7 @@ class PivotEngine {
3549
3571
  }
3550
3572
  else {
3551
3573
  this.rawIndexObject = {};
3552
- let value = this.getAggregateValue(header.index, member.indexObject, mIndex, mType);
3574
+ let value = this.getAggregateValue(header.index, member.indexObject, mIndex, mType, false);
3553
3575
  let cellDetails = {
3554
3576
  fieldName: this.fields[mIndex],
3555
3577
  row: header,
@@ -3945,7 +3967,7 @@ class PivotEngine {
3945
3967
  this.columnCount -= (!(this.showSubTotals && this.showColumnSubTotals && field.showSubTotals) && axis === 'column') ?
3946
3968
  this.colValuesLength : 0;
3947
3969
  let filterPosition = hierarchy[iln].index;
3948
- hierarchy[iln].members = this.getIndexedHeaders(keys, data, keyInd + 1, (filterPosition === undefined ? [] : filterPosition), axis, parentMember);
3970
+ hierarchy[iln].members = this.getIndexedHeaders(keys, data, keyInd + 1, (filterPosition === undefined ? [] : filterPosition), axis, parentMember, valueFil);
3949
3971
  if (this.frameHeaderObjectsCollection) {
3950
3972
  this.headerObjectsCollection[parentMember] = hierarchy[iln].members;
3951
3973
  }
@@ -3955,32 +3977,55 @@ class PivotEngine {
3955
3977
  if (this.enableSort) {
3956
3978
  // return new DataManager(hierarchy as JSON[]).executeLocal(new Query().sortBy('actualText', childrens.sort.toLowerCase()));
3957
3979
  if (isDateType) {
3958
- return this.sortHeaders(fieldName, childrens, hierarchy, childrens.sort, childrens.type);
3980
+ return this.sortHeaders(fieldName, childrens, hierarchy, childrens.sort, 'date');
3959
3981
  }
3960
3982
  else {
3961
3983
  if (childrens.type === 'number' && hierarchy.length > 0 && (typeof (hierarchy[0].actualText) === 'string')) {
3962
3984
  let stringValue = [];
3985
+ let outOfRange;
3963
3986
  let alphaNumbervalue = [];
3964
3987
  let nullValue = [];
3965
3988
  for (let i = 0; i < hierarchy.length; i++) {
3966
3989
  if (isNaN(hierarchy[i].actualText.toString().charAt(0))) {
3967
3990
  stringValue.push(hierarchy[i]);
3991
+ if (!outOfRange && childrens.sort !== 'None') {
3992
+ if (hierarchy[i].actualText === 'Out of Range') {
3993
+ outOfRange = hierarchy[i];
3994
+ hierarchy.splice(i, 1);
3995
+ }
3996
+ }
3968
3997
  }
3969
3998
  else if (hierarchy[i].actualText === "") {
3970
3999
  nullValue.push(hierarchy[i]);
3971
4000
  }
3972
4001
  else {
4002
+ this.fieldList[fieldName].isAlphanumeric = true;
3973
4003
  alphaNumbervalue.push(hierarchy[i]);
4004
+ break;
3974
4005
  }
3975
4006
  }
3976
- if (stringValue.length > 0) {
3977
- stringValue = this.sortHeaders(fieldName, childrens, hierarchy, childrens.sort, childrens.type);
4007
+ if (outOfRange) {
4008
+ if (childrens.sort === 'Ascending') {
4009
+ if (hierarchy[0].actualText === 'Grand Total') {
4010
+ hierarchy.splice(1, 0, outOfRange);
4011
+ }
4012
+ else {
4013
+ hierarchy.splice(0, 0, outOfRange);
4014
+ }
4015
+ }
4016
+ else {
4017
+ if (hierarchy[hierarchy.length - 1].actualText === 'Grand Total') {
4018
+ hierarchy.splice(hierarchy.length - 1, 0, outOfRange);
4019
+ }
4020
+ else {
4021
+ hierarchy.splice(hierarchy.length, 0, outOfRange);
4022
+ }
4023
+ }
3978
4024
  }
3979
4025
  if (alphaNumbervalue.length > 0) {
3980
- this.fieldList[fieldName].isAlphanumeric = true;
3981
- alphaNumbervalue = this.sortHeaders(fieldName, childrens, hierarchy, childrens.sort, childrens.isAlphanumeric);
4026
+ this.sortHeaders(fieldName, childrens, hierarchy, childrens.sort, childrens.isAlphanumeric);
3982
4027
  }
3983
- return hierarchy = nullValue.concat(alphaNumbervalue, stringValue);
4028
+ return hierarchy;
3984
4029
  }
3985
4030
  else {
3986
4031
  return this.sortHeaders(fieldName, childrens, hierarchy, childrens.sort, childrens.type);
@@ -4818,7 +4863,7 @@ class PivotEngine {
4818
4863
  let selectedColumnValue = 0;
4819
4864
  if (selectedColumnValues.length === 0) {
4820
4865
  let selectedRow = this.getSelectedRow(currentSet.rowHeaders, rowheads);
4821
- selectedColumnValue = this.getAggregateValue(selectedRow.index, selectedColumn.indexObject, this.fieldList[name].index, headers.type);
4866
+ selectedColumnValue = this.getAggregateValue(selectedRow.index, selectedColumn.indexObject, this.fieldList[name].index, headers.type, false);
4822
4867
  }
4823
4868
  else {
4824
4869
  selectedColumnValue = selectedColumnValues[index[0]].value;
@@ -4873,7 +4918,7 @@ class PivotEngine {
4873
4918
  // let cVal: number = currentSet.value / (selectedRowValues[i[1]] as IAxisSet).value;
4874
4919
  let selectedRowValue = 0;
4875
4920
  if (selectedRowValues.length === 0 && activeValues) {
4876
- selectedRowValue = this.getAggregateValue(activeValues.index, colheads[i[1] - 1].indexObject, this.fieldList[name].index, headers.type);
4921
+ selectedRowValue = this.getAggregateValue(activeValues.index, colheads[i[1] - 1].indexObject, this.fieldList[name].index, headers.type, false);
4877
4922
  }
4878
4923
  else {
4879
4924
  selectedRowValue = selectedRowValues[i[1]] ? selectedRowValues[i[1]].actualValue : 0;
@@ -4917,7 +4962,7 @@ class PivotEngine {
4917
4962
  let selectedColValue = 0;
4918
4963
  if (selectedColumnValues.length === 0) {
4919
4964
  let selectedRow = this.getSelectedRow(currentSet.rowHeaders, rowheads);
4920
- selectedColValue = this.getAggregateValue(selectedRow.index, selectedCol.indexObject, this.fieldList[name].index, headers.type);
4965
+ selectedColValue = this.getAggregateValue(selectedRow.index, selectedCol.indexObject, this.fieldList[name].index, headers.type, false);
4921
4966
  }
4922
4967
  else {
4923
4968
  selectedColValue = selectedColumnValues[i[0]].value;
@@ -4946,7 +4991,7 @@ class PivotEngine {
4946
4991
  rowheads[rlen].level === item.level && currentSet.axis === 'value' &&
4947
4992
  currentSet.actualText === name) {
4948
4993
  if (rowheads[rlen].type !== 'grand sum') {
4949
- cVal += (!currentSet.showSubTotals && !(!isNullOrUndefined(currentSet.actualValue) && isNaN(currentSet.actualValue))) ? currentSet.actualValue : currentSet.value;
4994
+ cVal += (!currentSet.showSubTotals && !(!isNullOrUndefined(currentSet.actualValue) && isNaN(currentSet.actualValue))) ? currentSet.actualValue : (!isNullOrUndefined(currentSet.value) && !isNaN(currentSet.value)) ? currentSet.value : null;
4950
4995
  currentSet.formattedText = currentSet.showSubTotals ? (cVal === 0 && (currentSet.actualValue && currentSet.actualValue !== 0) ? '' : this.getFormattedValue(cVal, name).formattedText) : currentSet.formattedText;
4951
4996
  if (!this.aggregatedValueMatrix[rlen]) {
4952
4997
  this.aggregatedValueMatrix[rlen] = [];
@@ -5046,7 +5091,7 @@ class PivotEngine {
5046
5091
  let valueContent = ['cVal', 'rTotalVal', 'cTotalVal', 'gTotalVal'];
5047
5092
  let i = 0;
5048
5093
  for (let rIndex of gTotalIndex) {
5049
- totalValues[valueContent[i]] = this.getAggregateValue((rIndex[0]).index, (rIndex[1]).indexObject, mPos, aggregate);
5094
+ totalValues[valueContent[i]] = this.getAggregateValue((rIndex[0]).index, (rIndex[1]).indexObject, mPos, aggregate, i === 0 ? false : true);
5050
5095
  i++;
5051
5096
  }
5052
5097
  let val = ((totalValues.cVal) * (totalValues.gTotalVal)) / ((totalValues.rTotalVal) * (totalValues.cTotalVal));
@@ -5066,7 +5111,7 @@ class PivotEngine {
5066
5111
  let valueContent = ['cVal', 'gTotalVal'];
5067
5112
  let i = 0;
5068
5113
  for (let rIndex of gTotalIndex) {
5069
- totalValues[valueContent[i]] = this.getAggregateValue((rIndex[0]).index, (rIndex[1]).indexObject, mPos, aggregate);
5114
+ totalValues[valueContent[i]] = this.getAggregateValue((rIndex[0]).index, (rIndex[1]).indexObject, mPos, aggregate, i === 0 ? false : true);
5070
5115
  i++;
5071
5116
  }
5072
5117
  let val = ((totalValues.cVal) / (totalValues.gTotalVal));
@@ -5077,7 +5122,7 @@ class PivotEngine {
5077
5122
  }
5078
5123
  break;
5079
5124
  default:
5080
- let val = this.getAggregateValue(rows[rln].index, columns[cln].indexObject, mPos, aggregate);
5125
+ let val = this.getAggregateValue(rows[rln].index, columns[cln].indexObject, mPos, aggregate, false);
5081
5126
  value = (rows[rln].members.length > 0 && rows[rln].hasChild && rows[rln].isDrilled && ((!isNullOrUndefined(rows[rln].showSubTotals) && !rows[rln].showSubTotals) ||
5082
5127
  !this.showSubTotals || !this.showRowSubTotals)) ? undefined : val;
5083
5128
  actualValue = val;
@@ -5115,6 +5160,7 @@ class PivotEngine {
5115
5160
  isNaN(value) && !isNullOrUndefined(value) &&
5116
5161
  (['PopulationStDev', 'SampleStDev', 'PopulationVar', 'SampleVar']).indexOf(aggregate) !== -1) {
5117
5162
  formattedText = '#DIV/0!';
5163
+ value = 0;
5118
5164
  }
5119
5165
  //dln = data[tnum].length;
5120
5166
  formattedText = (cellDetails.skipFormatting ? isNullOrUndefined(value) ?
@@ -5425,7 +5471,7 @@ class PivotEngine {
5425
5471
  }
5426
5472
  }
5427
5473
  /* eslint-disable */
5428
- getAggregateValue(rowIndex, columnIndex, value, type) {
5474
+ getAggregateValue(rowIndex, columnIndex, value, type, isGrandTotal) {
5429
5475
  //rowIndex = rowIndex.sort();
5430
5476
  //columnIndex = columnIndex.sort();
5431
5477
  let rlt = rowIndex.length;
@@ -5603,7 +5649,7 @@ class PivotEngine {
5603
5649
  let value = aggregateField[aggregatedValue.formula];
5604
5650
  if (value === undefined) {
5605
5651
  let type = aggregatedValue.type;
5606
- value = this.getAggregateValue(rowIndex, columnIndex, aggregatedValue.index, type);
5652
+ value = this.getAggregateValue(rowIndex, columnIndex, aggregatedValue.index, type, false);
5607
5653
  aggregateField[aggregatedValue.formula] = value;
5608
5654
  }
5609
5655
  actualFormula = (actualFormula).replace(aggregatedValue.formula, String(value));
@@ -5617,7 +5663,9 @@ class PivotEngine {
5617
5663
  while (rowIndex[ri] !== undefined) {
5618
5664
  if (columnIndex[rowIndex[ri]] !== undefined) {
5619
5665
  isValueExist = true;
5620
- this.rawIndexObject[rowIndex[ri]] = rowIndex[ri];
5666
+ if (!isGrandTotal) {
5667
+ this.rawIndexObject[rowIndex[ri]] = rowIndex[ri];
5668
+ }
5621
5669
  //let cIndx: number = isLeastLevel ? columnIndex.splice(columnIndex.indexOf(rowIndex[ri]), 1)[0] : rowIndex[ri];
5622
5670
  let currentVal = this.valueMatrix[rowIndex[ri]][value];
5623
5671
  if (isNullOrUndefined(cellValue) && isNullOrUndefined(currentVal)) {
@@ -6165,12 +6213,26 @@ const OLAP_FIELD_LIST_CLASS = 'e-olap-field-list-tree';
6165
6213
  /** @hidden */
6166
6214
  const FIELD_LIST_TREE_CLASS = 'e-field-list-tree';
6167
6215
  /** @hidden */
6216
+ const FIELD_LIST_TREE_OUTER_DIV_CLASS = 'e-field-list-tree-outer-div';
6217
+ /** @hidden */
6218
+ const FIELD_LIST_TREE_OUTER_DIV_SEARCH_CLASS = 'e-field-list-tree-outer-div-searchMode';
6219
+ /** @hidden */
6220
+ const FIELD_LIST_SEARCH_MODE_CLASS = 'e-search-mode';
6221
+ /** @hidden */
6168
6222
  const FIELD_HEADER_CLASS = 'e-field-header';
6169
6223
  /** @hidden */
6224
+ const FIELD_HEADER_CONTAINER_CLASS = 'e-field-header-container';
6225
+ /** @hidden */
6170
6226
  const FIELD_LIST_TITLE_CLASS = 'e-field-list-title';
6171
6227
  /** @hidden */
6172
6228
  const FIELD_LIST_TITLE_CONTENT_CLASS = 'e-title-content';
6173
6229
  /** @hidden */
6230
+ const FIELD_LIST_SEARCH_CLASS = 'e-field-list-search';
6231
+ /** @hidden */
6232
+ const FIELD_LIST_SEARCH_INPUT_CLASS = 'e-field-list-search-input';
6233
+ /** @hidden */
6234
+ const FIELD_LIST_SEARCH_ICON_CLASS = 'e-field-list-search-icon';
6235
+ /** @hidden */
6174
6236
  const FIELD_LIST_FOOTER_CLASS = 'e-field-list-footer';
6175
6237
  /** @hidden */
6176
6238
  const CALCULATED_FIELD_CLASS = 'e-calculated-field';
@@ -6481,6 +6543,8 @@ const TREEVIEW = 'e-pivot-treeview';
6481
6543
  /** @hidden */
6482
6544
  const TREEVIEWOUTER = 'e-pivot-treeview-outer';
6483
6545
  /** @hidden */
6546
+ const TREE_CONTAINER = 'e-treeContainer';
6547
+ /** @hidden */
6484
6548
  const CALCCANCELBTN = 'e-pivot-cancel-button';
6485
6549
  /** @hidden */
6486
6550
  const CALCADDBTN = 'e-pivot-add-button';
@@ -6958,13 +7022,13 @@ class AggregateMenu {
6958
7022
  buttons: [
6959
7023
  {
6960
7024
  click: this.updateValueSettings.bind(this),
6961
- buttonModel: { cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true }
7025
+ buttonModel: { cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('ok'), isPrimary: true }
6962
7026
  },
6963
7027
  {
6964
7028
  click: () => {
6965
7029
  this.valueDialog.hide();
6966
7030
  },
6967
- buttonModel: { cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }
7031
+ buttonModel: { cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel') }
6968
7032
  }
6969
7033
  ],
6970
7034
  closeOnEscape: (this.parent.getModuleName() === 'pivotfieldlist' && this.parent.renderMode === 'Popup') ? false : true,
@@ -7121,7 +7185,8 @@ class AggregateMenu {
7121
7185
  // floatLabelType: 'Auto',
7122
7186
  enableRtl: this.parent.enableRtl,
7123
7187
  locale: this.parent.locale,
7124
- value: fieldCaption, width: '100%'
7188
+ value: fieldCaption, width: '100%',
7189
+ cssClass: this.parent.cssClass
7125
7190
  });
7126
7191
  inputObj1.isStringTemplate = true;
7127
7192
  inputObj1.appendTo(inputField1);
@@ -7597,6 +7662,9 @@ class Render {
7597
7662
  }
7598
7663
  /* eslint-disable */
7599
7664
  contextMenuOpen(args) {
7665
+ if (args.element && this.parent.cssClass) {
7666
+ addClass([args.element.parentElement], this.parent.cssClass);
7667
+ }
7600
7668
  for (let item of args.items) {
7601
7669
  let cellTarget = this.parent.lastCellClicked;
7602
7670
  let elem = null;
@@ -9052,6 +9120,12 @@ class Render {
9052
9120
  }
9053
9121
  }
9054
9122
  else {
9123
+ if ((['PercentageOfDifferenceFrom', 'PercentageOfRowTotal', 'PercentageOfColumnTotal', 'PercentageOfGrandTotal', 'PercentageOfParentRowTotal', 'PercentageOfParentColumnTotal', 'PercentageOfParentTotal']).indexOf(field.type) > -1) {
9124
+ format = 'P2';
9125
+ }
9126
+ else if (['PopulationStDev', 'SampleStDev', 'PopulationVar', 'SampleVar', 'Index'].indexOf(field.type) > -1) {
9127
+ format = undefined;
9128
+ }
9055
9129
  if (this.parent.dataSourceSettings.formatSettings.length > 0) {
9056
9130
  for (let fCnt = 0; fCnt < this.parent.dataSourceSettings.formatSettings.length; fCnt++) {
9057
9131
  let formatSettings = this.parent.dataSourceSettings.formatSettings[fCnt];
@@ -9146,12 +9220,18 @@ class Render {
9146
9220
  else {
9147
9221
  this.colPos++;
9148
9222
  /* eslint-disable-next-line */
9149
- if (isNullOrUndefined(args.data[this.colPos].value) || isNullOrUndefined(args.data[this.colPos].formattedText) || args.data[this.colPos].formattedText === "") {
9223
+ let pivotValue = args.data[this.colPos];
9224
+ if (isNullOrUndefined(pivotValue.value) || isNullOrUndefined(pivotValue.formattedText) || pivotValue.formattedText === "") {
9150
9225
  args.value = this.parent.exportType === 'Excel' ? null : '';
9151
9226
  }
9152
9227
  else {
9153
- /* eslint-disable-next-line */
9154
- args.value = !isNullOrUndefined(args.data[this.colPos].value) ? args.data[this.colPos].value : args.data[this.colPos].formattedText;
9228
+ let aggMatrix = this.parent.dataType === 'pivot' && this.parent.engineModule ? this.parent.engineModule.aggregatedValueMatrix : undefined;
9229
+ if (aggMatrix && aggMatrix[pivotValue.rowIndex] && aggMatrix[pivotValue.rowIndex][pivotValue.colIndex]) {
9230
+ args.value = aggMatrix[pivotValue.rowIndex][pivotValue.colIndex];
9231
+ }
9232
+ else {
9233
+ args.value = !isNullOrUndefined(pivotValue.value) ? (pivotValue.formattedText === '#DIV/0!' ? pivotValue.formattedText : pivotValue.value) : pivotValue.formattedText;
9234
+ }
9155
9235
  }
9156
9236
  }
9157
9237
  args = this.exportContentEvent(args);
@@ -9494,6 +9574,8 @@ class EventBase {
9494
9574
  * @hidden
9495
9575
  */
9496
9576
  constructor(parent) {
9577
+ /** @hidden */
9578
+ this.searchListItem = [];
9497
9579
  this.parent = parent;
9498
9580
  }
9499
9581
  /**
@@ -9590,6 +9672,15 @@ class EventBase {
9590
9672
  /* eslint-disable */
9591
9673
  let membersInfo = fieldInfo && fieldInfo.membersOrder ?
9592
9674
  [...fieldInfo.membersOrder] : [];
9675
+ let outOfRange;
9676
+ if (members[0].actualText === 'Out of Range') {
9677
+ outOfRange = members[0];
9678
+ members.splice(0, 1);
9679
+ }
9680
+ else if (members[members.length - 1].actualText === 'Out of Range') {
9681
+ outOfRange = members[members.length - 1];
9682
+ members.splice(members.length - 1, 1);
9683
+ }
9593
9684
  let sortDetails = {
9594
9685
  fieldName: fieldName,
9595
9686
  sortOrder: fieldInfo.sort,
@@ -9611,6 +9702,24 @@ class EventBase {
9611
9702
  isInclude = this.isValidFilterItemsAvail(fieldName, filterObj) && filterObj.type === 'Include' ? true : false;
9612
9703
  filterItems = filterObj.items ? filterObj.items : [];
9613
9704
  }
9705
+ if (outOfRange) {
9706
+ if (sortDetails.sortOrder === 'Ascending') {
9707
+ if (members[members.length - 1].actualText === 'Grand Total') {
9708
+ members.splice(members.length - 1, 0, outOfRange);
9709
+ }
9710
+ else {
9711
+ members.splice(members.length, 0, outOfRange);
9712
+ }
9713
+ }
9714
+ else {
9715
+ if (members[0].actualText === 'Grand Total') {
9716
+ members.splice(1, 0, outOfRange);
9717
+ }
9718
+ else {
9719
+ members.splice(0, 0, outOfRange);
9720
+ }
9721
+ }
9722
+ }
9614
9723
  if (isHeaderSortByDefault) {
9615
9724
  let copyOrder = [];
9616
9725
  for (let m = 0, n = 0; m < members.length; m++) {
@@ -9650,15 +9759,20 @@ class EventBase {
9650
9759
  let isItemAvail = false;
9651
9760
  let filterTypes = ['Include', 'Exclude'];
9652
9761
  if (filterObj && filterTypes.indexOf(filterObj.type) >= 0) {
9653
- let engineModule = this.parent.engineModule;
9654
- let field = engineModule.fieldList[fieldName];
9655
- let members = (engineModule.formatFields[fieldName] &&
9656
- (['date', 'dateTime', 'time'].indexOf(engineModule.formatFields[fieldName].type) > -1)) ?
9657
- field.formattedMembers : field.members;
9658
- for (let item of filterObj.items) {
9659
- if (members[item]) {
9660
- isItemAvail = true;
9661
- break;
9762
+ if (filterObj.type === 'Include' && filterObj.items.length === 0) {
9763
+ isItemAvail = true;
9764
+ }
9765
+ else {
9766
+ let engineModule = this.parent.engineModule;
9767
+ let field = engineModule.fieldList[fieldName];
9768
+ let members = (engineModule.formatFields[fieldName] &&
9769
+ (['date', 'dateTime', 'time'].indexOf(engineModule.formatFields[fieldName].type) > -1)) ?
9770
+ field.formattedMembers : field.members;
9771
+ for (let item of filterObj.items) {
9772
+ if (members[item]) {
9773
+ isItemAvail = true;
9774
+ break;
9775
+ }
9662
9776
  }
9663
9777
  }
9664
9778
  }
@@ -9898,6 +10012,7 @@ class EventBase {
9898
10012
  else {
9899
10013
  treeObj.expandAll(undefined, undefined, true);
9900
10014
  }
10015
+ this.searchListItem = searchList;
9901
10016
  }
9902
10017
  else {
9903
10018
  this.parent.searchTreeItems = [];
@@ -10570,7 +10685,7 @@ class ErrorDialog {
10570
10685
  buttons: [
10571
10686
  {
10572
10687
  click: this.closeErrorDialog.bind(this),
10573
- buttonModel: { cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true }
10688
+ buttonModel: { cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('ok'), isPrimary: true }
10574
10689
  }
10575
10690
  ],
10576
10691
  cssClass: this.parent.cssClass,
@@ -10644,19 +10759,19 @@ class FilterDialog {
10644
10759
  buttons: [
10645
10760
  {
10646
10761
  buttonModel: {
10647
- cssClass: 'e-clear-filter-button' + (this.allowExcelLikeFilter ? '' : ' ' + ICON_DISABLE),
10762
+ cssClass: 'e-clear-filter-button' + (this.allowExcelLikeFilter ? '' : ' ' + ICON_DISABLE) + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
10648
10763
  iconCss: 'e-icons e-clear-filter-icon', enableRtl: this.parent.enableRtl,
10649
10764
  content: this.parent.localeObj.getConstant('clearFilter'), disabled: (this.filterObject ? false : true)
10650
10765
  }
10651
10766
  },
10652
10767
  {
10653
10768
  buttonModel: {
10654
- cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true
10769
+ cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('ok'), isPrimary: true
10655
10770
  }
10656
10771
  },
10657
10772
  {
10658
10773
  click: this.closeFilterDialog.bind(this),
10659
- buttonModel: { cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }
10774
+ buttonModel: { cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel') }
10660
10775
  }
10661
10776
  ],
10662
10777
  closeOnEscape: this.parent.renderMode === 'Popup' ? false : true,
@@ -10757,7 +10872,7 @@ class FilterDialog {
10757
10872
  this.editorSearch = new MaskedTextBox({
10758
10873
  placeholder: this.parent.localeObj.getConstant('search') + ' ' + '&#8220' + filterCaption + '&#8220',
10759
10874
  enableRtl: this.parent.enableRtl,
10760
- cssClass: EDITOR_SEARCH_CLASS,
10875
+ cssClass: EDITOR_SEARCH_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
10761
10876
  showClearButton: true,
10762
10877
  change: (e) => {
10763
10878
  if (this.parent.dataType === 'olap') {
@@ -10795,7 +10910,8 @@ class FilterDialog {
10795
10910
  nodeSelected: (args) => {
10796
10911
  removeClass([args.node], 'e-active');
10797
10912
  args.cancel = true;
10798
- }
10913
+ },
10914
+ cssClass: this.parent.cssClass
10799
10915
  });
10800
10916
  this.allMemberSelect.isStringTemplate = true;
10801
10917
  if (!isNullOrUndefined(this.parent.currentTreeItems)) {
@@ -10820,7 +10936,8 @@ class FilterDialog {
10820
10936
  removeClass([args.node], 'e-active');
10821
10937
  args.cancel = true;
10822
10938
  },
10823
- expandOn: 'None'
10939
+ expandOn: 'None',
10940
+ cssClass: this.parent.cssClass
10824
10941
  });
10825
10942
  this.memberTreeView.isStringTemplate = true;
10826
10943
  this.memberTreeView.appendTo(treeViewContainer);
@@ -10831,7 +10948,7 @@ class FilterDialog {
10831
10948
  if (this.parent.dataType === 'pivot' && treeData && treeData.length > 0) {
10832
10949
  let sortOrder = this.parent.engineModule.fieldList[fieldName].sort;
10833
10950
  let sortWrapper = createElement('div', {
10834
- className: FILTER_SORT_CLASS + ' e-btn-group' + (this.parent.enableRtl ? ' ' + RTL : ''),
10951
+ className: FILTER_SORT_CLASS + ' e-btn-group' + (this.parent.enableRtl ? ' ' + RTL : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
10835
10952
  id: this.parent.element.id + '_Member_Sort'
10836
10953
  });
10837
10954
  this.parent.element.appendChild(sortWrapper);
@@ -10844,11 +10961,11 @@ class FilterDialog {
10844
10961
  id: this.parent.element.id + '_Sort_Descend', attrs: { 'type': 'button' }
10845
10962
  });
10846
10963
  let sortBtnElement = new Button({
10847
- iconCss: ICON + ' ' + SORT_ASCEND_ICON_CLASS, enableRtl: this.parent.enableRtl
10964
+ iconCss: ICON + ' ' + SORT_ASCEND_ICON_CLASS, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass
10848
10965
  });
10849
10966
  sortBtnElement.appendTo(sortAscendElement);
10850
10967
  sortBtnElement = new Button({
10851
- iconCss: ICON + ' ' + SORT_DESCEND_ICON_CLASS, enableRtl: this.parent.enableRtl
10968
+ iconCss: ICON + ' ' + SORT_DESCEND_ICON_CLASS, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass
10852
10969
  });
10853
10970
  sortBtnElement.appendTo(sortDescendElement);
10854
10971
  sortWrapper.appendChild(sortAscendElement);
@@ -11191,7 +11308,8 @@ class FilterDialog {
11191
11308
  items: items,
11192
11309
  height: '100%',
11193
11310
  selectedItem: selectedIndex,
11194
- enableRtl: this.parent.enableRtl
11311
+ enableRtl: this.parent.enableRtl,
11312
+ cssClass: this.parent.cssClass
11195
11313
  });
11196
11314
  this.tabObj.isStringTemplate = true;
11197
11315
  this.tabObj.appendTo(wrapper);
@@ -11508,7 +11626,9 @@ class FilterDialog {
11508
11626
  else {
11509
11627
  return;
11510
11628
  }
11511
- }, width: '100%'
11629
+ },
11630
+ width: '100%',
11631
+ cssClass: this.parent.cssClass
11512
11632
  });
11513
11633
  let inputObj2 = new NumericTextBox({
11514
11634
  placeholder: this.parent.localeObj.getConstant('enterValue'),
@@ -11527,7 +11647,9 @@ class FilterDialog {
11527
11647
  else {
11528
11648
  return;
11529
11649
  }
11530
- }, width: '100%'
11650
+ },
11651
+ width: '100%',
11652
+ cssClass: this.parent.cssClass
11531
11653
  });
11532
11654
  inputObj1.isStringTemplate = true;
11533
11655
  inputObj1.appendTo(inputDiv1);
@@ -11548,7 +11670,9 @@ class FilterDialog {
11548
11670
  else {
11549
11671
  return;
11550
11672
  }
11551
- }, width: '100%'
11673
+ },
11674
+ width: '100%',
11675
+ cssClass: this.parent.cssClass
11552
11676
  });
11553
11677
  let inputObj2 = new MaskedTextBox({
11554
11678
  placeholder: this.parent.localeObj.getConstant('enterValue'),
@@ -11563,7 +11687,9 @@ class FilterDialog {
11563
11687
  else {
11564
11688
  return;
11565
11689
  }
11566
- }, width: '100%'
11690
+ },
11691
+ width: '100%',
11692
+ cssClass: this.parent.cssClass
11567
11693
  });
11568
11694
  inputObj1.isStringTemplate = true;
11569
11695
  inputObj1.appendTo(inputDiv1);
@@ -13629,9 +13755,8 @@ class DrillThroughDialog {
13629
13755
  }
13630
13756
  let actualText = eventArgs.currentCell.actualText.toString();
13631
13757
  try {
13632
- if (this.parent.currentView === 'Table' && this.engine.fieldList[actualText].aggregateType !== 'Count' && this.parent.editSettings.allowInlineEditing &&
13633
- this.parent.editSettings.allowEditing && eventArgs.rawData.length === 1 &&
13634
- this.engine.fieldList[actualText].aggregateType !== 'DistinctCount' && typeof (eventArgs.rawData[0][actualText]) !== 'string') {
13758
+ if (this.parent.currentView === 'Table' && this.parent.editSettings.allowInlineEditing &&
13759
+ this.parent.editSettings.allowEditing && eventArgs.rawData.length === 1) {
13635
13760
  this.parent.actionObj.actionName = editRecord;
13636
13761
  if (this.parent.actionBeginMethod()) {
13637
13762
  return;
@@ -13789,9 +13914,9 @@ class DrillThroughDialog {
13789
13914
  let previousData = this.frameHeaderWithKeys(eventArgs.rawData[eventArgs.rawData.length - 1]);
13790
13915
  let currentData = eventArgs.rawData[eventArgs.rawData.length - 1];
13791
13916
  /* eslint-enable */
13792
- if (eventArgs.currentCell.actualText in previousData) {
13793
- currentData[eventArgs.currentCell.actualText] = eventArgs.currentCell.actualValue;
13794
- }
13917
+ // if (eventArgs.currentCell.actualText in previousData) {
13918
+ // currentData[eventArgs.currentCell.actualText] = eventArgs.currentCell.actualValue;
13919
+ // }
13795
13920
  let actionInfo = {
13796
13921
  editInfo: { type: 'Inline editing', action: 'update', data: this.gridData }
13797
13922
  };
@@ -13802,6 +13927,7 @@ class DrillThroughDialog {
13802
13927
  enabled: true,
13803
13928
  format: '####.##',
13804
13929
  locale: this.parent.locale,
13930
+ cssClass: this.parent.cssClass,
13805
13931
  change: () => {
13806
13932
  let textBoxValue = this.numericTextBox.value;
13807
13933
  let indexValue = eventArgs.currentCell.indexObject[indexObject];
@@ -13972,10 +14098,10 @@ class DrillThroughDialog {
13972
14098
  this.drillThroughGrid.columns.push({
13973
14099
  headerText: this.parent.localeObj.getConstant('manageRecords'), width: 160, showInColumnChooser: false,
13974
14100
  commands: [
13975
- { type: 'Edit', buttonOption: { iconCss: ' e-icons e-edit', cssClass: 'e-flat' } },
13976
- { type: 'Delete', buttonOption: { iconCss: 'e-icons e-delete', cssClass: 'e-flat' } },
13977
- { type: 'Save', buttonOption: { iconCss: 'e-icons e-update', cssClass: 'e-flat' } },
13978
- { type: 'Cancel', buttonOption: { iconCss: 'e-icons e-cancel-icon', cssClass: 'e-flat' } }
14101
+ { type: 'Edit', buttonOption: { iconCss: ' e-icons e-edit', cssClass: 'e-flat' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '') } },
14102
+ { type: 'Delete', buttonOption: { iconCss: 'e-icons e-delete', cssClass: 'e-flat' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '') } },
14103
+ { type: 'Save', buttonOption: { iconCss: 'e-icons e-update', cssClass: 'e-flat' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '') } },
14104
+ { type: 'Cancel', buttonOption: { iconCss: 'e-icons e-cancel-icon', cssClass: 'e-flat' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '') } }
13979
14105
  ]
13980
14106
  });
13981
14107
  }
@@ -14234,7 +14360,7 @@ class DrillThrough {
14234
14360
  let valueCaption = '';
14235
14361
  let aggType = '';
14236
14362
  let rawData = [];
14237
- if (pivotValue.rowHeaders !== undefined && pivotValue.columnHeaders !== undefined && !isNullOrUndefined(pivotValue.value)) {
14363
+ if (pivotValue.rowHeaders !== undefined && pivotValue.columnHeaders !== undefined) {
14238
14364
  if (this.parent.dataType === 'olap') {
14239
14365
  let tupleInfo;
14240
14366
  if (this.parent.dataSourceSettings.valueAxis === 'row') {
@@ -14304,7 +14430,7 @@ class DrillThrough {
14304
14430
  }
14305
14431
  }
14306
14432
  if (!isNullOrUndefined(rawData[k])) {
14307
- let calculatedFeildValue = this.parent.engineModule.getAggregateValue([Number(indexArray[k])], colIndex, indexValue, 'calculatedfield');
14433
+ let calculatedFeildValue = this.parent.engineModule.getAggregateValue([Number(indexArray[k])], colIndex, indexValue, 'calculatedfield', false);
14308
14434
  rawData[k][this.parent.dataSourceSettings.calculatedFieldSettings[i].name] = (isNaN(calculatedFeildValue) && isNullOrUndefined(calculatedFeildValue)) ? '#DIV/0!' : calculatedFeildValue;
14309
14435
  }
14310
14436
  }
@@ -14781,6 +14907,9 @@ class PivotChart {
14781
14907
  if (this.persistSettings.chartSeries && this.persistSettings.chartSeries.emptyPointSettings) {
14782
14908
  currentSeries.emptyPointSettings = this.persistSettings.chartSeries.emptyPointSettings;
14783
14909
  }
14910
+ if (!currentSeries.emptyPointSettings) {
14911
+ currentSeries.emptyPointSettings = { mode: 'Zero' };
14912
+ }
14784
14913
  this.chartSeries = this.chartSeries.concat(currentSeries);
14785
14914
  }
14786
14915
  }
@@ -16510,7 +16639,7 @@ __decorate$3([
16510
16639
  Complex({ color: 'transparent', width: 0 }, Border)
16511
16640
  ], EmptyPointSettings.prototype, "border", void 0);
16512
16641
  __decorate$3([
16513
- Property('Gap')
16642
+ Property('Zero')
16514
16643
  ], EmptyPointSettings.prototype, "mode", void 0);
16515
16644
  /**
16516
16645
  * Allows to customize the rounded corners of the column series in the chart.
@@ -16884,7 +17013,7 @@ __decorate$3([
16884
17013
  Complex({ color: 'transparent', width: 0 }, Border)
16885
17014
  ], PivotChartSeriesEmptyPointSettings.prototype, "border", void 0);
16886
17015
  __decorate$3([
16887
- Property('Gap')
17016
+ Property('Zero')
16888
17017
  ], PivotChartSeriesEmptyPointSettings.prototype, "mode", void 0);
16889
17018
  /**
16890
17019
  * Allows to customize the rounded corners of the column series in the chart.
@@ -18272,7 +18401,7 @@ class MDXQuery {
18272
18401
  query = '((' + name + ').levels(0).AllMembers)';
18273
18402
  }
18274
18403
  else {
18275
- query = (dimension.isNamedSet ? '{' + name + '}' : this.isPaging ? name + '.CHILDREN' :
18404
+ query = (dimension.isNamedSet || dimension.isCalculatedField ? '{' + name + '}' : this.isPaging ? name + '.CHILDREN' :
18276
18405
  'DrilldownLevel({' + name + '}' + ((axis === 'rows' || axis === 'columns') ? ',,,INCLUDE_CALC_MEMBERS' : '') + ')');
18277
18406
  }
18278
18407
  return query;
@@ -22722,8 +22851,8 @@ let PivotView = class PivotView extends Component {
22722
22851
  if (this.showTooltip) {
22723
22852
  if (this.tooltipTemplate) {
22724
22853
  this.tooltip = new Tooltip({
22725
- target: 'td.e-valuescontent' + (this.cssClass ? (' ' + this.cssClass) : ''),
22726
- cssClass: 'e-pivottooltiptemplate',
22854
+ target: 'td.e-valuescontent',
22855
+ cssClass: 'e-pivottooltiptemplate' + (this.cssClass ? (' ' + this.cssClass) : ''),
22727
22856
  showTipPointer: false,
22728
22857
  position: 'BottomRight',
22729
22858
  mouseTrail: true,
@@ -22735,7 +22864,8 @@ let PivotView = class PivotView extends Component {
22735
22864
  }
22736
22865
  else {
22737
22866
  this.tooltip = new Tooltip({
22738
- target: 'td.e-valuescontent' + (this.cssClass ? (' ' + this.cssClass) : ''),
22867
+ target: 'td.e-valuescontent',
22868
+ cssClass: this.cssClass,
22739
22869
  showTipPointer: false,
22740
22870
  position: 'BottomRight',
22741
22871
  mouseTrail: true,
@@ -23658,6 +23788,8 @@ let PivotView = class PivotView extends Component {
23658
23788
  this.pivotFieldListModule.axisFieldModule.render();
23659
23789
  }
23660
23790
  break;
23791
+ case 'enableFieldSearching':
23792
+ this.pivotFieldListModule.enableFieldSearching = this.enableFieldSearching;
23661
23793
  }
23662
23794
  }
23663
23795
  }
@@ -26228,6 +26360,9 @@ __decorate([
26228
26360
  __decorate([
26229
26361
  Property(false)
26230
26362
  ], PivotView.prototype, "allowCalculatedField", void 0);
26363
+ __decorate([
26364
+ Property(false)
26365
+ ], PivotView.prototype, "enableFieldSearching", void 0);
26231
26366
  __decorate([
26232
26367
  Property(false)
26233
26368
  ], PivotView.prototype, "enableValueSorting", void 0);
@@ -26887,7 +27022,8 @@ class ExcelExport$1 {
26887
27022
  let styles = (pivotCell.axis == 'row') ? { hAlign: 'Left', bold: true, wrapText: true } : { numberFormat: formatList[field], bold: false, wrapText: true };
26888
27023
  let headerStyle = { bold: true, vAlign: 'Center', wrapText: true, indent: cCnt === 0 ? pivotCell.level * 10 : 0 };
26889
27024
  if (!(pivotCell.level === -1 && !pivotCell.rowSpan)) {
26890
- let cellValue = pivotCell.axis === 'value' ? pivotCell.value : pivotCell.formattedText;
27025
+ let aggMatrix = this.parent.engineModule.aggregatedValueMatrix;
27026
+ let cellValue = pivotCell.axis === 'value' ? ((aggMatrix[rCnt] && aggMatrix[rCnt][cCnt]) ? aggMatrix[rCnt][cCnt] : (pivotCell.formattedText === '#DIV/0!' ? pivotCell.formattedText : pivotCell.value)) : pivotCell.formattedText;
26891
27027
  let isgetValuesHeader = ((this.parent.dataSourceSettings.rows.length === 0 && this.parent.dataSourceSettings.valueAxis === 'row')
26892
27028
  || (this.parent.dataSourceSettings.columns.length === 0 && this.parent.dataSourceSettings.valueAxis === 'column'));
26893
27029
  if (pivotCell.type === 'grand sum' && !(this.parent.dataSourceSettings.values.length === 1 && this.parent.dataSourceSettings.valueAxis === 'row' && pivotCell.axis === 'column')) {
@@ -27550,6 +27686,12 @@ class DialogRenderer {
27550
27686
  if (this.parent.cssClass) {
27551
27687
  addClass([fieldListWrappper], this.parent.cssClass);
27552
27688
  }
27689
+ if (this.parent.enableFieldSearching) {
27690
+ addClass([fieldListWrappper], FIELD_LIST_SEARCH_MODE_CLASS);
27691
+ }
27692
+ else {
27693
+ removeClass([fieldListWrappper], FIELD_LIST_SEARCH_MODE_CLASS);
27694
+ }
27553
27695
  this.parentElement = createElement('div', { className: CONTAINER_CLASS });
27554
27696
  this.parent.element.appendChild(fieldListWrappper);
27555
27697
  if (this.parent.isAdaptive) {
@@ -27594,13 +27736,14 @@ class DialogRenderer {
27594
27736
  checked: true,
27595
27737
  enableRtl: this.parent.enableRtl,
27596
27738
  locale: this.parent.locale,
27597
- change: this.onCheckChange.bind(this)
27739
+ change: this.onCheckChange.bind(this),
27740
+ cssClass: this.parent.cssClass
27598
27741
  });
27599
27742
  this.deferUpdateCheckBox.isStringTemplate = true;
27600
27743
  this.deferUpdateCheckBox.appendTo('#' + this.parent.element.id + 'DeferUpdateCheckBox');
27601
27744
  this.deferUpdateApplyButton = new Button({
27602
27745
  cssClass: DEFER_APPLY_BUTTON + ' ' + DEFER_UPDATE_BUTTON + (this.parent.renderMode === 'Popup' ?
27603
- (' ' + BUTTON_FLAT_CLASS) : ''),
27746
+ (' ' + BUTTON_FLAT_CLASS) : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27604
27747
  content: this.parent.localeObj.getConstant('apply'),
27605
27748
  enableRtl: this.parent.enableRtl,
27606
27749
  locale: this.parent.locale,
@@ -27613,7 +27756,7 @@ class DialogRenderer {
27613
27756
  }
27614
27757
  this.deferUpdateCancelButton = new Button({
27615
27758
  cssClass: DEFER_CANCEL_BUTTON + ' ' + CANCEL_BUTTON_CLASS + (this.parent.renderMode === 'Popup' ?
27616
- (' ' + BUTTON_FLAT_CLASS) : ''),
27759
+ (' ' + BUTTON_FLAT_CLASS) : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27617
27760
  content: this.parent.allowDeferLayoutUpdate ? this.parent.localeObj.getConstant('cancel') :
27618
27761
  this.parent.localeObj.getConstant('close'),
27619
27762
  enableRtl: this.parent.enableRtl, isPrimary: !this.parent.allowDeferLayoutUpdate, locale: this.parent.locale
@@ -27730,7 +27873,7 @@ class DialogRenderer {
27730
27873
  let buttons = [{
27731
27874
  click: this.showFieldListDialog.bind(this),
27732
27875
  buttonModel: {
27733
- cssClass: ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS,
27876
+ cssClass: ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27734
27877
  iconCss: ICON + ' ' + ADD_ICON_CLASS,
27735
27878
  isPrimary: true
27736
27879
  }
@@ -27738,7 +27881,7 @@ class DialogRenderer {
27738
27881
  click: this.showCalculatedField.bind(this),
27739
27882
  buttonModel: {
27740
27883
  cssClass: ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +
27741
- ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS + ' ' + ICON_DISABLE,
27884
+ ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS + ' ' + ICON_DISABLE + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27742
27885
  iconCss: ICON + ' ' + ADD_ICON_CLASS, enableRtl: this.parent.enableRtl,
27743
27886
  isPrimary: true
27744
27887
  }
@@ -27875,7 +28018,8 @@ class DialogRenderer {
27875
28018
  height: '100%',
27876
28019
  enableRtl: this.parent.enableRtl,
27877
28020
  locale: this.parent.locale,
27878
- selected: this.tabSelect.bind(this)
28021
+ selected: this.tabSelect.bind(this),
28022
+ cssClass: this.parent.cssClass
27879
28023
  });
27880
28024
  if (this.parent.renderMode === 'Fixed') {
27881
28025
  layoutFooter.appendChild(this.createAddButton());
@@ -27921,7 +28065,7 @@ class DialogRenderer {
27921
28065
  }
27922
28066
  });
27923
28067
  let calculateField = new Button({
27924
- cssClass: CALCULATED_FIELD_CLASS + ' ' + ICON_DISABLE,
28068
+ cssClass: CALCULATED_FIELD_CLASS + ' ' + ICON_DISABLE + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27925
28069
  content: this.parent.localeObj.getConstant('CalculatedField'),
27926
28070
  enableRtl: this.parent.enableRtl, locale: this.parent.locale
27927
28071
  });
@@ -27941,12 +28085,12 @@ class DialogRenderer {
27941
28085
  let calculatedButton = createElement('div', {});
27942
28086
  let calculateField = new Button({
27943
28087
  cssClass: ADAPTIVE_CALCULATED_FIELD_BUTTON_CLASS +
27944
- ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS + ' ' + ICON_DISABLE,
28088
+ ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS + ' ' + ICON_DISABLE + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27945
28089
  iconCss: ICON + ' ' + ADD_ICON_CLASS,
27946
28090
  enableRtl: this.parent.enableRtl, locale: this.parent.locale
27947
28091
  });
27948
28092
  let fieldList = new Button({
27949
- cssClass: ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS,
28093
+ cssClass: ADAPTIVE_FIELD_LIST_BUTTON_CLASS + ' ' + BUTTON_SMALL_CLASS + ' ' + BUTTON_ROUND_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
27950
28094
  iconCss: ICON + ' ' + ADD_ICON_CLASS,
27951
28095
  enableRtl: this.parent.enableRtl, locale: this.parent.locale
27952
28096
  });
@@ -28136,6 +28280,8 @@ class TreeViewRenderer {
28136
28280
  */
28137
28281
  constructor(parent) {
28138
28282
  this.selectedNodes = [];
28283
+ this.isSearching = false;
28284
+ this.parentIDs = [];
28139
28285
  this.parent = parent;
28140
28286
  this.addEventListener();
28141
28287
  }
@@ -28156,15 +28302,42 @@ class TreeViewRenderer {
28156
28302
  className: FIELD_HEADER_CLASS,
28157
28303
  innerHTML: this.parent.localeObj.getConstant('allFields')
28158
28304
  });
28159
- let treeOuterDiv = createElement('div', { className: FIELD_LIST_TREE_CLASS + '-outer-div' });
28305
+ let searchWrapper = createElement('div', {
28306
+ id: this.parent.element.id + '_SearchDiv', attrs: { 'tabindex': '-1' },
28307
+ className: FIELD_LIST_SEARCH_CLASS
28308
+ });
28309
+ let searchInput = createElement('input', { attrs: { 'type': 'text' } });
28310
+ searchWrapper.appendChild(searchInput);
28311
+ this.fieldSearch = new TextBox({
28312
+ placeholder: this.parent.localeObj.getConstant('search'),
28313
+ enableRtl: this.parent.enableRtl,
28314
+ locale: this.parent.locale,
28315
+ cssClass: FIELD_LIST_SEARCH_INPUT_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
28316
+ input: this.textChange.bind(this),
28317
+ showClearButton: true
28318
+ });
28319
+ this.fieldSearch.isStringTemplate = true;
28320
+ this.fieldSearch.appendTo(searchInput);
28321
+ this.fieldSearch.addIcon('append', FIELD_LIST_SEARCH_ICON_CLASS + ' ' + ICON);
28322
+ let promptDiv = createElement('div', {
28323
+ className: EMPTY_MEMBER_CLASS + ' ' + ICON_DISABLE,
28324
+ innerHTML: this.parent.localeObj.getConstant('noMatches')
28325
+ });
28326
+ let treeOuterDiv = createElement('div', {
28327
+ className: FIELD_LIST_TREE_OUTER_DIV_CLASS + ' ' + TREE_CONTAINER
28328
+ });
28160
28329
  this.treeViewElement = createElement('div', {
28161
28330
  id: this.parent.element.id + '_TreeView',
28162
28331
  className: FIELD_LIST_CLASS + ' ' + (this.parent.dataType === 'olap' ? OLAP_FIELD_LIST_CLASS : '')
28163
28332
  });
28164
- let fieldHeaderWrappper = createElement('div', { className: 'e-field-header-container' });
28333
+ let fieldHeaderWrappper = createElement('div', { className: FIELD_HEADER_CONTAINER_CLASS });
28165
28334
  fieldHeaderWrappper.appendChild(treeHeader);
28166
28335
  fieldTable.appendChild(fieldHeaderWrappper);
28167
28336
  this.updateSortElements(fieldHeaderWrappper);
28337
+ if (this.parent.enableFieldSearching) {
28338
+ fieldTable.appendChild(searchWrapper);
28339
+ fieldTable.appendChild(promptDiv);
28340
+ }
28168
28341
  treeOuterDiv.appendChild(this.treeViewElement);
28169
28342
  fieldTable.appendChild(treeOuterDiv);
28170
28343
  this.parentElement.appendChild(fieldTable);
@@ -28287,6 +28460,39 @@ class TreeViewRenderer {
28287
28460
  if (args.node.querySelector('.' + NODE_CHECK_CLASS)) {
28288
28461
  addClass([args.node.querySelector('.' + LIST_TEXT_CLASS)], LIST_SELECT_CLASS);
28289
28462
  }
28463
+ if (this.parent.enableFieldSearching && this.isSearching) {
28464
+ let liElement = args.node;
28465
+ if (this.parent.dataType === 'olap') {
28466
+ let id = liElement.getAttribute('data-uid');
28467
+ let searchItem = this.parent.pivotCommon.eventBase.searchListItem;
28468
+ for (let i = 0; i < this.parentIDs.length; i++) {
28469
+ if (id === this.parentIDs[i]) {
28470
+ addClass([liElement], ICON_DISABLE);
28471
+ }
28472
+ for (let li2 of searchItem) {
28473
+ let parentID = this.parent.pivotCommon.eventBase.getParentIDs(this.fieldTable, li2.getAttribute('data-uid'), []);
28474
+ if (PivotUtil.inArray(id, parentID) > -1) {
28475
+ removeClass([liElement], ICON_DISABLE);
28476
+ break;
28477
+ }
28478
+ }
28479
+ }
28480
+ }
28481
+ else {
28482
+ for (let i = 0; i < this.nonSearchList.length; i++) {
28483
+ if (liElement.textContent === this.nonSearchList[i].textContent) {
28484
+ addClass([liElement], ICON_DISABLE);
28485
+ break;
28486
+ }
28487
+ else {
28488
+ if (liElement.innerText === this.nonSearchList[i].textContent) {
28489
+ addClass([liElement], ICON_DISABLE);
28490
+ break;
28491
+ }
28492
+ }
28493
+ }
28494
+ }
28495
+ }
28290
28496
  }
28291
28497
  updateOlapTreeNode(args) {
28292
28498
  let allowDrag = false;
@@ -28342,12 +28548,12 @@ class TreeViewRenderer {
28342
28548
  buttons: [{
28343
28549
  click: this.closeTreeDialog.bind(this),
28344
28550
  buttonModel: {
28345
- cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel')
28551
+ cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel')
28346
28552
  }
28347
28553
  }, {
28348
28554
  click: this.onFieldAdd.bind(this),
28349
28555
  buttonModel: {
28350
- cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('add'),
28556
+ cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('add'),
28351
28557
  isPrimary: true
28352
28558
  }
28353
28559
  }],
@@ -28376,7 +28582,7 @@ class TreeViewRenderer {
28376
28582
  });
28377
28583
  let editorSearch = createElement('input', { attrs: { 'type': 'text' } });
28378
28584
  searchWrapper.appendChild(editorSearch);
28379
- let treeOuterDiv = createElement('div', { className: EDITOR_TREE_CONTAINER_CLASS + '-outer-div' });
28585
+ let treeOuterDiv = createElement('div', { className: FIELD_LIST_TREE_OUTER_DIV_CLASS });
28380
28586
  let treeViewContainer = createElement('div', {
28381
28587
  className: EDITOR_TREE_CONTAINER_CLASS + ' ' + (this.parent.dataType === 'olap' ? 'e-olap-field-list-tree' : '')
28382
28588
  });
@@ -28386,7 +28592,7 @@ class TreeViewRenderer {
28386
28592
  placeholder: this.parent.localeObj.getConstant('search'),
28387
28593
  enableRtl: this.parent.enableRtl,
28388
28594
  locale: this.parent.locale,
28389
- cssClass: EDITOR_SEARCH_CLASS,
28595
+ cssClass: EDITOR_SEARCH_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
28390
28596
  change: this.textChange.bind(this)
28391
28597
  });
28392
28598
  this.editorSearch.isStringTemplate = true;
@@ -28422,14 +28628,41 @@ class TreeViewRenderer {
28422
28628
  }
28423
28629
  textChange(e) {
28424
28630
  this.parent.pivotCommon.eventBase.searchTreeNodes(e, this.fieldTable, true);
28425
- let promptDiv = this.fieldDialog.element.querySelector('.' + EMPTY_MEMBER_CLASS);
28631
+ let promptDiv;
28632
+ let treeOuterDiv;
28633
+ if (this.parent.isAdaptive) {
28634
+ promptDiv = this.fieldDialog.element.querySelector('.' + EMPTY_MEMBER_CLASS);
28635
+ }
28636
+ else {
28637
+ promptDiv = this.parentElement.querySelector('.' + EMPTY_MEMBER_CLASS);
28638
+ treeOuterDiv = this.parentElement.querySelector('.' + TREE_CONTAINER);
28639
+ }
28426
28640
  let liList = [].slice.call(this.fieldTable.element.querySelectorAll('li'));
28427
28641
  let disabledList = [].slice.call(this.fieldTable.element.querySelectorAll('li.' + ICON_DISABLE));
28428
28642
  if (liList.length === disabledList.length) {
28429
28643
  removeClass([promptDiv], ICON_DISABLE);
28644
+ if (!this.parent.isAdaptive) {
28645
+ addClass([treeOuterDiv], ICON_DISABLE);
28646
+ removeClass([treeOuterDiv], FIELD_LIST_TREE_OUTER_DIV_SEARCH_CLASS);
28647
+ }
28430
28648
  }
28431
28649
  else {
28432
28650
  addClass([promptDiv], ICON_DISABLE);
28651
+ if (!this.parent.isAdaptive) {
28652
+ removeClass([treeOuterDiv], ICON_DISABLE);
28653
+ addClass([treeOuterDiv], FIELD_LIST_TREE_OUTER_DIV_SEARCH_CLASS);
28654
+ }
28655
+ }
28656
+ this.isSearching = disabledList.length > 0 ? true : false;
28657
+ this.nonSearchList = disabledList;
28658
+ if (this.parent.dataType === 'olap') {
28659
+ this.parentIDs = [];
28660
+ for (let i = 0; i < liList.length; i++) {
28661
+ if (liList[i].classList.contains("e-level-1")) {
28662
+ let id = liList[i].getAttribute('data-uid');
28663
+ this.parentIDs.push(id);
28664
+ }
28665
+ }
28433
28666
  }
28434
28667
  }
28435
28668
  dragStart(args) {
@@ -29072,6 +29305,10 @@ class TreeViewRenderer {
29072
29305
  this.editorSearch.destroy();
29073
29306
  this.editorSearch = null;
29074
29307
  }
29308
+ if (this.fieldSearch && !this.fieldSearch.isDestroyed) {
29309
+ this.fieldSearch.destroy();
29310
+ this.fieldSearch = null;
29311
+ }
29075
29312
  }
29076
29313
  }
29077
29314
 
@@ -29375,7 +29612,7 @@ class PivotButton {
29375
29612
  buttonWrapper.appendChild(buttonElement);
29376
29613
  }
29377
29614
  element.appendChild(buttonWrapper);
29378
- let pivotButton = new Button({ enableRtl: this.parent.enableRtl, locale: this.parent.locale });
29615
+ let pivotButton = new Button({ enableRtl: this.parent.enableRtl, locale: this.parent.locale, cssClass: this.parent.cssClass });
29379
29616
  pivotButton.isStringTemplate = true;
29380
29617
  pivotButton.appendTo(buttonElement);
29381
29618
  this.unWireEvent(buttonWrapper, i === valuePos && axis !== 'all-fields' ? 'values' : axis, isMeasureAvail);
@@ -30186,7 +30423,7 @@ class PivotButton {
30186
30423
  return [
30187
30424
  {
30188
30425
  buttonModel: {
30189
- cssClass: 'e-clear-filter-button' + (this.parent.pivotCommon.filterDialog.allowExcelLikeFilter ? '' : ' ' + ICON_DISABLE),
30426
+ cssClass: 'e-clear-filter-button' + (this.parent.pivotCommon.filterDialog.allowExcelLikeFilter ? '' : ' ' + ICON_DISABLE) + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
30190
30427
  iconCss: 'e-icons e-clear-filter-icon', enableRtl: this.parent.enableRtl,
30191
30428
  content: this.parent.localeObj.getConstant('clearFilter'), disabled: (this.parent.pivotCommon.filterDialog.filterObject ? false : true)
30192
30429
  },
@@ -30194,13 +30431,13 @@ class PivotButton {
30194
30431
  },
30195
30432
  {
30196
30433
  buttonModel: {
30197
- cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true
30434
+ cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('ok'), isPrimary: true
30198
30435
  },
30199
30436
  click: (this.index === 0 ? this.updateFilterState.bind(this, this.fieldName) : this.updateCustomFilter.bind(this))
30200
30437
  },
30201
30438
  {
30202
30439
  click: this.parent.pivotCommon.filterDialog.closeFilterDialog.bind(this.parent.pivotCommon.filterDialog),
30203
- buttonModel: { cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }
30440
+ buttonModel: { cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel') }
30204
30441
  }
30205
30442
  ];
30206
30443
  }
@@ -31406,6 +31643,8 @@ let PivotFieldList = class PivotFieldList extends Component {
31406
31643
  }
31407
31644
  requireRefresh = true;
31408
31645
  break;
31646
+ case 'enableFieldSearching':
31647
+ this.refresh();
31409
31648
  }
31410
31649
  if (requireRefresh) {
31411
31650
  this.fieldListRender();
@@ -32049,6 +32288,9 @@ __decorate$4([
32049
32288
  __decorate$4([
32050
32289
  Property(false)
32051
32290
  ], PivotFieldList.prototype, "allowCalculatedField", void 0);
32291
+ __decorate$4([
32292
+ Property(false)
32293
+ ], PivotFieldList.prototype, "enableFieldSearching", void 0);
32052
32294
  __decorate$4([
32053
32295
  Property(false)
32054
32296
  ], PivotFieldList.prototype, "showValuesButton", void 0);
@@ -33111,13 +33353,15 @@ class CalculatedField {
33111
33353
  click: this.applyFormula.bind(this),
33112
33354
  buttonModel: {
33113
33355
  content: this.parent.localeObj.getConstant('ok'),
33114
- isPrimary: true
33356
+ isPrimary: true,
33357
+ cssClass: this.parent.cssClass
33115
33358
  }
33116
33359
  },
33117
33360
  {
33118
33361
  click: this.cancelClick.bind(this),
33119
33362
  buttonModel: {
33120
- content: this.parent.localeObj.getConstant('cancel')
33363
+ content: this.parent.localeObj.getConstant('cancel'),
33364
+ cssClass: this.parent.cssClass
33121
33365
  }
33122
33366
  }
33123
33367
  ];
@@ -33125,7 +33369,7 @@ class CalculatedField {
33125
33369
  let clearButton = {
33126
33370
  click: this.clearFormula.bind(this),
33127
33371
  buttonModel: {
33128
- cssClass: 'e-calc-clear-btn',
33372
+ cssClass: 'e-calc-clear-btn' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
33129
33373
  content: this.parent.localeObj.getConstant('clear'),
33130
33374
  }
33131
33375
  };
@@ -33554,7 +33798,8 @@ class CalculatedField {
33554
33798
  change: (args) => {
33555
33799
  this.formatText = args.value;
33556
33800
  this.formulaText = select('#' + this.parentID + 'droppable', document).value;
33557
- }
33801
+ },
33802
+ cssClass: this.parent.cssClass
33558
33803
  });
33559
33804
  customerFormatObj.isStringTemplate = true;
33560
33805
  customerFormatObj.appendTo('#' + this.parentID + 'Custom_Format_Element');
@@ -33857,7 +34102,7 @@ class CalculatedField {
33857
34102
  dialogRenderer.parentElement.querySelector('.' + FORMULA) !== null) {
33858
34103
  this.createOlapDropElements();
33859
34104
  }
33860
- let cancelBtn = new Button({ cssClass: FLAT, isPrimary: true, locale: this.parent.locale, enableRtl: this.parent.enableRtl });
34105
+ let cancelBtn = new Button({ cssClass: FLAT + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), isPrimary: true, locale: this.parent.locale, enableRtl: this.parent.enableRtl });
33861
34106
  cancelBtn.isStringTemplate = true;
33862
34107
  cancelBtn.appendTo('#' + this.parentID + 'cancelBtn');
33863
34108
  if (cancelBtn.element) {
@@ -33865,7 +34110,7 @@ class CalculatedField {
33865
34110
  }
33866
34111
  if (this.parent.
33867
34112
  dialogRenderer.parentElement.querySelector('.' + FORMULA) !== null && this.parent.isAdaptive) {
33868
- let okBtn = new Button({ cssClass: FLAT + ' ' + OUTLINE_CLASS, isPrimary: true, locale: this.parent.locale, enableRtl: this.parent.enableRtl });
34113
+ let okBtn = new Button({ cssClass: FLAT + ' ' + OUTLINE_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), isPrimary: true, locale: this.parent.locale, enableRtl: this.parent.enableRtl });
33869
34114
  okBtn.isStringTemplate = true;
33870
34115
  okBtn.appendTo('#' + this.parentID + 'okBtn');
33871
34116
  this.inputObj = new MaskedTextBox({
@@ -33874,7 +34119,8 @@ class CalculatedField {
33874
34119
  change: (args) => {
33875
34120
  this.fieldText = args.value;
33876
34121
  this.formulaText = select('#' + this.parentID + 'droppable', document).value;
33877
- }
34122
+ },
34123
+ cssClass: this.parent.cssClass
33878
34124
  });
33879
34125
  this.inputObj.isStringTemplate = true;
33880
34126
  this.inputObj.appendTo('#' + this.parentID + 'ddlelement');
@@ -33885,7 +34131,8 @@ class CalculatedField {
33885
34131
  change: (args) => {
33886
34132
  this.formatText = args.value;
33887
34133
  this.formulaText = select('#' + this.parentID + 'droppable', document).value;
33888
- }
34134
+ },
34135
+ cssClass: this.parent.cssClass
33889
34136
  });
33890
34137
  formatInputObj.isStringTemplate = true;
33891
34138
  formatInputObj.appendTo('#' + this.parentID + 'Custom_Format_Element');
@@ -33911,7 +34158,7 @@ class CalculatedField {
33911
34158
  }
33912
34159
  }
33913
34160
  else if (this.parent.isAdaptive) {
33914
- let addBtn = new Button({ cssClass: FLAT, isPrimary: true, locale: this.parent.locale, enableRtl: this.parent.enableRtl });
34161
+ let addBtn = new Button({ cssClass: FLAT + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), isPrimary: true, locale: this.parent.locale, enableRtl: this.parent.enableRtl });
33915
34162
  addBtn.isStringTemplate = true;
33916
34163
  addBtn.appendTo('#' + this.parentID + 'addBtn');
33917
34164
  if (this.parent.dataType === 'olap') {
@@ -33968,7 +34215,8 @@ class CalculatedField {
33968
34215
  name: AGRTYPE + key,
33969
34216
  checked: args.element.querySelector('[data-type').getAttribute('data-type') === type[i],
33970
34217
  change: this.onChange.bind(this),
33971
- locale: this.parent.locale, enableRtl: this.parent.enableRtl
34218
+ locale: this.parent.locale, enableRtl: this.parent.enableRtl,
34219
+ cssClass: this.parent.cssClass
33972
34220
  });
33973
34221
  radiobutton.isStringTemplate = true;
33974
34222
  radiobutton.appendTo('#' + this.parentID + 'radio' + key + type[i]);
@@ -34005,7 +34253,8 @@ class CalculatedField {
34005
34253
  }
34006
34254
  let checkbox = new CheckBox({
34007
34255
  label: this.parent.engineModule.fieldList[key].caption + ' (' + this.parent.localeObj.getConstant(type) + ')',
34008
- locale: this.parent.locale, enableRtl: this.parent.enableRtl
34256
+ locale: this.parent.locale, enableRtl: this.parent.enableRtl,
34257
+ cssClass: this.parent.cssClass
34009
34258
  });
34010
34259
  checkbox.isStringTemplate = true;
34011
34260
  checkbox.appendTo('#' + this.parentID + '_' + index);
@@ -34100,14 +34349,16 @@ class CalculatedField {
34100
34349
  this.dialog.refresh();
34101
34350
  this.inputObj = new MaskedTextBox({
34102
34351
  placeholder: this.parent.localeObj.getConstant('fieldName'),
34103
- locale: this.parent.locale, enableRtl: this.parent.enableRtl
34352
+ locale: this.parent.locale, enableRtl: this.parent.enableRtl,
34353
+ cssClass: this.parent.cssClass
34104
34354
  });
34105
34355
  this.inputObj.isStringTemplate = true;
34106
34356
  this.inputObj.appendTo('#' + this.parentID + 'ddlelement');
34107
34357
  if (this.parent.dataType === 'pivot') {
34108
34358
  let customerFormatObj = new MaskedTextBox({
34109
34359
  placeholder: this.parent.localeObj.getConstant('numberFormatString'),
34110
- locale: this.parent.locale, enableRtl: this.parent.enableRtl
34360
+ locale: this.parent.locale, enableRtl: this.parent.enableRtl,
34361
+ cssClass: this.parent.cssClass
34111
34362
  });
34112
34363
  customerFormatObj.isStringTemplate = true;
34113
34364
  customerFormatObj.appendTo('#' + this.parentID + 'Custom_Format_Element');
@@ -34148,14 +34399,14 @@ class CalculatedField {
34148
34399
  {
34149
34400
  click: isRemove ? this.removeCalcField.bind(this, node) : this.replaceFormula.bind(this, calcInfo),
34150
34401
  buttonModel: {
34151
- cssClass: OK_BUTTON_CLASS + ' ' + FLAT_CLASS,
34402
+ cssClass: OK_BUTTON_CLASS + ' ' + FLAT_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
34152
34403
  content: isRemove ? this.parent.localeObj.getConstant('yes') : this.parent.localeObj.getConstant('ok'), isPrimary: true
34153
34404
  }
34154
34405
  },
34155
34406
  {
34156
34407
  click: this.removeErrorDialog.bind(this),
34157
34408
  buttonModel: {
34158
- cssClass: CANCEL_BUTTON_CLASS,
34409
+ cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
34159
34410
  content: isRemove ? this.parent.localeObj.getConstant('no') : this.parent.localeObj.getConstant('cancel'), isPrimary: true
34160
34411
  }
34161
34412
  }
@@ -34299,7 +34550,8 @@ class FieldList {
34299
34550
  maxNodeLimitInMemberEditor: this.parent.maxNodeLimitInMemberEditor,
34300
34551
  aggregateCellInfo: this.parent.bindTriggerEvents.bind(this.parent),
34301
34552
  onHeadersSort: this.parent.bindTriggerEvents.bind(this.parent),
34302
- cssClass: this.parent.cssClass
34553
+ cssClass: this.parent.cssClass,
34554
+ enableFieldSearching: this.parent.enableFieldSearching
34303
34555
  });
34304
34556
  this.parent.pivotFieldListModule.isPopupView = true;
34305
34557
  this.parent.pivotFieldListModule.pivotGridModule = this.parent;
@@ -34965,7 +35217,7 @@ class GroupingBar {
34965
35217
  }
34966
35218
  element.prepend(createElement('div', { id: this.parent.element.id + '_AllFields' }));
34967
35219
  let toolbarObj = new Toolbar$1({
34968
- cssClass: ALL_FIELDS_PANEL_CLASS,
35220
+ cssClass: ALL_FIELDS_PANEL_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
34969
35221
  enableRtl: this.parent.enableRtl,
34970
35222
  items: [{ template: '<div class=' + GROUP_ALL_FIELDS_CLASS + '></div>' }],
34971
35223
  allowKeyboard: false,
@@ -35064,8 +35316,8 @@ class ConditionalFormatting {
35064
35316
  {
35065
35317
  click: this.addButtonClick.bind(this),
35066
35318
  buttonModel: {
35067
- cssClass: this.parent.isAdaptive ? (FORMAT_ROUND_BUTTON + ' ' + FORMAT_CONDITION_BUTTON) :
35068
- FORMAT_CONDITION_BUTTON,
35319
+ cssClass: (this.parent.isAdaptive ? (FORMAT_ROUND_BUTTON + ' ' + FORMAT_CONDITION_BUTTON) :
35320
+ FORMAT_CONDITION_BUTTON) + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
35069
35321
  iconCss: ICON + ' ' + ADD_ICON_CLASS,
35070
35322
  content: this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('condition')
35071
35323
  }
@@ -35074,7 +35326,7 @@ class ConditionalFormatting {
35074
35326
  click: this.applyButtonClick.bind(this),
35075
35327
  isFlat: true,
35076
35328
  buttonModel: {
35077
- isPrimary: true, cssClass: FORMAT_APPLY_BUTTON,
35329
+ isPrimary: true, cssClass: FORMAT_APPLY_BUTTON + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
35078
35330
  content: this.parent.localeObj.getConstant('apply')
35079
35331
  }
35080
35332
  },
@@ -35082,7 +35334,7 @@ class ConditionalFormatting {
35082
35334
  click: this.cancelButtonClick.bind(this),
35083
35335
  isFlat: true,
35084
35336
  buttonModel: {
35085
- cssClass: FORMAT_CANCEL_BUTTON,
35337
+ cssClass: FORMAT_CANCEL_BUTTON + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
35086
35338
  content: this.parent.localeObj.getConstant('cancel')
35087
35339
  }
35088
35340
  }
@@ -35449,7 +35701,7 @@ class ConditionalFormatting {
35449
35701
  addClass([this.backgroundColor[i].element.nextElementSibling.querySelector('.e-selected-color')], ICON);
35450
35702
  let toggleBtn = new Button({
35451
35703
  iconCss: ICON + ' ' + FORMAT_DELETE_ICON,
35452
- cssClass: FLAT, locale: this.parent.locale, enableRtl: this.parent.enableRtl
35704
+ cssClass: FLAT + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), locale: this.parent.locale, enableRtl: this.parent.enableRtl
35453
35705
  });
35454
35706
  toggleBtn.isStringTemplate = true;
35455
35707
  toggleBtn.appendTo('#' + this.parentID + 'removeButton' + i);
@@ -35670,6 +35922,7 @@ class Toolbar$2 {
35670
35922
  locale: this.parent.locale,
35671
35923
  items: this.getItems(),
35672
35924
  allowKeyboard: false,
35925
+ cssClass: this.parent.cssClass,
35673
35926
  width: !this.parent.gridSettings.allowAutoResizing ? (this.parent.grid ? (this.parent.getGridWidthAsNumber() - 2) : (this.parent.getWidthAsNumber() - 2)) : 'auto'
35674
35927
  });
35675
35928
  this.toolbar.isStringTemplate = true;
@@ -35759,7 +36012,7 @@ class Toolbar$2 {
35759
36012
  let toDisable = this.parent.displayOption.view === 'Chart';
35760
36013
  items.push({
35761
36014
  prefixIcon: TOOLBAR_GRID + ' ' + ICON, tooltipText: this.parent.localeObj.getConstant('grid'),
35762
- id: this.parent.element.id + 'grid', cssClass: toDisable ? MENU_DISABLE : '',
36015
+ id: this.parent.element.id + 'grid', cssClass: (toDisable ? MENU_DISABLE : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
35763
36016
  click: this.menuItemClick.bind(this)
35764
36017
  });
35765
36018
  break;
@@ -35767,7 +36020,7 @@ class Toolbar$2 {
35767
36020
  let validTypes = (this.parent.displayOption.view === 'Table');
35768
36021
  items.push({
35769
36022
  template: '<ul id="' + this.parent.element.id + 'chart_menu"></ul>',
35770
- id: this.parent.element.id + 'chartmenu', cssClass: validTypes ? MENU_DISABLE : ''
36023
+ id: this.parent.element.id + 'chartmenu', cssClass: (validTypes ? MENU_DISABLE : '') + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '')
35771
36024
  });
35772
36025
  break;
35773
36026
  case 'MDX':
@@ -35875,7 +36128,7 @@ class Toolbar$2 {
35875
36128
  saveReport(args) {
35876
36129
  if (this.currentReport && this.currentReport !== '' && args.item.id === (this.parent.element.id + 'save')) {
35877
36130
  let saveArgs = {
35878
- report: this.parent.getPersistData(),
36131
+ report: this.getCurrentReport(),
35879
36132
  reportName: this.currentReport
35880
36133
  };
35881
36134
  this.parent.actionObj.actionName = this.parent.getActionCompleteName();
@@ -36132,7 +36385,7 @@ class Toolbar$2 {
36132
36385
  return;
36133
36386
  }
36134
36387
  let saveArgs = {
36135
- report: _this.parent.getPersistData(),
36388
+ report: _this.getCurrentReport(),
36136
36389
  reportName: reportInput.value
36137
36390
  };
36138
36391
  let actionInfo = {
@@ -36168,7 +36421,7 @@ class Toolbar$2 {
36168
36421
  }
36169
36422
  _this.parent.trigger(newReport);
36170
36423
  let saveArgs = {
36171
- report: _this.parent.getPersistData(),
36424
+ report: _this.getCurrentReport(),
36172
36425
  reportName: reportInput.value
36173
36426
  };
36174
36427
  let actionInfo = {
@@ -36259,14 +36512,14 @@ class Toolbar$2 {
36259
36512
  {
36260
36513
  buttonModel: {
36261
36514
  content: this.parent.localeObj.getConstant('yes'), isPrimary: true,
36262
- cssClass: OK_BUTTON_CLASS
36515
+ cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '')
36263
36516
  },
36264
36517
  click: this.okButtonClick.bind(this)
36265
36518
  },
36266
36519
  {
36267
36520
  buttonModel: {
36268
36521
  content: this.parent.localeObj.getConstant('no'),
36269
- cssClass: CANCEL_BUTTON_CLASS
36522
+ cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : '')
36270
36523
  },
36271
36524
  click: this.cancelButtonClick.bind(this)
36272
36525
  }
@@ -36311,7 +36564,7 @@ class Toolbar$2 {
36311
36564
  else if (this.action === 'New' || (this.action !== 'Save' && this.action !== 'Rename' && this.action !== 'New')) {
36312
36565
  if (this.currentReport && this.currentReport !== '' && this.parent.isModified) {
36313
36566
  let saveArgs = {
36314
- report: this.parent.getPersistData(),
36567
+ report: this.getCurrentReport(),
36315
36568
  reportName: this.currentReport
36316
36569
  };
36317
36570
  let actionInfo = {
@@ -36336,7 +36589,7 @@ class Toolbar$2 {
36336
36589
  else if (this.action === 'New') {
36337
36590
  this.parent.trigger(newReport);
36338
36591
  let saveArgs = {
36339
- report: this.parent.getPersistData(),
36592
+ report: this.getCurrentReport(),
36340
36593
  reportName: this.currentReport
36341
36594
  };
36342
36595
  this.parent.trigger(saveReport, saveArgs);
@@ -36347,7 +36600,7 @@ class Toolbar$2 {
36347
36600
  }
36348
36601
  else if (this.action === 'Save') {
36349
36602
  let saveArgs = {
36350
- report: this.parent.getPersistData(),
36603
+ report: this.getCurrentReport(),
36351
36604
  reportName: this.currentReport
36352
36605
  };
36353
36606
  this.parent.trigger(saveReport, saveArgs);
@@ -36644,6 +36897,15 @@ class Toolbar$2 {
36644
36897
  }
36645
36898
  this.updateItemElements();
36646
36899
  }
36900
+ getCurrentReport() {
36901
+ let reportStr = this.parent.getPersistData();
36902
+ if (this.parent.dataSourceSettings.type === 'CSV') {
36903
+ let reportSettings = JSON.parse(reportStr);
36904
+ reportSettings.dataSourceSettings.dataSource.splice(0, 0, this.parent.engineModule.fields);
36905
+ reportStr = JSON.stringify(reportSettings);
36906
+ }
36907
+ return reportStr;
36908
+ }
36647
36909
  updateItemElements() {
36648
36910
  let itemElements = [].slice.call(this.toolbar.element.querySelectorAll('.e-toolbar-item'));
36649
36911
  for (let element of itemElements) {
@@ -36674,7 +36936,7 @@ class Toolbar$2 {
36674
36936
  this.parent.element.appendChild(inputCheckbox);
36675
36937
  let checkbox = new CheckBox({
36676
36938
  label: this.parent.localeObj.getConstant('multipleAxes'),
36677
- cssClass: 'e-multipleAxes',
36939
+ cssClass: 'e-multipleAxes' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
36678
36940
  checked: this.parent.chartSettings.enableMultipleAxis,
36679
36941
  change: (args) => {
36680
36942
  document.getElementById(this.parent.element.id + '_' + 'multipleAxes').click();
@@ -36706,7 +36968,7 @@ class Toolbar$2 {
36706
36968
  let checkbox = new CheckBox({
36707
36969
  label: this.parent.localeObj.getConstant('showLegend'),
36708
36970
  checked: this.getLableState(this.parent.chartSettings.chartSeries.type),
36709
- cssClass: 'e-showLegend',
36971
+ cssClass: 'e-showLegend' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
36710
36972
  change: (args) => {
36711
36973
  document.getElementById(this.parent.element.id + '_' + 'showLegend').click();
36712
36974
  },
@@ -37078,11 +37340,11 @@ class Toolbar$2 {
37078
37340
  buttons: [
37079
37341
  {
37080
37342
  click: () => { this.chartTypeDialogUpdate(); },
37081
- buttonModel: { cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true },
37343
+ buttonModel: { cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('ok'), isPrimary: true },
37082
37344
  },
37083
37345
  {
37084
37346
  click: () => { this.removeDialog(); },
37085
- buttonModel: { cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }
37347
+ buttonModel: { cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel') }
37086
37348
  }
37087
37349
  ],
37088
37350
  closeOnEscape: true,
@@ -37223,7 +37485,7 @@ class Toolbar$2 {
37223
37485
  beforeOpen() {
37224
37486
  let checkbox = new CheckBox({
37225
37487
  label: this.parent.localeObj.getConstant('multipleAxes'),
37226
- cssClass: 'e-dialog-multiple-axis',
37488
+ cssClass: 'e-dialog-multiple-axis' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
37227
37489
  checked: this.parent.chartSettings.enableMultipleAxis ? this.parent.chartSettings.enableMultipleAxis : false,
37228
37490
  change: (args) => {
37229
37491
  getInstance(select('#' + this.parent.element.id + '_AxisModeOption'), DropDownList).enabled = args.checked;
@@ -37235,7 +37497,7 @@ class Toolbar$2 {
37235
37497
  label: this.parent.localeObj.getConstant('showLegend'),
37236
37498
  checked: this.getLableState(this.parent.chartSettings.chartSeries.type),
37237
37499
  change: () => { this.chartLableState = true; },
37238
- cssClass: 'e-dialog-show-legend',
37500
+ cssClass: 'e-dialog-show-legend' + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''),
37239
37501
  enableRtl: this.parent.enableRtl,
37240
37502
  locale: this.parent.locale
37241
37503
  });
@@ -37368,13 +37630,13 @@ class NumberFormatting {
37368
37630
  buttons: [
37369
37631
  {
37370
37632
  click: this.updateFormatting.bind(this),
37371
- buttonModel: { cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('apply'), isPrimary: true }
37633
+ buttonModel: { cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('apply'), isPrimary: true }
37372
37634
  },
37373
37635
  {
37374
37636
  click: () => {
37375
37637
  this.dialog.hide();
37376
37638
  },
37377
- buttonModel: { cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }
37639
+ buttonModel: { cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel') }
37378
37640
  }
37379
37641
  ],
37380
37642
  closeOnEscape: true,
@@ -38037,13 +38299,13 @@ class Grouping {
38037
38299
  buttons: [
38038
38300
  {
38039
38301
  click: this.updateGroupSettings.bind(this),
38040
- buttonModel: { cssClass: OK_BUTTON_CLASS, content: this.parent.localeObj.getConstant('ok'), isPrimary: true }
38302
+ buttonModel: { cssClass: OK_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('ok'), isPrimary: true }
38041
38303
  },
38042
38304
  {
38043
38305
  click: () => {
38044
38306
  this.groupDialog.hide();
38045
38307
  },
38046
- buttonModel: { cssClass: CANCEL_BUTTON_CLASS, content: this.parent.localeObj.getConstant('cancel') }
38308
+ buttonModel: { cssClass: CANCEL_BUTTON_CLASS + (this.parent.cssClass ? (' ' + this.parent.cssClass) : ''), content: this.parent.localeObj.getConstant('cancel') }
38047
38309
  }
38048
38310
  ],
38049
38311
  overlayClick: () => {
@@ -38111,7 +38373,8 @@ class Grouping {
38111
38373
  placeholder: this.parent.localeObj.getConstant('captionName'),
38112
38374
  enableRtl: this.parent.enableRtl,
38113
38375
  locale: this.parent.locale,
38114
- value: caption, width: '100%'
38376
+ value: caption, width: '100%',
38377
+ cssClass: this.parent.cssClass
38115
38378
  });
38116
38379
  captionInputObj1.isStringTemplate = true;
38117
38380
  captionInputObj1.appendTo(captionInputField1);
@@ -38119,7 +38382,8 @@ class Grouping {
38119
38382
  placeholder: this.parent.localeObj.getConstant('groupName'),
38120
38383
  enableRtl: this.parent.enableRtl,
38121
38384
  locale: this.parent.locale,
38122
- width: '100%'
38385
+ width: '100%',
38386
+ cssClass: this.parent.cssClass
38123
38387
  });
38124
38388
  inputObj1.isStringTemplate = true;
38125
38389
  inputObj1.appendTo(inputField1);
@@ -38267,7 +38531,8 @@ class Grouping {
38267
38531
  format: '###',
38268
38532
  value: startAt === undefined ? undefined : parseInt(startAt, 10),
38269
38533
  enabled: !(startAt === undefined),
38270
- width: '100%'
38534
+ width: '100%',
38535
+ cssClass: this.parent.cssClass
38271
38536
  });
38272
38537
  startAtInputObj.isStringTemplate = true;
38273
38538
  startAtInputObj.appendTo(startAtInputField1);
@@ -38279,7 +38544,8 @@ class Grouping {
38279
38544
  format: '###',
38280
38545
  value: endAt === undefined ? undefined : parseInt(endAt, 10),
38281
38546
  enabled: !(endAt === undefined),
38282
- width: '100%'
38547
+ width: '100%',
38548
+ cssClass: this.parent.cssClass
38283
38549
  });
38284
38550
  endAtInputObj.isStringTemplate = true;
38285
38551
  endAtInputObj.appendTo(endAtInputField1);
@@ -38291,7 +38557,8 @@ class Grouping {
38291
38557
  format: '###',
38292
38558
  min: 1,
38293
38559
  value: selectedInterval,
38294
- width: '100%'
38560
+ width: '100%',
38561
+ cssClass: this.parent.cssClass
38295
38562
  });
38296
38563
  intervalObj.isStringTemplate = true;
38297
38564
  intervalObj.appendTo(intervalInputField1);
@@ -38301,6 +38568,7 @@ class Grouping {
38301
38568
  checked: !(startAt === undefined),
38302
38569
  enableRtl: this.parent.enableRtl,
38303
38570
  locale: this.parent.locale,
38571
+ cssClass: this.parent.cssClass,
38304
38572
  change: (args) => {
38305
38573
  let startAtObj = (type === 'date' ?
38306
38574
  getInstance(select('#' + this.parentElement.id + 'group_start_input'), DateTimePicker) :
@@ -38316,6 +38584,7 @@ class Grouping {
38316
38584
  checked: !(endAt === undefined),
38317
38585
  enableRtl: this.parent.enableRtl,
38318
38586
  locale: this.parent.locale,
38587
+ cssClass: this.parent.cssClass,
38319
38588
  change: (args) => {
38320
38589
  let endAtObj = (type === 'date' ?
38321
38590
  getInstance(select('#' + this.parentElement.id + 'group_end_input'), DateTimePicker) :