@onecx/angular-accelerator 4.43.1 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/lib/angular-accelerator-primeng.module.mjs +53 -53
- package/esm2022/lib/angular-accelerator.module.mjs +168 -0
- package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +72 -0
- package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +109 -0
- package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +46 -0
- package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +399 -0
- package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +92 -0
- package/esm2022/lib/components/data-sort-base/data-sort-base.mjs +110 -0
- package/esm2022/lib/components/data-table/data-table.component.mjs +401 -0
- package/esm2022/lib/components/data-view/data-view.component.mjs +407 -0
- package/esm2022/lib/components/diagram/diagram.component.mjs +137 -0
- package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +109 -0
- package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +375 -0
- package/esm2022/lib/components/page-header/page-header.component.mjs +232 -0
- package/{esm2020 → esm2022}/lib/components/search-config/search-config.component.mjs +4 -4
- package/esm2022/lib/components/search-header/search-header.component.mjs +136 -0
- package/esm2022/lib/directives/advanced.directive.mjs +36 -0
- package/esm2022/lib/directives/if-breakpoint.directive.mjs +39 -0
- package/esm2022/lib/directives/if-permission.directive.mjs +80 -0
- package/esm2022/lib/directives/src.directive.mjs +59 -0
- package/esm2022/lib/functions/flatten-object.mjs +20 -0
- package/{esm2020 → esm2022}/lib/model/breadcrumb-menu-item.model.mjs +1 -1
- package/esm2022/lib/pipes/dynamic.pipe.mjs +58 -0
- package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +107 -0
- package/esm2022/lib/services/app-config-service.mjs +43 -0
- package/esm2022/lib/services/breadcrumb.service.mjs +113 -0
- package/esm2022/lib/services/translation-cache.service.mjs +41 -0
- package/esm2022/lib/utils/async-translate-loader.utils.mjs +12 -0
- package/esm2022/lib/utils/caching-translate-loader.utils.mjs +15 -0
- package/{esm2020 → esm2022}/lib/utils/colorutils.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/dateutils.mjs +6 -6
- package/esm2022/lib/utils/objectutils.mjs +30 -0
- package/{esm2020 → esm2022}/lib/utils/translate.combined.loader.mjs +1 -1
- package/{esm2020 → esm2022}/testing/column-group-selection.harness.mjs +2 -2
- package/esm2022/testing/custom-group-column-selector.harness.mjs +31 -0
- package/esm2022/testing/data-layout-selection.harness.mjs +33 -0
- package/esm2022/testing/data-list-grid.harness.mjs +47 -0
- package/esm2022/testing/data-table.harness.mjs +63 -0
- package/{esm2020 → esm2022}/testing/data-view.harness.mjs +2 -2
- package/esm2022/testing/default-grid-item.harness.mjs +24 -0
- package/esm2022/testing/default-list-item.harness.mjs +24 -0
- package/esm2022/testing/diagram.harness.mjs +22 -0
- package/{esm2020 → esm2022}/testing/group-by-count-diagram.harness.mjs +2 -2
- package/{esm2020 → esm2022}/testing/interactive-data-view.harness.mjs +2 -2
- package/esm2022/testing/more-actions-menu-button.harness.mjs +35 -0
- package/esm2022/testing/page-header.harness.mjs +78 -0
- package/{esm2020 → esm2022}/testing/search-config.harness.mjs +2 -2
- package/{esm2020 → esm2022}/testing/search-header.harness.mjs +2 -2
- package/{fesm2020 → fesm2022}/onecx-angular-accelerator-testing.mjs +34 -28
- package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/onecx-angular-accelerator.mjs +220 -220
- package/fesm2022/onecx-angular-accelerator.mjs.map +1 -0
- package/lib/components/column-group-selection/column-group-selection.component.d.ts +1 -1
- package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +1 -1
- package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +1 -1
- package/lib/components/data-list-grid/data-list-grid.component.d.ts +1 -1
- package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +1 -1
- package/lib/components/data-table/data-table.component.d.ts +1 -1
- package/lib/components/data-view/data-view.component.d.ts +1 -1
- package/lib/components/diagram/diagram.component.d.ts +2 -2
- package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +1 -1
- package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +1 -1
- package/lib/components/page-header/page-header.component.d.ts +1 -1
- package/lib/components/search-config/search-config.component.d.ts +1 -1
- package/lib/components/search-header/search-header.component.d.ts +1 -1
- package/lib/directives/if-breakpoint.directive.d.ts +1 -1
- package/lib/directives/if-permission.directive.d.ts +1 -1
- package/lib/directives/src.directive.d.ts +1 -1
- package/lib/model/breadcrumb-menu-item.model.d.ts +2 -2
- package/package.json +22 -30
- package/testing/data-list-grid.harness.d.ts +1 -1
- package/esm2020/lib/angular-accelerator.module.mjs +0 -168
- package/esm2020/lib/components/column-group-selection/column-group-selection.component.mjs +0 -72
- package/esm2020/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +0 -109
- package/esm2020/lib/components/data-layout-selection/data-layout-selection.component.mjs +0 -45
- package/esm2020/lib/components/data-list-grid/data-list-grid.component.mjs +0 -399
- package/esm2020/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +0 -92
- package/esm2020/lib/components/data-sort-base/data-sort-base.mjs +0 -110
- package/esm2020/lib/components/data-table/data-table.component.mjs +0 -401
- package/esm2020/lib/components/data-view/data-view.component.mjs +0 -407
- package/esm2020/lib/components/diagram/diagram.component.mjs +0 -137
- package/esm2020/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +0 -109
- package/esm2020/lib/components/interactive-data-view/interactive-data-view.component.mjs +0 -375
- package/esm2020/lib/components/page-header/page-header.component.mjs +0 -232
- package/esm2020/lib/components/search-header/search-header.component.mjs +0 -136
- package/esm2020/lib/directives/advanced.directive.mjs +0 -36
- package/esm2020/lib/directives/if-breakpoint.directive.mjs +0 -39
- package/esm2020/lib/directives/if-permission.directive.mjs +0 -80
- package/esm2020/lib/directives/src.directive.mjs +0 -59
- package/esm2020/lib/functions/flatten-object.mjs +0 -20
- package/esm2020/lib/pipes/dynamic.pipe.mjs +0 -58
- package/esm2020/lib/pipes/ocxtimeago.pipe.mjs +0 -107
- package/esm2020/lib/services/app-config-service.mjs +0 -43
- package/esm2020/lib/services/breadcrumb.service.mjs +0 -113
- package/esm2020/lib/services/translation-cache.service.mjs +0 -41
- package/esm2020/lib/utils/async-translate-loader.utils.mjs +0 -12
- package/esm2020/lib/utils/caching-translate-loader.utils.mjs +0 -15
- package/esm2020/lib/utils/objectutils.mjs +0 -30
- package/esm2020/testing/custom-group-column-selector.harness.mjs +0 -31
- package/esm2020/testing/data-layout-selection.harness.mjs +0 -33
- package/esm2020/testing/data-list-grid.harness.mjs +0 -47
- package/esm2020/testing/data-table.harness.mjs +0 -57
- package/esm2020/testing/default-grid-item.harness.mjs +0 -24
- package/esm2020/testing/default-list-item.harness.mjs +0 -24
- package/esm2020/testing/diagram.harness.mjs +0 -22
- package/esm2020/testing/more-actions-menu-button.harness.mjs +0 -35
- package/esm2020/testing/page-header.harness.mjs +0 -78
- package/fesm2015/onecx-angular-accelerator-testing.mjs +0 -541
- package/fesm2015/onecx-angular-accelerator-testing.mjs.map +0 -1
- package/fesm2015/onecx-angular-accelerator.mjs +0 -3583
- package/fesm2015/onecx-angular-accelerator.mjs.map +0 -1
- package/fesm2020/onecx-angular-accelerator-testing.mjs.map +0 -1
- package/fesm2020/onecx-angular-accelerator.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/column-type.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-action.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-column-name-id.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-sort-direction.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/data-table-column.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/diagram-column.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/diagram-data.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/diagram-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/model/search-config-info.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/create-remote-component-translate-loader.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/create-translate-loader.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/enum-to-dropdown-options.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/primeicon.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/onecx-angular-accelerator.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/onecx-angular-accelerator-testing.mjs +0 -0
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
3
|
-
import * as d3 from 'd3-scale-chromatic';
|
|
4
|
-
import { PrimeIcons } from 'primeng/api';
|
|
5
|
-
import { ColorUtils } from '../../utils/colorutils';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@ngx-translate/core";
|
|
8
|
-
import * as i2 from "@angular/common";
|
|
9
|
-
import * as i3 from "primeng/api";
|
|
10
|
-
import * as i4 from "primeng/selectbutton";
|
|
11
|
-
import * as i5 from "primeng/chart";
|
|
12
|
-
import * as i6 from "primeng/message";
|
|
13
|
-
import * as i7 from "@angular/forms";
|
|
14
|
-
const allDiagramTypes = [
|
|
15
|
-
{ icon: PrimeIcons.CHART_PIE, layout: "PIE" /* DiagramType.PIE */, titleKey: 'OCX_DIAGRAM.SWITCH_DIAGRAM_TYPE.PIE' },
|
|
16
|
-
{
|
|
17
|
-
icon: PrimeIcons.BARS,
|
|
18
|
-
layout: "HORIZONTAL_BAR" /* DiagramType.HORIZONTAL_BAR */,
|
|
19
|
-
titleKey: 'OCX_DIAGRAM.SWITCH_DIAGRAM_TYPE.HORIZONTAL_BAR',
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
icon: PrimeIcons.CHART_BAR,
|
|
23
|
-
layout: "VERTICAL_BAR" /* DiagramType.VERTICAL_BAR */,
|
|
24
|
-
titleKey: 'OCX_DIAGRAM.SWITCH_DIAGRAM_TYPE.VERTICAL_BAR',
|
|
25
|
-
},
|
|
26
|
-
];
|
|
27
|
-
export class DiagramComponent {
|
|
28
|
-
get diagramType() {
|
|
29
|
-
return this._diagramType;
|
|
30
|
-
}
|
|
31
|
-
set diagramType(value) {
|
|
32
|
-
this._diagramType = value;
|
|
33
|
-
this.selectedDiagramType = allDiagramTypes.find((v) => v.layout === value);
|
|
34
|
-
this.chartType = this.diagramTypeToChartType(value);
|
|
35
|
-
}
|
|
36
|
-
get supportedDiagramTypes() {
|
|
37
|
-
return this._supportedDiagramTypes;
|
|
38
|
-
}
|
|
39
|
-
set supportedDiagramTypes(value) {
|
|
40
|
-
this._supportedDiagramTypes = value;
|
|
41
|
-
this.shownDiagramTypes = allDiagramTypes.filter((vl) => this.supportedDiagramTypes.includes(vl.layout));
|
|
42
|
-
}
|
|
43
|
-
constructor(translateService) {
|
|
44
|
-
this.translateService = translateService;
|
|
45
|
-
this.sumKey = 'OCX_DIAGRAM.SUM';
|
|
46
|
-
this._diagramType = "PIE" /* DiagramType.PIE */;
|
|
47
|
-
this.chartType = 'pie';
|
|
48
|
-
this._supportedDiagramTypes = [];
|
|
49
|
-
this.dataSelected = new EventEmitter();
|
|
50
|
-
this.diagramTypeChanged = new EventEmitter();
|
|
51
|
-
this.shownDiagramTypes = [];
|
|
52
|
-
// Changing the colorRangeInfo, will change the range of the color palette of the diagram.
|
|
53
|
-
this.colorRangeInfo = {
|
|
54
|
-
colorStart: 0,
|
|
55
|
-
colorEnd: 1,
|
|
56
|
-
useEndAsStart: false,
|
|
57
|
-
};
|
|
58
|
-
// Changing the colorScale, will change the thematic color appearance of the diagram.
|
|
59
|
-
this.colorScale = d3.interpolateCool;
|
|
60
|
-
}
|
|
61
|
-
ngOnChanges() {
|
|
62
|
-
this.generateChart(this.colorScale, this.colorRangeInfo);
|
|
63
|
-
}
|
|
64
|
-
ngOnInit() {
|
|
65
|
-
this.generateChart(this.colorScale, this.colorRangeInfo);
|
|
66
|
-
}
|
|
67
|
-
generateChart(colorScale, colorRangeInfo) {
|
|
68
|
-
if (this.data) {
|
|
69
|
-
const inputData = this.data.map((diagramData) => diagramData.value);
|
|
70
|
-
this.amountOfData = this.data.reduce((acc, current) => acc + current.value, 0);
|
|
71
|
-
const COLORS = interpolateColors(this.data.length, colorScale, colorRangeInfo);
|
|
72
|
-
this.chartData = {
|
|
73
|
-
labels: this.data.map((data) => data.label),
|
|
74
|
-
datasets: [
|
|
75
|
-
{
|
|
76
|
-
data: inputData,
|
|
77
|
-
backgroundColor: COLORS,
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
this.chartOptions = {
|
|
83
|
-
plugins: {
|
|
84
|
-
legend: {
|
|
85
|
-
position: 'bottom',
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
maintainAspectRatio: false,
|
|
89
|
-
...(this._diagramType === "VERTICAL_BAR" /* DiagramType.VERTICAL_BAR */ && {
|
|
90
|
-
plugins: { legend: { display: false } },
|
|
91
|
-
scales: { y: { ticks: { precision: 0 } } },
|
|
92
|
-
}),
|
|
93
|
-
...(this._diagramType === "HORIZONTAL_BAR" /* DiagramType.HORIZONTAL_BAR */ && {
|
|
94
|
-
indexAxis: 'y',
|
|
95
|
-
plugins: { legend: { display: false } },
|
|
96
|
-
scales: { x: { ticks: { precision: 0 } } },
|
|
97
|
-
}),
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
diagramTypeToChartType(value) {
|
|
101
|
-
if (value === "PIE" /* DiagramType.PIE */)
|
|
102
|
-
return 'pie';
|
|
103
|
-
else if (value === "HORIZONTAL_BAR" /* DiagramType.HORIZONTAL_BAR */ || value === "VERTICAL_BAR" /* DiagramType.VERTICAL_BAR */)
|
|
104
|
-
return 'bar';
|
|
105
|
-
return 'pie';
|
|
106
|
-
}
|
|
107
|
-
dataClicked(event) {
|
|
108
|
-
this.dataSelected.emit(event.length);
|
|
109
|
-
}
|
|
110
|
-
onDiagramTypeChanged(event) {
|
|
111
|
-
this.diagramType = event.value.layout;
|
|
112
|
-
this.generateChart(this.colorScale, this.colorRangeInfo);
|
|
113
|
-
this.diagramTypeChanged.emit(event.value.layout);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
DiagramComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagramComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
117
|
-
DiagramComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DiagramComponent, selector: "ocx-diagram", inputs: { data: "data", sumKey: "sumKey", diagramType: "diagramType", supportedDiagramTypes: "supportedDiagramTypes" }, outputs: { dataSelected: "dataSelected", diagramTypeChanged: "diagramTypeChanged" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"this.data\">\n <div class=\"flex justify-content-center pb-2\" *ngIf=\"shownDiagramTypes.length > 1\">\n <p-selectButton\n [options]=\"shownDiagramTypes\"\n [(ngModel)]=\"selectedDiagramType\"\n optionLabel=\"icon\"\n (onChange)=\"onDiagramTypeChanged($event)\"\n name=\"diagram-type-select-button\"\n >\n <ng-template let-item pTemplate>\n <i [class]=\"item.icon\" [title]=\"item.title || (item.titleKey | translate)\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"w-full flex justify-content-center\">\n <p-chart\n id=\"diagram\"\n [type]=\"chartType\"\n [data]=\"chartData\"\n [responsive]=\"false\"\n [options]=\"chartOptions\"\n (onDataSelect)=\"dataClicked($event)\"\n ></p-chart>\n </div>\n <div class=\"w-full flex justify-content-center mt-2 sumKey\">\n <p class=\"text-md font-medium text-700\">\n <span name=\"sumLabel\"> {{ sumKey | translate }}</span> : <span name=\"amountOfData\">{{ amountOfData}}</span>\n </p>\n </div>\n</ng-container>\n\n<div *ngIf=\"!this.data\" class=\"w-full flex justify-content-center\">\n <p-message severity=\"info\" text=\"{{ 'OCX_DIAGRAM.NO_DATA' | translate }}\"></p-message>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: i5.UIChart, selector: "p-chart", inputs: ["type", "plugins", "width", "height", "responsive", "data", "options"], outputs: ["onDataSelect"] }, { kind: "component", type: i6.UIMessage, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagramComponent, decorators: [{
|
|
119
|
-
type: Component,
|
|
120
|
-
args: [{ selector: 'ocx-diagram', template: "<ng-container *ngIf=\"this.data\">\n <div class=\"flex justify-content-center pb-2\" *ngIf=\"shownDiagramTypes.length > 1\">\n <p-selectButton\n [options]=\"shownDiagramTypes\"\n [(ngModel)]=\"selectedDiagramType\"\n optionLabel=\"icon\"\n (onChange)=\"onDiagramTypeChanged($event)\"\n name=\"diagram-type-select-button\"\n >\n <ng-template let-item pTemplate>\n <i [class]=\"item.icon\" [title]=\"item.title || (item.titleKey | translate)\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"w-full flex justify-content-center\">\n <p-chart\n id=\"diagram\"\n [type]=\"chartType\"\n [data]=\"chartData\"\n [responsive]=\"false\"\n [options]=\"chartOptions\"\n (onDataSelect)=\"dataClicked($event)\"\n ></p-chart>\n </div>\n <div class=\"w-full flex justify-content-center mt-2 sumKey\">\n <p class=\"text-md font-medium text-700\">\n <span name=\"sumLabel\"> {{ sumKey | translate }}</span> : <span name=\"amountOfData\">{{ amountOfData}}</span>\n </p>\n </div>\n</ng-container>\n\n<div *ngIf=\"!this.data\" class=\"w-full flex justify-content-center\">\n <p-message severity=\"info\" text=\"{{ 'OCX_DIAGRAM.NO_DATA' | translate }}\"></p-message>\n</div>\n", styles: ["::ng-deep .p-buttonset .p-button{min-width:auto}::ng-deep .p-buttonset{display:flex}\n"] }]
|
|
121
|
-
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { data: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], sumKey: [{
|
|
124
|
-
type: Input
|
|
125
|
-
}], diagramType: [{
|
|
126
|
-
type: Input
|
|
127
|
-
}], supportedDiagramTypes: [{
|
|
128
|
-
type: Input
|
|
129
|
-
}], dataSelected: [{
|
|
130
|
-
type: Output
|
|
131
|
-
}], diagramTypeChanged: [{
|
|
132
|
-
type: Output
|
|
133
|
-
}] } });
|
|
134
|
-
function interpolateColors(amountOfData, colorScale, colorRangeInfo) {
|
|
135
|
-
return ColorUtils.interpolateColors(amountOfData, colorScale, colorRangeInfo);
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RpYWdyYW0vZGlhZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RpYWdyYW0vZGlhZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV0RCxPQUFPLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFBOzs7Ozs7Ozs7QUFVbkQsTUFBTSxlQUFlLEdBQXFCO0lBQ3hDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSw2QkFBaUIsRUFBRSxRQUFRLEVBQUUscUNBQXFDLEVBQUU7SUFDeEc7UUFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsTUFBTSxtREFBNEI7UUFDbEMsUUFBUSxFQUFFLGdEQUFnRDtLQUMzRDtJQUNEO1FBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTO1FBQzFCLE1BQU0sK0NBQTBCO1FBQ2hDLFFBQVEsRUFBRSw4Q0FBOEM7S0FDekQ7Q0FDRixDQUFBO0FBT0QsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDMUIsQ0FBQztJQUNELElBQUks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LEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRCxDQUFDOzs4R0FsR1UsZ0JBQWdCO2tHQUFoQixnQkFBZ0IscVJDcEM3QixxeENBa0NBOzRGREVhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO3VHQUtkLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0YsV0FBVztzQkFEZCxLQUFLO2dCQVdGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFRSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTs7QUEyRVQsU0FBUyxpQkFBaUIsQ0FBQyxZQUFvQixFQUFFLFVBQWUsRUFBRSxjQUFtQjtJQUNuRixPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0FBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBDaGFydERhdGEsIENoYXJ0T3B0aW9ucyB9IGZyb20gJ2NoYXJ0LmpzJ1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJ1xuaW1wb3J0IHsgUHJpbWVJY29ucyB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgRGlhZ3JhbURhdGEgfSBmcm9tICcuLi8uLi9tb2RlbC9kaWFncmFtLWRhdGEnXG5pbXBvcnQgeyBEaWFncmFtVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2RpYWdyYW0tdHlwZSdcbmltcG9ydCB7IENvbG9yVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9jb2xvcnV0aWxzJ1xuaW1wb3J0IHsgUHJpbWVJY29uIH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJpbWVpY29uLnV0aWxzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWdyYW1MYXlvdXRzIHtcbiAgaWNvbjogUHJpbWVJY29uXG4gIGxheW91dDogRGlhZ3JhbVR5cGVcbiAgdGl0bGU/OiBzdHJpbmdcbiAgdGl0bGVLZXk6IHN0cmluZ1xufVxuXG5jb25zdCBhbGxEaWFncmFtVHlwZXM6IERpYWdyYW1MYXlvdXRzW10gPSBbXG4gIHsgaWNvbjogUHJpbWVJY29ucy5DSEFSVF9QSUUsIGxheW91dDogRGlhZ3JhbVR5cGUuUElFLCB0aXRsZUtleTogJ09DWF9ESUFHUkFNLlNXSVRDSF9ESUFHUkFNX1RZUEUuUElFJyB9LFxuICB7XG4gICAgaWNvbjogUHJpbWVJY29ucy5CQVJTLFxuICAgIGxheW91dDogRGlhZ3JhbVR5cGUuSE9SSVpPTlRBTF9CQVIsXG4gICAgdGl0bGVLZXk6ICdPQ1hfRElBR1JBTS5TV0lUQ0hfRElBR1JBTV9UWVBFLkhPUklaT05UQUxfQkFSJyxcbiAgfSxcbiAge1xuICAgIGljb246IFByaW1lSWNvbnMuQ0hBUlRfQkFSLFxuICAgIGxheW91dDogRGlhZ3JhbVR5cGUuVkVSVElDQUxfQkFSLFxuICAgIHRpdGxlS2V5OiAnT0NYX0RJQUdSQU0uU1dJVENIX0RJQUdSQU1fVFlQRS5WRVJUSUNBTF9CQVInLFxuICB9LFxuXVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtZGlhZ3JhbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFncmFtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGlhZ3JhbS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEaWFncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRhOiBEaWFncmFtRGF0YVtdIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHN1bUtleSA9ICdPQ1hfRElBR1JBTS5TVU0nXG4gIHByaXZhdGUgX2RpYWdyYW1UeXBlOiBEaWFncmFtVHlwZSA9IERpYWdyYW1UeXBlLlBJRVxuICBzZWxlY3RlZERpYWdyYW1UeXBlOiBEaWFncmFtTGF5b3V0cyB8IHVuZGVmaW5lZFxuICBwdWJsaWMgY2hhcnRUeXBlID0gJ3BpZSdcbiAgQElucHV0KClcbiAgZ2V0IGRpYWdyYW1UeXBlKCk6IERpYWdyYW1UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZGlhZ3JhbVR5cGVcbiAgfVxuICBzZXQgZGlhZ3JhbVR5cGUodmFsdWU6IERpYWdyYW1UeXBlKSB7XG4gICAgdGhpcy5fZGlhZ3JhbVR5cGUgPSB2YWx1ZVxuICAgIHRoaXMuc2VsZWN0ZWREaWFncmFtVHlwZSA9IGFsbERpYWdyYW1UeXBlcy5maW5kKCh2KSA9PiB2LmxheW91dCA9PT0gdmFsdWUpXG4gICAgdGhpcy5jaGFydFR5cGUgPSB0aGlzLmRpYWdyYW1UeXBlVG9DaGFydFR5cGUodmFsdWUpXG4gIH1cbiAgcHJpdmF0ZSBfc3VwcG9ydGVkRGlhZ3JhbVR5cGVzOiBEaWFncmFtVHlwZVtdID0gW11cbiAgQElucHV0KClcbiAgZ2V0IHN1cHBvcnRlZERpYWdyYW1UeXBlcygpOiBEaWFncmFtVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc3VwcG9ydGVkRGlhZ3JhbVR5cGVzXG4gIH1cbiAgc2V0IHN1cHBvcnRlZERpYWdyYW1UeXBlcyh2YWx1ZTogRGlhZ3JhbVR5cGVbXSkge1xuICAgIHRoaXMuX3N1cHBvcnRlZERpYWdyYW1UeXBlcyA9IHZhbHVlXG4gICAgdGhpcy5zaG93bkRpYWdyYW1UeXBlcyA9IGFsbERpYWdyYW1UeXBlcy5maWx0ZXIoKHZsKSA9PiB0aGlzLnN1cHBvcnRlZERpYWdyYW1UeXBlcy5pbmNsdWRlcyh2bC5sYXlvdXQpKVxuICB9XG4gIEBPdXRwdXQoKSBkYXRhU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBkaWFncmFtVHlwZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxEaWFncmFtVHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgY2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbnMgfCB1bmRlZmluZWRcbiAgY2hhcnREYXRhOiBDaGFydERhdGEgfCB1bmRlZmluZWRcbiAgYW1vdW50T2ZEYXRhOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXG4gIHNob3duRGlhZ3JhbVR5cGVzOiBEaWFncmFtTGF5b3V0c1tdID0gW11cbiAgLy8gQ2hhbmdpbmcgdGhlIGNvbG9yUmFuZ2VJbmZvLCB3aWxsIGNoYW5nZSB0aGUgcmFuZ2Ugb2YgdGhlIGNvbG9yIHBhbGV0dGUgb2YgdGhlIGRpYWdyYW0uXG4gIHByaXZhdGUgY29sb3JSYW5nZUluZm8gPSB7XG4gICAgY29sb3JTdGFydDogMCxcbiAgICBjb2xvckVuZDogMSxcbiAgICB1c2VFbmRBc1N0YXJ0OiBmYWxzZSxcbiAgfVxuICAvLyBDaGFuZ2luZyB0aGUgY29sb3JTY2FsZSwgd2lsbCBjaGFuZ2UgdGhlIHRoZW1hdGljIGNvbG9yIGFwcGVhcmFuY2Ugb2YgdGhlIGRpYWdyYW0uXG4gIHByaXZhdGUgY29sb3JTY2FsZSA9IGQzLmludGVycG9sYXRlQ29vbFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRlQ2hhcnQodGhpcy5jb2xvclNjYWxlLCB0aGlzLmNvbG9yUmFuZ2VJbmZvKVxuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJhdGVDaGFydCh0aGlzLmNvbG9yU2NhbGUsIHRoaXMuY29sb3JSYW5nZUluZm8pXG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVDaGFydChjb2xvclNjYWxlOiBhbnksIGNvbG9yUmFuZ2VJbmZvOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICBjb25zdCBpbnB1dERhdGEgPSB0aGlzLmRhdGEubWFwKChkaWFncmFtRGF0YSkgPT4gZGlhZ3JhbURhdGEudmFsdWUpXG5cbiAgICAgIHRoaXMuYW1vdW50T2ZEYXRhID0gdGhpcy5kYXRhLnJlZHVjZSgoYWNjLCBjdXJyZW50KSA9PiBhY2MgKyBjdXJyZW50LnZhbHVlLCAwKVxuICAgICAgY29uc3QgQ09MT1JTID0gaW50ZXJwb2xhdGVDb2xvcnModGhpcy5kYXRhLmxlbmd0aCwgY29sb3JTY2FsZSwgY29sb3JSYW5nZUluZm8pXG4gICAgICB0aGlzLmNoYXJ0RGF0YSA9IHtcbiAgICAgICAgbGFiZWxzOiB0aGlzLmRhdGEubWFwKChkYXRhKSA9PiBkYXRhLmxhYmVsKSxcbiAgICAgICAgZGF0YXNldHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhOiBpbnB1dERhdGEsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IENPTE9SUyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2hhcnRPcHRpb25zID0ge1xuICAgICAgcGx1Z2luczoge1xuICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsXG4gICAgICAuLi4odGhpcy5fZGlhZ3JhbVR5cGUgPT09IERpYWdyYW1UeXBlLlZFUlRJQ0FMX0JBUiAmJiB7XG4gICAgICAgIHBsdWdpbnM6IHsgbGVnZW5kOiB7IGRpc3BsYXk6IGZhbHNlIH0gfSxcbiAgICAgICAgc2NhbGVzOiB7IHk6IHsgdGlja3M6IHsgcHJlY2lzaW9uOiAwIH0gfSB9LFxuICAgICAgfSksXG4gICAgICAuLi4odGhpcy5fZGlhZ3JhbVR5cGUgPT09IERpYWdyYW1UeXBlLkhPUklaT05UQUxfQkFSICYmIHtcbiAgICAgICAgaW5kZXhBeGlzOiAneScsXG4gICAgICAgIHBsdWdpbnM6IHsgbGVnZW5kOiB7IGRpc3BsYXk6IGZhbHNlIH0gfSxcbiAgICAgICAgc2NhbGVzOiB7IHg6IHsgdGlja3M6IHsgcHJlY2lzaW9uOiAwIH0gfSB9LFxuICAgICAgfSksXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaWFncmFtVHlwZVRvQ2hhcnRUeXBlKHZhbHVlOiBEaWFncmFtVHlwZSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBEaWFncmFtVHlwZS5QSUUpIHJldHVybiAncGllJ1xuICAgIGVsc2UgaWYgKHZhbHVlID09PSBEaWFncmFtVHlwZS5IT1JJWk9OVEFMX0JBUiB8fCB2YWx1ZSA9PT0gRGlhZ3JhbVR5cGUuVkVSVElDQUxfQkFSKSByZXR1cm4gJ2JhcidcbiAgICByZXR1cm4gJ3BpZSdcbiAgfVxuXG4gIGRhdGFDbGlja2VkKGV2ZW50OiBbXSkge1xuICAgIHRoaXMuZGF0YVNlbGVjdGVkLmVtaXQoZXZlbnQubGVuZ3RoKVxuICB9XG5cbiAgb25EaWFncmFtVHlwZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlhZ3JhbVR5cGUgPSBldmVudC52YWx1ZS5sYXlvdXRcbiAgICB0aGlzLmdlbmVyYXRlQ2hhcnQodGhpcy5jb2xvclNjYWxlLCB0aGlzLmNvbG9yUmFuZ2VJbmZvKVxuICAgIHRoaXMuZGlhZ3JhbVR5cGVDaGFuZ2VkLmVtaXQoZXZlbnQudmFsdWUubGF5b3V0KVxuICB9XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUNvbG9ycyhhbW91bnRPZkRhdGE6IG51bWJlciwgY29sb3JTY2FsZTogYW55LCBjb2xvclJhbmdlSW5mbzogYW55KSB7XG4gIHJldHVybiBDb2xvclV0aWxzLmludGVycG9sYXRlQ29sb3JzKGFtb3VudE9mRGF0YSwgY29sb3JTY2FsZSwgY29sb3JSYW5nZUluZm8pXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidGhpcy5kYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcGItMlwiICpuZ0lmPVwic2hvd25EaWFncmFtVHlwZXMubGVuZ3RoID4gMVwiPlxuICAgICAgPHAtc2VsZWN0QnV0dG9uXG4gICAgICAgIFtvcHRpb25zXT1cInNob3duRGlhZ3JhbVR5cGVzXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERpYWdyYW1UeXBlXCJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJpY29uXCJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRGlhZ3JhbVR5cGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBuYW1lPVwiZGlhZ3JhbS10eXBlLXNlbGVjdC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPlxuICAgICAgICAgIDxpIFtjbGFzc109XCJpdGVtLmljb25cIiBbdGl0bGVdPVwiaXRlbS50aXRsZSB8fCAoaXRlbS50aXRsZUtleSB8IHRyYW5zbGF0ZSlcIj48L2k+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3Atc2VsZWN0QnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICA8cC1jaGFydFxuICAgICAgaWQ9XCJkaWFncmFtXCJcbiAgICAgIFt0eXBlXT1cImNoYXJ0VHlwZVwiXG4gICAgICBbZGF0YV09XCJjaGFydERhdGFcIlxuICAgICAgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIlxuICAgICAgW29wdGlvbnNdPVwiY2hhcnRPcHRpb25zXCJcbiAgICAgIChvbkRhdGFTZWxlY3QpPVwiZGF0YUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgPjwvcC1jaGFydD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTIgc3VtS2V5XCI+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtbWVkaXVtIHRleHQtNzAwXCI+XG4gICAgICA8c3BhbiBuYW1lPVwic3VtTGFiZWxcIj4ge3sgc3VtS2V5IHwgdHJhbnNsYXRlIH19PC9zcGFuPiA6IDxzcGFuIG5hbWU9XCJhbW91bnRPZkRhdGFcIj57eyBhbW91bnRPZkRhdGF9fTwvc3Bhbj5cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgKm5nSWY9XCIhdGhpcy5kYXRhXCIgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gIDxwLW1lc3NhZ2Ugc2V2ZXJpdHk9XCJpbmZvXCIgdGV4dD1cInt7ICdPQ1hfRElBR1JBTS5OT19EQVRBJyB8IHRyYW5zbGF0ZSB9fVwiPjwvcC1tZXNzYWdlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
3
|
-
import { BehaviorSubject, combineLatest, map, mergeMap, of } from 'rxjs';
|
|
4
|
-
import { ColumnType } from '../../model/column-type.model';
|
|
5
|
-
import { ObjectUtils } from '../../utils/objectutils';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@ngx-translate/core";
|
|
8
|
-
import * as i2 from "../diagram/diagram.component";
|
|
9
|
-
import * as i3 from "@angular/common";
|
|
10
|
-
export class GroupByCountDiagramComponent {
|
|
11
|
-
/**
|
|
12
|
-
* @deprecated Will be replaced by diagramType
|
|
13
|
-
*/
|
|
14
|
-
get type() {
|
|
15
|
-
return this.diagramType;
|
|
16
|
-
}
|
|
17
|
-
set type(value) {
|
|
18
|
-
this.diagramType = value;
|
|
19
|
-
}
|
|
20
|
-
get data() {
|
|
21
|
-
return this._data$.getValue();
|
|
22
|
-
}
|
|
23
|
-
set data(value) {
|
|
24
|
-
this._data$.next(value);
|
|
25
|
-
}
|
|
26
|
-
get columnType() {
|
|
27
|
-
return this._columnType$.getValue();
|
|
28
|
-
}
|
|
29
|
-
set columnType(value) {
|
|
30
|
-
this._columnType$.next(value);
|
|
31
|
-
}
|
|
32
|
-
get columnField() {
|
|
33
|
-
return this._columnField$.getValue();
|
|
34
|
-
}
|
|
35
|
-
set columnField(value) {
|
|
36
|
-
this._columnField$.next(value);
|
|
37
|
-
}
|
|
38
|
-
get column() {
|
|
39
|
-
return { columnType: this.columnType, id: this.columnField };
|
|
40
|
-
}
|
|
41
|
-
set column(value) {
|
|
42
|
-
this.columnType = value.columnType;
|
|
43
|
-
this.columnField = value.id;
|
|
44
|
-
}
|
|
45
|
-
constructor(translateService) {
|
|
46
|
-
this.translateService = translateService;
|
|
47
|
-
this.sumKey = 'SEARCH.SUMMARY_TITLE';
|
|
48
|
-
this.diagramType = "PIE" /* DiagramType.PIE */;
|
|
49
|
-
this.supportedDiagramTypes = [];
|
|
50
|
-
this._data$ = new BehaviorSubject([]);
|
|
51
|
-
this._columnType$ = new BehaviorSubject(ColumnType.STRING);
|
|
52
|
-
this._columnField$ = new BehaviorSubject('');
|
|
53
|
-
this.dataSelected = new EventEmitter();
|
|
54
|
-
this.diagramTypeChanged = new EventEmitter();
|
|
55
|
-
}
|
|
56
|
-
ngOnInit() {
|
|
57
|
-
this.diagramData$ = combineLatest([this._data$, this._columnField$, this._columnType$]).pipe(mergeMap(([data, columnField, columnType]) => {
|
|
58
|
-
const columnData = data.map((d) => ObjectUtils.resolveFieldData(d, columnField));
|
|
59
|
-
const occurrences = columnData.reduce((acc, current) => {
|
|
60
|
-
return acc.some((e) => e.label === current)
|
|
61
|
-
? (acc.find((e) => e.label === current).value++, acc)
|
|
62
|
-
: [...acc, { label: current, value: 1 }];
|
|
63
|
-
}, []);
|
|
64
|
-
if (columnType === ColumnType.TRANSLATION_KEY && occurrences.length > 0) {
|
|
65
|
-
return this.translateService.get(occurrences.map((o) => o.label)).pipe(map((translations) => occurrences.map((o) => ({
|
|
66
|
-
label: translations[o.label],
|
|
67
|
-
value: o.value,
|
|
68
|
-
}))));
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
return of(occurrences);
|
|
72
|
-
}
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
dataClicked(event) {
|
|
76
|
-
this.dataSelected.emit(event);
|
|
77
|
-
}
|
|
78
|
-
onDiagramTypeChanged(newDiagramType) {
|
|
79
|
-
this.diagramType = newDiagramType;
|
|
80
|
-
this.diagramTypeChanged.emit(newDiagramType);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
GroupByCountDiagramComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GroupByCountDiagramComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
-
GroupByCountDiagramComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GroupByCountDiagramComponent, selector: "ocx-group-by-count-diagram", inputs: { sumKey: "sumKey", diagramType: "diagramType", type: "type", supportedDiagramTypes: "supportedDiagramTypes", data: "data", columnType: "columnType", columnField: "columnField", column: "column" }, outputs: { dataSelected: "dataSelected", diagramTypeChanged: "diagramTypeChanged" }, ngImport: i0, template: "<ocx-diagram\n [data]=\"(diagramData$ | async) || []\"\n [sumKey]=\"sumKey\"\n [diagramType]=\"diagramType\"\n (onDataSelect)=\"dataClicked($event)\"\n [supportedDiagramTypes]=\"supportedDiagramTypes\"\n (diagramTypeChanged)=\"onDiagramTypeChanged($event)\"\n></ocx-diagram>\n", dependencies: [{ kind: "component", type: i2.DiagramComponent, selector: "ocx-diagram", inputs: ["data", "sumKey", "diagramType", "supportedDiagramTypes"], outputs: ["dataSelected", "diagramTypeChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GroupByCountDiagramComponent, decorators: [{
|
|
86
|
-
type: Component,
|
|
87
|
-
args: [{ selector: 'ocx-group-by-count-diagram', template: "<ocx-diagram\n [data]=\"(diagramData$ | async) || []\"\n [sumKey]=\"sumKey\"\n [diagramType]=\"diagramType\"\n (onDataSelect)=\"dataClicked($event)\"\n [supportedDiagramTypes]=\"supportedDiagramTypes\"\n (diagramTypeChanged)=\"onDiagramTypeChanged($event)\"\n></ocx-diagram>\n" }]
|
|
88
|
-
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { sumKey: [{
|
|
89
|
-
type: Input
|
|
90
|
-
}], diagramType: [{
|
|
91
|
-
type: Input
|
|
92
|
-
}], type: [{
|
|
93
|
-
type: Input
|
|
94
|
-
}], supportedDiagramTypes: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], data: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}], columnType: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], columnField: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], column: [{
|
|
103
|
-
type: Input
|
|
104
|
-
}], dataSelected: [{
|
|
105
|
-
type: Output
|
|
106
|
-
}], diagramTypeChanged: [{
|
|
107
|
-
type: Output
|
|
108
|
-
}] } });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnktY291bnQtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2dyb3VwLWJ5LWNvdW50LWRpYWdyYW0vZ3JvdXAtYnktY291bnQtZGlhZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2dyb3VwLWJ5LWNvdW50LWRpYWdyYW0vZ3JvdXAtYnktY291bnQtZGlhZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUUxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7Ozs7O0FBUXJELE1BQU0sT0FBTyw0QkFBNEI7SUFHdkM7O09BRUc7SUFDSCxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDekIsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLEtBQWtCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO0lBQzFCLENBQUM7SUFHRCxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUNELElBQUksSUFBSSxD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QkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG1hcCwgbWVyZ2VNYXAsIG9mIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9jb2x1bW4tdHlwZS5tb2RlbCdcbmltcG9ydCB7IERpYWdyYW1Db2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kaWFncmFtLWNvbHVtbidcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0dXRpbHMnXG5pbXBvcnQgeyBEaWFncmFtRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL2RpYWdyYW0tZGF0YSdcbmltcG9ydCB7IERpYWdyYW1UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGlhZ3JhbS10eXBlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtZ3JvdXAtYnktY291bnQtZGlhZ3JhbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1ieS1jb3VudC1kaWFncmFtLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR3JvdXBCeUNvdW50RGlhZ3JhbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN1bUtleSA9ICdTRUFSQ0guU1VNTUFSWV9USVRMRSdcbiAgQElucHV0KCkgZGlhZ3JhbVR5cGUgPSBEaWFncmFtVHlwZS5QSUVcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVwbGFjZWQgYnkgZGlhZ3JhbVR5cGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCB0eXBlKCk6IERpYWdyYW1UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5kaWFncmFtVHlwZVxuICB9XG4gIHNldCB0eXBlKHZhbHVlOiBEaWFncmFtVHlwZSkge1xuICAgIHRoaXMuZGlhZ3JhbVR5cGUgPSB2YWx1ZVxuICB9XG4gIEBJbnB1dCgpIHN1cHBvcnRlZERpYWdyYW1UeXBlczogRGlhZ3JhbVR5cGVbXSA9IFtdXG4gIHByaXZhdGUgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx1bmtub3duW10+KFtdKVxuICBASW5wdXQoKVxuICBnZXQgZGF0YSgpOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGRhdGEodmFsdWU6IHVua25vd25bXSkge1xuICAgIHRoaXMuX2RhdGEkLm5leHQodmFsdWUpXG4gIH1cbiAgZGlhZ3JhbURhdGEkOiBPYnNlcnZhYmxlPERpYWdyYW1EYXRhW10+IHwgdW5kZWZpbmVkXG5cbiAgcHJpdmF0ZSBfY29sdW1uVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbHVtblR5cGU+KENvbHVtblR5cGUuU1RSSU5HKVxuICBASW5wdXQoKVxuICBnZXQgY29sdW1uVHlwZSgpOiBDb2x1bW5UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVHlwZSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBjb2x1bW5UeXBlKHZhbHVlOiBDb2x1bW5UeXBlKSB7XG4gICAgdGhpcy5fY29sdW1uVHlwZSQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgX2NvbHVtbkZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJylcbiAgQElucHV0KClcbiAgZ2V0IGNvbHVtbkZpZWxkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbkZpZWxkJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGNvbHVtbkZpZWxkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb2x1bW5GaWVsZCQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW4oKTogRGlhZ3JhbUNvbHVtbiB7XG4gICAgcmV0dXJuIHsgY29sdW1uVHlwZTogdGhpcy5jb2x1bW5UeXBlLCBpZDogdGhpcy5jb2x1bW5GaWVsZCB9XG4gIH1cbiAgc2V0IGNvbHVtbih2YWx1ZTogRGlhZ3JhbUNvbHVtbikge1xuICAgIHRoaXMuY29sdW1uVHlwZSA9IHZhbHVlLmNvbHVtblR5cGVcbiAgICB0aGlzLmNvbHVtbkZpZWxkID0gdmFsdWUuaWRcbiAgfVxuXG4gIEBPdXRwdXQoKSBkYXRhU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBkaWFncmFtVHlwZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxEaWFncmFtVHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFncmFtRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9kYXRhJCwgdGhpcy5fY29sdW1uRmllbGQkLCB0aGlzLl9jb2x1bW5UeXBlJF0pLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoW2RhdGEsIGNvbHVtbkZpZWxkLCBjb2x1bW5UeXBlXSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gZGF0YS5tYXAoKGQpID0+IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoZCwgY29sdW1uRmllbGQpKVxuICAgICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbHVtbkRhdGEucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNjLnNvbWUoKGU6IHsgbGFiZWw6IGFueSB9KSA9PiBlLmxhYmVsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgPyAoYWNjLmZpbmQoKGU6IHsgbGFiZWw6IGFueSB9KSA9PiBlLmxhYmVsID09PSBjdXJyZW50KS52YWx1ZSsrLCBhY2MpXG4gICAgICAgICAgICA6IFsuLi5hY2MsIHsgbGFiZWw6IGN1cnJlbnQsIHZhbHVlOiAxIH1dXG4gICAgICAgIH0sIFtdKVxuICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZS5UUkFOU0xBVElPTl9LRVkgJiYgb2NjdXJyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KG9jY3VycmVuY2VzLm1hcCgobzogeyBsYWJlbDogYW55IH0pID0+IG8ubGFiZWwpKS5waXBlKFxuICAgICAgICAgICAgbWFwKCh0cmFuc2xhdGlvbnM6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PlxuICAgICAgICAgICAgICBvY2N1cnJlbmNlcy5tYXAoKG86IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9KSA9PiAoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbby5sYWJlbF0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IG8udmFsdWUsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2Yob2NjdXJyZW5jZXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZGF0YUNsaWNrZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGF0YVNlbGVjdGVkLmVtaXQoZXZlbnQpXG4gIH1cblxuICBvbkRpYWdyYW1UeXBlQ2hhbmdlZChuZXdEaWFncmFtVHlwZTogRGlhZ3JhbVR5cGUpIHtcbiAgICB0aGlzLmRpYWdyYW1UeXBlID0gbmV3RGlhZ3JhbVR5cGVcbiAgICB0aGlzLmRpYWdyYW1UeXBlQ2hhbmdlZC5lbWl0KG5ld0RpYWdyYW1UeXBlKVxuICB9XG59XG4iLCI8b2N4LWRpYWdyYW1cbiAgW2RhdGFdPVwiKGRpYWdyYW1EYXRhJCB8IGFzeW5jKSB8fCBbXVwiXG4gIFtzdW1LZXldPVwic3VtS2V5XCJcbiAgW2RpYWdyYW1UeXBlXT1cImRpYWdyYW1UeXBlXCJcbiAgKG9uRGF0YVNlbGVjdCk9XCJkYXRhQ2xpY2tlZCgkZXZlbnQpXCJcbiAgW3N1cHBvcnRlZERpYWdyYW1UeXBlc109XCJzdXBwb3J0ZWREaWFncmFtVHlwZXNcIlxuICAoZGlhZ3JhbVR5cGVDaGFuZ2VkKT1cIm9uRGlhZ3JhbVR5cGVDaGFuZ2VkKCRldmVudClcIlxuPjwvb2N4LWRpYWdyYW0+XG4iXX0=
|