ngx-edu-sharing-metaqs2 0.9.53 → 0.9.54
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/README.md +1 -14
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +195 -197
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
- package/lib/components/collection-issues/collection-issues.component.d.ts +1 -1
- package/lib/components/donut-chart-tooltip/donut-chart-tooltip.component.d.ts +1 -1
- package/lib/components/filter/quality-matrix-filter.component.d.ts +4 -6
- package/lib/components/material-issues/material-issues.component.d.ts +1 -1
- package/lib/components/node-entry/node-entry.component.d.ts +1 -1
- package/lib/components/node-list/node-list.component.d.ts +1 -1
- package/lib/components/quality-matrix/quality_matrix.d.ts +1 -3
- package/lib/counts-with-history/counts-with-history.component.d.ts +1 -1
- package/lib/ng-meta-widgets-lib.module.d.ts +34 -37
- package/lib/node-image-url.pipe.d.ts +1 -1
- package/lib/wrap-observable.pipe.d.ts +1 -1
- package/package.json +6 -8
- package/esm2022/lib/collection-count-history/collection-count-history.component.mjs +0 -131
- package/esm2022/lib/collection-count-history/monthpicker/monthpicker.component.mjs +0 -114
- package/esm2022/lib/components/collection-issues/collection-issues.component.mjs +0 -23
- package/esm2022/lib/components/donut-chart/donut-chart.component.mjs +0 -85
- package/esm2022/lib/components/donut-chart/donut-chart.model.mjs +0 -2
- package/esm2022/lib/components/donut-chart/donut-chart.pipe.mjs +0 -50
- package/esm2022/lib/components/donut-chart-tooltip/donut-chart-tooltip.component.mjs +0 -79
- package/esm2022/lib/components/editorial-link-service/editorial-link.service.mjs +0 -169
- package/esm2022/lib/components/filter/datepicker/datepicker.component.mjs +0 -99
- package/esm2022/lib/components/filter/quality-matrix-filter.component.mjs +0 -47
- package/esm2022/lib/components/loading_indicator/overlay/overlay.service.mjs +0 -41
- package/esm2022/lib/components/loading_indicator/progress-spinner/progress-spinner.component.mjs +0 -65
- package/esm2022/lib/components/material-issues/material-issues.component.mjs +0 -23
- package/esm2022/lib/components/node-entry/node-entry.component.mjs +0 -35
- package/esm2022/lib/components/node-list/node-list.component.mjs +0 -112
- package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +0 -413
- package/esm2022/lib/components/quality-matrix/scroll-marker.directive.mjs +0 -17
- package/esm2022/lib/config-helper.service.mjs +0 -32
- package/esm2022/lib/core/svg-icons.service.mjs +0 -44
- package/esm2022/lib/core/tooltip.service.mjs +0 -146
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +0 -203
- package/esm2022/lib/java-api/api/api.mjs +0 -12
- package/esm2022/lib/java-api/api/authProxyController.service.mjs +0 -107
- package/esm2022/lib/java-api/api/collectionAPI.service.mjs +0 -409
- package/esm2022/lib/java-api/api/editorsAPI.service.mjs +0 -157
- package/esm2022/lib/java-api/api/filterAPI.service.mjs +0 -237
- package/esm2022/lib/java-api/api/replicationSourceAPI.service.mjs +0 -230
- package/esm2022/lib/java-api/api.base.service.mjs +0 -66
- package/esm2022/lib/java-api/api.module.mjs +0 -40
- package/esm2022/lib/java-api/configuration.mjs +0 -103
- package/esm2022/lib/java-api/encoder.mjs +0 -19
- package/esm2022/lib/java-api/index.mjs +0 -7
- package/esm2022/lib/java-api/model/collectionWithMissingAttributes.mjs +0 -11
- package/esm2022/lib/java-api/model/count.mjs +0 -11
- package/esm2022/lib/java-api/model/eduCollection.mjs +0 -11
- package/esm2022/lib/java-api/model/filter.mjs +0 -2
- package/esm2022/lib/java-api/model/filterValue.mjs +0 -11
- package/esm2022/lib/java-api/model/materialCountDto.mjs +0 -2
- package/esm2022/lib/java-api/model/materialCountFilter.mjs +0 -11
- package/esm2022/lib/java-api/model/materialWithMissingAttributes.mjs +0 -11
- package/esm2022/lib/java-api/model/matrixRowWithCounts.mjs +0 -2
- package/esm2022/lib/java-api/model/matrixWithCounts.mjs +0 -2
- package/esm2022/lib/java-api/model/missingAttributeResult.mjs +0 -2
- package/esm2022/lib/java-api/model/models.mjs +0 -16
- package/esm2022/lib/java-api/model/qualityMatrix.mjs +0 -2
- package/esm2022/lib/java-api/model/qualityMatrixHeader.mjs +0 -11
- package/esm2022/lib/java-api/model/qualityMatrixReplicationSourceCounts.mjs +0 -11
- package/esm2022/lib/java-api/model/qualityMatrixRow.mjs +0 -2
- package/esm2022/lib/java-api/param.mjs +0 -2
- package/esm2022/lib/java-api/variables.mjs +0 -9
- package/esm2022/lib/meta-api.service.mjs +0 -77
- package/esm2022/lib/ng-meta-widgets-lib.module.mjs +0 -198
- package/esm2022/lib/node-image-url.pipe.mjs +0 -29
- package/esm2022/lib/tree-collection-details/tree-collection-details.component.mjs +0 -87
- package/esm2022/lib/tree-license/tree-license.component.mjs +0 -136
- package/esm2022/lib/tree-search-counts/inline-worker.mjs +0 -102
- package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +0 -209
- package/esm2022/lib/wrap-observable.pipe.mjs +0 -21
- package/esm2022/ngx-edu-sharing-metaqs2.mjs +0 -5
- package/esm2022/public-api.mjs +0 -18
- package/esm2022/web-components.mjs +0 -36
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Component, Input, signal } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, forkJoin, of } from 'rxjs';
|
|
3
|
-
import { finalize, map, take, tap } from 'rxjs/operators';
|
|
4
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
-
import { AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
|
6
|
-
import { MatCardModule } from '@angular/material/card';
|
|
7
|
-
import { MatIcon } from '@angular/material/icon';
|
|
8
|
-
import { MatTableModule } from '@angular/material/table';
|
|
9
|
-
import { ProgressSpinnerComponent } from '../components/loading_indicator/progress-spinner/progress-spinner.component';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../meta-api.service";
|
|
12
|
-
import * as i2 from "@ngx-translate/core";
|
|
13
|
-
import * as i3 from "../components/editorial-link-service/editorial-link.service";
|
|
14
|
-
import * as i4 from "@angular/material/card";
|
|
15
|
-
import * as i5 from "@angular/material/table";
|
|
16
|
-
export class TreeCollectionDetailsComponent {
|
|
17
|
-
set collectionId(id) {
|
|
18
|
-
this.loadDataForCollection(id);
|
|
19
|
-
}
|
|
20
|
-
constructor(metaApi, translate, linkService) {
|
|
21
|
-
this.metaApi = metaApi;
|
|
22
|
-
this.translate = translate;
|
|
23
|
-
this.linkService = linkService;
|
|
24
|
-
this.recentQualityMatrix$ = new BehaviorSubject({ columns: [], rows: [] });
|
|
25
|
-
this.pageTitle = '';
|
|
26
|
-
this.isLoading = signal(true);
|
|
27
|
-
this.dataColumns = [];
|
|
28
|
-
this.Math = Math;
|
|
29
|
-
}
|
|
30
|
-
async loadDataForCollection(collectionId) {
|
|
31
|
-
this.isLoading.set(true);
|
|
32
|
-
this.metaApi
|
|
33
|
-
.getCollectionCompleteness(collectionId)
|
|
34
|
-
.pipe(finalize(() => {
|
|
35
|
-
this.isLoading.set(false);
|
|
36
|
-
}), tap((qm) => {
|
|
37
|
-
this.dataColumns = qm.columns.map((c) => c);
|
|
38
|
-
}))
|
|
39
|
-
.subscribe((qm) => this.recentQualityMatrix$.next(qm));
|
|
40
|
-
}
|
|
41
|
-
extractCollectionIdFromVocabUrl(url) {
|
|
42
|
-
return url.substring(url.lastIndexOf('/') + 1);
|
|
43
|
-
}
|
|
44
|
-
get columnIds() {
|
|
45
|
-
return this.dataColumns.map((c) => c.id);
|
|
46
|
-
}
|
|
47
|
-
translateCollectionIssues(entries) {
|
|
48
|
-
if (!entries.length) {
|
|
49
|
-
return of('');
|
|
50
|
-
}
|
|
51
|
-
const allTranslations = forkJoin(entries.map((entry) => {
|
|
52
|
-
return this.translate.get(`quality_matrix.${entry}`).pipe(take(1));
|
|
53
|
-
}));
|
|
54
|
-
return allTranslations.pipe(take(1)).pipe(map((translations) => translations.join(', ')));
|
|
55
|
-
}
|
|
56
|
-
openCollection(id) {
|
|
57
|
-
const collectionId = this.extractCollectionIdFromVocabUrl(id);
|
|
58
|
-
this.linkService.openByCollectionId(collectionId);
|
|
59
|
-
}
|
|
60
|
-
async showMaterialWithIssue(collectionId, collectionTitel, issueType) {
|
|
61
|
-
const translated = await this.translate.get('quality_matrix.' + issueType).toPromise();
|
|
62
|
-
const title = collectionTitel + ' - ' + translated;
|
|
63
|
-
return this.linkService.openByCollectionAndIssueType(collectionId, issueType, title);
|
|
64
|
-
}
|
|
65
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeCollectionDetailsComponent, deps: [{ token: i1.MetaApiService }, { token: i2.TranslateService }, { token: i3.EditorialLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
66
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeCollectionDetailsComponent, isStandalone: true, selector: "metaqs2-tree-collection-details", inputs: { collectionId: "collectionId", pageTitle: "pageTitle" }, ngImport: i0, template: "<mat-card>\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{pageTitle | translate}}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table *ngIf=\"!isLoading()\" [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th mat-header-cell *matHeaderCellDef>Sammlung</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n <a (click)=\"openCollection(row.meta.id)\">\n <mat-icon [svgIcon]=\"'level-' + Math.min(3, row.meta.level+1)\"></mat-icon>\n {{row.meta.label}}\n </a>\n </td>\n </ng-container>\n\n <!-- Data Columns -->\n <ng-container *ngFor=\"let column of dataColumns\" [matColumnDef]=\"column.id\">\n <th mat-header-cell *matHeaderCellDef>{{ \"quality_matrix.\" + column.label | translate }}</th>\n <td mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\" column.id === 'collection_issues' else countsWithLinks\">\n {{ translateCollectionIssues(row.counts[column.id]) | async }}\n </ng-container>\n <ng-template #countsWithLinks>\n <a *ngIf=\"row.counts[column.id]\" (click)=\"showMaterialWithIssue(row.meta.id, row.meta.label, column.id)\">\n {{ row.counts[column.id] }}\n </a>\n </ng-template>\n\n\n </td>\n </ng-container>\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat(columnIds); sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(columnIds)\"></tr>\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>.mat-column-row-header,tr:nth-child(2n) .mat-mdc-cell{border-right-color:#fff}.mat-mdc-cell,.mat-mdc-header-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-mdc-cell mat-icon,.mat-mdc-header-cell mat-icon,.mat-column-row-header mat-icon{color:var(--mat-table-row-item-label-text-color);height:16px;padding-right:5px;font-size:16px}.mat-mdc-header-cell,.mat-mdc-cell{padding-left:5px;text-align:left}.mat-mdc-header-cell a,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.row-header a{text-decoration:none;align-items:center;display:flex}.mat-column-totals_collection.noMaterial{background-color:#fad6da}.mat-column-totals_collection.fewMaterials{background-color:#fff1d6}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-8{padding-left:160px!important;text-align:left}mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "metaqs2-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "backdropEnabled", "positionGloballyCenter", "displayProgressSpinner"] }] }); }
|
|
67
|
-
}
|
|
68
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeCollectionDetailsComponent, decorators: [{
|
|
69
|
-
type: Component,
|
|
70
|
-
args: [{ selector: 'metaqs2-tree-collection-details', standalone: true, imports: [
|
|
71
|
-
TranslateModule,
|
|
72
|
-
AsyncPipe,
|
|
73
|
-
NgClass,
|
|
74
|
-
MatCardModule,
|
|
75
|
-
MatIcon,
|
|
76
|
-
NgIf,
|
|
77
|
-
NgForOf,
|
|
78
|
-
MatTableModule,
|
|
79
|
-
ProgressSpinnerComponent,
|
|
80
|
-
], template: "<mat-card>\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{pageTitle | translate}}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table *ngIf=\"!isLoading()\" [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th mat-header-cell *matHeaderCellDef>Sammlung</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n <a (click)=\"openCollection(row.meta.id)\">\n <mat-icon [svgIcon]=\"'level-' + Math.min(3, row.meta.level+1)\"></mat-icon>\n {{row.meta.label}}\n </a>\n </td>\n </ng-container>\n\n <!-- Data Columns -->\n <ng-container *ngFor=\"let column of dataColumns\" [matColumnDef]=\"column.id\">\n <th mat-header-cell *matHeaderCellDef>{{ \"quality_matrix.\" + column.label | translate }}</th>\n <td mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\" column.id === 'collection_issues' else countsWithLinks\">\n {{ translateCollectionIssues(row.counts[column.id]) | async }}\n </ng-container>\n <ng-template #countsWithLinks>\n <a *ngIf=\"row.counts[column.id]\" (click)=\"showMaterialWithIssue(row.meta.id, row.meta.label, column.id)\">\n {{ row.counts[column.id] }}\n </a>\n </ng-template>\n\n\n </td>\n </ng-container>\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat(columnIds); sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(columnIds)\"></tr>\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>.mat-column-row-header,tr:nth-child(2n) .mat-mdc-cell{border-right-color:#fff}.mat-mdc-cell,.mat-mdc-header-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-mdc-cell mat-icon,.mat-mdc-header-cell mat-icon,.mat-column-row-header mat-icon{color:var(--mat-table-row-item-label-text-color);height:16px;padding-right:5px;font-size:16px}.mat-mdc-header-cell,.mat-mdc-cell{padding-left:5px;text-align:left}.mat-mdc-header-cell a,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.row-header a{text-decoration:none;align-items:center;display:flex}.mat-column-totals_collection.noMaterial{background-color:#fad6da}.mat-column-totals_collection.fewMaterials{background-color:#fff1d6}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-8{padding-left:160px!important;text-align:left}mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20px}\n"] }]
|
|
81
|
-
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.TranslateService }, { type: i3.EditorialLinkService }], propDecorators: { collectionId: [{
|
|
82
|
-
type: Input,
|
|
83
|
-
args: [{ required: true }]
|
|
84
|
-
}], pageTitle: [{
|
|
85
|
-
type: Input
|
|
86
|
-
}] } });
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb2xsZWN0aW9uLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBR3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQzs7Ozs7OztBQW1CdkgsTUFBTSxPQUFPLDhCQUE4QjtJQUd6QyxJQUNJLFlBQVksQ0FBQyxFQUFVO1FBQ3pCLElBQUksQ0FBQyxx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QU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkYsTUFBTSxLQUFLLEdBQUcsZUFBZSxHQUFHLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkYsQ0FBQzsrR0FqRVUsOEJBQThCO21HQUE5Qiw4QkFBOEIsNkpDOUIzQywyOURBZ0RBLHkrQ0Q3QkksZUFBZSx1RkFDZixTQUFTLDhDQUNULE9BQU8sbUZBQ1AsYUFBYSxxVUFDYixPQUFPLDJJQUNQLElBQUksNkZBQ0osT0FBTyxrSEFDUCxjQUFjLHVnQ0FDZCx3QkFBd0I7OzRGQUdmLDhCQUE4QjtrQkFqQjFDLFNBQVM7K0JBQ0UsaUNBQWlDLGNBRS9CLElBQUksV0FFUDt3QkFDUCxlQUFlO3dCQUNmLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLE9BQU87d0JBQ1AsSUFBSTt3QkFDSixPQUFPO3dCQUNQLGNBQWM7d0JBQ2Qsd0JBQXdCO3FCQUN6QjtxSkFNRyxZQUFZO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU16QixTQUFTO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3JpYWxMaW5rU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdHJpeFdpdGhDb3VudHMsIFF1YWxpdHlNYXRyaXhIZWFkZXIgfSBmcm9tICcuLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2xvYWRpbmdfaW5kaWNhdG9yL3Byb2dyZXNzLXNwaW5uZXIvcHJvZ3Jlc3Mtc3Bpbm5lci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLXRyZWUtY29sbGVjdGlvbi1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS1jb2xsZWN0aW9uLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRDYXJkTW9kdWxlLFxuICAgIE1hdEljb24sXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbGxlY3Rpb25EZXRhaWxzQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdHJpeFdpdGhDb3VudHM+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0pO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNldCBjb2xsZWN0aW9uSWQoaWQ6IHN0cmluZykge1xuICAgIHRoaXMubG9hZERhdGFGb3JDb2xsZWN0aW9uKGlkKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHBhZ2VUaXRsZTogc3RyaW5nID0gJyc7XG5cbiAgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICBkYXRhQ29sdW1uczogQXJyYXk8UXVhbGl0eU1hdHJpeEhlYWRlcj4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1ldGFBcGk6IE1ldGFBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlua1NlcnZpY2U6IEVkaXRvcmlhbExpbmtTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGFzeW5jIGxvYWREYXRhRm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm1ldGFBcGlcbiAgICAgIC5nZXRDb2xsZWN0aW9uQ29tcGxldGVuZXNzKGNvbGxlY3Rpb25JZClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgocW0pID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFDb2x1bW5zID0gcW0uY29sdW1ucy5tYXAoKGMpID0+IGMpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocW0pID0+IHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQubmV4dChxbSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0Q29sbGVjdGlvbklkRnJvbVZvY2FiVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbklkcygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQ29sdW1ucy5tYXAoKGMpID0+IGMuaWQpO1xuICB9XG5cbiAgdHJhbnNsYXRlQ29sbGVjdGlvbklzc3VlcyhlbnRyaWVzOiBzdHJpbmdbXSkge1xuICAgIGlmICghZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsVHJhbnNsYXRpb25zID0gZm9ya0pvaW4oXG4gICAgICBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgcXVhbGl0eV9tYXRyaXguJHtlbnRyeX1gKS5waXBlKHRha2UoMSkpIGFzIE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gYWxsVHJhbnNsYXRpb25zLnBpcGUodGFrZSgxKSkucGlwZShtYXAoKHRyYW5zbGF0aW9ucykgPT4gdHJhbnNsYXRpb25zLmpvaW4oJywgJykpKTtcbiAgfVxuXG4gIG9wZW5Db2xsZWN0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uSWQgPSB0aGlzLmV4dHJhY3RDb2xsZWN0aW9uSWRGcm9tVm9jYWJVcmwoaWQpO1xuICAgIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5Q29sbGVjdGlvbklkKGNvbGxlY3Rpb25JZCk7XG4gIH1cblxuICBhc3luYyBzaG93TWF0ZXJpYWxXaXRoSXNzdWUoY29sbGVjdGlvbklkOiBzdHJpbmcsIGNvbGxlY3Rpb25UaXRlbDogc3RyaW5nLCBpc3N1ZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoJ3F1YWxpdHlfbWF0cml4LicgKyBpc3N1ZVR5cGUpLnRvUHJvbWlzZSgpO1xuICAgIGNvbnN0IHRpdGxlID0gY29sbGVjdGlvblRpdGVsICsgJyAtICcgKyB0cmFuc2xhdGVkO1xuICAgIHJldHVybiB0aGlzLmxpbmtTZXJ2aWNlLm9wZW5CeUNvbGxlY3Rpb25BbmRJc3N1ZVR5cGUoY29sbGVjdGlvbklkLCBpc3N1ZVR5cGUsIHRpdGxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBNYXRoID0gTWF0aDtcbn1cbiIsIjxtYXQtY2FyZD5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInBhZ2VUaXRsZVwiPlxuICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgIFF1YWxpdMOkdHNtZXRyaWs6IHt7cGFnZVRpdGxlIHwgdHJhbnNsYXRlfX17e2lzTG9hZGluZygpID8gXCI6IExhZGUgbmV1ZSBEYXRlbi5cIiA6IFwiXCJ9fTwvbWF0LWNhcmQtdGl0bGVcbiAgICA+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuPC9tYXQtY2FyZD5cbjxtYXQtY2FyZD5cbiAgPG1ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlzcGxheVByb2dyZXNzU3Bpbm5lcl09XCJpc0xvYWRpbmcoKVwiPjwvbWV0YXFzMi1wcm9ncmVzcy1zcGlubmVyPlxuICA8dGFibGUgKm5nSWY9XCIhaXNMb2FkaW5nKClcIiBbbmdDbGFzc109XCJ7J3doaWxlLWxvYWRpbmcnOiBpc0xvYWRpbmcoKX1cIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwicmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWUucm93c1wiPlxuICAgIDwhLS0gRGVmaW5lIGNvbHVtbnMgb2YgdGFibGUgLS0+XG4gICAgPCEtLSBSb3cgSGVhZGVyIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJvdy1oZWFkZXJcIiBzdGlja3k+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlNhbW1sdW5nPC90aD5cbiAgICAgIDx0ZFxuICAgICAgICBtYXQtY2VsbFxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXIge3snbWF0LWNlbGwtbGV2ZWwtJyArIChyb3cubWV0YS5sZXZlbCsxKX19XCJcbiAgICAgID5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5Db2xsZWN0aW9uKHJvdy5tZXRhLmlkKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBbc3ZnSWNvbl09XCInbGV2ZWwtJyArIE1hdGgubWluKDMsIHJvdy5tZXRhLmxldmVsKzEpXCI+PC9tYXQtaWNvbj5cbiAgICAgICAge3tyb3cubWV0YS5sYWJlbH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZFwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj57eyBcInF1YWxpdHlfbWF0cml4LlwiICsgY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiBjb2x1bW4uaWQgPT09ICdjb2xsZWN0aW9uX2lzc3VlcycgZWxzZSBjb3VudHNXaXRoTGlua3NcIj5cbiAgICAgICAgICB7eyB0cmFuc2xhdGVDb2xsZWN0aW9uSXNzdWVzKHJvdy5jb3VudHNbY29sdW1uLmlkXSkgfCBhc3luYyB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjb3VudHNXaXRoTGlua3M+XG4gICAgICAgICAgPGEgKm5nSWY9XCJyb3cuY291bnRzW2NvbHVtbi5pZF1cIiAoY2xpY2spPVwic2hvd01hdGVyaWFsV2l0aElzc3VlKHJvdy5tZXRhLmlkLCByb3cubWV0YS5sYWJlbCwgY29sdW1uLmlkKVwiPlxuICAgICAgICAgICAge3sgcm93LmNvdW50c1tjb2x1bW4uaWRdIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdChjb2x1bW5JZHMpOyBzdGlja3k6dHJ1ZVwiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsncm93LWhlYWRlciddLmNvbmNhdChjb2x1bW5JZHMpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { BaseHistoricDataTableDirective } from '../counts-with-history/counts-with-history.component';
|
|
3
|
-
import { BehaviorSubject, combineLatest, of } from 'rxjs';
|
|
4
|
-
import { finalize, map, switchMap, take, tap } from 'rxjs/operators';
|
|
5
|
-
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
|
6
|
-
import { DatepickerComponent } from '../components/filter/datepicker/datepicker.component';
|
|
7
|
-
import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
|
|
8
|
-
import { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatTableModule } from '@angular/material/table';
|
|
9
|
-
import { MatIcon } from '@angular/material/icon';
|
|
10
|
-
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
|
11
|
-
import { MatTooltip } from '@angular/material/tooltip';
|
|
12
|
-
import { ProgressSpinnerComponent } from '../components/loading_indicator/progress-spinner/progress-spinner.component';
|
|
13
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
14
|
-
import { FormsModule } from '@angular/forms';
|
|
15
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
16
|
-
import { MatRipple } from '@angular/material/core';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
import * as i1 from "@angular/material/table";
|
|
19
|
-
import * as i2 from "@ngx-translate/core";
|
|
20
|
-
import * as i3 from "@angular/forms";
|
|
21
|
-
export class TreeLicenseComponent extends BaseHistoricDataTableDirective {
|
|
22
|
-
constructor() {
|
|
23
|
-
super(...arguments);
|
|
24
|
-
this.colId$ = new BehaviorSubject('defaultCollection');
|
|
25
|
-
this.sourceType = 'collection';
|
|
26
|
-
}
|
|
27
|
-
set collectionId(id) {
|
|
28
|
-
this.colId$.next(id);
|
|
29
|
-
}
|
|
30
|
-
getCountByDate(data) {
|
|
31
|
-
const filter = {
|
|
32
|
-
field: 'asOf',
|
|
33
|
-
values: [{ id: data.date.toISO({ includeOffset: false }), label: '' }],
|
|
34
|
-
};
|
|
35
|
-
return of(undefined).pipe(tap(() => this.loadingCount.update((it) => it + 1)), switchMap(() => {
|
|
36
|
-
return this.metaApi[this.apiMethod](this.colId$.getValue(), [filter]).pipe(finalize(() => this.loadingCount.update((it) => it - 1)));
|
|
37
|
-
}), map((response) => {
|
|
38
|
-
const castedRows = response.rows.map((row) => row);
|
|
39
|
-
return {
|
|
40
|
-
...response,
|
|
41
|
-
// return the sufficient part of the counts, because the api return a QualityMatrix not a MatrixWithCounts
|
|
42
|
-
rows: castedRows.map((row) => {
|
|
43
|
-
const counts = Object.fromEntries(Object.entries(row.counts).map(([key, value]) => [key, value.sufficient]));
|
|
44
|
-
return {
|
|
45
|
-
...row,
|
|
46
|
-
counts,
|
|
47
|
-
};
|
|
48
|
-
}),
|
|
49
|
-
};
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
ngOnInit() {
|
|
53
|
-
this.apiMethod ??= 'getLicenseCountsByLicenseGroup';
|
|
54
|
-
combineLatest([this.colId$, this.range.valueChanges])
|
|
55
|
-
.pipe(tap(([collectionId, range]) => {
|
|
56
|
-
this.dataForPastData$.next({
|
|
57
|
-
date: range.start,
|
|
58
|
-
collectionId: collectionId,
|
|
59
|
-
});
|
|
60
|
-
this.dataForRecentData$.next({
|
|
61
|
-
date: range.end,
|
|
62
|
-
collectionId: collectionId,
|
|
63
|
-
});
|
|
64
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
65
|
-
.subscribe();
|
|
66
|
-
this.isHistoryEnabled$
|
|
67
|
-
.pipe(tap((enabled) => {
|
|
68
|
-
this.range.controls.end.reset();
|
|
69
|
-
if (!enabled) {
|
|
70
|
-
this.startDateSubscription?.unsubscribe();
|
|
71
|
-
this.startValuesSubscription?.unsubscribe();
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
this.range.controls.start.reset();
|
|
75
|
-
if (!this.timeFilterLoaded()) {
|
|
76
|
-
this.startDateSubscription = this.timerangeStart$
|
|
77
|
-
.pipe(take(1), tap(() => {
|
|
78
|
-
this.startValuesSubscription = this.startValues$.subscribe();
|
|
79
|
-
this.range.controls.start.reset();
|
|
80
|
-
}))
|
|
81
|
-
.subscribe();
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.startValuesSubscription = this.startValues$.subscribe();
|
|
85
|
-
this.range.controls.start.reset();
|
|
86
|
-
}
|
|
87
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
88
|
-
.subscribe();
|
|
89
|
-
this.endValues$.subscribe();
|
|
90
|
-
}
|
|
91
|
-
validateLoadingData(data) {
|
|
92
|
-
return !!data?.collectionId && (data.date?.isValid ?? false);
|
|
93
|
-
}
|
|
94
|
-
compareLoadingDataEqual(a, b) {
|
|
95
|
-
return a.collectionId === b.collectionId && a.date.equals(b.date);
|
|
96
|
-
}
|
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeLicenseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeLicenseComponent, isStandalone: true, selector: "metaqs2-tree-license", inputs: { collectionId: "collectionId", sourceType: "sourceType" }, usesInheritance: true, ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title data-test-id=\"page-title\">\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <!-- show the filter after the values are loaded to avoid loading current data twice -->\n <mat-card-content class=\"toolbar\">\n <metaqs2-datepicker style=\"display: inline-block\" matRipple [disabled]=\"isLoading() || !isHistoryEnabled()\" [inputGroup]=\"range\" *ngIf=\"timeFilterLoaded() && isHistoryEnabled()\"></metaqs2-datepicker>\n <div style=\"flex: 1 1 auto\"></div>\n <mat-slide-toggle [ngModel]=\"isHistoryEnabled()\" (ngModelChange)=\"isHistoryEnabled.set($event)\" [disabled]=\"isLoading()\">\n <label>Zeige historische Daten</label>\n </mat-slide-toggle>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table [class.while-loading]=\"isLoading()\" mat-table [dataSource]=\"recentTypeCount$.value.rows\"\n class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th [attr.rowspan]=\"isHistoryEnabled() ? '2' : '1'\" mat-header-cell *matHeaderCellDef>\n <div>Quelle</div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [matTooltip]=\"row.meta.alt_label\"\n class=\"label-col mat-cell-level-{{row.meta.level + 1}}\"\n >\n {{ row.meta.label }}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_type'\">\n <th [attr.colspan]=\"isHistoryEnabled() ? '2' : '1'\" mat-header-cell *matHeaderCellDef [matTooltip]=\"col.label\">\n {{ columnTranslationkey ? (columnTranslationkey + col.label | translate) : col.label }}\n </th>\n </ng-container>\n <!-- one column for each type for the most current date-->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef\n matTooltip=\"no tooltip\">{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}\n </th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a [attr.href]=\"openInEditor(row.meta.id, col.id) | async\" target=\"editor_frontend\">{{ row.counts[col.id] ?? '\u2013' }}</a>\n </td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\">\n {{ (pastTypeCount$ | async)?.rows?.length ? range.controls.start.value.toLocaleString(DateTime.DATE_SHORT) : 'no past data' }}\n </th>\n <td class=\"past-data-cell\" mat-cell *matCellDef=\"let row;\" >\n <ng-container *ngIf=\"(pastTypeCount$ | async)?.rows?.length && pastTypeCount(row, col.id) as trend\">\n <span [class]=\"trend.trend\"> {{ trend.value ?? '\u2013' }}\n <mat-icon *ngIf=\"trend.value\" aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" /></span>\n <span class=\"cdk-visually-hidden\">{{ trend.trend }}</span>\n </ng-container>\n </td>\n </ng-container>\n <!-- generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['label-col'].concat(typeColumns()); sticky:true;\"></tr>\n <tr [hidden]=\"!isHistoryEnabled()\" mat-header-row *matHeaderRowDef=\"allColumns(); sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['label-col'].concat(allColumns())\"></tr>\n\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>td.label-col,tr:nth-child(2n) td.recent-data-cell{border-right:1px solid white}tr:nth-child(odd){background-color:#fff}tr:nth-child(odd)>td.label-col,tr:nth-child(odd) td.recent-data-cell{border-right:1px solid #e4e4e4}td.label-col{text-align:left}.mat-mdc-header-cell,.mat-mdc-cell{text-align:center}.mat-mdc-header-cell a[href],.mat-mdc-cell a[href]{color:var(--mat-table-row-item-label-text-color);cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a[href]:hover,.mat-mdc-cell a[href]:hover{text-decoration:underline}.mat-mdc-header-cell mat-icon,.mat-mdc-cell mat-icon{margin-left:5px;vertical-align:middle}.trending_down{color:#4abeff}.trending_up{color:#c20808}.toolbar,.actionbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:.5rem}\n", ".while-loading{filter:blur(2px)}tr:nth-child(2n),tr:nth-child(odd){background-color:#fff}tr:nth-child(2n)>td.label-col,tr:nth-child(2n) td.recent-data-cell,tr:nth-child(odd)>td.label-col,tr:nth-child(odd) td.recent-data-cell{border-right:1px solid #e4e4e4}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-1:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-2:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-3:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-4:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-5:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-6:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-7:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-8{padding-left:160px!important;text-align:left}.mat-cell-level-8:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-2:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PHBhdGggb3BhY2l0eT0iMC4zIiBkPSJNMTkgMTAuM0wxMiAxNi4zTDUgMTAuM0wxMiA0LjE5OTk1TDE5IDEwLjNaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+)}.mat-cell-level-0:before,.mat-cell-level-1:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCAxMi45TDMgMTMuOEwxMSAyMC43QzExLjYgMjEuMiAxMi40IDIxLjIgMTMgMjAuN0wyMSAxMy44TDIwIDEyLjlMMTIgMTkuOEw0IDEyLjlaTTExIDMuNDAwMDJMNCA5LjQwMDAyQzMuNCA5LjkwMDAyIDMuNCAxMC43IDQgMTEuMUwxMSAxNy4yQzExLjYgMTcuNyAxMi40IDE3LjcgMTMgMTcuMkwyMCAxMS4xQzIwLjUgMTAuNiAyMC41IDkuODAwMDIgMjAgOS40MDAwMkwxMyAzLjMwMDAyQzEyLjQgMi45MDAwMiAxMS42IDIuOTAwMDIgMTEgMy40MDAwMloiIGZpbGw9IiMwMDNCN0MiLz48L3N2Zz4=)}.trending_down{color:#4abeff}.trending_up{color:#c20808}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: DatepickerComponent, selector: "metaqs2-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: i1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "metaqs2-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "backdropEnabled", "positionGloballyCenter", "displayProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
99
|
-
}
|
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeLicenseComponent, decorators: [{
|
|
101
|
-
type: Component,
|
|
102
|
-
args: [{ selector: 'metaqs2-tree-license', standalone: true, imports: [
|
|
103
|
-
AsyncPipe,
|
|
104
|
-
DatepickerComponent,
|
|
105
|
-
MatCard,
|
|
106
|
-
MatCardContent,
|
|
107
|
-
MatCardHeader,
|
|
108
|
-
MatCardTitle,
|
|
109
|
-
MatCell,
|
|
110
|
-
MatTableModule,
|
|
111
|
-
MatCellDef,
|
|
112
|
-
MatColumnDef,
|
|
113
|
-
MatHeaderCell,
|
|
114
|
-
MatHeaderRow,
|
|
115
|
-
MatHeaderRowDef,
|
|
116
|
-
MatIcon,
|
|
117
|
-
MatRipple,
|
|
118
|
-
MatRow,
|
|
119
|
-
MatRowDef,
|
|
120
|
-
MatSlideToggle,
|
|
121
|
-
MatTable,
|
|
122
|
-
MatTooltip,
|
|
123
|
-
NgForOf,
|
|
124
|
-
NgIf,
|
|
125
|
-
ProgressSpinnerComponent,
|
|
126
|
-
TranslateModule,
|
|
127
|
-
FormsModule,
|
|
128
|
-
], template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title data-test-id=\"page-title\">\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <!-- show the filter after the values are loaded to avoid loading current data twice -->\n <mat-card-content class=\"toolbar\">\n <metaqs2-datepicker style=\"display: inline-block\" matRipple [disabled]=\"isLoading() || !isHistoryEnabled()\" [inputGroup]=\"range\" *ngIf=\"timeFilterLoaded() && isHistoryEnabled()\"></metaqs2-datepicker>\n <div style=\"flex: 1 1 auto\"></div>\n <mat-slide-toggle [ngModel]=\"isHistoryEnabled()\" (ngModelChange)=\"isHistoryEnabled.set($event)\" [disabled]=\"isLoading()\">\n <label>Zeige historische Daten</label>\n </mat-slide-toggle>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table [class.while-loading]=\"isLoading()\" mat-table [dataSource]=\"recentTypeCount$.value.rows\"\n class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th [attr.rowspan]=\"isHistoryEnabled() ? '2' : '1'\" mat-header-cell *matHeaderCellDef>\n <div>Quelle</div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [matTooltip]=\"row.meta.alt_label\"\n class=\"label-col mat-cell-level-{{row.meta.level + 1}}\"\n >\n {{ row.meta.label }}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_type'\">\n <th [attr.colspan]=\"isHistoryEnabled() ? '2' : '1'\" mat-header-cell *matHeaderCellDef [matTooltip]=\"col.label\">\n {{ columnTranslationkey ? (columnTranslationkey + col.label | translate) : col.label }}\n </th>\n </ng-container>\n <!-- one column for each type for the most current date-->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef\n matTooltip=\"no tooltip\">{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}\n </th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a [attr.href]=\"openInEditor(row.meta.id, col.id) | async\" target=\"editor_frontend\">{{ row.counts[col.id] ?? '\u2013' }}</a>\n </td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\">\n {{ (pastTypeCount$ | async)?.rows?.length ? range.controls.start.value.toLocaleString(DateTime.DATE_SHORT) : 'no past data' }}\n </th>\n <td class=\"past-data-cell\" mat-cell *matCellDef=\"let row;\" >\n <ng-container *ngIf=\"(pastTypeCount$ | async)?.rows?.length && pastTypeCount(row, col.id) as trend\">\n <span [class]=\"trend.trend\"> {{ trend.value ?? '\u2013' }}\n <mat-icon *ngIf=\"trend.value\" aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" /></span>\n <span class=\"cdk-visually-hidden\">{{ trend.trend }}</span>\n </ng-container>\n </td>\n </ng-container>\n <!-- generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['label-col'].concat(typeColumns()); sticky:true;\"></tr>\n <tr [hidden]=\"!isHistoryEnabled()\" mat-header-row *matHeaderRowDef=\"allColumns(); sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['label-col'].concat(allColumns())\"></tr>\n\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>td.label-col,tr:nth-child(2n) td.recent-data-cell{border-right:1px solid white}tr:nth-child(odd){background-color:#fff}tr:nth-child(odd)>td.label-col,tr:nth-child(odd) td.recent-data-cell{border-right:1px solid #e4e4e4}td.label-col{text-align:left}.mat-mdc-header-cell,.mat-mdc-cell{text-align:center}.mat-mdc-header-cell a[href],.mat-mdc-cell a[href]{color:var(--mat-table-row-item-label-text-color);cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a[href]:hover,.mat-mdc-cell a[href]:hover{text-decoration:underline}.mat-mdc-header-cell mat-icon,.mat-mdc-cell mat-icon{margin-left:5px;vertical-align:middle}.trending_down{color:#4abeff}.trending_up{color:#c20808}.toolbar,.actionbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:.5rem}\n", ".while-loading{filter:blur(2px)}tr:nth-child(2n),tr:nth-child(odd){background-color:#fff}tr:nth-child(2n)>td.label-col,tr:nth-child(2n) td.recent-data-cell,tr:nth-child(odd)>td.label-col,tr:nth-child(odd) td.recent-data-cell{border-right:1px solid #e4e4e4}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-1:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-2:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-3:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-4:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-5:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-6:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-7:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-8{padding-left:160px!important;text-align:left}.mat-cell-level-8:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+);padding-right:5px}.mat-cell-level-2:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjAuMyA5LjkwMDA1QzIwLjIgOS43MDAwNSAyMC4xIDkuNjAwMDUgMjAgOS40MDAwNUwxMyAzLjMwMDA1QzEyLjUgMi44MDAwNSAxMS41IDIuODAwMDUgMTEgMy4zMDAwNUw0IDkuNDAwMDVDMy41IDkuOTAwMDUgMy41IDEwLjcgNCAxMS4xTDExIDE3LjJDMTEuNSAxNy43IDEyLjUgMTcuNyAxMyAxNy4yTDIwIDExLjFDMjAuMyAxMC44IDIwLjQgMTAuNSAyMC40IDEwLjJDMjAuNCAxMC4xIDIwLjQgMTAgMjAuMyA5LjkwMDA1Wk01IDEwLjNMMTIgNC4yMDAwNUwxOSAxMC4zTDEyIDE2LjRMNSAxMC4zWk0yMCAxMi45TDEyIDE5LjhMNCAxMi45TDMgMTMuOEwxMSAyMC43MDAxQzExLjUgMjEuMjAwMSAxMi41IDIxLjIwMDEgMTMgMjAuNzAwMUwyMSAxMy44TDIwIDEyLjlaIiBmaWxsPSIjMDAzQjdDIi8+PHBhdGggb3BhY2l0eT0iMC4zIiBkPSJNMTkgMTAuM0wxMiAxNi4zTDUgMTAuM0wxMiA0LjE5OTk1TDE5IDEwLjNaIiBmaWxsPSIjMDAzQjdDIi8+PC9zdmc+)}.mat-cell-level-0:before,.mat-cell-level-1:before{content:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCAxMi45TDMgMTMuOEwxMSAyMC43QzExLjYgMjEuMiAxMi40IDIxLjIgMTMgMjAuN0wyMSAxMy44TDIwIDEyLjlMMTIgMTkuOEw0IDEyLjlaTTExIDMuNDAwMDJMNCA5LjQwMDAyQzMuNCA5LjkwMDAyIDMuNCAxMC43IDQgMTEuMUwxMSAxNy4yQzExLjYgMTcuNyAxMi40IDE3LjcgMTMgMTcuMkwyMCAxMS4xQzIwLjUgMTAuNiAyMC41IDkuODAwMDIgMjAgOS40MDAwMkwxMyAzLjMwMDAyQzEyLjQgMi45MDAwMiAxMS42IDIuOTAwMDIgMTEgMy40MDAwMloiIGZpbGw9IiMwMDNCN0MiLz48L3N2Zz4=)}.trending_down{color:#4abeff}.trending_up{color:#c20808}\n"] }]
|
|
129
|
-
}], propDecorators: { collectionId: [{
|
|
130
|
-
type: Input,
|
|
131
|
-
args: [{ required: true }]
|
|
132
|
-
}], sourceType: [{
|
|
133
|
-
type: Input,
|
|
134
|
-
args: [{ required: false }]
|
|
135
|
-
}] } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1saWNlbnNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi90cmVlLWxpY2Vuc2UvdHJlZS1saWNlbnNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb3VudHMtd2l0aC1oaXN0b3J5L2NvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlGLE9BQU8sRUFDSCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixjQUFjLEVBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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RkFDZixXQUFXOzs0RkFLRixvQkFBb0I7a0JBakNoQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1A7d0JBQ1AsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFlBQVk7d0JBQ1osT0FBTzt3QkFDUCxjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsTUFBTTt3QkFDTixTQUFTO3dCQUNULGNBQWM7d0JBQ2QsUUFBUTt3QkFDUixVQUFVO3dCQUNWLE9BQU87d0JBQ1AsSUFBSTt3QkFDSix3QkFBd0I7d0JBQ3hCLGVBQWU7d0JBQ2YsV0FBVztxQkFDWjs4QkFjRyxZQUFZO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU16QixVQUFVO3NCQURULEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlSGlzdG9yaWNEYXRhVGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9jb3VudHMtd2l0aC1oaXN0b3J5L2NvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbHRlciwgTWF0cml4V2l0aENvdW50cywgUXVhbGl0eU1hdHJpeCwgUXVhbGl0eU1hdHJpeFJvdyB9IGZyb20gJy4uL2phdmEtYXBpJztcbmltcG9ydCB7IGZpbmFsaXplLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsdGVyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0Q2FyZCwgTWF0Q2FyZENvbnRlbnQsIE1hdENhcmRIZWFkZXIsIE1hdENhcmRUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtcbiAgICBNYXRDZWxsLFxuICAgIE1hdENlbGxEZWYsXG4gICAgTWF0Q29sdW1uRGVmLFxuICAgIE1hdEhlYWRlckNlbGwsXG4gICAgTWF0SGVhZGVyUm93LFxuICAgIE1hdEhlYWRlclJvd0RlZixcbiAgICBNYXRSb3csXG4gICAgTWF0Um93RGVmLFxuICAgIE1hdFRhYmxlLFxuICAgIE1hdFRhYmxlTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbG9hZGluZ19pbmRpY2F0b3IvcHJvZ3Jlc3Mtc3Bpbm5lci9wcm9ncmVzcy1zcGlubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbnR5cGUgTG9hZGluZ0RhdGEgPSB7XG4gIGRhdGU6IERhdGVUaW1lO1xuICBjb2xsZWN0aW9uSWQ6IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItdHJlZS1saWNlbnNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBEYXRlcGlja2VyQ29tcG9uZW50LFxuICAgIE1hdENhcmQsXG4gICAgTWF0Q2FyZENvbnRlbnQsXG4gICAgTWF0Q2FyZEhlYWRlcixcbiAgICBNYXRDYXJkVGl0bGUsXG4gICAgTWF0Q2VsbCxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRDZWxsRGVmLFxuICAgIE1hdENvbHVtbkRlZixcbiAgICBNYXRIZWFkZXJDZWxsLFxuICAgIE1hdEhlYWRlclJvdyxcbiAgICBNYXRIZWFkZXJSb3dEZWYsXG4gICAgTWF0SWNvbixcbiAgICBNYXRSaXBwbGUsXG4gICAgTWF0Um93LFxuICAgIE1hdFJvd0RlZixcbiAgICBNYXRTbGlkZVRvZ2dsZSxcbiAgICBNYXRUYWJsZSxcbiAgICBNYXRUb29sdGlwLFxuICAgIE5nRm9yT2YsXG4gICAgTmdJZixcbiAgICBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4uL2NvdW50cy13aXRoLWhpc3RvcnkvY291bnRzLXdpdGgtaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jb3VudHMtd2l0aC1oaXN0b3J5L2NvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnLCAnLi90cmVlLWxpY2Vuc2UuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUxpY2Vuc2VDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlSGlzdG9yaWNEYXRhVGFibGVEaXJlY3RpdmU8XG4gICAgTG9hZGluZ0RhdGEsXG4gICAgKGNvbGxlY3Rpb25JZDogc3RyaW5nLCBmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4gT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4PlxuICA+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIHByaXZhdGUgY29sSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdkZWZhdWx0Q29sbGVjdGlvbicpO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNldCBjb2xsZWN0aW9uSWQoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuY29sSWQkLm5leHQoaWQpO1xuICB9XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IGZhbHNlIH0pXG4gIHNvdXJjZVR5cGU6ICdyZXBsaWNhdGlvblNvdXJjZScgfCAnY29sbGVjdGlvbicgPSAnY29sbGVjdGlvbic7XG5cbiAgcHJvdGVjdGVkIGdldENvdW50QnlEYXRlKGRhdGE6IExvYWRpbmdEYXRhKTogT2JzZXJ2YWJsZTxNYXRyaXhXaXRoQ291bnRzPiB7XG4gICAgY29uc3QgZmlsdGVyOiBGaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogJ2FzT2YnLFxuICAgICAgdmFsdWVzOiBbeyBpZDogZGF0YS5kYXRlLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkhLCBsYWJlbDogJycgfV0sXG4gICAgfTtcbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0ICsgMSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YUFwaVt0aGlzLmFwaU1ldGhvZF0odGhpcy5jb2xJZCQuZ2V0VmFsdWUoKSwgW2ZpbHRlcl0pLnBpcGUoXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQudXBkYXRlKChpdCkgPT4gaXQgLSAxKSlcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBjYXN0ZWRSb3dzID0gcmVzcG9uc2Uucm93cy5tYXAoKHJvdykgPT4gcm93IGFzIHVua25vd24gYXMgUXVhbGl0eU1hdHJpeFJvdyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXNwb25zZSxcbiAgICAgICAgICAvLyByZXR1cm4gdGhlIHN1ZmZpY2llbnQgcGFydCBvZiB0aGUgY291bnRzLCBiZWNhdXNlIHRoZSBhcGkgcmV0dXJuIGEgUXVhbGl0eU1hdHJpeCBub3QgYSBNYXRyaXhXaXRoQ291bnRzXG5cbiAgICAgICAgICByb3dzOiBjYXN0ZWRSb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJvdy5jb3VudHMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB2YWx1ZS5zdWZmaWNpZW50XSBhcyBjb25zdClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICAgICAgY291bnRzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXBpTWV0aG9kID8/PSAnZ2V0TGljZW5zZUNvdW50c0J5TGljZW5zZUdyb3VwJztcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29sSWQkLCB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlc10pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChbY29sbGVjdGlvbklkLCByYW5nZV0pID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFGb3JQYXN0RGF0YSQubmV4dCh7XG4gICAgICAgICAgICBkYXRlOiByYW5nZS5zdGFydCxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25JZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGF0YUZvclJlY2VudERhdGEkLm5leHQoe1xuICAgICAgICAgICAgZGF0ZTogcmFuZ2UuZW5kLFxuICAgICAgICAgICAgY29sbGVjdGlvbklkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5pc0hpc3RvcnlFbmFibGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZW5hYmxlZCkgPT4ge1xuICAgICAgICAgIHRoaXMucmFuZ2UuY29udHJvbHMuZW5kLnJlc2V0KCk7XG4gICAgICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQucmVzZXQoKTtcbiAgICAgICAgICBpZiAoIXRoaXMudGltZUZpbHRlckxvYWRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudGltZXJhbmdlU3RhcnQkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZXNTdWJzY3JpcHRpb24gPSB0aGlzLnN0YXJ0VmFsdWVzJC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlc1N1YnNjcmlwdGlvbiA9IHRoaXMuc3RhcnRWYWx1ZXMkLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC5yZXNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmVuZFZhbHVlcyQuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVMb2FkaW5nRGF0YShkYXRhOiBQYXJ0aWFsPExvYWRpbmdEYXRhPik6IGRhdGEgaXMgTG9hZGluZ0RhdGEge1xuICAgIHJldHVybiAhIWRhdGE/LmNvbGxlY3Rpb25JZCAmJiAoZGF0YS5kYXRlPy5pc1ZhbGlkID8/IGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wYXJlTG9hZGluZ0RhdGFFcXVhbChhOiBMb2FkaW5nRGF0YSwgYjogTG9hZGluZ0RhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5jb2xsZWN0aW9uSWQgPT09IGIuY29sbGVjdGlvbklkICYmIGEuZGF0ZS5lcXVhbHMoYi5kYXRlKTtcbiAgfVxufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJyYWlzZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInBhZ2VUaXRsZVwiPlxuICAgIDxtYXQtY2FyZC10aXRsZSBkYXRhLXRlc3QtaWQ9XCJwYWdlLXRpdGxlXCI+XG4gICAgICBRdWFsaXTDpHRzbWV0cmlrOiB7eyBwYWdlVGl0bGUgfCB0cmFuc2xhdGUgfX17eyBpc0xvYWRpbmcoKSA/IFwiOiBMYWRlIG5ldWUgRGF0ZW4uXCIgOiBcIlwiIH19XG4gICAgPC9tYXQtY2FyZC10aXRsZT5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDwhLS0gY29uc2lkZXIgdG8gcHV0IHRoZSBmaWx0ZXIgaW4gdGhlIHRhYmxlIGhlYWRlciB0byBhdm9pZCB0aGF0IGl0IGlzIHNjcm9sbGVkIG91dCBvZiB2aWV3LS0+XG4gIDwhLS0gc2hvdyB0aGUgZmlsdGVyIGFmdGVyIHRoZSB2YWx1ZXMgYXJlIGxvYWRlZCB0byBhdm9pZCBsb2FkaW5nIGN1cnJlbnQgZGF0YSB0d2ljZSAtLT5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJ0b29sYmFyXCI+XG4gICAgPG1ldGFxczItZGF0ZXBpY2tlciBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiIG1hdFJpcHBsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKCkgfHwgIWlzSGlzdG9yeUVuYWJsZWQoKVwiIFtpbnB1dEdyb3VwXT1cInJhbmdlXCIgKm5nSWY9XCJ0aW1lRmlsdGVyTG9hZGVkKCkgJiYgaXNIaXN0b3J5RW5hYmxlZCgpXCI+PC9tZXRhcXMyLWRhdGVwaWNrZXI+XG4gICAgPGRpdiBzdHlsZT1cImZsZXg6IDEgMSBhdXRvXCI+PC9kaXY+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgW25nTW9kZWxdPVwiaXNIaXN0b3J5RW5hYmxlZCgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwiaXNIaXN0b3J5RW5hYmxlZC5zZXQoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiPlxuICAgICAgPGxhYmVsPlplaWdlIGhpc3RvcmlzY2hlIERhdGVuPC9sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG48bWF0LWNhcmQ+XG4gIDxtZXRhcXMyLXByb2dyZXNzLXNwaW5uZXIgW2Rpc3BsYXlQcm9ncmVzc1NwaW5uZXJdPVwiaXNMb2FkaW5nKClcIj48L21ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgPHRhYmxlIFtjbGFzcy53aGlsZS1sb2FkaW5nXT1cImlzTG9hZGluZygpXCIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInJlY2VudFR5cGVDb3VudCQudmFsdWUucm93c1wiXG4gICAgICAgICBjbGFzcz1cInF1YWxpdHktbWF0cml4XCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibGFiZWwtY29sXCIgc3RpY2t5PlxuICAgICAgPHRoIFthdHRyLnJvd3NwYW5dPVwiaXNIaXN0b3J5RW5hYmxlZCgpID8gJzInIDogJzEnXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICA8ZGl2PlF1ZWxsZTwvZGl2PlxuICAgICAgPC90aD5cbiAgICAgIDx0ZFxuICAgICAgICBtYXQtY2VsbFxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJyb3cubWV0YS5hbHRfbGFiZWxcIlxuICAgICAgICBjbGFzcz1cImxhYmVsLWNvbCBtYXQtY2VsbC1sZXZlbC17e3Jvdy5tZXRhLmxldmVsICsgMX19XCJcbiAgICAgID5cbiAgICAgICAge3sgcm93Lm1ldGEubGFiZWwgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBvbmUgY29sdW1uIGZvciBlYWNoIHR5cGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIChyZWNlbnRUeXBlQ291bnQkIHwgYXN5bmMpPy5jb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCJcbiAgICAgICAgICAgICAgICAgIFttYXRDb2x1bW5EZWZdPVwiY29sLmlkICsgJ190eXBlJ1wiPlxuICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwiaXNIaXN0b3J5RW5hYmxlZCgpID8gJzInIDogJzEnXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFttYXRUb29sdGlwXT1cImNvbC5sYWJlbFwiPlxuICAgICAgICB7eyBjb2x1bW5UcmFuc2xhdGlvbmtleSA/IChjb2x1bW5UcmFuc2xhdGlvbmtleSArIGNvbC5sYWJlbCB8IHRyYW5zbGF0ZSkgOiBjb2wubGFiZWwgfX1cbiAgICAgIDwvdGg+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBvbmUgY29sdW1uIGZvciBlYWNoIHR5cGUgZm9yIHRoZSBtb3N0IGN1cnJlbnQgZGF0ZS0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiAocmVjZW50VHlwZUNvdW50JCB8IGFzeW5jKT8uY29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiXG4gICAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbC5pZCArICdfcmVjZW50J1wiPlxuICAgICAgPHRoIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJubyB0b29sdGlwXCI+e3sgcmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19XG4gICAgICA8L3RoPlxuICAgICAgPHRkIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICA8YSBbYXR0ci5ocmVmXT1cIm9wZW5JbkVkaXRvcihyb3cubWV0YS5pZCwgY29sLmlkKSB8IGFzeW5jXCIgdGFyZ2V0PVwiZWRpdG9yX2Zyb250ZW5kXCI+e3sgcm93LmNvdW50c1tjb2wuaWRdID8/ICfigJMnIH19PC9hPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIGVhY2ggdHlwZSBmb3IgdGhlIG9sZGVyIGRhdGUtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgKHJlY2VudFR5cGVDb3VudCQgfCBhc3luYyk/LmNvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIlxuICAgICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJjb2wuaWQgKyAnX3Bhc3QnXCI+XG4gICAgICA8dGggY2xhc3M9XCJwYXN0LWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwibm8gdG9vbHRpcFwiPlxuICAgICAgICB7eyAocGFzdFR5cGVDb3VudCQgfCBhc3luYyk/LnJvd3M/Lmxlbmd0aCA/IHJhbmdlLmNvbnRyb2xzLnN0YXJ0LnZhbHVlLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIDogJ25vIHBhc3QgZGF0YScgfX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgY2xhc3M9XCJwYXN0LWRhdGEtY2VsbFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztcIiA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIocGFzdFR5cGVDb3VudCQgfCBhc3luYyk/LnJvd3M/Lmxlbmd0aCAmJiBwYXN0VHlwZUNvdW50KHJvdywgY29sLmlkKSBhcyB0cmVuZFwiPlxuICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJ0cmVuZC50cmVuZFwiPiB7eyB0cmVuZC52YWx1ZSA/PyAn4oCTJyB9fVxuICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwidHJlbmQudmFsdWVcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0cmVuZC50cmVuZFwiIFtmb250SWNvbl09XCJ0cmVuZC50cmVuZCFcIiAvPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyB0cmVuZC50cmVuZCB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gZ2VuZXJhdGUgYWN0dWFsIHRhYmxlIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydsYWJlbC1jb2wnXS5jb25jYXQodHlwZUNvbHVtbnMoKSk7IHN0aWNreTp0cnVlO1wiPjwvdHI+XG4gICAgPHRyIFtoaWRkZW5dPVwiIWlzSGlzdG9yeUVuYWJsZWQoKVwiIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJhbGxDb2x1bW5zKCk7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2xhYmVsLWNvbCddLmNvbmNhdChhbGxDb2x1bW5zKCkpXCI+PC90cj5cblxuICA8L3RhYmxlPlxuPC9tYXQtY2FyZD5cbiJdfQ==
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { Subject } from 'rxjs';
|
|
2
|
-
export class InlineWorker {
|
|
3
|
-
constructor({ basePath }) {
|
|
4
|
-
this.onMessage = new Subject();
|
|
5
|
-
this.onError = new Subject();
|
|
6
|
-
this.func = () => {
|
|
7
|
-
// START OF WORKER THREAD CODE
|
|
8
|
-
console.debug('Start worker thread, wait for postMessage: ');
|
|
9
|
-
const maxConcurrentRequests = 10; // Limit the number of concurrent fetch requests
|
|
10
|
-
let activeRequests = 0;
|
|
11
|
-
let requestQueue = [];
|
|
12
|
-
// Function to process the next request in the queue
|
|
13
|
-
function processQueue() {
|
|
14
|
-
if (activeRequests >= maxConcurrentRequests || requestQueue.length === 0) {
|
|
15
|
-
return; // Exit if max requests are active or queue is empty
|
|
16
|
-
}
|
|
17
|
-
// @ts-ignore
|
|
18
|
-
const { data, resolve, reject } = requestQueue.shift();
|
|
19
|
-
activeRequests++;
|
|
20
|
-
// Perform the fetch request
|
|
21
|
-
const { basePath, collectionId, searchTerm, oerOnly } = data;
|
|
22
|
-
searchForTypeAndCollection(basePath, searchTerm, oerOnly)
|
|
23
|
-
.then((response) => (response.ok ? response : Promise.reject(response)), (error) => Promise.reject(error))
|
|
24
|
-
.then((response) => response.json())
|
|
25
|
-
.then((data) => {
|
|
26
|
-
resolve({ collectionId, data });
|
|
27
|
-
})
|
|
28
|
-
.catch((error) => {
|
|
29
|
-
reject(error); // Handle the error
|
|
30
|
-
})
|
|
31
|
-
.finally(() => {
|
|
32
|
-
activeRequests--; // Decrement active request count
|
|
33
|
-
processQueue(); // Process the next request in the queue
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
// Add a new fetch request to the queue
|
|
37
|
-
function enqueueRequest(event) {
|
|
38
|
-
return new Promise((resolve, reject) => {
|
|
39
|
-
try {
|
|
40
|
-
requestQueue.push({ data: event.data, resolve, reject });
|
|
41
|
-
processQueue(); // Start processing the queue
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
console.error('Error enqueuing request:', error);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
const searchForTypeAndCollection = (basePath, searchTerm, oerOnly = false) => {
|
|
49
|
-
//strip trailing slash from basePath, if present
|
|
50
|
-
const searchUrl = new URL(basePath.replace(/\/$/, '') + '/collections/v2/material/search');
|
|
51
|
-
searchUrl.searchParams.set('term', searchTerm);
|
|
52
|
-
searchUrl.searchParams.set('oerOnly', oerOnly ? 'true' : 'false');
|
|
53
|
-
return fetch(searchUrl, { credentials: 'include' });
|
|
54
|
-
};
|
|
55
|
-
self.onmessage = (evt) => {
|
|
56
|
-
enqueueRequest(evt)
|
|
57
|
-
.then((data) => {
|
|
58
|
-
postMessage(data);
|
|
59
|
-
})
|
|
60
|
-
.catch((error) => {
|
|
61
|
-
postMessage({ success: false, error: error.message });
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
// END OF WORKER THREAD CODE
|
|
65
|
-
};
|
|
66
|
-
this.basePath = basePath;
|
|
67
|
-
const WORKER_ENABLED = !!Worker;
|
|
68
|
-
if (WORKER_ENABLED) {
|
|
69
|
-
const functionBody = this.func
|
|
70
|
-
.toString()
|
|
71
|
-
.replace(/^[^{]*{\s*/, '')
|
|
72
|
-
.replace(/\s*}[^}]*$/, '');
|
|
73
|
-
this.worker = new Worker(URL.createObjectURL(new Blob([functionBody], { type: 'text/javascript' })));
|
|
74
|
-
this.worker.onmessage = (data) => {
|
|
75
|
-
this.onMessage.next(data);
|
|
76
|
-
};
|
|
77
|
-
this.worker.onerror = (data) => {
|
|
78
|
-
console.error('workers error: ', data);
|
|
79
|
-
this.onError.next(data);
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
throw new Error('WebWorker is not enabled');
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
postMessage(data) {
|
|
87
|
-
this.worker.postMessage({ basePath: this.basePath, ...data });
|
|
88
|
-
}
|
|
89
|
-
onmessage() {
|
|
90
|
-
return this.onMessage.asObservable();
|
|
91
|
-
}
|
|
92
|
-
onerror() {
|
|
93
|
-
return this.onError.asObservable();
|
|
94
|
-
}
|
|
95
|
-
//TODO: implement graceful shutdown and abort outstanding requests
|
|
96
|
-
terminate() {
|
|
97
|
-
if (this.worker) {
|
|
98
|
-
this.worker.terminate();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXdvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi90cmVlLXNlYXJjaC1jb3VudHMvaW5saW5lLXdvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUTNDLE1BQU0sT0FBTyxZQUFZO0lBMkV2QixZQUFZLEVBQUUsUUFBUSxFQUF3QjtRQXpFdEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBQ3hDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRXBDLFNBQUksR0FBRyxHQUFHLEVBQUU7WUFDbEIsOEJBQThCO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUU3RCxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDLGdEQUFnRDtZQUNsRixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxZQUFZLEdBQXVELEVBQUUsQ0FBQztZQUUxRSxvREFBb0Q7WUFDcEQsU0FBUyxZQUFZO2dCQUNuQixJQUFJLGNBQWMsSUFBSSxxQkFBcUIsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN6RSxPQUFPLENBQUMsb0RBQW9EO2dCQUM5RCxDQUFDO2dCQUNELGFBQWE7Z0JBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2RCxjQUFjLEVBQUUsQ0FBQztnQkFFakIsNEJBQTRCO2dCQUM1QixNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUM3RCwwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFF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RUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBQ0Qsa0VBQWtFO0lBQ2xFLFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3REYXRhIHtcbiAgYmFzZVBhdGg6IHN0cmluZztcbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XG4gIHNlYXJjaFRlcm06IHN0cmluZztcbiAgb2VyT25seTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIElubGluZVdvcmtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyOiBXb3JrZXI7XG4gIHByaXZhdGUgb25NZXNzYWdlID0gbmV3IFN1YmplY3Q8TWVzc2FnZUV2ZW50PigpO1xuICBwcml2YXRlIG9uRXJyb3IgPSBuZXcgU3ViamVjdDxFcnJvckV2ZW50PigpO1xuXG4gIHByaXZhdGUgZnVuYyA9ICgpID0+IHtcbiAgICAvLyBTVEFSVCBPRiBXT1JLRVIgVEhSRUFEIENPREVcbiAgICBjb25zb2xlLmRlYnVnKCdTdGFydCB3b3JrZXIgdGhyZWFkLCB3YWl0IGZvciBwb3N0TWVzc2FnZTogJyk7XG5cbiAgICBjb25zdCBtYXhDb25jdXJyZW50UmVxdWVzdHMgPSAxMDsgLy8gTGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGZldGNoIHJlcXVlc3RzXG4gICAgbGV0IGFjdGl2ZVJlcXVlc3RzID0gMDtcbiAgICBsZXQgcmVxdWVzdFF1ZXVlOiB7IGRhdGE6IFJlcXVlc3REYXRhOyByZXNvbHZlOiBhbnk7IHJlamVjdDogYW55IH1bXSA9IFtdO1xuXG4gICAgLy8gRnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAgIGlmIChhY3RpdmVSZXF1ZXN0cyA+PSBtYXhDb25jdXJyZW50UmVxdWVzdHMgfHwgcmVxdWVzdFF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47IC8vIEV4aXQgaWYgbWF4IHJlcXVlc3RzIGFyZSBhY3RpdmUgb3IgcXVldWUgaXMgZW1wdHlcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHsgZGF0YSwgcmVzb2x2ZSwgcmVqZWN0IH0gPSByZXF1ZXN0UXVldWUuc2hpZnQoKTtcbiAgICAgIGFjdGl2ZVJlcXVlc3RzKys7XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGZldGNoIHJlcXVlc3RcbiAgICAgIGNvbnN0IHsgYmFzZVBhdGgsIGNvbGxlY3Rpb25JZCwgc2VhcmNoVGVybSwgb2VyT25seSB9ID0gZGF0YTtcbiAgICAgIHNlYXJjaEZvclR5cGVBbmRDb2xsZWN0aW9uKGJhc2VQYXRoLCBzZWFyY2hUZXJtLCBvZXJPbmx5KVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAocmVzcG9uc2UpID0+IChyZXNwb25zZS5vayA/IHJlc3BvbnNlIDogUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpKSxcbiAgICAgICAgICAoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoeyBjb2xsZWN0aW9uSWQsIGRhdGEgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpOyAvLyBIYW5kbGUgdGhlIGVycm9yXG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBhY3RpdmVSZXF1ZXN0cy0tOyAvLyBEZWNyZW1lbnQgYWN0aXZlIHJlcXVlc3QgY291bnRcbiAgICAgICAgICBwcm9jZXNzUXVldWUoKTsgLy8gUHJvY2VzcyB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYSBuZXcgZmV0Y2ggcmVxdWVzdCB0byB0aGUgcXVldWVcbiAgICBmdW5jdGlvbiBlbnF1ZXVlUmVxdWVzdChldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcXVlc3RRdWV1ZS5wdXNoKHsgZGF0YTogZXZlbnQuZGF0YSwgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpOyAvLyBTdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVucXVldWluZyByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoRm9yVHlwZUFuZENvbGxlY3Rpb24gPSAoYmFzZVBhdGg6IHN0cmluZywgc2VhcmNoVGVybTogc3RyaW5nLCBvZXJPbmx5OiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgICAgIC8vc3RyaXAgdHJhaWxpbmcgc2xhc2ggZnJvbSBiYXNlUGF0aCwgaWYgcHJlc2VudFxuICAgICAgY29uc3Qgc2VhcmNoVXJsID0gbmV3IFVSTChiYXNlUGF0aC5yZXBsYWNlKC9cXC8kLywgJycpICsgJy9jb2xsZWN0aW9ucy92Mi9tYXRlcmlhbC9zZWFyY2gnKTtcbiAgICAgIHNlYXJjaFVybC5zZWFyY2hQYXJhbXMuc2V0KCd0ZXJtJywgc2VhcmNoVGVybSk7XG4gICAgICBzZWFyY2hVcmwuc2VhcmNoUGFyYW1zLnNldCgnb2VyT25seScsIG9lck9ubHkgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgIHJldHVybiBmZXRjaChzZWFyY2hVcmwsIHsgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyB9KTtcbiAgICB9O1xuXG4gICAgc2VsZi5vbm1lc3NhZ2UgPSAoZXZ0OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgIGVucXVldWVSZXF1ZXN0KGV2dClcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHBvc3RNZXNzYWdlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8vIEVORCBPRiBXT1JLRVIgVEhSRUFEIENPREVcbiAgfTtcbiAgcHJpdmF0ZSBiYXNlUGF0aDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHsgYmFzZVBhdGggfTogeyBiYXNlUGF0aDogc3RyaW5nIH0pIHtcbiAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgY29uc3QgV09SS0VSX0VOQUJMRUQgPSAhIVdvcmtlcjtcblxuICAgIGlmIChXT1JLRVJfRU5BQkxFRCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25Cb2R5ID0gdGhpcy5mdW5jXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9eW157XSp7XFxzKi8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXFxzKn1bXn1dKiQvLCAnJyk7XG5cbiAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtmdW5jdGlvbkJvZHldLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pKSk7XG5cbiAgICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMub25NZXNzYWdlLm5leHQoZGF0YSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtlci5vbmVycm9yID0gKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignd29ya2VycyBlcnJvcjogJywgZGF0YSk7XG4gICAgICAgIHRoaXMub25FcnJvci5uZXh0KGRhdGEpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJXb3JrZXIgaXMgbm90IGVuYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICBwb3N0TWVzc2FnZShkYXRhOiBQYXJ0aWFsPFJlcXVlc3REYXRhPikge1xuICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHsgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsIC4uLmRhdGEgfSk7XG4gIH1cblxuICBvbm1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5vbk1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBvbmVycm9yKCk6IE9ic2VydmFibGU8RXJyb3JFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm9uRXJyb3IuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgLy9UT0RPOiBpbXBsZW1lbnQgZ3JhY2VmdWwgc2h1dGRvd24gYW5kIGFib3J0IG91dHN0YW5kaW5nIHJlcXVlc3RzXG4gIHRlcm1pbmF0ZSgpIHtcbiAgICBpZiAodGhpcy53b3JrZXIpIHtcbiAgICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|