ngx-edu-sharing-metaqs2 0.9.25 → 0.9.27
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/esm2022/lib/components/collection-issues/collection-issues.component.mjs +23 -0
- package/esm2022/lib/components/editorial-link-service/editorial-link.service.mjs +37 -37
- package/esm2022/lib/components/material-issues/material-issues.component.mjs +23 -0
- package/esm2022/lib/components/node-entry/node-entry.component.mjs +35 -0
- package/esm2022/lib/components/node-list/node-list.component.mjs +101 -0
- package/esm2022/lib/config-helper.service.mjs +31 -0
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +2 -2
- package/esm2022/lib/java-api/api/authProxyController.service.mjs +2 -2
- package/esm2022/lib/java-api/api/collectionAPI.service.mjs +130 -2
- package/esm2022/lib/java-api/api/editorsAPI.service.mjs +2 -2
- package/esm2022/lib/java-api/api/filterAPI.service.mjs +86 -2
- package/esm2022/lib/java-api/api/replicationSourceAPI.service.mjs +2 -2
- package/esm2022/lib/java-api/model/collectionWithMissingAttributes.mjs +11 -0
- package/esm2022/lib/java-api/model/materialWithMissingAttributes.mjs +11 -0
- package/esm2022/lib/java-api/model/models.mjs +3 -1
- package/esm2022/lib/ng-meta-widgets-lib.module.mjs +31 -6
- package/esm2022/lib/node-image-url.pipe.mjs +29 -0
- package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +4 -4
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +486 -57
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
- package/lib/components/collection-issues/collection-issues.component.d.ts +12 -0
- package/lib/components/material-issues/material-issues.component.d.ts +12 -0
- package/lib/components/node-entry/node-entry.component.d.ts +13 -0
- package/lib/components/node-list/node-list.component.d.ts +32 -0
- package/lib/{env-helper.service.d.ts → config-helper.service.d.ts} +5 -5
- package/lib/java-api/api/collectionAPI.service.d.ts +48 -0
- package/lib/java-api/api/filterAPI.service.d.ts +38 -0
- package/lib/java-api/model/collectionWithMissingAttributes.d.ts +20 -0
- package/lib/java-api/model/materialWithMissingAttributes.d.ts +20 -0
- package/lib/java-api/model/models.d.ts +2 -0
- package/lib/ng-meta-widgets-lib.module.d.ts +32 -27
- package/lib/node-image-url.pipe.d.ts +12 -0
- package/lib/tree-search-counts/tree-search-counts.component.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +4 -1
- package/esm2022/lib/env-helper.service.mjs +0 -31
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../java-api";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "../node-list/node-list.component";
|
|
6
|
+
export class CollectionIssuesComponent {
|
|
7
|
+
constructor(filterAPIService) {
|
|
8
|
+
this.filterAPIService = filterAPIService;
|
|
9
|
+
this.issues = [];
|
|
10
|
+
// @TODO: Input is broken, maybe cause of withComponentInputBinding()?!
|
|
11
|
+
this.collectionId = '94f22c9b-0d3a-4c1c-8987-4c8e83f3a92e';
|
|
12
|
+
}
|
|
13
|
+
async ngOnInit() {
|
|
14
|
+
this.issues = await this.filterAPIService.getCollectionIssueFieldNames().toPromise();
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionIssuesComponent, deps: [{ token: i1.FilterAPIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollectionIssuesComponent, selector: "metaqs2-collection-issues", ngImport: i0, template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [parentId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"collection\"\n></metaqs2-node-list>\n", styles: [":host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.NodeListComponent, selector: "metaqs2-node-list", inputs: ["mode", "type", "parentId"] }] }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionIssuesComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{ selector: 'metaqs2-collection-issues', template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [parentId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"collection\"\n></metaqs2-node-list>\n", styles: [":host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"] }]
|
|
22
|
+
}], ctorParameters: () => [{ type: i1.FilterAPIService }] });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi1pc3N1ZXMvY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi1pc3N1ZXMvY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRbEQsTUFBTSxPQUFPLHlCQUF5QjtJQUtwQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUp0RCxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBQ3RCLHVFQUF1RTtRQUN2RSxpQkFBWSxHQUFXLHNDQUFzQyxDQUFDO0lBRUwsQ0FBQztJQUUxRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RixDQUFDOytHQVRVLHlCQUF5QjttR0FBekIseUJBQXlCLGlFQ1J0Qyx1SkFNQTs7NEZERWEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJBUElTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vamF2YS1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLWNvbGxlY3Rpb24taXNzdWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24taXNzdWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbklzc3Vlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgLy8gQFRPRE86IElucHV0IGlzIGJyb2tlbiwgbWF5YmUgY2F1c2Ugb2Ygd2l0aENvbXBvbmVudElucHV0QmluZGluZygpPyFcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcgPSAnOTRmMjJjOWItMGQzYS00YzFjLTg5ODctNGM4ZTgzZjNhOTJlJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbHRlckFQSVNlcnZpY2U6IEZpbHRlckFQSVNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc3N1ZXMgPSBhd2FpdCB0aGlzLmZpbHRlckFQSVNlcnZpY2UuZ2V0Q29sbGVjdGlvbklzc3VlRmllbGROYW1lcygpLnRvUHJvbWlzZSgpO1xuICB9XG59XG4iLCI8bWV0YXFzMi1ub2RlLWxpc3RcbiAgKm5nRm9yPVwibGV0IG1vZGUgb2YgaXNzdWVzXCJcbiAgW3BhcmVudElkXT1cImNvbGxlY3Rpb25JZFwiXG4gIFttb2RlXT1cIm1vZGVcIlxuICB0eXBlPVwiY29sbGVjdGlvblwiXG4+PC9tZXRhcXMyLW5vZGUtbGlzdD5cbiJdfQ==
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { inject } from
|
|
3
|
-
import {
|
|
2
|
+
import { inject } from '@angular/core';
|
|
3
|
+
import { ConfigHelperService } from '../../config-helper.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/*
|
|
6
6
|
This is a map from properties of a document to filter names
|
|
7
7
|
*/
|
|
8
8
|
const PROPERTIES2FILTERS = new Map([
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
9
|
+
['metadata.educationalContexts', 'ccm:educationalcontext'],
|
|
10
|
+
['metadata.disciplines', 'virtual:taxonid'],
|
|
11
|
+
['collections.nodeRef.id.keyword', 'virtual:collection_id_primary'],
|
|
12
12
|
//["responsibility", "virtual:collection_id_primary"] // das zeigt auf "sammlungszugehörigkeit" und ist falsch
|
|
13
13
|
]);
|
|
14
14
|
/*
|
|
15
15
|
This map our column "names" to the valid values of the virtual:editorial_exclusion Filter
|
|
16
16
|
*/
|
|
17
17
|
const ISSUETYPE2FILTERS = new Map([
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
21
|
-
[
|
|
22
|
-
[
|
|
23
|
-
[
|
|
24
|
-
[
|
|
18
|
+
['without_title', 'missing_title'],
|
|
19
|
+
['without_description', 'missing_description'],
|
|
20
|
+
['without_education_level', 'missing_educationalcontext'],
|
|
21
|
+
['without_target_group', 'missing_educationalintendedenduserrole'],
|
|
22
|
+
['without_taxonomy_id', 'missing_taxonid'],
|
|
23
|
+
['without_category', 'missing_oeh_lrt'],
|
|
24
|
+
['without_license', 'missing_license'],
|
|
25
25
|
]);
|
|
26
26
|
/*
|
|
27
27
|
interestingly it is not necessary to combine the nodeRef.id
|
|
@@ -29,43 +29,43 @@ with https://vocabs.openeduhub.de/w3id.org/openeduhub/vocabs/oeh-topics/{nodeRef
|
|
|
29
29
|
*/
|
|
30
30
|
export class EditorialLinkService {
|
|
31
31
|
constructor() {
|
|
32
|
-
this.env = inject(
|
|
32
|
+
this.env = inject(ConfigHelperService);
|
|
33
33
|
}
|
|
34
34
|
openByReplicationsourceAndIssueTypeWithFilters(source, issue, selectedFilters) {
|
|
35
35
|
const filters = {};
|
|
36
|
-
filters[
|
|
37
|
-
filters[
|
|
38
|
-
filters[
|
|
36
|
+
filters['virtual:audit_filter'] = ['all'];
|
|
37
|
+
filters['ccm:oeh_publisher_combined'] = [source];
|
|
38
|
+
filters['virtual:editorial_exclusion'] = [ISSUETYPE2FILTERS.get(issue)];
|
|
39
39
|
for (const [field, values] of Object.entries(selectedFilters)) {
|
|
40
40
|
if (values && values.length) {
|
|
41
41
|
const editorialFiltername = PROPERTIES2FILTERS.get(field);
|
|
42
42
|
filters[editorialFiltername] = values;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
const theUrl =
|
|
46
|
-
const params =
|
|
47
|
-
params.set(
|
|
48
|
-
params.set(
|
|
49
|
-
window.open(theUrl
|
|
45
|
+
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
46
|
+
const params = new URLSearchParams();
|
|
47
|
+
params.set('mode', 'audit');
|
|
48
|
+
params.set('filters', JSON.stringify(filters));
|
|
49
|
+
window.open(`${theUrl}?${params}`, 'editor_frontend');
|
|
50
50
|
}
|
|
51
51
|
openByCollectionAndIssueType(collectionId, issueType, pageTitle) {
|
|
52
52
|
const filters = {};
|
|
53
|
-
filters[
|
|
54
|
-
filters[
|
|
55
|
-
filters[
|
|
56
|
-
const theUrl =
|
|
57
|
-
const params =
|
|
58
|
-
params.set(
|
|
59
|
-
params.set(
|
|
60
|
-
params.set(
|
|
61
|
-
window.open(theUrl
|
|
53
|
+
filters['virtual:audit_filter'] = ['all'];
|
|
54
|
+
filters['virtual:editorial_exclusion'] = [ISSUETYPE2FILTERS.get(issueType)];
|
|
55
|
+
filters['virtual:collection_id_primary'] = [collectionId];
|
|
56
|
+
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
57
|
+
const params = new URLSearchParams();
|
|
58
|
+
params.set('title', pageTitle);
|
|
59
|
+
params.set('mode', 'audit');
|
|
60
|
+
params.set('filters', JSON.stringify(filters));
|
|
61
|
+
window.open(`${theUrl}?${params}`, 'editor_frontend');
|
|
62
62
|
}
|
|
63
63
|
openByCollectionId(collectionId) {
|
|
64
|
-
const theUrl =
|
|
65
|
-
const params =
|
|
66
|
-
params.set(
|
|
67
|
-
params.set(
|
|
68
|
-
window.open(theUrl
|
|
64
|
+
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
65
|
+
const params = new URLSearchParams();
|
|
66
|
+
params.set('ids', collectionId);
|
|
67
|
+
params.set('mode', 'render');
|
|
68
|
+
window.open(`${theUrl}?${params}`, 'editor_frontend');
|
|
69
69
|
}
|
|
70
70
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
71
71
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, providedIn: 'root' }); }
|
|
@@ -73,7 +73,7 @@ export class EditorialLinkService {
|
|
|
73
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, decorators: [{
|
|
74
74
|
type: Injectable,
|
|
75
75
|
args: [{
|
|
76
|
-
providedIn: 'root'
|
|
76
|
+
providedIn: 'root',
|
|
77
77
|
}]
|
|
78
78
|
}], ctorParameters: () => [] });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yaWFsLWxpbmsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvcmlhbC1saW5rLXNlcnZpY2UvZWRpdG9yaWFsLWxpbmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBRWxFOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDakQsQ0FBQyw4QkFBOEIsRUFBRSx3QkFBd0IsQ0FBQztJQUMxRCxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDO0lBQzNDLENBQUMsZ0NBQWdDLEVBQUUsK0JBQStCLENBQUM7SUFDbkUsOEdBQThHO0NBQy9HLENBQUMsQ0FBQztBQUNIOztFQUVFO0FBRUYsTUFBTSxpQkFBaUIsR0FBd0IsSUFBSSxHQUFHLENBQWlCO0lBQ3JFLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQztJQUNsQyxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO0lBQzlDLENBQUMseUJBQXlCLEVBQUUsNEJBQTRCLENBQUM7SUFDekQsQ0FBQyxzQkFBc0IsRUFBRSx3Q0FBd0MsQ0FBQztJQUNsRSxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDO0lBQzFDLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUM7SUFDdkMsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQztDQUN2QyxDQUFDLENBQUM7QUFDSDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CO1FBRlEsUUFBRyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTNCLENBQUM7SUFFVCw4Q0FBOEMsQ0FDbkQsTUFBYyxFQUNkLEtBQWEsRUFDYixlQUF3RDtRQUV4RCxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBVyxDQUFDO2dCQUNwRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLE1BQU0sRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNNLDRCQUE0QixDQUFDLFlBQW9CLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjtRQUM1RixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsNEJBQTRCLENBQUM7UUFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxNQUFNLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxZQUFvQjtRQUM1QyxNQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksTUFBTSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN4RCxDQUFDOytHQTlDVSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maWdIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZmlnLWhlbHBlci5zZXJ2aWNlJztcblxuLypcblRoaXMgaXMgYSBtYXAgZnJvbSBwcm9wZXJ0aWVzIG9mIGEgZG9jdW1lbnQgdG8gZmlsdGVyIG5hbWVzXG4gKi9cbmNvbnN0IFBST1BFUlRJRVMyRklMVEVSUyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgWydtZXRhZGF0YS5lZHVjYXRpb25hbENvbnRleHRzJywgJ2NjbTplZHVjYXRpb25hbGNvbnRleHQnXSxcbiAgWydtZXRhZGF0YS5kaXNjaXBsaW5lcycsICd2aXJ0dWFsOnRheG9uaWQnXSxcbiAgWydjb2xsZWN0aW9ucy5ub2RlUmVmLmlkLmtleXdvcmQnLCAndmlydHVhbDpjb2xsZWN0aW9uX2lkX3ByaW1hcnknXSxcbiAgLy9bXCJyZXNwb25zaWJpbGl0eVwiLCBcInZpcnR1YWw6Y29sbGVjdGlvbl9pZF9wcmltYXJ5XCJdIC8vIGRhcyB6ZWlndCBhdWYgXCJzYW1tbHVuZ3N6dWdlaMO2cmlna2VpdFwiIHVuZCBpc3QgZmFsc2NoXG5dKTtcbi8qXG5UaGlzIG1hcCBvdXIgY29sdW1uIFwibmFtZXNcIiB0byB0aGUgdmFsaWQgdmFsdWVzIG9mIHRoZSB2aXJ0dWFsOmVkaXRvcmlhbF9leGNsdXNpb24gRmlsdGVyXG4qL1xuXG5jb25zdCBJU1NVRVRZUEUyRklMVEVSUzogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgWyd3aXRob3V0X3RpdGxlJywgJ21pc3NpbmdfdGl0bGUnXSxcbiAgWyd3aXRob3V0X2Rlc2NyaXB0aW9uJywgJ21pc3NpbmdfZGVzY3JpcHRpb24nXSxcbiAgWyd3aXRob3V0X2VkdWNhdGlvbl9sZXZlbCcsICdtaXNzaW5nX2VkdWNhdGlvbmFsY29udGV4dCddLFxuICBbJ3dpdGhvdXRfdGFyZ2V0X2dyb3VwJywgJ21pc3NpbmdfZWR1Y2F0aW9uYWxpbnRlbmRlZGVuZHVzZXJyb2xlJ10sXG4gIFsnd2l0aG91dF90YXhvbm9teV9pZCcsICdtaXNzaW5nX3RheG9uaWQnXSxcbiAgWyd3aXRob3V0X2NhdGVnb3J5JywgJ21pc3Npbmdfb2VoX2xydCddLFxuICBbJ3dpdGhvdXRfbGljZW5zZScsICdtaXNzaW5nX2xpY2Vuc2UnXSxcbl0pO1xuLypcbmludGVyZXN0aW5nbHkgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjb21iaW5lIHRoZSBub2RlUmVmLmlkXG53aXRoIGh0dHBzOi8vdm9jYWJzLm9wZW5lZHVodWIuZGUvdzNpZC5vcmcvb3BlbmVkdWh1Yi92b2NhYnMvb2VoLXRvcGljcy97bm9kZVJlZi5pZH1cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRvcmlhbExpbmtTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbnYgPSBpbmplY3QoQ29uZmlnSGVscGVyU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBvcGVuQnlSZXBsaWNhdGlvbnNvdXJjZUFuZElzc3VlVHlwZVdpdGhGaWx0ZXJzKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIGlzc3VlOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIHwgdW5kZWZpbmVkIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyczogYW55ID0ge307XG4gICAgZmlsdGVyc1sndmlydHVhbDphdWRpdF9maWx0ZXInXSA9IFsnYWxsJ107XG4gICAgZmlsdGVyc1snY2NtOm9laF9wdWJsaXNoZXJfY29tYmluZWQnXSA9IFtzb3VyY2VdO1xuICAgIGZpbHRlcnNbJ3ZpcnR1YWw6ZWRpdG9yaWFsX2V4Y2x1c2lvbiddID0gW0lTU1VFVFlQRTJGSUxURVJTLmdldChpc3N1ZSldO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkRmlsdGVycykpIHtcbiAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBlZGl0b3JpYWxGaWx0ZXJuYW1lID0gUFJPUEVSVElFUzJGSUxURVJTLmdldChmaWVsZCkgYXMgc3RyaW5nO1xuICAgICAgICBmaWx0ZXJzW2VkaXRvcmlhbEZpbHRlcm5hbWVdID0gdmFsdWVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRoZVVybDogc3RyaW5nID0gdGhpcy5lbnYuZWR1U2hhcmluZ1BhdGggKyAnL2NvbXBvbmVudHMvZWRpdG9yaWFsLWRlc2snO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuc2V0KCdtb2RlJywgJ2F1ZGl0Jyk7XG4gICAgcGFyYW1zLnNldCgnZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KGZpbHRlcnMpKTtcbiAgICB3aW5kb3cub3BlbihgJHt0aGVVcmx9PyR7cGFyYW1zfWAsICdlZGl0b3JfZnJvbnRlbmQnKTtcbiAgfVxuICBwdWJsaWMgb3BlbkJ5Q29sbGVjdGlvbkFuZElzc3VlVHlwZShjb2xsZWN0aW9uSWQ6IHN0cmluZywgaXNzdWVUeXBlOiBzdHJpbmcsIHBhZ2VUaXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyczogYW55ID0ge307XG4gICAgZmlsdGVyc1sndmlydHVhbDphdWRpdF9maWx0ZXInXSA9IFsnYWxsJ107XG4gICAgZmlsdGVyc1sndmlydHVhbDplZGl0b3JpYWxfZXhjbHVzaW9uJ10gPSBbSVNTVUVUWVBFMkZJTFRFUlMuZ2V0KGlzc3VlVHlwZSldO1xuICAgIGZpbHRlcnNbJ3ZpcnR1YWw6Y29sbGVjdGlvbl9pZF9wcmltYXJ5J10gPSBbY29sbGVjdGlvbklkXTtcbiAgICBjb25zdCB0aGVVcmw6IHN0cmluZyA9IHRoaXMuZW52LmVkdVNoYXJpbmdQYXRoICsgJy9jb21wb25lbnRzL2VkaXRvcmlhbC1kZXNrJztcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLnNldCgndGl0bGUnLCBwYWdlVGl0bGUpO1xuICAgIHBhcmFtcy5zZXQoJ21vZGUnLCAnYXVkaXQnKTtcbiAgICBwYXJhbXMuc2V0KCdmaWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoZmlsdGVycykpO1xuICAgIHdpbmRvdy5vcGVuKGAke3RoZVVybH0/JHtwYXJhbXN9YCwgJ2VkaXRvcl9mcm9udGVuZCcpO1xuICB9XG5cbiAgcHVibGljIG9wZW5CeUNvbGxlY3Rpb25JZChjb2xsZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRoZVVybDogc3RyaW5nID0gdGhpcy5lbnYuZWR1U2hhcmluZ1BhdGggKyAnL2NvbXBvbmVudHMvZWRpdG9yaWFsLWRlc2snO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuc2V0KCdpZHMnLCBjb2xsZWN0aW9uSWQpO1xuICAgIHBhcmFtcy5zZXQoJ21vZGUnLCAncmVuZGVyJyk7XG4gICAgd2luZG93Lm9wZW4oYCR7dGhlVXJsfT8ke3BhcmFtc31gLCAnZWRpdG9yX2Zyb250ZW5kJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../java-api";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "../node-list/node-list.component";
|
|
6
|
+
export class MaterialIssuesComponent {
|
|
7
|
+
constructor(filterAPIService) {
|
|
8
|
+
this.filterAPIService = filterAPIService;
|
|
9
|
+
this.issues = [];
|
|
10
|
+
// @TODO: Input is broken, maybe cause of withComponentInputBinding()?!
|
|
11
|
+
this.collectionId = '94f22c9b-0d3a-4c1c-8987-4c8e83f3a92e';
|
|
12
|
+
}
|
|
13
|
+
async ngOnInit() {
|
|
14
|
+
this.issues = await this.filterAPIService.getMaterialIssueFieldNames().toPromise();
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialIssuesComponent, deps: [{ token: i1.FilterAPIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MaterialIssuesComponent, selector: "metaqs2-material-issues", ngImport: i0, template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [parentId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"material\"\n></metaqs2-node-list>\n", styles: [":host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.NodeListComponent, selector: "metaqs2-node-list", inputs: ["mode", "type", "parentId"] }] }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialIssuesComponent, decorators: [{
|
|
20
|
+
type: Component,
|
|
21
|
+
args: [{ selector: 'metaqs2-material-issues', template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [parentId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"material\"\n></metaqs2-node-list>\n", styles: [":host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"] }]
|
|
22
|
+
}], ctorParameters: () => [{ type: i1.FilterAPIService }] });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtaXNzdWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL21hdGVyaWFsLWlzc3Vlcy9tYXRlcmlhbC1pc3N1ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtaXNzdWVzL21hdGVyaWFsLWlzc3Vlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztBQVFsRCxNQUFNLE9BQU8sdUJBQXVCO0lBS2xDLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBSnRELFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsdUVBQXVFO1FBQ3ZFLGlCQUFZLEdBQVcsc0NBQXNDLENBQUM7SUFFTCxDQUFDO0lBRTFELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JGLENBQUM7K0dBVFUsdUJBQXVCO21HQUF2Qix1QkFBdUIsK0RDUnBDLHFKQU1BOzs0RkRFYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlckFQSVNlcnZpY2UgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItbWF0ZXJpYWwtaXNzdWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLWlzc3Vlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLWlzc3Vlcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbElzc3Vlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgLy8gQFRPRE86IElucHV0IGlzIGJyb2tlbiwgbWF5YmUgY2F1c2Ugb2Ygd2l0aENvbXBvbmVudElucHV0QmluZGluZygpPyFcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcgPSAnOTRmMjJjOWItMGQzYS00YzFjLTg5ODctNGM4ZTgzZjNhOTJlJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbHRlckFQSVNlcnZpY2U6IEZpbHRlckFQSVNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc3N1ZXMgPSBhd2FpdCB0aGlzLmZpbHRlckFQSVNlcnZpY2UuZ2V0TWF0ZXJpYWxJc3N1ZUZpZWxkTmFtZXMoKS50b1Byb21pc2UoKTtcbiAgfVxufVxuIiwiPG1ldGFxczItbm9kZS1saXN0XG4gICpuZ0Zvcj1cImxldCBtb2RlIG9mIGlzc3Vlc1wiXG4gIFtwYXJlbnRJZF09XCJjb2xsZWN0aW9uSWRcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgdHlwZT1cIm1hdGVyaWFsXCJcbj48L21ldGFxczItbm9kZS1saXN0PlxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
2
|
+
import { ConfigHelperService } from '../../config-helper.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/material/icon";
|
|
6
|
+
import * as i3 from "@angular/material/button";
|
|
7
|
+
import * as i4 from "../../node-image-url.pipe";
|
|
8
|
+
export class NodeEntryComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.env = inject(ConfigHelperService);
|
|
11
|
+
this.edit = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
openNode(node) {
|
|
14
|
+
window.open(this.env.eduSharingPath +
|
|
15
|
+
'/components/editorial-desk/?mode=render&viewType=single&ids=' +
|
|
16
|
+
encodeURIComponent(node.node_id));
|
|
17
|
+
// this.metaWidget.openNode(node);
|
|
18
|
+
}
|
|
19
|
+
isCollectionCount() {
|
|
20
|
+
// @TODO
|
|
21
|
+
return false;
|
|
22
|
+
// return (this.node as MaterialCounts).materials_count !== undefined;
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeEntryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NodeEntryComponent, selector: "metaqs2-node-entry", inputs: { node: "node" }, outputs: { edit: "edit" }, ngImport: i0, template: "<div class=\"node\">\n <img class=\"icon\" [src]=\"node | nodeImageUrl\" loading=\"lazy\" />\n <div class=\"text\">\n <span class=\"title\">{{ node.title }}</span>\n <span class=\"description\" *ngIf=\"!isCollectionCount()\">{{ node.description }}</span>\n <span class=\"count\" *ngIf=\"isCollectionCount()\">{{ $any(node).materials_count }} Materialien</span>\n </div>\n <div class=\"actions\">\n <button mat-icon-button color=\"primary\" (click)=\"openNode(node)\">\n <mat-icon>open_in_new</mat-icon>\n </button>\n <button *ngIf=\"$any(node).type === 'ccm:io'\" mat-icon-button color=\"primary\" (click)=\"edit.emit(node)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".node{display:flex;align-items:center;padding:5px 0}.node .icon{width:50px;min-width:50px;height:50px;object-fit:cover;padding-right:10px}.node .text{flex-grow:1;display:flex;flex-direction:column}.node .text .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.node .text .description,.node .text .count{font-size:90%;color:#555;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node .actions{display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i4.NodeImageUrlPipe, name: "nodeImageUrl" }] }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeEntryComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'metaqs2-node-entry', template: "<div class=\"node\">\n <img class=\"icon\" [src]=\"node | nodeImageUrl\" loading=\"lazy\" />\n <div class=\"text\">\n <span class=\"title\">{{ node.title }}</span>\n <span class=\"description\" *ngIf=\"!isCollectionCount()\">{{ node.description }}</span>\n <span class=\"count\" *ngIf=\"isCollectionCount()\">{{ $any(node).materials_count }} Materialien</span>\n </div>\n <div class=\"actions\">\n <button mat-icon-button color=\"primary\" (click)=\"openNode(node)\">\n <mat-icon>open_in_new</mat-icon>\n </button>\n <button *ngIf=\"$any(node).type === 'ccm:io'\" mat-icon-button color=\"primary\" (click)=\"edit.emit(node)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".node{display:flex;align-items:center;padding:5px 0}.node .icon{width:50px;min-width:50px;height:50px;object-fit:cover;padding-right:10px}.node .text{flex-grow:1;display:flex;flex-direction:column}.node .text .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.node .text .description,.node .text .count{font-size:90%;color:#555;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node .actions{display:flex}\n"] }]
|
|
30
|
+
}], ctorParameters: () => [], propDecorators: { node: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], edit: [{
|
|
33
|
+
type: Output
|
|
34
|
+
}] } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9ub2RlLWVudHJ5L25vZGUtZW50cnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbm9kZS1lbnRyeS9ub2RlLWVudHJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFPbEUsTUFBTSxPQUFPLGtCQUFrQjtJQU03QjtRQUxRLFFBQUcsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUdoQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW1FLENBQUM7SUFFdEYsQ0FBQztJQUVoQixRQUFRLENBQUMsSUFBcUU7UUFDNUUsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWM7WUFDckIsOERBQThEO1lBQzlELGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFTLENBQUMsQ0FDckMsQ0FBQztRQUNGLGtDQUFrQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsUUFBUTtRQUNSLE9BQU8sS0FBSyxDQUFDO1FBQ2Isc0VBQXNFO0lBQ3hFLENBQUM7K0dBckJVLGtCQUFrQjttR0FBbEIsa0JBQWtCLCtHQ1QvQixtdEJBZ0JBOzs0RkRQYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0Usb0JBQW9CO3dEQU9yQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbldpdGhNaXNzaW5nQXR0cmlidXRlcywgTWF0ZXJpYWxXaXRoTWlzc2luZ0F0dHJpYnV0ZXMgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBDb25maWdIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZmlnLWhlbHBlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1ub2RlLWVudHJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtZW50cnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWVudHJ5LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVFbnRyeUNvbXBvbmVudCB7XG4gIHByaXZhdGUgZW52ID0gaW5qZWN0KENvbmZpZ0hlbHBlclNlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIG5vZGU6IE1hdGVyaWFsV2l0aE1pc3NpbmdBdHRyaWJ1dGVzIHwgQ29sbGVjdGlvbldpdGhNaXNzaW5nQXR0cmlidXRlcztcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPE1hdGVyaWFsV2l0aE1pc3NpbmdBdHRyaWJ1dGVzIHwgQ29sbGVjdGlvbldpdGhNaXNzaW5nQXR0cmlidXRlcz4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgb3Blbk5vZGUobm9kZTogTWF0ZXJpYWxXaXRoTWlzc2luZ0F0dHJpYnV0ZXMgfCBDb2xsZWN0aW9uV2l0aE1pc3NpbmdBdHRyaWJ1dGVzKSB7XG4gICAgd2luZG93Lm9wZW4oXG4gICAgICB0aGlzLmVudi5lZHVTaGFyaW5nUGF0aCArXG4gICAgICAgICcvY29tcG9uZW50cy9lZGl0b3JpYWwtZGVzay8/bW9kZT1yZW5kZXImdmlld1R5cGU9c2luZ2xlJmlkcz0nICtcbiAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KG5vZGUubm9kZV9pZCEhKVxuICAgICk7XG4gICAgLy8gdGhpcy5tZXRhV2lkZ2V0Lm9wZW5Ob2RlKG5vZGUpO1xuICB9XG5cbiAgaXNDb2xsZWN0aW9uQ291bnQoKSB7XG4gICAgLy8gQFRPRE9cbiAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gcmV0dXJuICh0aGlzLm5vZGUgYXMgTWF0ZXJpYWxDb3VudHMpLm1hdGVyaWFsc19jb3VudCAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibm9kZVwiPlxuICA8aW1nIGNsYXNzPVwiaWNvblwiIFtzcmNdPVwibm9kZSB8IG5vZGVJbWFnZVVybFwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cbiAgPGRpdiBjbGFzcz1cInRleHRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3sgbm9kZS50aXRsZSB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgKm5nSWY9XCIhaXNDb2xsZWN0aW9uQ291bnQoKVwiPnt7IG5vZGUuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwiaXNDb2xsZWN0aW9uQ291bnQoKVwiPnt7ICRhbnkobm9kZSkubWF0ZXJpYWxzX2NvdW50IH19IE1hdGVyaWFsaWVuPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib3Blbk5vZGUobm9kZSlcIj5cbiAgICAgIDxtYXQtaWNvbj5vcGVuX2luX25ldzwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiRhbnkobm9kZSkudHlwZSA9PT0gJ2NjbTppbydcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImVkaXQuZW1pdChub2RlKVwiPlxuICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Component, inject, Input } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { map, shareReplay } from 'rxjs/operators';
|
|
4
|
+
import { wrapResponse } from '../../wrap-observable.pipe';
|
|
5
|
+
import { ConfigHelperService } from '../../config-helper.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../java-api";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
import * as i3 from "@angular/material/card";
|
|
10
|
+
import * as i4 from "@angular/material/icon";
|
|
11
|
+
import * as i5 from "@angular/material/slider";
|
|
12
|
+
import * as i6 from "@angular/material/button";
|
|
13
|
+
import * as i7 from "@angular/material/progress-spinner";
|
|
14
|
+
import * as i8 from "@angular/forms";
|
|
15
|
+
import * as i9 from "../node-entry/node-entry.component";
|
|
16
|
+
import * as i10 from "@ngx-translate/core";
|
|
17
|
+
export class NodeListComponent {
|
|
18
|
+
constructor(collectionAPIService) {
|
|
19
|
+
this.collectionAPIService = collectionAPIService;
|
|
20
|
+
this.env = inject(ConfigHelperService);
|
|
21
|
+
/**
|
|
22
|
+
* default max count of nodes that should be shown
|
|
23
|
+
*/
|
|
24
|
+
this.DEFAULT_LIMIT = 25;
|
|
25
|
+
this.data = new BehaviorSubject(undefined);
|
|
26
|
+
// rawData: (MaterialWithMissingAttributes | CollectionWithMissingAttributes)[] | undefined;
|
|
27
|
+
this.count = 0;
|
|
28
|
+
this.destroyed$ = new Subject();
|
|
29
|
+
/**
|
|
30
|
+
* should all nodes be shown?
|
|
31
|
+
*/
|
|
32
|
+
this.showAll = false;
|
|
33
|
+
}
|
|
34
|
+
async ngOnChanges(changes) {
|
|
35
|
+
if (this.parentId) {
|
|
36
|
+
await this.refresh();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
ngOnDestroy() {
|
|
40
|
+
this.destroyed$.next();
|
|
41
|
+
this.destroyed$.complete();
|
|
42
|
+
}
|
|
43
|
+
async refresh() {
|
|
44
|
+
let getByMissingAttribute = () => {
|
|
45
|
+
if (this.type === 'material') {
|
|
46
|
+
return this.collectionAPIService.getMaterialsWithMissingAttribute(this.parentId, this.mode);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return this.collectionAPIService.getCollectionsWithMissingAttribute(this.parentId, this.mode);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
// reset all data before switching
|
|
53
|
+
this.data.next(undefined);
|
|
54
|
+
//this.rawData = undefined;
|
|
55
|
+
this.wrappedData$ = getByMissingAttribute().pipe(wrapResponse(), shareReplay(1));
|
|
56
|
+
this.data.next(await this.wrappedData$
|
|
57
|
+
.pipe(map((wrappedData) => (wrappedData.state === 'success' ? wrappedData.data : undefined)))
|
|
58
|
+
.toPromise());
|
|
59
|
+
//this.rawData = this.data.value?.slice();
|
|
60
|
+
/**
|
|
61
|
+
* @TODO: Count mode
|
|
62
|
+
*/
|
|
63
|
+
/*
|
|
64
|
+
if (?) {
|
|
65
|
+
this.filterCount();
|
|
66
|
+
}
|
|
67
|
+
*/
|
|
68
|
+
}
|
|
69
|
+
editNode(node) {
|
|
70
|
+
let action;
|
|
71
|
+
if (this.mode === 'without_license') {
|
|
72
|
+
action = 'OPTIONS.LICENSE';
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
action = 'OPTIONS.EDIT';
|
|
76
|
+
}
|
|
77
|
+
const id = node.node_id;
|
|
78
|
+
const win = window.open(this.env.eduSharingPath +
|
|
79
|
+
'/components/editorial-desk?mode=audit&viewType=single&ids=' +
|
|
80
|
+
encodeURIComponent(id) +
|
|
81
|
+
'&action=' +
|
|
82
|
+
action);
|
|
83
|
+
}
|
|
84
|
+
filterCount() {
|
|
85
|
+
// @TODO
|
|
86
|
+
// this.data = this.rawData?.filter((d) => (d as MaterialCounts).materials_count <= (this.count ?? 0));
|
|
87
|
+
}
|
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeListComponent, deps: [{ token: i1.CollectionAPIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NodeListComponent, selector: "metaqs2-node-list", inputs: { mode: "mode", type: "type", parentId: "parentId" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"wrapper\">\n <mat-card *ngIf=\"mode\">\n <mat-card-header>\n <mat-card-title>\n {{ 'issues.' + mode | translate }}\n <span class=\"count\" *ngIf=\"(data | async) as d\">({{ d.length || 0 }})</span>\n </mat-card-title>\n <button mat-icon-button color=\"primary\" [disabled]=\"!(data | async)\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-header>\n <!-- @TODO -->\n <div *ngIf=\"type === 'collection' && mode === 'TODO_count'\" class=\"count-slider\">\n <label>Sammlungen mit {{ count }} oder weniger Inhalten</label>\n <mat-slider\n [showTickMarks]=\"true\"\n step=\"1\"\n [ngModel]=\"count\"\n (ngModelChange)=\"count = $event; filterCount()\"\n min=\"0\"\n max=\"10\"\n ></mat-slider>\n </div>\n <ng-container *ngIf=\"wrappedData$ | async as wrappedData\">\n <mat-spinner *ngIf=\"wrappedData.state === 'loading'\" diameter=\"40\" color=\"primary\"></mat-spinner>\n <div class=\"error\" *ngIf=\"wrappedData.state === 'error'\">\n <p class=\"error-text\">Etwas ist schief gelaufen.</p>\n </div>\n <div class=\"scroll\" *ngIf=\"wrappedData.state === 'success'\">\n <ng-container *ngIf=\"(data | async) as d\">\n <metaqs2-node-entry\n *ngFor=\"let node of DEFAULT_LIMIT < d.length && !showAll ? d.slice(0, DEFAULT_LIMIT) : d\"\n [node]=\"node\"\n (edit)=\"editNode(node)\"\n ></metaqs2-node-entry>\n <div *ngIf=\"!d.length\">\n <div class=\"all-done\">\n <p class=\"all-done-emoji\">\uD83E\uDD73</p>\n <p class=\"all-done-text\">Keine Elemente ausstehend</p>\n </div>\n </div>\n <button *ngIf=\"DEFAULT_LIMIT < d.length && !showAll\" (click)=\"showAll = true\" color=\"primary\" mat-button>\n Alle Elemente anzeigen <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </mat-card>\n</div>\n", styles: [".wrapper{width:100%;height:100%}.wrapper mat-card{display:flex;flex-direction:column;width:100%;height:100%;padding:0;box-shadow:none}.wrapper mat-card ::ng-deep mat-card-header{align-items:center}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.wrapper mat-card .count-slider{display:flex;flex-direction:column;width:100%}.wrapper mat-card .count-slider>label{padding:0 20px;font-size:90%}.wrapper mat-card .count-slider>mat-slider{width:100%}.wrapper mat-card mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20%}.wrapper mat-card .scroll{flex-grow:1;overflow-y:auto}.wrapper mat-card .scroll>button{display:flex;margin:auto}.wrapper mat-card .scroll .all-done{display:flex;flex-direction:column;align-items:center}.wrapper mat-card .scroll .all-done .all-done-emoji{font-size:72px;margin-bottom:20px}.wrapper mat-card .scroll .all-done .all-done-text{text-align:center;font-size:1.3em;color:var(--font-light)}.wrapper mat-card .error{border:#d00 solid 2px;background-color:#d005;display:flex;flex-direction:column;align-items:center}.wrapper mat-card .error .error-text{font-size:1.3em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NodeEntryComponent, selector: "metaqs2-node-entry", inputs: ["node"], outputs: ["edit"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeListComponent, decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{ selector: 'metaqs2-node-list', template: "<div class=\"wrapper\">\n <mat-card *ngIf=\"mode\">\n <mat-card-header>\n <mat-card-title>\n {{ 'issues.' + mode | translate }}\n <span class=\"count\" *ngIf=\"(data | async) as d\">({{ d.length || 0 }})</span>\n </mat-card-title>\n <button mat-icon-button color=\"primary\" [disabled]=\"!(data | async)\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-header>\n <!-- @TODO -->\n <div *ngIf=\"type === 'collection' && mode === 'TODO_count'\" class=\"count-slider\">\n <label>Sammlungen mit {{ count }} oder weniger Inhalten</label>\n <mat-slider\n [showTickMarks]=\"true\"\n step=\"1\"\n [ngModel]=\"count\"\n (ngModelChange)=\"count = $event; filterCount()\"\n min=\"0\"\n max=\"10\"\n ></mat-slider>\n </div>\n <ng-container *ngIf=\"wrappedData$ | async as wrappedData\">\n <mat-spinner *ngIf=\"wrappedData.state === 'loading'\" diameter=\"40\" color=\"primary\"></mat-spinner>\n <div class=\"error\" *ngIf=\"wrappedData.state === 'error'\">\n <p class=\"error-text\">Etwas ist schief gelaufen.</p>\n </div>\n <div class=\"scroll\" *ngIf=\"wrappedData.state === 'success'\">\n <ng-container *ngIf=\"(data | async) as d\">\n <metaqs2-node-entry\n *ngFor=\"let node of DEFAULT_LIMIT < d.length && !showAll ? d.slice(0, DEFAULT_LIMIT) : d\"\n [node]=\"node\"\n (edit)=\"editNode(node)\"\n ></metaqs2-node-entry>\n <div *ngIf=\"!d.length\">\n <div class=\"all-done\">\n <p class=\"all-done-emoji\">\uD83E\uDD73</p>\n <p class=\"all-done-text\">Keine Elemente ausstehend</p>\n </div>\n </div>\n <button *ngIf=\"DEFAULT_LIMIT < d.length && !showAll\" (click)=\"showAll = true\" color=\"primary\" mat-button>\n Alle Elemente anzeigen <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </mat-card>\n</div>\n", styles: [".wrapper{width:100%;height:100%}.wrapper mat-card{display:flex;flex-direction:column;width:100%;height:100%;padding:0;box-shadow:none}.wrapper mat-card ::ng-deep mat-card-header{align-items:center}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.wrapper mat-card .count-slider{display:flex;flex-direction:column;width:100%}.wrapper mat-card .count-slider>label{padding:0 20px;font-size:90%}.wrapper mat-card .count-slider>mat-slider{width:100%}.wrapper mat-card mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20%}.wrapper mat-card .scroll{flex-grow:1;overflow-y:auto}.wrapper mat-card .scroll>button{display:flex;margin:auto}.wrapper mat-card .scroll .all-done{display:flex;flex-direction:column;align-items:center}.wrapper mat-card .scroll .all-done .all-done-emoji{font-size:72px;margin-bottom:20px}.wrapper mat-card .scroll .all-done .all-done-text{text-align:center;font-size:1.3em;color:var(--font-light)}.wrapper mat-card .error{border:#d00 solid 2px;background-color:#d005;display:flex;flex-direction:column;align-items:center}.wrapper mat-card .error .error-text{font-size:1.3em}\n"] }]
|
|
94
|
+
}], ctorParameters: () => [{ type: i1.CollectionAPIService }], propDecorators: { mode: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], type: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], parentId: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}] } });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL25vZGUtbGlzdC9ub2RlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbm9kZS1saXN0L25vZGUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXVDLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFtQixZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBT2xFLE1BQU0sT0FBTyxpQkFBaUI7SUF1QjVCLFlBQW9CLG9CQUEwQztRQUExQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBdEJ0RCxRQUFHLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFLMUM7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUU1QixTQUFJLEdBQUcsSUFBSSxlQUFlLENBQ3hCLFNBQVMsQ0FDVixDQUFDO1FBQ0YsNEZBQTRGO1FBQzVGLFVBQUssR0FBa0IsQ0FBQyxDQUFDO1FBRWpCLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3pDOztXQUVHO1FBQ0gsWUFBTyxHQUFHLEtBQUssQ0FBQztJQUVpRCxDQUFDO0lBRWxFLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBc0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUkscUJBQXFCLEdBQUcsR0FBb0YsRUFBRTtZQUNoSCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLE1BQU0sSUFBSSxDQUFDLFlBQVk7YUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM1RixTQUFTLEVBQUUsQ0FDZixDQUFDO1FBQ0YsMENBQTBDO1FBRTFDOztXQUVHO1FBQ0g7Ozs7ZUFJTztJQUNULENBQUM7SUFFRCxRQUFRLENBQUMsSUFBcUU7UUFDNUUsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVMsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWM7WUFDckIsNERBQTREO1lBQzVELGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUN0QixVQUFVO1lBQ1YsTUFBTSxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULFFBQVE7UUFDUix1R0FBdUc7SUFDekcsQ0FBQzsrR0F2RlUsaUJBQWlCO21HQUFqQixpQkFBaUIsNElDWjlCLGtqRUFpREE7OzRGRHJDYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsbUJBQW1CO3lGQU1wQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQVBJU2VydmljZSwgQ29sbGVjdGlvbldpdGhNaXNzaW5nQXR0cmlidXRlcywgTWF0ZXJpYWxXaXRoTWlzc2luZ0F0dHJpYnV0ZXMgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBXcmFwcGVkUmVzcG9uc2UsIHdyYXBSZXNwb25zZSB9IGZyb20gJy4uLy4uL3dyYXAtb2JzZXJ2YWJsZS5waXBlJztcbmltcG9ydCB7IENvbmZpZ0hlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25maWctaGVscGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLW5vZGUtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgZW52ID0gaW5qZWN0KENvbmZpZ0hlbHBlclNlcnZpY2UpO1xuICBASW5wdXQoKSBtb2RlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHR5cGU6ICdtYXRlcmlhbCcgfCAnY29sbGVjdGlvbic7XG4gIEBJbnB1dCgpIHBhcmVudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGRlZmF1bHQgbWF4IGNvdW50IG9mIG5vZGVzIHRoYXQgc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICByZWFkb25seSBERUZBVUxUX0xJTUlUID0gMjU7XG4gIHdyYXBwZWREYXRhJDogT2JzZXJ2YWJsZTxXcmFwcGVkUmVzcG9uc2U8KE1hdGVyaWFsV2l0aE1pc3NpbmdBdHRyaWJ1dGVzIHwgQ29sbGVjdGlvbldpdGhNaXNzaW5nQXR0cmlidXRlcylbXT4+O1xuICBkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDwoTWF0ZXJpYWxXaXRoTWlzc2luZ0F0dHJpYnV0ZXMgfCBDb2xsZWN0aW9uV2l0aE1pc3NpbmdBdHRyaWJ1dGVzKVtdIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLy8gcmF3RGF0YTogKE1hdGVyaWFsV2l0aE1pc3NpbmdBdHRyaWJ1dGVzIHwgQ29sbGVjdGlvbldpdGhNaXNzaW5nQXR0cmlidXRlcylbXSB8IHVuZGVmaW5lZDtcbiAgY291bnQ6IG51bWJlciB8IG51bGwgPSAwO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBzaG91bGQgYWxsIG5vZGVzIGJlIHNob3duP1xuICAgKi9cbiAgc2hvd0FsbCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29sbGVjdGlvbkFQSVNlcnZpY2U6IENvbGxlY3Rpb25BUElTZXJ2aWNlKSB7fVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5wYXJlbnRJZCkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgbGV0IGdldEJ5TWlzc2luZ0F0dHJpYnV0ZSA9ICgpOiBPYnNlcnZhYmxlPChNYXRlcmlhbFdpdGhNaXNzaW5nQXR0cmlidXRlcyB8IENvbGxlY3Rpb25XaXRoTWlzc2luZ0F0dHJpYnV0ZXMpW10+ID0+IHtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdtYXRlcmlhbCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkFQSVNlcnZpY2UuZ2V0TWF0ZXJpYWxzV2l0aE1pc3NpbmdBdHRyaWJ1dGUodGhpcy5wYXJlbnRJZCwgdGhpcy5tb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25BUElTZXJ2aWNlLmdldENvbGxlY3Rpb25zV2l0aE1pc3NpbmdBdHRyaWJ1dGUodGhpcy5wYXJlbnRJZCwgdGhpcy5tb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gcmVzZXQgYWxsIGRhdGEgYmVmb3JlIHN3aXRjaGluZ1xuICAgIHRoaXMuZGF0YS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgLy90aGlzLnJhd0RhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53cmFwcGVkRGF0YSQgPSBnZXRCeU1pc3NpbmdBdHRyaWJ1dGUoKS5waXBlKHdyYXBSZXNwb25zZSgpLCBzaGFyZVJlcGxheSgxKSk7XG4gICAgdGhpcy5kYXRhLm5leHQoXG4gICAgICBhd2FpdCB0aGlzLndyYXBwZWREYXRhJFxuICAgICAgICAucGlwZShtYXAoKHdyYXBwZWREYXRhKSA9PiAod3JhcHBlZERhdGEuc3RhdGUgPT09ICdzdWNjZXNzJyA/IHdyYXBwZWREYXRhLmRhdGEgOiB1bmRlZmluZWQpKSlcbiAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgICAvL3RoaXMucmF3RGF0YSA9IHRoaXMuZGF0YS52YWx1ZT8uc2xpY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEBUT0RPOiBDb3VudCBtb2RlXG4gICAgICovXG4gICAgLypcbiAgICAgICAgaWYgKD8pIHtcbiAgICAgICAgICB0aGlzLmZpbHRlckNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgICovXG4gIH1cblxuICBlZGl0Tm9kZShub2RlOiBNYXRlcmlhbFdpdGhNaXNzaW5nQXR0cmlidXRlcyB8IENvbGxlY3Rpb25XaXRoTWlzc2luZ0F0dHJpYnV0ZXMpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3dpdGhvdXRfbGljZW5zZScpIHtcbiAgICAgIGFjdGlvbiA9ICdPUFRJT05TLkxJQ0VOU0UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb24gPSAnT1BUSU9OUy5FRElUJztcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IG5vZGUubm9kZV9pZCEhO1xuICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKFxuICAgICAgdGhpcy5lbnYuZWR1U2hhcmluZ1BhdGggK1xuICAgICAgICAnL2NvbXBvbmVudHMvZWRpdG9yaWFsLWRlc2s/bW9kZT1hdWRpdCZ2aWV3VHlwZT1zaW5nbGUmaWRzPScgK1xuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoaWQpICtcbiAgICAgICAgJyZhY3Rpb249JyArXG4gICAgICAgIGFjdGlvblxuICAgICk7XG4gIH1cblxuICBmaWx0ZXJDb3VudCgpIHtcbiAgICAvLyBAVE9ET1xuICAgIC8vIHRoaXMuZGF0YSA9IHRoaXMucmF3RGF0YT8uZmlsdGVyKChkKSA9PiAoZCBhcyBNYXRlcmlhbENvdW50cykubWF0ZXJpYWxzX2NvdW50IDw9ICh0aGlzLmNvdW50ID8/IDApKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgPG1hdC1jYXJkICpuZ0lmPVwibW9kZVwiPlxuICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICAgIHt7ICdpc3N1ZXMuJyArIG1vZGUgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cIihkYXRhIHwgYXN5bmMpIGFzIGRcIj4oe3sgZC5sZW5ndGggfHwgMCB9fSk8L3NwYW4+XG4gICAgICA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cIiEoZGF0YSB8IGFzeW5jKVwiIChjbGljayk9XCJyZWZyZXNoKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgPCEtLSBAVE9ETyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2NvbGxlY3Rpb24nICYmIG1vZGUgPT09ICdUT0RPX2NvdW50J1wiIGNsYXNzPVwiY291bnQtc2xpZGVyXCI+XG4gICAgICA8bGFiZWw+U2FtbWx1bmdlbiBtaXQge3sgY291bnQgfX0gb2RlciB3ZW5pZ2VyIEluaGFsdGVuPC9sYWJlbD5cbiAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgIFtzaG93VGlja01hcmtzXT1cInRydWVcIlxuICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgIFtuZ01vZGVsXT1cImNvdW50XCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY291bnQgPSAkZXZlbnQ7IGZpbHRlckNvdW50KClcIlxuICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgbWF4PVwiMTBcIlxuICAgICAgPjwvbWF0LXNsaWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid3JhcHBlZERhdGEkIHwgYXN5bmMgYXMgd3JhcHBlZERhdGFcIj5cbiAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cIndyYXBwZWREYXRhLnN0YXRlID09PSAnbG9hZGluZydcIiBkaWFtZXRlcj1cIjQwXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwid3JhcHBlZERhdGEuc3RhdGUgPT09ICdlcnJvcidcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJlcnJvci10ZXh0XCI+RXR3YXMgaXN0IHNjaGllZiBnZWxhdWZlbi48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxcIiAqbmdJZj1cIndyYXBwZWREYXRhLnN0YXRlID09PSAnc3VjY2VzcydcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihkYXRhIHwgYXN5bmMpIGFzIGRcIj5cbiAgICAgICAgICA8bWV0YXFzMi1ub2RlLWVudHJ5XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbm9kZSBvZiBERUZBVUxUX0xJTUlUIDwgZC5sZW5ndGggJiYgIXNob3dBbGwgPyBkLnNsaWNlKDAsIERFRkFVTFRfTElNSVQpIDogZFwiXG4gICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgIChlZGl0KT1cImVkaXROb2RlKG5vZGUpXCJcbiAgICAgICAgICA+PC9tZXRhcXMyLW5vZGUtZW50cnk+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFkLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsbC1kb25lXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYWxsLWRvbmUtZW1vamlcIj7wn6WzPC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImFsbC1kb25lLXRleHRcIj5LZWluZSBFbGVtZW50ZSBhdXNzdGVoZW5kPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIkRFRkFVTFRfTElNSVQgPCBkLmxlbmd0aCAmJiAhc2hvd0FsbFwiIChjbGljayk9XCJzaG93QWxsID0gdHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1idXR0b24+XG4gICAgICAgICAgICBBbGxlIEVsZW1lbnRlIGFuemVpZ2VuIDxtYXQtaWNvbj5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtY2FyZD5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NgMetaWidgetsLibConfiguration {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* helper class to provide configuration values
|
|
7
|
+
*/
|
|
8
|
+
export class ConfigHelperService {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
// apply api path given in window url
|
|
12
|
+
}
|
|
13
|
+
patchConfig(config) {
|
|
14
|
+
this.config = { ...this.config, ...config };
|
|
15
|
+
}
|
|
16
|
+
get apiPath() {
|
|
17
|
+
return this.config.apiPath;
|
|
18
|
+
}
|
|
19
|
+
get eduSharingPath() {
|
|
20
|
+
return this.config.eduSharingPath;
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigHelperService, deps: [{ token: 'config' }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
23
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigHelperService }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigHelperService, decorators: [{
|
|
26
|
+
type: Injectable
|
|
27
|
+
}], ctorParameters: () => [{ type: NgMetaWidgetsLibConfiguration, decorators: [{
|
|
28
|
+
type: Inject,
|
|
29
|
+
args: ['config']
|
|
30
|
+
}] }] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbmZpZy1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFbkQsTUFBTSxPQUFPLDZCQUE2QjtDQUd6QztBQUVEOztHQUVHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFxQyxNQUFxQztRQUFyQyxXQUFNLEdBQU4sTUFBTSxDQUErQjtRQUN4RSxxQ0FBcUM7SUFDdkMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxNQUE4QztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUNwQyxDQUFDOytHQWZVLG1CQUFtQixrQkFDVixRQUFRO21IQURqQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVU7OzBCQUVJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgTmdNZXRhV2lkZ2V0c0xpYkNvbmZpZ3VyYXRpb24ge1xuICBhcGlQYXRoOiBzdHJpbmc7XG4gIGVkdVNoYXJpbmdQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvbiB2YWx1ZXNcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ0hlbHBlclNlcnZpY2UgaW1wbGVtZW50cyBDb25maWdIZWxwZXIge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjb25maWcnKSBwdWJsaWMgY29uZmlnOiBOZ01ldGFXaWRnZXRzTGliQ29uZmlndXJhdGlvbikge1xuICAgIC8vIGFwcGx5IGFwaSBwYXRoIGdpdmVuIGluIHdpbmRvdyB1cmxcbiAgfVxuXG4gIHB1YmxpYyBwYXRjaENvbmZpZyhjb25maWc6IFBhcnRpYWw8TmdNZXRhV2lkZ2V0c0xpYkNvbmZpZ3VyYXRpb24+KSB7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuY29uZmlnLCAuLi5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBpUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXBpUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZWR1U2hhcmluZ1BhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmVkdVNoYXJpbmdQYXRoO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnSGVscGVyIHtcbiAgZ2V0IGFwaVBhdGgoKTogc3RyaW5nO1xuXG4gIGdldCBlZHVTaGFyaW5nUGF0aCgpOiBzdHJpbmc7XG5cbiAgcGF0Y2hDb25maWcoY29uZmlnOiBQYXJ0aWFsPE5nTWV0YVdpZGdldHNMaWJDb25maWd1cmF0aW9uPik6IHZvaWQ7XG59XG4iXX0=
|
|
@@ -130,7 +130,7 @@ export class CountsWithHistoryComponent {
|
|
|
130
130
|
this.destroyed$.complete();
|
|
131
131
|
}
|
|
132
132
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountsWithHistoryComponent, deps: [{ token: i1.MetaApiService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CountsWithHistoryComponent, isStandalone: true, selector: "metaqs2-counts-with-history", inputs: { apiMethod: "apiMethod", columnTranslationkey: "columnTranslationkey", pageTitle: "pageTitle" }, 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 *ngIf=\"timeFilterLoaded()\">\n <metaqs2-datepicker [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentTypeCount$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Quelle</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"label-col\"\n >\n {{row.meta.label}}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_type'\">\n <th colspan=\"2\" 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$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">{{ row.counts[col.id] ?? 'n/a' }}</td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >\n {{ pastTypeCount$.value.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$.value.rows.length && pastTypeCount(row, col.id) as trend\">\n <span [ngClass]=\"trend.trend\"> {{ trend.value ?? 'n/a' }}<mat-icon 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 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>", styles: ["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,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.mat-mdc-header-cell mat-icon,.mat-mdc-cell mat-icon{margin-left:5px;vertical-align:middle}.
|
|
133
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CountsWithHistoryComponent, isStandalone: true, selector: "metaqs2-counts-with-history", inputs: { apiMethod: "apiMethod", columnTranslationkey: "columnTranslationkey", pageTitle: "pageTitle" }, 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 *ngIf=\"timeFilterLoaded()\">\n <metaqs2-datepicker [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentTypeCount$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Quelle</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"label-col\"\n >\n {{row.meta.label}}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_type'\">\n <th colspan=\"2\" 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$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">{{ row.counts[col.id] ?? 'n/a' }}</td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >\n {{ pastTypeCount$.value.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$.value.rows.length && pastTypeCount(row, col.id) as trend\">\n <span [ngClass]=\"trend.trend\"> {{ trend.value ?? 'n/a' }}<mat-icon 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 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>", styles: ["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,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a: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}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: DatepickerComponent, selector: "metaqs2-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }] }); }
|
|
134
134
|
}
|
|
135
135
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountsWithHistoryComponent, decorators: [{
|
|
136
136
|
type: Component,
|
|
@@ -154,7 +154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
154
154
|
MatIcon,
|
|
155
155
|
NgIf,
|
|
156
156
|
AsyncPipe,
|
|
157
|
-
], 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 *ngIf=\"timeFilterLoaded()\">\n <metaqs2-datepicker [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentTypeCount$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Quelle</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"label-col\"\n >\n {{row.meta.label}}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_type'\">\n <th colspan=\"2\" 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$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">{{ row.counts[col.id] ?? 'n/a' }}</td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >\n {{ pastTypeCount$.value.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$.value.rows.length && pastTypeCount(row, col.id) as trend\">\n <span [ngClass]=\"trend.trend\"> {{ trend.value ?? 'n/a' }}<mat-icon 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 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>", styles: ["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,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.mat-mdc-header-cell mat-icon,.mat-mdc-cell mat-icon{margin-left:5px;vertical-align:middle}.
|
|
157
|
+
], 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 *ngIf=\"timeFilterLoaded()\">\n <metaqs2-datepicker [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentTypeCount$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Quelle</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"label-col\"\n >\n {{row.meta.label}}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_type'\">\n <th colspan=\"2\" 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$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">{{ row.counts[col.id] ?? 'n/a' }}</td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of recentTypeCount$.value.columns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\" >\n {{ pastTypeCount$.value.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$.value.rows.length && pastTypeCount(row, col.id) as trend\">\n <span [ngClass]=\"trend.trend\"> {{ trend.value ?? 'n/a' }}<mat-icon 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 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>", styles: ["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,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a: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}\n"] }]
|
|
158
158
|
}], ctorParameters: () => [{ type: i1.MetaApiService }], propDecorators: { apiMethod: [{
|
|
159
159
|
type: Input,
|
|
160
160
|
args: [{ required: true }]
|