@bizdoc/core 1.10.0-next.6 → 1.10.0-next.7

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 (35) hide show
  1. package/assets/bizdoc-schema.json +6 -0
  2. package/esm2020/lib/browse/browse-items.component.mjs +3 -3
  3. package/esm2020/lib/core/controls/combination-picker-body.mjs +5 -2
  4. package/esm2020/lib/core/functions.mjs +4 -1
  5. package/esm2020/lib/core/mailbox.service.mjs +20 -23
  6. package/esm2020/lib/core/models.mjs +1 -1
  7. package/esm2020/lib/cube/cube-info.service.mjs +5 -5
  8. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +1 -1
  9. package/esm2020/lib/cube/matrix/matrix.base.mjs +1 -1
  10. package/esm2020/lib/cube/matrix/matrix.component.mjs +8 -8
  11. package/esm2020/lib/cube/matrix/table.component.mjs +194 -138
  12. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +1 -1
  13. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -1
  14. package/esm2020/lib/dashboard/cube/documents.widget.mjs +1 -1
  15. package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +10 -6
  16. package/esm2020/lib/modules/chart.module.mjs +4 -4
  17. package/esm2020/lib/shared.module.mjs +4 -4
  18. package/esm2020/lib/views/cube/matrix.component.mjs +1 -1
  19. package/esm2020/public-api.mjs +1 -1
  20. package/fesm2015/bizdoc-core.mjs +239 -180
  21. package/fesm2015/bizdoc-core.mjs.map +1 -1
  22. package/fesm2020/bizdoc-core.mjs +246 -181
  23. package/fesm2020/bizdoc-core.mjs.map +1 -1
  24. package/lib/core/controls/combination-picker-body.d.ts +4 -6
  25. package/lib/core/functions.d.ts +1 -0
  26. package/lib/core/mailbox.service.d.ts +4 -8
  27. package/lib/core/models.d.ts +1 -1
  28. package/lib/cube/cube-info.service.d.ts +3 -6
  29. package/lib/cube/matrix/matrix.base.d.ts +2 -6
  30. package/lib/cube/matrix/matrix.component.d.ts +3 -3
  31. package/lib/cube/matrix/table.component.d.ts +18 -28
  32. package/lib/shared.module.d.ts +1 -1
  33. package/lib/views/cube/matrix.component.d.ts +3 -11
  34. package/package.json +2 -2
  35. package/public-api.d.ts +1 -1
@@ -116,7 +116,7 @@ import * as i24 from '@angular/flex-layout/extended';
116
116
  import * as i4$1 from '@ctrl/ngx-emoji-mart';
117
117
  import { PickerModule } from '@ctrl/ngx-emoji-mart';
118
118
  import * as i8$2 from '@syncfusion/ej2-angular-charts';
119
- import { AccumulationChart, FunnelSeries, AccumulationDataLabel, AccumulationTooltip, AccumulationLegend, Export, PieSeries, ChartModule, AccumulationChartAllModule, SparklineAllModule, LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService, SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService, StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService, BarSeriesService, StackingBarSeriesService, RangeColumnSeriesService, BubbleSeriesService, TooltipService, CrosshairService, CategoryService, DateTimeService, LogarithmicService, LegendService, ZoomService, DataLabelService, SelectionService, ChartAnnotationService, WaterfallSeriesService, RangeAreaSeriesService, PolarSeriesService, RadarSeriesService, DateTimeCategoryService, MultiLevelLabelService, ParetoSeriesService, TooltipRenderService, ExportService, AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService, AccumulationChartComponent, Chart as Chart$1, DateTime as DateTime$1, BarSeries as BarSeries$1, AreaSeries as AreaSeries$1, BubbleSeries as BubbleSeries$1, ColumnSeries as ColumnSeries$1, LineSeries as LineSeries$1, PolarSeries as PolarSeries$1, RadarSeries as RadarSeries$1, SplineSeries as SplineSeries$1, SplineAreaSeries as SplineAreaSeries$1, ScatterSeries as ScatterSeries$1, StackingLineSeries as StackingLineSeries$1, StackingAreaSeries as StackingAreaSeries$1, StackingColumnSeries as StackingColumnSeries$1, StackingBarSeries as StackingBarSeries$1, StepAreaSeries as StepAreaSeries$1, StepLineSeries as StepLineSeries$1, ChartComponent } from '@syncfusion/ej2-angular-charts';
119
+ import { AccumulationChart, FunnelSeries, AccumulationDataLabel, AccumulationTooltip, AccumulationLegend, Export, PieSeries, ChartModule, AccumulationChartAllModule, SparklineAllModule, AccumulationDistributionIndicatorService, FunnelSeriesService, StackingStepAreaSeriesService, PieSeriesService, PyramidSeriesService, LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService, SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService, StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService, BarSeriesService, StackingBarSeriesService, RangeColumnSeriesService, BubbleSeriesService, TooltipService, CrosshairService, CategoryService, DateTimeService, LogarithmicService, LegendService, ZoomService, DataLabelService, SelectionService, ChartAnnotationService, WaterfallSeriesService, RangeAreaSeriesService, PolarSeriesService, RadarSeriesService, DateTimeCategoryService, MultiLevelLabelService, ParetoSeriesService, TooltipRenderService, ExportService, AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService, AccumulationChartComponent, Chart as Chart$1, DateTime as DateTime$1, BarSeries as BarSeries$1, AreaSeries as AreaSeries$1, BubbleSeries as BubbleSeries$1, ColumnSeries as ColumnSeries$1, LineSeries as LineSeries$1, PolarSeries as PolarSeries$1, RadarSeries as RadarSeries$1, SplineSeries as SplineSeries$1, SplineAreaSeries as SplineAreaSeries$1, ScatterSeries as ScatterSeries$1, StackingLineSeries as StackingLineSeries$1, StackingAreaSeries as StackingAreaSeries$1, StackingColumnSeries as StackingColumnSeries$1, StackingBarSeries as StackingBarSeries$1, StepAreaSeries as StepAreaSeries$1, StepLineSeries as StepLineSeries$1, ChartComponent } from '@syncfusion/ej2-angular-charts';
120
120
  import * as XLSX from 'xlsx';
121
121
  import { Chart, Category, DateTime, Tooltip, Export as Export$1, BarSeries, AreaSeries, StackingStepAreaSeries, BubbleSeries, ColumnSeries, LineSeries, Legend, PolarSeries, RadarSeries, SplineSeries, SplineAreaSeries, ScatterSeries, StackingLineSeries, StackingAreaSeries, StackingColumnSeries, StackingBarSeries, StepAreaSeries, StepLineSeries } from '@syncfusion/ej2-charts';
122
122
  import * as i6$5 from '@syncfusion/ej2-angular-grids';
@@ -636,6 +636,9 @@ const IS_MOBILE = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini
636
636
  function isMobile() {
637
637
  return IS_MOBILE /*|| document.cookie.indexOf('aria=1') > -1*/;
638
638
  }
639
+ function isFunction(val) {
640
+ return typeof val === 'function';
641
+ }
639
642
  function isBoolean(val) {
640
643
  return typeof val === 'boolean';
641
644
  }
@@ -2856,15 +2859,6 @@ class MailboxService {
2856
2859
  // _session.profile.inbox.push(m.model);
2857
2860
  });
2858
2861
  }
2859
- /**
2860
- *
2861
- * @param date
2862
- */
2863
- _isAboveWatermark(date) {
2864
- return !this._session.isImpersonating &&
2865
- this._session.profile.options.inboxView &&
2866
- this._session.profile.options.inboxView < date;
2867
- }
2868
2862
  download(documentId, fileId) {
2869
2863
  return this._http.get(AttachmentInfo.formatUrl(documentId, fileId), {
2870
2864
  responseType: 'arraybuffer'
@@ -2873,8 +2867,8 @@ class MailboxService {
2873
2867
  removeattachment(id, fileId) {
2874
2868
  return this._http.delete(`/api/mailbox/attachment/${id}`, { params: { fileId: fileId.toString() } });
2875
2869
  }
2876
- read(id, read) {
2877
- return this._http.put(`/api/mailbox/read/${id}`, undefined, { params: { read } });
2870
+ read(id, read, folderId, received) {
2871
+ return this._http.put(`/api/mailbox/read/${id}`, undefined, { params: { read } }).pipe(tap(() => folderId && this._updateunreadcounter(received, folderId, read ? 1 : -1)));
2878
2872
  }
2879
2873
  comments(id, before) {
2880
2874
  return this._http.get(`/api/comments/${id}`, { params: { before: new Date(before).toJSON() } });
@@ -3014,14 +3008,20 @@ class MailboxService {
3014
3008
  })), this._notify());
3015
3009
  }
3016
3010
  get(id, read) {
3017
- return this._http.get(`/api/mail/${id}`).pipe(tap(m => {
3018
- if (read !== undefined && m.read !== read) {
3019
- if (this._isAboveWatermark(m.received))
3020
- this._session.profile.inboxCount -= read ? -1 : 1;
3021
- const folder = this._session.profile.folders.find(f => f.name === m.folderId);
3022
- folder.count -= read ? -1 : 1;
3023
- }
3024
- }));
3011
+ return this._http.get(`/api/mail/${id}`).pipe(tap(m => read === false && m.read === true &&
3012
+ this._updateunreadcounter(m.received, m.folderId, -1)));
3013
+ }
3014
+ _updateunreadcounter(date, folderId, val) {
3015
+ if (
3016
+ // date is above watermark
3017
+ !this._session.isImpersonating &&
3018
+ this._session.profile.options.inboxView &&
3019
+ this._session.profile.options.inboxView < date)
3020
+ this._session.profile.inboxCount -= val;
3021
+ // decrease
3022
+ const folder = this._session.profile.folders.
3023
+ find(f => f.name === folderId);
3024
+ folder.count -= val;
3025
3025
  }
3026
3026
  save(id, version, form, model) {
3027
3027
  return this._withGeoLocation(form).pipe(switchMap(params => this._http.put(`/api/mail/${id}?version=${version}`, model, { params })), this._notify());
@@ -3032,11 +3032,11 @@ class MailboxService {
3032
3032
  removecomment(id) {
3033
3033
  return this._http.delete(`/api/comments/${id}`).pipe(tap(() => { }));
3034
3034
  }
3035
- submit(id, version, form, model) {
3035
+ submit(id, version, form, model, read, folderId, received) {
3036
3036
  return this._withGeoLocation(form).pipe(switchMap(params => this._http.put(`/api/mail/${id}?version=${version}&go=true`, model, { params }))).pipe(this._notify());
3037
3037
  }
3038
- send(id, version, form, model, action, actionArgs) {
3039
- return this._withGeoLocation(form).pipe(switchMap(params => this._http.put(`/api/mail/${id}?version=${version}&action=${action}`, model, { params: Object.assign(params, actionArgs) }))).pipe(this._notify());
3038
+ send(id, version, form, model, action, actionArgs, read, folderId, received) {
3039
+ return this._withGeoLocation(form).pipe(switchMap(params => this._http.put(`/api/mail/${id}?version=${version}&action=${action}`, model, { params: Object.assign(params, actionArgs) }))).pipe(tap(() => read === false && this._updateunreadcounter(received, folderId, -1)), this._notify());
3040
3040
  }
3041
3041
  events(starting, ending, contains) {
3042
3042
  return this._http.get(`/api/events`, {
@@ -7025,7 +7025,7 @@ class BrowseItemsComponent {
7025
7025
  dragStarted(event) {
7026
7026
  }
7027
7027
  toggleRead(item) {
7028
- this._mailbox.read(item.id, !item.read).
7028
+ this._mailbox.read(item.id, !item.read, item.folderId, item.received).
7029
7029
  subscribe(() => item.read = !item.read);
7030
7030
  }
7031
7031
  select(id) {
@@ -7270,7 +7270,7 @@ class BrowseItemsComponent {
7270
7270
  }
7271
7271
  sendAll(action, args) {
7272
7272
  const params = queryParams(args);
7273
- this._forEach(i => this._mailbox.send(i.id, i.version, i.formId, null, action, params).
7273
+ this._forEach(i => this._mailbox.send(i.id, i.version, i.formId, null, action, params, i.read, i.folderId, i.received).
7274
7274
  pipe(tap(() => {
7275
7275
  if (i.folderId !== this.folderId)
7276
7276
  this.dataSource.data.remove(i);
@@ -14068,32 +14068,30 @@ class CubeMatrixComponent {
14068
14068
  this.onExplore = new EventEmitter();
14069
14069
  this.loadingChange = new EventEmitter();
14070
14070
  }
14071
- get indices() {
14072
- return this._indices;
14073
- }
14074
- set indices(value) {
14075
- if (value)
14076
- this._indices = isArray(value) ? value : [value];
14077
- }
14078
14071
  set sum(val) {
14079
- function translate(axis) {
14080
- switch (axis) {
14081
- case '$month':
14082
- return 'M' + ('0' + new Date().getMonth().toString()).slice(-2);
14083
- case '$year':
14084
- return new Date().getFullYear().toString();
14085
- case '$quarter':
14086
- return Math.ceil(new Date().getMonth() / 3).toString();
14087
- default:
14088
- return axis ? axis.toString() : null;
14089
- }
14090
- }
14091
- this._sum = {
14092
- //fn: val.fn,
14093
- title: val.title,
14094
- xAxis: translate(val.xAxis),
14095
- series: translate(val.series)
14096
- };
14072
+ if (val)
14073
+ this._sum = (isArray(val) ? val : [val]).
14074
+ map(sum => {
14075
+ let value;
14076
+ if (sum.value)
14077
+ value = sum.value.toString();
14078
+ else if (sum.calculate)
14079
+ switch (sum.calculate) {
14080
+ case 'month':
14081
+ value = 'M' + ('0' + new Date().getMonth().toString()).slice(-2);
14082
+ break;
14083
+ case 'year':
14084
+ value = new Date().getFullYear().toString();
14085
+ break;
14086
+ case 'quarter':
14087
+ value = Math.ceil(new Date().getMonth() / 3).toString();
14088
+ break;
14089
+ }
14090
+ return {
14091
+ value,
14092
+ ...sum
14093
+ };
14094
+ });
14097
14095
  }
14098
14096
  get interactive() {
14099
14097
  return this._interactive;
@@ -14103,70 +14101,69 @@ class CubeMatrixComponent {
14103
14101
  }
14104
14102
  ngOnChanges(changes) {
14105
14103
  if (changes['_cube']) {
14106
- this.cube = this.cube ? this._session.profile.cubes.find(c => c.name === this._cube) :
14107
- this._session.profile.cubes[0];
14104
+ this.cube = this._session.profile.cubes.find(c => c.name === this._cube);
14108
14105
  this.CURRENCY = this.cube.currencyCode /*|| this._service.currencyCode*/;
14109
14106
  }
14110
- if (this._indices)
14111
- this.indexes = this.cube.indices.filter(i => this._indices.indexOf(i.name) > -1);
14112
- else {
14113
- this.indexes = this.cube.indices;
14114
- this._indices = this.indexes.map(i => i.name);
14107
+ if (!this.cube) {
14108
+ this.cube = this._session.profile.cubes[0];
14109
+ this.CURRENCY = this.cube.currencyCode /*|| this._service.currencyCode*/;
14115
14110
  }
14111
+ if (changes['_indices'])
14112
+ this.indices = this.cube.indices.filter(i => isArray(this._indices) ? this._indices.indexOf(i.name) > -1 : this._indices === i.name);
14116
14113
  if (changes['_xAxis'] || changes['_series']) {
14117
- this.xAxis = this.cube.axes.find(a => a.name === this._xAxis) || this.cube.axes[0];
14118
- this.series = this.cube.axes.find(a => a.name === this._series) || this.cube.axes[1];
14114
+ this.xAxis = this.cube.axes.find(a => a.name === this._xAxis);
14115
+ this.series = this.cube.axes.find(a => a.name === this._series);
14119
14116
  this._prepare = forkJoin(this._ds.all(this.series.dataType).pipe(tap(r => this.rows = r)), this._ds.all(this.xAxis.dataType).pipe(tap(c => this.columns = c))).toPromise().then(() => this._sum &&
14120
14117
  this._addsum());
14121
14118
  }
14122
14119
  if (changes['filters'])
14123
14120
  this.refresh();
14124
14121
  }
14125
- /** */
14126
14122
  _addsum() {
14127
- let { xAxis, series } = this._sum;
14128
- if (xAxis) {
14129
- let i = 0;
14130
- while (i < this.columns.length - 1) {
14131
- if (this.columns[i].key === xAxis.toString()) {
14132
- this.columns.splice(i + 1, 0, {
14133
- key: '_sum',
14134
- value: this._sum.title
14135
- });
14136
- break;
14123
+ this._sum.forEach((s, i) => {
14124
+ let { value, axis } = s;
14125
+ const element = {
14126
+ key: '_sum_' + i,
14127
+ value: s.title
14128
+ };
14129
+ let j = 0;
14130
+ if (axis === 'xAxis') {
14131
+ while (j < this.columns.length) {
14132
+ if (this.columns[j].key === value) {
14133
+ this.columns.splice(j + 1, 0, element);
14134
+ break;
14135
+ }
14136
+ j++;
14137
14137
  }
14138
- i++;
14138
+ if (j === this.columns.length)
14139
+ this.columns.push(element);
14139
14140
  }
14140
- }
14141
- if (series) {
14142
- let i = 0;
14143
- const row = {
14144
- key: '_sum',
14145
- value: this._sum.title
14146
- };
14147
- while (i < this.rows.length - 1) {
14148
- if (this.rows[i].key === series.toString()) {
14149
- this.rows.splice(i + 1, 0, row);
14150
- break;
14141
+ else {
14142
+ while (j < this.rows.length) {
14143
+ if (this.rows[j].key === value) {
14144
+ this.rows.splice(j + 1, 0, element);
14145
+ break;
14146
+ }
14147
+ j++;
14151
14148
  }
14152
- i++;
14149
+ if (j === this.rows.length)
14150
+ this.rows.push(element);
14153
14151
  }
14154
- if (i === this.rows.length - 1)
14155
- this.rows.push(row);
14156
- }
14152
+ });
14157
14153
  }
14158
14154
  refresh() {
14159
14155
  const progressTask = setTimeout(() => this.loadingChange.next(this.loading = true), LOADING_DELAY);
14160
- this._prepare.then(() => this._service.series(this.cube.name, this.xAxis.name, {
14161
- series: this.series.name,
14156
+ this._prepare.then(() => this._service.series(this.cube.name, this._xAxis, {
14157
+ series: this._series,
14162
14158
  indices: this._indices,
14163
14159
  filters: this.filters,
14164
14160
  scope: this.scope
14165
- }).pipe(modelize(), first$1(), tap(d => {
14166
- this._totals(d);
14161
+ }).pipe(modelize(), first$1()).subscribe(d => {
14167
14162
  this._sum &&
14168
14163
  this._calculatesum(d);
14169
- })).subscribe(d => this.data = d, (e) => {
14164
+ this._totals(d);
14165
+ this.data = d;
14166
+ }, (e) => {
14170
14167
  this._sb.error(e.status === 401 ? 'Unauthorized' : null);
14171
14168
  }, () => {
14172
14169
  clearTimeout(progressTask);
@@ -14174,8 +14171,9 @@ class CubeMatrixComponent {
14174
14171
  }));
14175
14172
  }
14176
14173
  _totals(data) {
14174
+ this.totals = {};
14177
14175
  let grand = 0;
14178
- this.indexes.forEach(i => {
14176
+ this.indices && this.indices.forEach(i => {
14179
14177
  const index = data[i.name];
14180
14178
  if (!index)
14181
14179
  data[i.name] = {};
@@ -14198,8 +14196,7 @@ class CubeMatrixComponent {
14198
14196
  data[r.key]['_total'] = sum;
14199
14197
  grand -= sum;
14200
14198
  });
14201
- this.totals = {};
14202
- this.columns.forEach(c => {
14199
+ this._indices && this.columns.forEach(c => {
14203
14200
  let sum = 0, key;
14204
14201
  for (key in data) {
14205
14202
  const val = data[key][c.key];
@@ -14211,74 +14208,136 @@ class CubeMatrixComponent {
14211
14208
  this.totals['_total'] = grand;
14212
14209
  }
14213
14210
  _calculatesum(data) {
14214
- let { xAxis, series } = this._sum;
14215
- if (xAxis) {
14216
- let total = 0;
14217
- this.rows.forEach(r => {
14218
- const row = data[r.key];
14219
- if (!row)
14220
- return;
14221
- let sum = 0, i = 0;
14222
- while (i < this.columns.length) {
14223
- let key = this.columns[i].key, val = row[key];
14224
- if (val !== undefined)
14225
- sum += val;
14226
- if (key === xAxis)
14227
- break;
14228
- i++;
14229
- }
14230
- data[r.key]['_sum'] = sum;
14231
- total += sum;
14232
- });
14233
- this.totals['_sum'] = total;
14234
- }
14235
- if (series) {
14236
- let total = 0;
14237
- this.columns.forEach(c => {
14238
- let sum = 0, i = 0;
14239
- while (i < this.rows.length) {
14240
- let key = this.rows[i].key, row = data[key];
14241
- if (row) {
14242
- let val = row[c.key];
14243
- if (val !== undefined)
14244
- sum += val;
14245
- if (key === series)
14246
- break;
14211
+ this._sum.forEach((s, i) => {
14212
+ const { axis, value, calculate } = s, name = '_sum_' + i;
14213
+ if (axis === 'xAxis') {
14214
+ let total = 0;
14215
+ this.rows.forEach(r => {
14216
+ const row = data[r.key];
14217
+ if (!row)
14218
+ return;
14219
+ let sum = 0, j = 0;
14220
+ while (j < this.columns.length) {
14221
+ let key = this.columns[j].key;
14222
+ if (isFunction(calculate)) {
14223
+ let val = calculate(key, this.data);
14224
+ if (val !== undefined)
14225
+ sum += val;
14226
+ }
14227
+ else {
14228
+ let val = row[key];
14229
+ if (val !== undefined)
14230
+ sum += val;
14231
+ if (key === value)
14232
+ break;
14233
+ }
14234
+ j++;
14247
14235
  }
14248
- i++;
14249
- }
14250
- data['_sum'][c.key] = sum;
14251
- total += sum;
14252
- });
14253
- data['_sum']['_total'] = total;
14254
- }
14236
+ row[name] = sum;
14237
+ total += sum;
14238
+ });
14239
+ this.indices && this.indices.forEach(i => {
14240
+ const row = data[i.name];
14241
+ if (!row)
14242
+ return;
14243
+ let sum = 0, j = 0;
14244
+ while (j < this.columns.length) {
14245
+ let key = this.columns[j].key;
14246
+ if (isFunction(calculate)) {
14247
+ let val = calculate(key, this.data);
14248
+ if (val !== undefined)
14249
+ sum += val;
14250
+ }
14251
+ else {
14252
+ let val = row[key];
14253
+ if (val !== undefined)
14254
+ sum += val;
14255
+ if (key === value)
14256
+ break;
14257
+ }
14258
+ j++;
14259
+ }
14260
+ row[name] = sum;
14261
+ });
14262
+ this.totals[name] = total;
14263
+ }
14264
+ else {
14265
+ let total = 0;
14266
+ this.columns.forEach(c => {
14267
+ let sum = 0, j = 0;
14268
+ while (j < this.rows.length) {
14269
+ let key = this.rows[j].key;
14270
+ if (isFunction(calculate)) {
14271
+ let val = calculate(key, this.data);
14272
+ if (val !== undefined)
14273
+ sum += val;
14274
+ }
14275
+ else {
14276
+ let row = data[key];
14277
+ if (row) {
14278
+ let val = row[c.key];
14279
+ if (val !== undefined)
14280
+ sum += val;
14281
+ if (key === value)
14282
+ break;
14283
+ }
14284
+ }
14285
+ j++;
14286
+ }
14287
+ data[name][c.key] = sum;
14288
+ total += sum;
14289
+ });
14290
+ data[name]['_total'] = total;
14291
+ }
14292
+ });
14255
14293
  }
14256
- explore(x, serie) {
14294
+ explore(x, series) {
14257
14295
  if (!this.interactive)
14258
14296
  return;
14259
- if (this.sum) {
14260
- if (x === '_sum') {
14261
- x = [];
14262
- for (let i = 0; i < this.columns.length; i++) {
14263
- let key = this.columns[i].key;
14264
- x.push(key);
14265
- if (key === this._sum.xAxis)
14266
- break;
14297
+ const axes = { ...this.filters };
14298
+ if (this._sum) {
14299
+ let i = 0;
14300
+ while (i < this._sum.length) {
14301
+ let { value, calculate } = this._sum[i], name = '_sum_' + i;
14302
+ if (x === name) {
14303
+ x = [];
14304
+ for (let i = 0; i < this.columns.length; i++) {
14305
+ let key = this.columns[i].key;
14306
+ if (isFunction(calculate)) {
14307
+ let val = calculate(key, this.data);
14308
+ if (val !== undefined)
14309
+ x.push(key);
14310
+ }
14311
+ else {
14312
+ x.push(key);
14313
+ if (key === value)
14314
+ break;
14315
+ }
14316
+ }
14317
+ break;
14267
14318
  }
14268
- }
14269
- if (serie === '_sum') {
14270
- serie = [];
14271
- for (let i = 0; i < this.rows.length; i++) {
14272
- let key = this.rows[i].key;
14273
- serie.push(key);
14274
- if (key === this._sum.series)
14275
- break;
14319
+ else if (series === name) {
14320
+ series = [];
14321
+ for (let i = 0; i < this.rows.length; i++) {
14322
+ let key = this.rows[i].key;
14323
+ if (isFunction(calculate)) {
14324
+ let val = calculate(key, this.data);
14325
+ if (val !== undefined)
14326
+ series.push(key);
14327
+ }
14328
+ else {
14329
+ series.push(key);
14330
+ if (key === value)
14331
+ break;
14332
+ }
14333
+ }
14334
+ break;
14276
14335
  }
14336
+ i++;
14277
14337
  }
14278
14338
  }
14279
- const axes = { ...this.filters };
14280
14339
  axes[this.xAxis.name] = x;
14281
- axes[this.series.name] = serie;
14340
+ axes[this.series.name] = series;
14282
14341
  this.onExplore.emit(axes);
14283
14342
  }
14284
14343
  move(x, y) {
@@ -14312,10 +14371,10 @@ class CubeMatrixComponent {
14312
14371
  }
14313
14372
  }
14314
14373
  CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: PromptService }, { token: CubeService }, { token: SessionService }, { token: DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
14315
- CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], indices: "indices", scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indexes; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "number": i10$1.DecimalPipe, "currency": i10$1.CurrencyPipe }, animations: [matrixAnimation] });
14374
+ CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], _indices: ["indices", "_indices"], scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indices; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "number": i10$1.DecimalPipe, "currency": i10$1.CurrencyPipe }, animations: [matrixAnimation] });
14316
14375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixComponent, decorators: [{
14317
14376
  type: Component,
14318
- args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indexes; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"] }]
14377
+ args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indices; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"] }]
14319
14378
  }], ctorParameters: function () { return [{ type: PromptService }, { type: CubeService }, { type: SessionService }, { type: DatasourceService }]; }, propDecorators: { tableElement: [{
14320
14379
  type: ViewChild,
14321
14380
  args: ['table']
@@ -14328,8 +14387,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
14328
14387
  }], _series: [{
14329
14388
  type: Input,
14330
14389
  args: ['series']
14331
- }], indices: [{
14332
- type: Input
14390
+ }], _indices: [{
14391
+ type: Input,
14392
+ args: ['indices']
14333
14393
  }], scope: [{
14334
14394
  type: Input
14335
14395
  }], sum: [{
@@ -14345,11 +14405,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
14345
14405
  args: ['explore']
14346
14406
  }], loadingChange: [{
14347
14407
  type: Output
14348
- }] } });
14349
- class CubeInfoCellArgs {
14350
- get value() { return this._value; }
14351
- get summary() { return this._summary; }
14352
- }
14408
+ }] } });
14353
14409
 
14354
14410
  class CubeMatrixBase {
14355
14411
  constructor(_service, _ds, _session) {
@@ -19134,7 +19190,7 @@ class SyncfusionChartModule {
19134
19190
  }
19135
19191
  SyncfusionChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SyncfusionChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19136
19192
  SyncfusionChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SyncfusionChartModule, imports: [ChartModule, AccumulationChartAllModule, SparklineAllModule], exports: [ChartModule, AccumulationChartAllModule, SparklineAllModule] });
19137
- SyncfusionChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SyncfusionChartModule, providers: [LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
19193
+ SyncfusionChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SyncfusionChartModule, providers: [AccumulationDistributionIndicatorService, FunnelSeriesService, StackingStepAreaSeriesService, PieSeriesService, PyramidSeriesService, LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
19138
19194
  SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService,
19139
19195
  StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService,
19140
19196
  BarSeriesService, StackingBarSeriesService, RangeColumnSeriesService, BubbleSeriesService, TooltipService,
@@ -19149,7 +19205,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
19149
19205
  args: [{
19150
19206
  imports: [ChartModule, AccumulationChartAllModule, SparklineAllModule],
19151
19207
  exports: [ChartModule, AccumulationChartAllModule, SparklineAllModule],
19152
- providers: [LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
19208
+ providers: [AccumulationDistributionIndicatorService, FunnelSeriesService, StackingStepAreaSeriesService, PieSeriesService, PyramidSeriesService, LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
19153
19209
  SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService,
19154
19210
  StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService,
19155
19211
  BarSeriesService, StackingBarSeriesService, RangeColumnSeriesService, BubbleSeriesService, TooltipService,
@@ -19566,7 +19622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
19566
19622
  }] } });
19567
19623
 
19568
19624
  /** cube matrix component*/
19569
- class CubeMatrixPageComponent extends CubeMatrixBase {
19625
+ class CubeMatrixPopupComponent extends CubeMatrixBase {
19570
19626
  /** filters */
19571
19627
  /** cube-info ctor */
19572
19628
  constructor(_ref, data, service, ds, session, _sb) {
@@ -19576,9 +19632,9 @@ class CubeMatrixPageComponent extends CubeMatrixBase {
19576
19632
  this.preloading = true;
19577
19633
  if (!data.options)
19578
19634
  throw 'no data options';
19579
- const { axes: base, options: { indices, xAxis, serie, filters, cube, sum } } = data;
19635
+ const { axes: base, options: { indices, xAxis, series, filters, cube, sum } } = data;
19580
19636
  this.cube = cube;
19581
- this.series = serie;
19637
+ this.series = series;
19582
19638
  this.xAxis = xAxis;
19583
19639
  this.sum = sum;
19584
19640
  this.indices = indices;
@@ -19594,9 +19650,9 @@ class CubeMatrixPageComponent extends CubeMatrixBase {
19594
19650
  });
19595
19651
  }
19596
19652
  }
19597
- CubeMatrixPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixPageComponent, deps: [{ token: PopupRef }, { token: POPUP_DATA }, { token: CubeService }, { token: DatasourceService }, { token: SessionService }, { token: PromptService }], target: i0.ɵɵFactoryTarget.Component });
19598
- CubeMatrixPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CubeMatrixPageComponent, selector: "ng-component", viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum [interactive]=\"false\"\r\n [filters]=\"axes\" [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}\n"], components: [{ type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["cube", "xAxis", "series", "indices", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": TranslatePipe, "async": i10$1.AsyncPipe, "typeValue": TypeValuePipe } });
19599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixPageComponent, decorators: [{
19653
+ CubeMatrixPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixPopupComponent, deps: [{ token: PopupRef }, { token: POPUP_DATA }, { token: CubeService }, { token: DatasourceService }, { token: SessionService }, { token: PromptService }], target: i0.ɵɵFactoryTarget.Component });
19654
+ CubeMatrixPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CubeMatrixPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum [interactive]=\"false\"\r\n [filters]=\"axes\" [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}\n"], components: [{ type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["cube", "xAxis", "series", "indices", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": TranslatePipe, "async": i10$1.AsyncPipe, "typeValue": TypeValuePipe } });
19655
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixPopupComponent, decorators: [{
19600
19656
  type: Component,
19601
19657
  args: [{ template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=sum [interactive]=\"false\"\r\n [filters]=\"axes\" [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}\n"] }]
19602
19658
  }], ctorParameters: function () { return [{ type: PopupRef, decorators: [{
@@ -19734,7 +19790,7 @@ class CubeInfo {
19734
19790
  this._cf = _cf;
19735
19791
  }
19736
19792
  navigate(axes, options) {
19737
- const { cube, view, serie, xAxis, filters, aggregate, indices, sum } = options || {};
19793
+ const { cube, view, series, xAxis, filters, aggregate, indices, sum } = options || {};
19738
19794
  const ccube = cube ? this._session.profile.cubes.find(c => c.name === cube) : this._session.profile.cubes[0];
19739
19795
  if (isArray(axes))
19740
19796
  axes = this._mapAxes(ccube, axes);
@@ -19743,7 +19799,7 @@ class CubeInfo {
19743
19799
  queryParams: axes
19744
19800
  });
19745
19801
  else {
19746
- this._router.navigate(['cube', ccube.name, 'i', xAxis, serie], {
19802
+ this._router.navigate(['cube', ccube.name, 'i', xAxis, series], {
19747
19803
  queryParams: axes,
19748
19804
  state: { indices, aggregate, filters, sum }
19749
19805
  });
@@ -19769,7 +19825,7 @@ class CubeInfo {
19769
19825
  else {
19770
19826
  if (!options)
19771
19827
  throw 'no options';
19772
- this._open(CubeMatrixPageComponent, element, {
19828
+ this._open(CubeMatrixPopupComponent, element, {
19773
19829
  axes,
19774
19830
  options
19775
19831
  });
@@ -20175,6 +20231,8 @@ let CubeAnalysisWidget = class CubeAnalysisWidget {
20175
20231
  case 'Doughnut':
20176
20232
  case 'HalfDoughnut':
20177
20233
  case 'Pie':
20234
+ case 'Funnel':
20235
+ case 'Pyramid':
20178
20236
  comp = CubeAccumAnalysisWidget;
20179
20237
  break;
20180
20238
  default:
@@ -20259,13 +20317,17 @@ let CubeWidgetFilterComponent = class CubeWidgetFilterComponent {
20259
20317
  this._session = _session;
20260
20318
  this._fb = _fb;
20261
20319
  this.exclude = [];
20262
- const { xAxis, exclude, cube: name } = this._widgetRef.options;
20320
+ const { xAxis, series, exclude, cube: name } = this._widgetRef.options;
20263
20321
  this.cube = name;
20264
- if (xAxis) {
20265
- if (isArray(xAxis))
20266
- this.exclude = [...xAxis];
20322
+ if (isArray(xAxis))
20323
+ this.exclude = [...xAxis];
20324
+ else
20325
+ this.exclude.push(xAxis);
20326
+ if (series) {
20327
+ if (isArray(series))
20328
+ this.exclude = this.exclude.concat(series);
20267
20329
  else
20268
- this.exclude.push(xAxis);
20330
+ this.exclude.push(series);
20269
20331
  }
20270
20332
  if (exclude) {
20271
20333
  if (isArray(exclude))
@@ -22706,7 +22768,10 @@ class CombinationPickerBody {
22706
22768
  ...defaults
22707
22769
  };
22708
22770
  codes.slice(0, this._axes.length).forEach((a, i) => axes[this._axes[i].name] = a);
22709
- this._accountInfo.popup(axes, evt.srcElement, { ...this._data.exploreSettings, cube: this._cube.name });
22771
+ this._accountInfo.popup(axes, evt.srcElement, {
22772
+ ...this._data.exploreSettings,
22773
+ cube: this._cube.name
22774
+ });
22710
22775
  evt.cancelBubble = true;
22711
22776
  evt.preventDefault();
22712
22777
  evt.stopPropagation();
@@ -25099,7 +25164,7 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
25099
25164
  DashboardComponent, WidgetItemComponent, CubeWidgetFilterComponent, CubeAccumAnalysisWidget, CubeAnalysisWidget, CubeChartAnalysisWidget, ActionsWidget, RecentsWidget,
25100
25165
  AskDialog, AboutDialog, ActionDialog,
25101
25166
  ImpersonateDialog,
25102
- ConversationComponent, CubeMatrixPageComponent,
25167
+ ConversationComponent, CubeMatrixPopupComponent,
25103
25168
  VersionCompareComponent, ExploreDocumentComponent, TasksComponent,
25104
25169
  PendingResultsWidget, CompareDepartmentsWidget, CubeDocumentsComponent, CubeDocumentsWidget,
25105
25170
  PersonalScoreWidget, PersonalActivityWidget, PeersPerformanceWidget, UsagePivotComponent, UsageChartComponent, UsageReportArgs,
@@ -25236,7 +25301,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
25236
25301
  DashboardComponent, WidgetItemComponent, CubeWidgetFilterComponent, CubeAccumAnalysisWidget, CubeAnalysisWidget, CubeChartAnalysisWidget, ActionsWidget, RecentsWidget,
25237
25302
  AskDialog, AboutDialog, ActionDialog,
25238
25303
  ImpersonateDialog,
25239
- ConversationComponent, CubeMatrixPageComponent,
25304
+ ConversationComponent, CubeMatrixPopupComponent,
25240
25305
  VersionCompareComponent, ExploreDocumentComponent, TasksComponent,
25241
25306
  PendingResultsWidget, CompareDepartmentsWidget, CubeDocumentsComponent, CubeDocumentsWidget,
25242
25307
  PersonalScoreWidget, PersonalActivityWidget, PeersPerformanceWidget, UsagePivotComponent, UsageChartComponent, UsageReportArgs,