@onecx/angular-accelerator 4.43.1 → 5.0.0

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 (130) hide show
  1. package/{esm2020 → esm2022}/lib/angular-accelerator-primeng.module.mjs +53 -53
  2. package/esm2022/lib/angular-accelerator.module.mjs +168 -0
  3. package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +72 -0
  4. package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +109 -0
  5. package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +46 -0
  6. package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +399 -0
  7. package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +92 -0
  8. package/esm2022/lib/components/data-sort-base/data-sort-base.mjs +110 -0
  9. package/esm2022/lib/components/data-table/data-table.component.mjs +401 -0
  10. package/esm2022/lib/components/data-view/data-view.component.mjs +407 -0
  11. package/esm2022/lib/components/diagram/diagram.component.mjs +137 -0
  12. package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +109 -0
  13. package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +375 -0
  14. package/esm2022/lib/components/page-header/page-header.component.mjs +232 -0
  15. package/{esm2020 → esm2022}/lib/components/search-config/search-config.component.mjs +4 -4
  16. package/esm2022/lib/components/search-header/search-header.component.mjs +136 -0
  17. package/esm2022/lib/directives/advanced.directive.mjs +36 -0
  18. package/esm2022/lib/directives/if-breakpoint.directive.mjs +39 -0
  19. package/esm2022/lib/directives/if-permission.directive.mjs +80 -0
  20. package/esm2022/lib/directives/src.directive.mjs +59 -0
  21. package/esm2022/lib/functions/flatten-object.mjs +20 -0
  22. package/{esm2020 → esm2022}/lib/model/breadcrumb-menu-item.model.mjs +1 -1
  23. package/esm2022/lib/pipes/dynamic.pipe.mjs +58 -0
  24. package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +107 -0
  25. package/esm2022/lib/services/app-config-service.mjs +43 -0
  26. package/esm2022/lib/services/breadcrumb.service.mjs +113 -0
  27. package/esm2022/lib/services/translation-cache.service.mjs +41 -0
  28. package/esm2022/lib/utils/async-translate-loader.utils.mjs +12 -0
  29. package/esm2022/lib/utils/caching-translate-loader.utils.mjs +15 -0
  30. package/{esm2020 → esm2022}/lib/utils/colorutils.mjs +1 -1
  31. package/{esm2020 → esm2022}/lib/utils/dateutils.mjs +6 -6
  32. package/esm2022/lib/utils/objectutils.mjs +30 -0
  33. package/{esm2020 → esm2022}/lib/utils/translate.combined.loader.mjs +1 -1
  34. package/{esm2020 → esm2022}/testing/column-group-selection.harness.mjs +2 -2
  35. package/esm2022/testing/custom-group-column-selector.harness.mjs +31 -0
  36. package/esm2022/testing/data-layout-selection.harness.mjs +33 -0
  37. package/esm2022/testing/data-list-grid.harness.mjs +47 -0
  38. package/esm2022/testing/data-table.harness.mjs +63 -0
  39. package/{esm2020 → esm2022}/testing/data-view.harness.mjs +2 -2
  40. package/esm2022/testing/default-grid-item.harness.mjs +24 -0
  41. package/esm2022/testing/default-list-item.harness.mjs +24 -0
  42. package/esm2022/testing/diagram.harness.mjs +22 -0
  43. package/{esm2020 → esm2022}/testing/group-by-count-diagram.harness.mjs +2 -2
  44. package/{esm2020 → esm2022}/testing/interactive-data-view.harness.mjs +2 -2
  45. package/esm2022/testing/more-actions-menu-button.harness.mjs +35 -0
  46. package/esm2022/testing/page-header.harness.mjs +78 -0
  47. package/{esm2020 → esm2022}/testing/search-config.harness.mjs +2 -2
  48. package/{esm2020 → esm2022}/testing/search-header.harness.mjs +2 -2
  49. package/{fesm2020 → fesm2022}/onecx-angular-accelerator-testing.mjs +34 -28
  50. package/fesm2022/onecx-angular-accelerator-testing.mjs.map +1 -0
  51. package/{fesm2020 → fesm2022}/onecx-angular-accelerator.mjs +220 -220
  52. package/fesm2022/onecx-angular-accelerator.mjs.map +1 -0
  53. package/lib/components/column-group-selection/column-group-selection.component.d.ts +1 -1
  54. package/lib/components/custom-group-column-selector/custom-group-column-selector.component.d.ts +1 -1
  55. package/lib/components/data-layout-selection/data-layout-selection.component.d.ts +1 -1
  56. package/lib/components/data-list-grid/data-list-grid.component.d.ts +1 -1
  57. package/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.d.ts +1 -1
  58. package/lib/components/data-table/data-table.component.d.ts +1 -1
  59. package/lib/components/data-view/data-view.component.d.ts +1 -1
  60. package/lib/components/diagram/diagram.component.d.ts +2 -2
  61. package/lib/components/group-by-count-diagram/group-by-count-diagram.component.d.ts +1 -1
  62. package/lib/components/interactive-data-view/interactive-data-view.component.d.ts +1 -1
  63. package/lib/components/page-header/page-header.component.d.ts +1 -1
  64. package/lib/components/search-config/search-config.component.d.ts +1 -1
  65. package/lib/components/search-header/search-header.component.d.ts +1 -1
  66. package/lib/directives/if-breakpoint.directive.d.ts +1 -1
  67. package/lib/directives/if-permission.directive.d.ts +1 -1
  68. package/lib/directives/src.directive.d.ts +1 -1
  69. package/lib/model/breadcrumb-menu-item.model.d.ts +2 -2
  70. package/package.json +20 -28
  71. package/testing/data-list-grid.harness.d.ts +1 -1
  72. package/esm2020/lib/angular-accelerator.module.mjs +0 -168
  73. package/esm2020/lib/components/column-group-selection/column-group-selection.component.mjs +0 -72
  74. package/esm2020/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +0 -109
  75. package/esm2020/lib/components/data-layout-selection/data-layout-selection.component.mjs +0 -45
  76. package/esm2020/lib/components/data-list-grid/data-list-grid.component.mjs +0 -399
  77. package/esm2020/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +0 -92
  78. package/esm2020/lib/components/data-sort-base/data-sort-base.mjs +0 -110
  79. package/esm2020/lib/components/data-table/data-table.component.mjs +0 -401
  80. package/esm2020/lib/components/data-view/data-view.component.mjs +0 -407
  81. package/esm2020/lib/components/diagram/diagram.component.mjs +0 -137
  82. package/esm2020/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +0 -109
  83. package/esm2020/lib/components/interactive-data-view/interactive-data-view.component.mjs +0 -375
  84. package/esm2020/lib/components/page-header/page-header.component.mjs +0 -232
  85. package/esm2020/lib/components/search-header/search-header.component.mjs +0 -136
  86. package/esm2020/lib/directives/advanced.directive.mjs +0 -36
  87. package/esm2020/lib/directives/if-breakpoint.directive.mjs +0 -39
  88. package/esm2020/lib/directives/if-permission.directive.mjs +0 -80
  89. package/esm2020/lib/directives/src.directive.mjs +0 -59
  90. package/esm2020/lib/functions/flatten-object.mjs +0 -20
  91. package/esm2020/lib/pipes/dynamic.pipe.mjs +0 -58
  92. package/esm2020/lib/pipes/ocxtimeago.pipe.mjs +0 -107
  93. package/esm2020/lib/services/app-config-service.mjs +0 -43
  94. package/esm2020/lib/services/breadcrumb.service.mjs +0 -113
  95. package/esm2020/lib/services/translation-cache.service.mjs +0 -41
  96. package/esm2020/lib/utils/async-translate-loader.utils.mjs +0 -12
  97. package/esm2020/lib/utils/caching-translate-loader.utils.mjs +0 -15
  98. package/esm2020/lib/utils/objectutils.mjs +0 -30
  99. package/esm2020/testing/custom-group-column-selector.harness.mjs +0 -31
  100. package/esm2020/testing/data-layout-selection.harness.mjs +0 -33
  101. package/esm2020/testing/data-list-grid.harness.mjs +0 -47
  102. package/esm2020/testing/data-table.harness.mjs +0 -57
  103. package/esm2020/testing/default-grid-item.harness.mjs +0 -24
  104. package/esm2020/testing/default-list-item.harness.mjs +0 -24
  105. package/esm2020/testing/diagram.harness.mjs +0 -22
  106. package/esm2020/testing/more-actions-menu-button.harness.mjs +0 -35
  107. package/esm2020/testing/page-header.harness.mjs +0 -78
  108. package/fesm2015/onecx-angular-accelerator-testing.mjs +0 -541
  109. package/fesm2015/onecx-angular-accelerator-testing.mjs.map +0 -1
  110. package/fesm2015/onecx-angular-accelerator.mjs +0 -3583
  111. package/fesm2015/onecx-angular-accelerator.mjs.map +0 -1
  112. package/fesm2020/onecx-angular-accelerator-testing.mjs.map +0 -1
  113. package/fesm2020/onecx-angular-accelerator.mjs.map +0 -1
  114. /package/{esm2020 → esm2022}/index.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/model/column-type.model.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/model/data-action.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/model/data-column-name-id.model.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/model/data-sort-direction.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/model/data-table-column.model.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/model/diagram-column.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/model/diagram-data.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/model/diagram-type.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/model/search-config-info.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/utils/create-remote-component-translate-loader.utils.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/utils/create-translate-loader.utils.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/utils/enum-to-dropdown-options.utils.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/utils/primeicon.utils.mjs +0 -0
  128. /package/{esm2020 → esm2022}/onecx-angular-accelerator.mjs +0 -0
  129. /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
  130. /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=