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
|
@@ -8,5 +8,5 @@ export declare class CollectionIssuesComponent implements OnInit {
|
|
|
8
8
|
constructor(filterAPIService: FilterAPIService);
|
|
9
9
|
ngOnInit(): Promise<void>;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<CollectionIssuesComponent, never>;
|
|
11
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CollectionIssuesComponent, "metaqs2-collection-issues", never, {}, {}, never, never,
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CollectionIssuesComponent, "metaqs2-collection-issues", never, {}, {}, never, never, true, never>;
|
|
12
12
|
}
|
|
@@ -10,5 +10,5 @@ export declare class DonutChartTooltipComponent implements DataTooltip<DonutChar
|
|
|
10
10
|
animationState: boolean;
|
|
11
11
|
readonly data: DonutChartTooltipData;
|
|
12
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<DonutChartTooltipComponent, never>;
|
|
13
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DonutChartTooltipComponent, "metaqs2-donut-chart-tooltip", never, {}, {}, never, never,
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DonutChartTooltipComponent, "metaqs2-donut-chart-tooltip", never, {}, {}, never, never, true, never>;
|
|
14
14
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { FormControl } from '@angular/forms';
|
|
2
2
|
import { FilterValue } from '../../java-api';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
/**
|
|
6
5
|
* This component wraps a mat-select.
|
|
@@ -13,10 +12,9 @@ import * as i0 from "@angular/core";
|
|
|
13
12
|
export declare class QualityMatrixFilterComponent {
|
|
14
13
|
options: FilterValue[] | undefined | null;
|
|
15
14
|
inputFormControl: FormControl<any>;
|
|
16
|
-
label: string
|
|
17
|
-
multiple: boolean
|
|
18
|
-
changedFilters:
|
|
19
|
-
optionIdent(_index: number, option: FilterValue): string;
|
|
15
|
+
label: import("@angular/core").InputSignal<string | undefined>;
|
|
16
|
+
multiple: import("@angular/core").InputSignal<boolean>;
|
|
17
|
+
changedFilters: import("@angular/core").OutputRef<any>;
|
|
20
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<QualityMatrixFilterComponent, never>;
|
|
21
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<QualityMatrixFilterComponent, "metaqs2-qm-filter", never, { "options": { "alias": "options"; "required": false; }; "inputFormControl": { "alias": "inputFormControl"; "required": false; }; "label": { "alias": "label"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; }, { "changedFilters": "changedFilters"; }, never, never, true, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<QualityMatrixFilterComponent, "metaqs2-qm-filter", never, { "options": { "alias": "options"; "required": false; }; "inputFormControl": { "alias": "inputFormControl"; "required": false; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, { "changedFilters": "changedFilters"; }, never, never, true, never>;
|
|
22
20
|
}
|
|
@@ -8,5 +8,5 @@ export declare class MaterialIssuesComponent implements OnInit {
|
|
|
8
8
|
constructor(filterAPIService: FilterAPIService);
|
|
9
9
|
ngOnInit(): Promise<void>;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<MaterialIssuesComponent, never>;
|
|
11
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MaterialIssuesComponent, "metaqs2-material-issues", never, {}, {}, never, never,
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MaterialIssuesComponent, "metaqs2-material-issues", never, {}, {}, never, never, true, never>;
|
|
12
12
|
}
|
|
@@ -9,5 +9,5 @@ export declare class NodeEntryComponent {
|
|
|
9
9
|
openNode(node: MaterialWithMissingAttributes | CollectionWithMissingAttributes): void;
|
|
10
10
|
isCollectionCount(): boolean;
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeEntryComponent, never>;
|
|
12
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NodeEntryComponent, "metaqs2-node-entry", never, { "node": { "alias": "node"; "required": false; }; }, { "edit": "edit"; }, never, never,
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NodeEntryComponent, "metaqs2-node-entry", never, { "node": { "alias": "node"; "required": false; }; }, { "edit": "edit"; }, never, never, true, never>;
|
|
13
13
|
}
|
|
@@ -36,5 +36,5 @@ export declare class NodeListComponent implements OnChanges, OnDestroy {
|
|
|
36
36
|
editNode(node: MaterialWithMissingAttributes | CollectionWithMissingAttributes): void;
|
|
37
37
|
filterCount(): void;
|
|
38
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeListComponent, never>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NodeListComponent, "metaqs2-node-list", never, { "mode": { "alias": "mode"; "required": false; }; "type": { "alias": "type"; "required": false; }; "collectionId": { "alias": "collectionId"; "required": false; }; }, { "countChanged": "countChanged"; }, never, never,
|
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NodeListComponent, "metaqs2-node-list", never, { "mode": { "alias": "mode"; "required": false; }; "type": { "alias": "type"; "required": false; }; "collectionId": { "alias": "collectionId"; "required": false; }; }, { "countChanged": "countChanged"; }, never, never, true, never>;
|
|
40
40
|
}
|
|
@@ -6,7 +6,6 @@ import { FormControl, FormGroup, FormRecord } from '@angular/forms';
|
|
|
6
6
|
import { EditorialLinkService } from '../editorial-link-service/editorial-link.service';
|
|
7
7
|
import { DateTime } from 'luxon';
|
|
8
8
|
import { DonutSlice } from '../donut-chart/donut-chart.model';
|
|
9
|
-
import { KeyValue } from '@angular/common';
|
|
10
9
|
import { Overlay } from '@angular/cdk/overlay';
|
|
11
10
|
import { TooltipService } from '../../core/tooltip.service';
|
|
12
11
|
import * as i0 from "@angular/core";
|
|
@@ -21,7 +20,6 @@ export declare class QualityMatrixComponent implements OnInit, AfterViewChecked
|
|
|
21
20
|
private readonly scrollWidth;
|
|
22
21
|
readonly isLeftScrollable: import("@angular/core").Signal<boolean>;
|
|
23
22
|
readonly isRightScrollable: import("@angular/core").Signal<boolean | undefined>;
|
|
24
|
-
private readonly issueTypeHeader;
|
|
25
23
|
readonly filteredColumns: import("@angular/core").Signal<QualityMatrixHeader[]>;
|
|
26
24
|
readonly datatableColumns: import("@angular/core").Signal<string[]>;
|
|
27
25
|
readonly isHistoricalDataEnabledFormField: FormControl<boolean | null>;
|
|
@@ -31,6 +29,7 @@ export declare class QualityMatrixComponent implements OnInit, AfterViewChecked
|
|
|
31
29
|
readonly categoryControls: FormRecord<FormControl<string[]>>;
|
|
32
30
|
readonly loadingCount: import("@angular/core").WritableSignal<number>;
|
|
33
31
|
readonly isLoading: import("@angular/core").Signal<boolean>;
|
|
32
|
+
private readonly issueTypeHeader;
|
|
34
33
|
private readonly scrollMarkers;
|
|
35
34
|
readonly categoryFilterValues: Map<string, FilterValue[]>;
|
|
36
35
|
protected readonly refresh$: Subject<void>;
|
|
@@ -46,7 +45,6 @@ export declare class QualityMatrixComponent implements OnInit, AfterViewChecked
|
|
|
46
45
|
pageTitle: string;
|
|
47
46
|
readonly allColumns: import("@angular/core").Signal<QualityMatrixHeader[]>;
|
|
48
47
|
ngAfterViewChecked(): void;
|
|
49
|
-
filterIdent(_index: number, item: KeyValue<string, FormControl<string[]>>): string;
|
|
50
48
|
sourceColumns: import("@angular/core").Signal<string[]>;
|
|
51
49
|
currentColumns: import("@angular/core").Signal<string[]>;
|
|
52
50
|
pastColumns: import("@angular/core").Signal<string[]>;
|
|
@@ -54,7 +54,7 @@ export declare abstract class BaseHistoricDataTableDirective<TLoadingData extend
|
|
|
54
54
|
};
|
|
55
55
|
openInEditor(sourceId: string, issueId: string): Observable<string | null>;
|
|
56
56
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseHistoricDataTableDirective<any, any>, never>;
|
|
57
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseHistoricDataTableDirective<any, any>, never, never, { "apiMethod": { "alias": "apiMethod"; "required": false; }; "columnTranslationkey": { "alias": "columnTranslationkey"; "required": false; }; "pageTitle": { "alias": "pageTitle"; "required": false; }; "sourceType": { "alias": "sourceType"; "required": true; }; }, {}, never, never,
|
|
57
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseHistoricDataTableDirective<any, any>, never, never, { "apiMethod": { "alias": "apiMethod"; "required": false; }; "columnTranslationkey": { "alias": "columnTranslationkey"; "required": false; }; "pageTitle": { "alias": "pageTitle"; "required": false; }; "sourceType": { "alias": "sourceType"; "required": true; }; }, {}, never, never, true, never>;
|
|
58
58
|
}
|
|
59
59
|
type LoadingData = {
|
|
60
60
|
date: DateTime;
|
|
@@ -2,48 +2,45 @@ import { ModuleWithProviders } from '@angular/core';
|
|
|
2
2
|
import { NgMetaWidgetsLibConfiguration } from './config-helper.service';
|
|
3
3
|
import { SvgIconsService } from './core/svg-icons.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "
|
|
6
|
-
import * as i2 from "
|
|
7
|
-
import * as i3 from "./components/
|
|
8
|
-
import * as i4 from "./components/
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@ngx-translate/core";
|
|
7
|
+
import * as i3 from "./components/collection-issues/collection-issues.component";
|
|
8
|
+
import * as i4 from "./components/material-issues/material-issues.component";
|
|
9
9
|
import * as i5 from "./components/node-list/node-list.component";
|
|
10
|
-
import * as i6 from "
|
|
11
|
-
import * as i7 from "./
|
|
12
|
-
import * as i8 from "@angular/
|
|
13
|
-
import * as i9 from "
|
|
14
|
-
import * as i10 from "
|
|
15
|
-
import * as i11 from "
|
|
16
|
-
import * as i12 from "
|
|
17
|
-
import * as i13 from "
|
|
18
|
-
import * as i14 from "@angular/
|
|
19
|
-
import * as i15 from "
|
|
20
|
-
import * as i16 from "@angular/material/
|
|
21
|
-
import * as i17 from "
|
|
22
|
-
import * as i18 from "@angular/material/
|
|
23
|
-
import * as i19 from "@angular/material/
|
|
24
|
-
import * as i20 from "@angular/material/
|
|
25
|
-
import * as i21 from "@angular/material/
|
|
26
|
-
import * as i22 from "@angular/material/
|
|
27
|
-
import * as i23 from "@angular/material/
|
|
28
|
-
import * as i24 from "@angular/
|
|
29
|
-
import * as i25 from "@angular/material/
|
|
30
|
-
import * as i26 from "@angular/
|
|
31
|
-
import * as i27 from "@angular/material/
|
|
32
|
-
import * as i28 from "@angular/material/
|
|
33
|
-
import * as i29 from "@angular/material/
|
|
34
|
-
import * as i30 from "
|
|
35
|
-
import * as i31 from "@angular/material/
|
|
36
|
-
import * as i32 from "
|
|
37
|
-
import * as i33 from "./components/
|
|
38
|
-
import * as i34 from "
|
|
39
|
-
import * as i35 from "./components/filter/datepicker/datepicker.component";
|
|
40
|
-
import * as i36 from "./components/loading_indicator/progress-spinner/progress-spinner.component";
|
|
41
|
-
import * as i37 from "./components/quality-matrix/scroll-marker.directive";
|
|
10
|
+
import * as i6 from "@angular/platform-browser";
|
|
11
|
+
import * as i7 from "./java-api/api.module";
|
|
12
|
+
import * as i8 from "@angular/material/card";
|
|
13
|
+
import * as i9 from "@angular/material/tree";
|
|
14
|
+
import * as i10 from "./components/donut-chart/donut-chart.component";
|
|
15
|
+
import * as i11 from "./components/donut-chart/donut-chart.pipe";
|
|
16
|
+
import * as i12 from "@angular/platform-browser/animations";
|
|
17
|
+
import * as i13 from "@angular/material/icon";
|
|
18
|
+
import * as i14 from "@angular/material/slider";
|
|
19
|
+
import * as i15 from "./components/quality-matrix/quality_matrix";
|
|
20
|
+
import * as i16 from "@angular/material/slide-toggle";
|
|
21
|
+
import * as i17 from "@angular/material/button";
|
|
22
|
+
import * as i18 from "@angular/material/progress-spinner";
|
|
23
|
+
import * as i19 from "@angular/material/table";
|
|
24
|
+
import * as i20 from "@angular/material/grid-list";
|
|
25
|
+
import * as i21 from "@angular/material/form-field";
|
|
26
|
+
import * as i22 from "@angular/material/input";
|
|
27
|
+
import * as i23 from "@angular/material/sidenav";
|
|
28
|
+
import * as i24 from "@angular/forms";
|
|
29
|
+
import * as i25 from "@angular/material/select";
|
|
30
|
+
import * as i26 from "@angular/material/tooltip";
|
|
31
|
+
import * as i27 from "@angular/material/list";
|
|
32
|
+
import * as i28 from "@angular/material/sort";
|
|
33
|
+
import * as i29 from "@angular/material/checkbox";
|
|
34
|
+
import * as i30 from "./components/filter/quality-matrix-filter.component";
|
|
35
|
+
import * as i31 from "@angular/material/datepicker";
|
|
36
|
+
import * as i32 from "./components/filter/datepicker/datepicker.component";
|
|
37
|
+
import * as i33 from "./components/loading_indicator/progress-spinner/progress-spinner.component";
|
|
38
|
+
import * as i34 from "./components/quality-matrix/scroll-marker.directive";
|
|
42
39
|
export declare class NgMetaWidgetsLibModule {
|
|
43
40
|
private readonly svgIconsService;
|
|
44
41
|
constructor(svgIconsService: SvgIconsService);
|
|
45
42
|
static forRoot(params: NgMetaWidgetsLibConfiguration): ModuleWithProviders<NgMetaWidgetsLibModule>;
|
|
46
43
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgMetaWidgetsLibModule, never>;
|
|
47
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NgMetaWidgetsLibModule, [typeof i1.
|
|
44
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgMetaWidgetsLibModule, never, [typeof i1.CommonModule, typeof i2.TranslateModule, typeof i3.CollectionIssuesComponent, typeof i4.MaterialIssuesComponent, typeof i5.NodeListComponent, typeof i6.BrowserModule, typeof i7.ApiModule, typeof i8.MatCardModule, typeof i9.MatTreeModule, typeof i10.DonutChartComponent, typeof i11.DonutChartPipe, typeof i12.BrowserAnimationsModule, typeof i13.MatIconModule, typeof i14.MatSliderModule, typeof i15.QualityMatrixComponent, typeof i16.MatSlideToggleModule, typeof i17.MatButtonModule, typeof i18.MatProgressSpinnerModule, typeof i19.MatTableModule, typeof i20.MatGridListModule, typeof i21.MatFormFieldModule, typeof i22.MatInputModule, typeof i23.MatSidenavModule, typeof i24.FormsModule, typeof i25.MatSelectModule, typeof i24.ReactiveFormsModule, typeof i26.MatTooltipModule, typeof i27.MatListModule, typeof i28.MatSort, typeof i28.MatSortModule, typeof i29.MatCheckbox, typeof i2.TranslateModule, typeof i30.QualityMatrixFilterComponent, typeof i31.MatDateRangeInput, typeof i31.MatDatepickerToggle, typeof i31.MatDatepickerModule, typeof i31.MatDateRangePicker, typeof i31.MatDatepickerInput, typeof i31.MatDatepicker, typeof i32.DatepickerComponent, typeof i33.ProgressSpinnerComponent, typeof i34.ScrollMarkerDirective], [typeof i3.CollectionIssuesComponent, typeof i4.MaterialIssuesComponent, typeof i5.NodeListComponent, typeof i15.QualityMatrixComponent]>;
|
|
48
45
|
static ɵinj: i0.ɵɵInjectorDeclaration<NgMetaWidgetsLibModule>;
|
|
49
46
|
}
|
|
@@ -8,5 +8,5 @@ export declare class NodeImageUrlPipe implements PipeTransform {
|
|
|
8
8
|
height: number;
|
|
9
9
|
}): string;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<NodeImageUrlPipe, never>;
|
|
11
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<NodeImageUrlPipe, "nodeImageUrl",
|
|
11
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<NodeImageUrlPipe, "nodeImageUrl", true>;
|
|
12
12
|
}
|
|
@@ -14,5 +14,5 @@ export declare function wrapResponse<T>(): UnaryFunction<Observable<T>, Observab
|
|
|
14
14
|
export declare class WrapObservablePipe implements PipeTransform {
|
|
15
15
|
transform<T>(value: Observable<T>): Observable<WrappedResponse<T>>;
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<WrapObservablePipe, never>;
|
|
17
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<WrapObservablePipe, "wrapObservable",
|
|
17
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<WrapObservablePipe, "wrapObservable", true>;
|
|
18
18
|
}
|
package/package.json
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"name": "ngx-edu-sharing-metaqs2",
|
|
3
3
|
"description": "OEH MetaQS widgets library",
|
|
4
4
|
"license": "GNU GPL v2",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.54",
|
|
6
6
|
"author": "Torsten Simon",
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": ">=
|
|
9
|
-
"@angular/core": ">=
|
|
10
|
-
"@angular/cdk": ">=
|
|
11
|
-
"@angular/elements": ">=
|
|
12
|
-
"@angular/material": ">=
|
|
8
|
+
"@angular/common": ">=19.0.0",
|
|
9
|
+
"@angular/core": ">=10.0.0",
|
|
10
|
+
"@angular/cdk": ">=19.0.0",
|
|
11
|
+
"@angular/elements": ">=19.0.0",
|
|
12
|
+
"@angular/material": ">=19.0.0",
|
|
13
13
|
"ng2-charts": ">=6.0.1"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
@@ -23,8 +23,6 @@
|
|
|
23
23
|
},
|
|
24
24
|
".": {
|
|
25
25
|
"types": "./index.d.ts",
|
|
26
|
-
"esm2022": "./esm2022/ngx-edu-sharing-metaqs2.mjs",
|
|
27
|
-
"esm": "./esm2022/ngx-edu-sharing-metaqs2.mjs",
|
|
28
26
|
"default": "./fesm2022/ngx-edu-sharing-metaqs2.mjs"
|
|
29
27
|
}
|
|
30
28
|
},
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { Component, effect, Input, signal, ViewChild } from '@angular/core';
|
|
2
|
-
import { BaseChartDirective } from 'ng2-charts';
|
|
3
|
-
import { DateTime } from 'luxon';
|
|
4
|
-
import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
|
|
5
|
-
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
-
import { MonthpickerComponent } from './monthpicker/monthpicker.component';
|
|
7
|
-
import { BehaviorSubject } from 'rxjs';
|
|
8
|
-
import { AsyncPipe, NgIf } from '@angular/common';
|
|
9
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
|
-
import { distinctUntilChanged, filter, finalize, map, switchMap, take, tap } from 'rxjs/operators';
|
|
11
|
-
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
|
12
|
-
import { ProgressSpinnerComponent } from '../components/loading_indicator/progress-spinner/progress-spinner.component';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "../meta-api.service";
|
|
15
|
-
import * as i2 from "@angular/forms";
|
|
16
|
-
export class CollectionCountHistoryComponent {
|
|
17
|
-
constructor(metaApi, destroyRef) {
|
|
18
|
-
this.metaApi = metaApi;
|
|
19
|
-
this.destroyRef = destroyRef;
|
|
20
|
-
this.lineChartOptions = {
|
|
21
|
-
parsing: {
|
|
22
|
-
xAxisKey: 'date',
|
|
23
|
-
yAxisKey: 'count',
|
|
24
|
-
},
|
|
25
|
-
font: {
|
|
26
|
-
family: 'Montserrat',
|
|
27
|
-
},
|
|
28
|
-
animation: false,
|
|
29
|
-
};
|
|
30
|
-
this.datapoints$ = new BehaviorSubject([]);
|
|
31
|
-
this.isLoading = signal(true);
|
|
32
|
-
this.range = new FormGroup({
|
|
33
|
-
start: new FormControl(),
|
|
34
|
-
end: new FormControl(),
|
|
35
|
-
});
|
|
36
|
-
this.granularities = ['year', 'month', 'week', 'day'];
|
|
37
|
-
this.granularity = new FormControl('month', { nonNullable: true });
|
|
38
|
-
this.isHistoryEnabled = signal(true);
|
|
39
|
-
effect(() => {
|
|
40
|
-
this.range.controls.end.reset();
|
|
41
|
-
if (!this.isHistoryEnabled()) {
|
|
42
|
-
this.range.controls.start.setValue(this.range.controls.end.value);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.range.controls.start.reset();
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
this.registerDateRangeFilter();
|
|
51
|
-
}
|
|
52
|
-
registerDateRangeFilter() {
|
|
53
|
-
this.range.valueChanges
|
|
54
|
-
.pipe(filter((range) => !!range.start && !!range.end),
|
|
55
|
-
//the Material Datepicker emits the initial values 4 times when it starts, so we need to distinct them
|
|
56
|
-
distinctUntilChanged((prev, curr) => {
|
|
57
|
-
return prev.start === curr.start && prev.end === curr.end;
|
|
58
|
-
}), switchMap((range) => {
|
|
59
|
-
if (this.isHistoryEnabled()) {
|
|
60
|
-
return this.loadData(range.start, range.end);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
return this.loadData(range.end.startOf(this.granularity.value), range.end);
|
|
64
|
-
}
|
|
65
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
66
|
-
.subscribe();
|
|
67
|
-
this.metaApi
|
|
68
|
-
.getTimerangeFilter()
|
|
69
|
-
.pipe(take(1))
|
|
70
|
-
.subscribe((rangeFilter) => {
|
|
71
|
-
if (rangeFilter) {
|
|
72
|
-
const startDate = DateTime.fromISO(rangeFilter.values.find((v) => v.id === 'rangeStart')?.label, {
|
|
73
|
-
zone: 'utc',
|
|
74
|
-
}).startOf(this.granularity.value);
|
|
75
|
-
const endDate = DateTime.fromISO(rangeFilter.values.find((v) => v.id === 'rangeEnd')?.label, {
|
|
76
|
-
zone: 'utc',
|
|
77
|
-
}).endOf(this.granularity.value);
|
|
78
|
-
this.range.setControl('start', new FormControl(startDate, { nonNullable: true }), {
|
|
79
|
-
emitEvent: false,
|
|
80
|
-
});
|
|
81
|
-
this.range.setControl('end', new FormControl(endDate, { nonNullable: true }), { emitEvent: false });
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
loadData(start, end) {
|
|
86
|
-
this.isLoading.set(true);
|
|
87
|
-
const request = {
|
|
88
|
-
startDate: start?.toISO(),
|
|
89
|
-
endDate: end?.toISO(),
|
|
90
|
-
granularity: this.granularity.value,
|
|
91
|
-
};
|
|
92
|
-
return this.metaApi.getEditorialMaterialCounts(request).pipe(map((response) => response.map((data) => {
|
|
93
|
-
return {
|
|
94
|
-
data: data.counts.map((count) => {
|
|
95
|
-
return {
|
|
96
|
-
date: DateTime.fromISO(count.date).toFormat('LLLL yyyy'),
|
|
97
|
-
count: count.count,
|
|
98
|
-
};
|
|
99
|
-
}),
|
|
100
|
-
label: data.name,
|
|
101
|
-
};
|
|
102
|
-
})), take(1), tap((datapoints) => {
|
|
103
|
-
this.datapoints$.next(datapoints);
|
|
104
|
-
}), finalize(() => this.isLoading.set(false)));
|
|
105
|
-
}
|
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionCountHistoryComponent, deps: [{ token: i1.MetaApiService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
107
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollectionCountHistoryComponent, isStandalone: true, selector: "metaqs2-collection-count-history", inputs: { pageTitle: "pageTitle" }, viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }], ngImport: i0, template: "<mat-card appearance=\"outlined\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n {{ pageTitle }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div style=\"display: flex; gap: 0.5rem; align-items: center\">\n <div style=\"flex: 1 1 auto\"></div>\n <metaqs2-monthpicker *ngIf=\"isHistoryEnabled()\" [inputGroup]=\"range\"></metaqs2-monthpicker>\n <mat-slide-toggle [ngModel]=\"isHistoryEnabled()\" (ngModelChange)=\"isHistoryEnabled.set($event)\" [disabled]=\"isLoading()\">\n <label>Zeige historische Daten</label>\n </mat-slide-toggle>\n </div>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n\n <div [class.while-loading]=\"isLoading()\">\n <canvas\n baseChart\n [datasets]=\"(datapoints$ | async) || []\"\n [options]=\"lineChartOptions\"\n [type]=\"'line'\"\n ></canvas>\n </div>\n </mat-card-content>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}\n"], dependencies: [{ kind: "directive", type: BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }, { kind: "component", type: MonthpickerComponent, selector: "metaqs2-monthpicker", inputs: ["startView", "inputGroup", "disabled"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "metaqs2-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "backdropEnabled", "positionGloballyCenter", "displayProgressSpinner"] }] }); }
|
|
108
|
-
}
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionCountHistoryComponent, decorators: [{
|
|
110
|
-
type: Component,
|
|
111
|
-
args: [{ selector: 'metaqs2-collection-count-history', standalone: true, imports: [
|
|
112
|
-
BaseChartDirective,
|
|
113
|
-
MonthpickerComponent,
|
|
114
|
-
MatCard,
|
|
115
|
-
MatCardHeader,
|
|
116
|
-
MatCardTitle,
|
|
117
|
-
MatCardContent,
|
|
118
|
-
AsyncPipe,
|
|
119
|
-
ReactiveFormsModule,
|
|
120
|
-
NgIf,
|
|
121
|
-
MatSlideToggle,
|
|
122
|
-
FormsModule,
|
|
123
|
-
ProgressSpinnerComponent,
|
|
124
|
-
], template: "<mat-card appearance=\"outlined\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n {{ pageTitle }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div style=\"display: flex; gap: 0.5rem; align-items: center\">\n <div style=\"flex: 1 1 auto\"></div>\n <metaqs2-monthpicker *ngIf=\"isHistoryEnabled()\" [inputGroup]=\"range\"></metaqs2-monthpicker>\n <mat-slide-toggle [ngModel]=\"isHistoryEnabled()\" (ngModelChange)=\"isHistoryEnabled.set($event)\" [disabled]=\"isLoading()\">\n <label>Zeige historische Daten</label>\n </mat-slide-toggle>\n </div>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n\n <div [class.while-loading]=\"isLoading()\">\n <canvas\n baseChart\n [datasets]=\"(datapoints$ | async) || []\"\n [options]=\"lineChartOptions\"\n [type]=\"'line'\"\n ></canvas>\n </div>\n </mat-card-content>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}\n"] }]
|
|
125
|
-
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i0.DestroyRef }], propDecorators: { chart: [{
|
|
126
|
-
type: ViewChild,
|
|
127
|
-
args: [BaseChartDirective]
|
|
128
|
-
}], pageTitle: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}] } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLE9BQU8sQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFB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VUFBVSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzFDLENBQUM7SUFDSixDQUFDOytHQTdHVSwrQkFBK0I7bUdBQS9CLCtCQUErQix1S0FDL0Isa0JBQWtCLGdEQ3JDL0Isd2hDQTBCQSw0RkROSSxrQkFBa0IsK01BQ2xCLG9CQUFvQixpSEFDcEIsT0FBTyxvR0FDUCxhQUFhLDREQUNiLFlBQVksNkZBQ1osY0FBYyx3REFDZCxTQUFTLDZDQUNULG1CQUFtQix1SUFDbkIsSUFBSSw2RkFDSixjQUFjLHlVQUNkLFdBQVcsdVBBQ1gsd0JBQXdCOzs0RkFLZiwrQkFBK0I7a0JBcEIzQyxTQUFTOytCQUNFLGtDQUFrQyxjQUNoQyxJQUFJLFdBQ1A7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLE9BQU87d0JBQ1AsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLElBQUk7d0JBQ0osY0FBYzt3QkFDZCxXQUFXO3dCQUNYLHdCQUF3QjtxQkFDekI7NEdBSzhCLEtBQUs7c0JBQW5DLFNBQVM7dUJBQUMsa0JBQWtCO2dCQXdCdEIsU0FBUztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBlZmZlY3QsIElucHV0LCBPbkluaXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0RGF0YXNldCB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IEJhc2VDaGFydERpcmVjdGl2ZSB9IGZyb20gJ25nMi1jaGFydHMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIERhdGVUaW1lVW5pdCB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTW9udGhwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL21vbnRocGlja2VyL21vbnRocGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb3VudCwgTWF0ZXJpYWxDb3VudEZpbHRlciB9IGZyb20gJy4uL2phdmEtYXBpJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbG9hZGluZ19pbmRpY2F0b3IvcHJvZ3Jlc3Mtc3Bpbm5lci9wcm9ncmVzcy1zcGlubmVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEJhc2VDaGFydERpcmVjdGl2ZSxcbiAgICBNb250aHBpY2tlckNvbXBvbmVudCxcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRIZWFkZXIsXG4gICAgTWF0Q2FyZFRpdGxlLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTWF0U2xpZGVUb2dnbGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUHJvZ3Jlc3NTcGlubmVyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvbGxlY3Rpb24tY291bnQtaGlzdG9yeS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25Db3VudEhpc3RvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKEJhc2VDaGFydERpcmVjdGl2ZSkgY2hhcnQ/OiBCYXNlQ2hhcnREaXJlY3RpdmU7XG4gIHByb3RlY3RlZCBsaW5lQ2hhcnRPcHRpb25zOiBDaGFydENvbmZpZ3VyYXRpb25bJ29wdGlvbnMnXSA9IHtcbiAgICBwYXJzaW5nOiB7XG4gICAgICB4QXhpc0tleTogJ2RhdGUnLFxuICAgICAgeUF4aXNLZXk6ICdjb3VudCcsXG4gICAgfSxcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6ICdNb250c2VycmF0JyxcbiAgICB9LFxuICAgIGFuaW1hdGlvbjogZmFsc2UsXG4gIH07XG4gIHByb3RlY3RlZCBkYXRhcG9pbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnREYXRhc2V0PCdsaW5lJywgQ291bnRbXT5bXT4oW10pO1xuICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSByYW5nZTogRm9ybUdyb3VwPHtcbiAgICBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICAgIGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICB9PiA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICB9KTtcbiAgcHJvdGVjdGVkIGdyYW51bGFyaXRpZXM6IERhdGVUaW1lVW5pdFtdID0gWyd5ZWFyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5J107XG4gIHByb3RlY3RlZCBncmFudWxhcml0eSA9IG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZVVuaXQ+KCdtb250aCcsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNIaXN0b3J5RW5hYmxlZCA9IHNpZ25hbCh0cnVlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG1ldGFBcGk6IE1ldGFBcGlTZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5lbmQucmVzZXQoKTtcbiAgICAgIGlmICghdGhpcy5pc0hpc3RvcnlFbmFibGVkKCkpIHtcbiAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC5zZXRWYWx1ZSh0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0LnJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigocmFuZ2UpOiByYW5nZSBpcyB7IHN0YXJ0OiBEYXRlVGltZTsgZW5kOiBEYXRlVGltZSB9ID0+ICEhcmFuZ2Uuc3RhcnQgJiYgISFyYW5nZS5lbmQpLFxuICAgICAgICAvL3RoZSBNYXRlcmlhbCBEYXRlcGlja2VyIGVtaXRzIHRoZSBpbml0aWFsIHZhbHVlcyA0IHRpbWVzIHdoZW4gaXQgc3RhcnRzLCBzbyB3ZSBuZWVkIHRvIGRpc3RpbmN0IHRoZW1cbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldi5zdGFydCA9PT0gY3Vyci5zdGFydCAmJiBwcmV2LmVuZCA9PT0gY3Vyci5lbmQ7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHJhbmdlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNIaXN0b3J5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkRGF0YShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZERhdGEocmFuZ2UuZW5kLnN0YXJ0T2YodGhpcy5ncmFudWxhcml0eS52YWx1ZSksIHJhbmdlLmVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1ldGFBcGlcbiAgICAgIC5nZXRUaW1lcmFuZ2VGaWx0ZXIoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJhbmdlRmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChyYW5nZUZpbHRlcikge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgICAgICAgem9uZTogJ3V0YycsXG4gICAgICAgICAgfSkuc3RhcnRPZih0aGlzLmdyYW51bGFyaXR5LnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhyYW5nZUZpbHRlci52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gJ3JhbmdlRW5kJyk/LmxhYmVsISwge1xuICAgICAgICAgICAgem9uZTogJ3V0YycsXG4gICAgICAgICAgfSkuZW5kT2YodGhpcy5ncmFudWxhcml0eS52YWx1ZSk7XG4gICAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdzdGFydCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oc3RhcnREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnZW5kJywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihlbmREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YShzdGFydD86IERhdGVUaW1lPGJvb2xlYW4+LCBlbmQ/OiBEYXRlVGltZTxib29sZWFuPikge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcblxuICAgIGNvbnN0IHJlcXVlc3Q6IE1hdGVyaWFsQ291bnRGaWx0ZXIgPSB7XG4gICAgICBzdGFydERhdGU6IHN0YXJ0Py50b0lTTygpISxcbiAgICAgIGVuZERhdGU6IGVuZD8udG9JU08oKSEsXG4gICAgICBncmFudWxhcml0eTogdGhpcy5ncmFudWxhcml0eS52YWx1ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRFZGl0b3JpYWxNYXRlcmlhbENvdW50cyhyZXF1ZXN0KS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT5cbiAgICAgICAgcmVzcG9uc2UubWFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuY291bnRzLm1hcCgoY291bnQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlOiBEYXRlVGltZS5mcm9tSVNPKGNvdW50LmRhdGUpLnRvRm9ybWF0KCdMTExMIHl5eXknKSEsXG4gICAgICAgICAgICAgICAgY291bnQ6IGNvdW50LmNvdW50LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBsYWJlbDogZGF0YS5uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHRhcCgoZGF0YXBvaW50cykgPT4ge1xuICAgICAgICB0aGlzLmRhdGFwb2ludHMkLm5leHQoZGF0YXBvaW50cyk7XG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSkpXG4gICAgKTtcbiAgfVxufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiPlxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwicGFnZVRpdGxlXCI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAge3sgcGFnZVRpdGxlIH19e3sgaXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIiB9fVxuICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuICA8bWF0LWNhcmQtY29udGVudD5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAwLjVyZW07IGFsaWduLWl0ZW1zOiBjZW50ZXJcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxIDEgYXV0b1wiPjwvZGl2PlxuICAgICAgPG1ldGFxczItbW9udGhwaWNrZXIgKm5nSWY9XCJpc0hpc3RvcnlFbmFibGVkKClcIiBbaW5wdXRHcm91cF09XCJyYW5nZVwiPjwvbWV0YXFzMi1tb250aHBpY2tlcj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtuZ01vZGVsXT1cImlzSGlzdG9yeUVuYWJsZWQoKVwiIChuZ01vZGVsQ2hhbmdlKT1cImlzSGlzdG9yeUVuYWJsZWQuc2V0KCRldmVudClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIj5cbiAgICAgICAgPGxhYmVsPlplaWdlIGhpc3RvcmlzY2hlIERhdGVuPC9sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8bWV0YXFzMi1wcm9ncmVzcy1zcGlubmVyIFtkaXNwbGF5UHJvZ3Jlc3NTcGlubmVyXT1cImlzTG9hZGluZygpXCI+PC9tZXRhcXMyLXByb2dyZXNzLXNwaW5uZXI+XG5cbiAgICA8ZGl2IFtjbGFzcy53aGlsZS1sb2FkaW5nXT1cImlzTG9hZGluZygpXCI+XG4gICAgICA8Y2FudmFzXG4gICAgICAgIGJhc2VDaGFydFxuICAgICAgICBbZGF0YXNldHNdPVwiKGRhdGFwb2ludHMkIHwgYXN5bmMpIHx8IFtdXCJcbiAgICAgICAgW29wdGlvbnNdPVwibGluZUNoYXJ0T3B0aW9uc1wiXG4gICAgICAgIFt0eXBlXT1cIidsaW5lJ1wiXG4gICAgICA+PC9jYW52YXM+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG4iXX0=
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Component, ElementRef, Input, LOCALE_ID, ViewChild } from '@angular/core';
|
|
2
|
-
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
-
import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker';
|
|
4
|
-
import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';
|
|
5
|
-
import { MatInput } from '@angular/material/input';
|
|
6
|
-
import { LuxonDateAdapter, MAT_LUXON_DATE_ADAPTER_OPTIONS } from '@angular/material-luxon-adapter';
|
|
7
|
-
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatRipple } from '@angular/material/core';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/forms";
|
|
10
|
-
export const datePickerFormats = {
|
|
11
|
-
parse: {
|
|
12
|
-
dateInput: 'LLLL yyyy',
|
|
13
|
-
},
|
|
14
|
-
display: {
|
|
15
|
-
dateInput: 'LLLL yyyy',
|
|
16
|
-
monthYearLabel: 'LLLL yyyy',
|
|
17
|
-
dateA11yLabel: 'LLL',
|
|
18
|
-
monthYearA11yLabel: 'MMMM yyyy',
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Theoretically, this component should be able to handle both monthly and daily date ranges.
|
|
23
|
-
* But I am unable to find a way to change the date format of the datepicker
|
|
24
|
-
*/
|
|
25
|
-
export class MonthpickerComponent {
|
|
26
|
-
constructor() {
|
|
27
|
-
this.startView = 'year';
|
|
28
|
-
this.disabled = false;
|
|
29
|
-
}
|
|
30
|
-
setStart(date, picker) {
|
|
31
|
-
this.inputGroup.controls.start.setValue(date);
|
|
32
|
-
picker.close();
|
|
33
|
-
}
|
|
34
|
-
setEnd(date, picker) {
|
|
35
|
-
this.inputGroup.controls.end.setValue(date.endOf('month'));
|
|
36
|
-
picker.close();
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.focus();
|
|
40
|
-
}
|
|
41
|
-
ngOnDestroy() {
|
|
42
|
-
//defer this to avoid an ExpressionChangedAfterItHasBeenCheckedError on the parent component
|
|
43
|
-
Promise.resolve().then(() => this.inputGroup.reset());
|
|
44
|
-
}
|
|
45
|
-
focus() {
|
|
46
|
-
this.start?.nativeElement.focus();
|
|
47
|
-
this.ripple.launch({
|
|
48
|
-
centered: true, // Material bug: disabled ripples do not trigger unless centered
|
|
49
|
-
radius: 1000,
|
|
50
|
-
animation: {
|
|
51
|
-
exitDuration: 1000,
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonthpickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MonthpickerComponent, isStandalone: true, selector: "metaqs2-monthpicker", inputs: { startView: "startView", inputGroup: "inputGroup", disabled: "disabled" }, providers: [
|
|
57
|
-
{
|
|
58
|
-
provide: DateAdapter,
|
|
59
|
-
useClass: LuxonDateAdapter,
|
|
60
|
-
deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS],
|
|
61
|
-
},
|
|
62
|
-
{ provide: MAT_DATE_FORMATS, useValue: datePickerFormats },
|
|
63
|
-
//provideLuxonDateAdapter(datePickerFormats),
|
|
64
|
-
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
65
|
-
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
66
|
-
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
67
|
-
], viewQueries: [{ propertyName: "start", first: true, predicate: ["start"], descendants: true, read: (ElementRef), static: true }, { propertyName: "ripple", first: true, predicate: ["ripple"], descendants: true, read: MatRipple, static: true }], ngImport: i0, template: "<!--\n<mat-card>\n <mat-card-header>\n <mat-card-title> Monatlicher Vergleich </mat-card-title>\n </mat-card-header>\n <mat-card-content [formGroup]=\"inputGroup\">\n </!-- start date --/>\n -->\n<div [formGroup]=\"inputGroup\" matRipple #ripple=\"matRipple\" [matRippleDisabled]=\"true\">\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n #start\n [disabled]=\"disabled\"\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker1\" formControlName=\"start\"\n placeholder=\"Starts date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-datepicker\n [disabled]=\"disabled\"\n #picker1\n [startAt]=\"inputGroup.controls.start.defaultValue\"\n [startView]=\"startView\"\n (monthSelected)=\"setStart($event, picker1)\"\n\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /start date -->\n <!-- end date -->\n <mat-form-field>\n <mat-label>Zeitpunkt2</mat-label>\n <input matInput\n [disabled]=\"disabled\"\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker2\"\n formControlName=\"end\"\n placeholder=\"End date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker\n [disabled]=\"disabled\"\n #picker2\n [startAt]=\"inputGroup.controls.end.value\"\n [startView]=\"startView\"\n (monthSelected)=\"setEnd($event, picker2)\"\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n</div>\n<!--\n </mat-card-content>\n</mat-card>\n-->\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }] }); }
|
|
68
|
-
}
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonthpickerComponent, decorators: [{
|
|
70
|
-
type: Component,
|
|
71
|
-
args: [{ selector: 'metaqs2-monthpicker', standalone: true, imports: [
|
|
72
|
-
FormsModule,
|
|
73
|
-
MatDatepicker,
|
|
74
|
-
MatDatepickerInput,
|
|
75
|
-
MatDatepickerToggle,
|
|
76
|
-
MatFormField,
|
|
77
|
-
MatInput,
|
|
78
|
-
MatLabel,
|
|
79
|
-
MatSuffix,
|
|
80
|
-
ReactiveFormsModule,
|
|
81
|
-
MatRipple,
|
|
82
|
-
], providers: [
|
|
83
|
-
{
|
|
84
|
-
provide: DateAdapter,
|
|
85
|
-
useClass: LuxonDateAdapter,
|
|
86
|
-
deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS],
|
|
87
|
-
},
|
|
88
|
-
{ provide: MAT_DATE_FORMATS, useValue: datePickerFormats },
|
|
89
|
-
//provideLuxonDateAdapter(datePickerFormats),
|
|
90
|
-
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
91
|
-
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
92
|
-
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
93
|
-
], template: "<!--\n<mat-card>\n <mat-card-header>\n <mat-card-title> Monatlicher Vergleich </mat-card-title>\n </mat-card-header>\n <mat-card-content [formGroup]=\"inputGroup\">\n </!-- start date --/>\n -->\n<div [formGroup]=\"inputGroup\" matRipple #ripple=\"matRipple\" [matRippleDisabled]=\"true\">\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n #start\n [disabled]=\"disabled\"\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker1\" formControlName=\"start\"\n placeholder=\"Starts date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-datepicker\n [disabled]=\"disabled\"\n #picker1\n [startAt]=\"inputGroup.controls.start.defaultValue\"\n [startView]=\"startView\"\n (monthSelected)=\"setStart($event, picker1)\"\n\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /start date -->\n <!-- end date -->\n <mat-form-field>\n <mat-label>Zeitpunkt2</mat-label>\n <input matInput\n [disabled]=\"disabled\"\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker2\"\n formControlName=\"end\"\n placeholder=\"End date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker\n [disabled]=\"disabled\"\n #picker2\n [startAt]=\"inputGroup.controls.end.value\"\n [startView]=\"startView\"\n (monthSelected)=\"setEnd($event, picker2)\"\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n</div>\n<!--\n </mat-card-content>\n</mat-card>\n-->\n" }]
|
|
94
|
-
}], propDecorators: { startView: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], inputGroup: [{
|
|
97
|
-
type: Input,
|
|
98
|
-
args: [{ required: true }]
|
|
99
|
-
}], disabled: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}], start: [{
|
|
102
|
-
type: ViewChild,
|
|
103
|
-
args: ['start', {
|
|
104
|
-
read: (ElementRef),
|
|
105
|
-
static: true,
|
|
106
|
-
}]
|
|
107
|
-
}], ripple: [{
|
|
108
|
-
type: ViewChild,
|
|
109
|
-
args: ['ripple', {
|
|
110
|
-
read: MatRipple,
|
|
111
|
-
static: true,
|
|
112
|
-
}]
|
|
113
|
-
}] } });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbGxlY3Rpb24tY291bnQtaGlzdG9yeS9tb250aHBpY2tlci9tb250aHBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5L21vbnRocGlja2VyL21vbnRocGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQWtCLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFFbkgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQW1CO0lBQy9DLEtBQUssRUFBRTtRQUNMLFNBQVMsRUFBRSxXQUFXO0tBQ3ZCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLFdBQVc7UUFDdEIs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QWlCLEVBQUU7d0JBQzFELDZDQUE2Qzt3QkFDN0MsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7d0JBQ3pDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO3dCQUMvQyxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtxQkFDM0Y7OEJBVUQsU0FBUztzQkFEUixLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBR3pCLFFBQVE7c0JBRFAsS0FBSztnQkFPSSxLQUFLO3NCQUpkLFNBQVM7dUJBQUMsT0FBTyxFQUFFO3dCQUNsQixJQUFJLEVBQUUsQ0FBQSxVQUE0QixDQUFBO3dCQUNsQyxNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPa0IsTUFBTTtzQkFKeEIsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksRUFBRSxTQUFTO3dCQUNmLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgTE9DQUxFX0lELCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXIsIE1hdERhdGVwaWNrZXJJbnB1dCwgTWF0RGF0ZXBpY2tlclRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCwgTWF0U3VmZml4IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgTHV4b25EYXRlQWRhcHRlciwgTUFUX0xVWE9OX0RBVEVfQURBUFRFUl9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbHV4b24tYWRhcHRlcic7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFLCBNYXREYXRlRm9ybWF0cywgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBkYXRlUGlja2VyRm9ybWF0czogTWF0RGF0ZUZvcm1hdHMgPSB7XG4gIHBhcnNlOiB7XG4gICAgZGF0ZUlucHV0OiAnTExMTCB5eXl5JyxcbiAgfSxcbiAgZGlzcGxheToge1xuICAgIGRhdGVJbnB1dDogJ0xMTEwgeXl5eScsXG4gICAgbW9udGhZZWFyTGFiZWw6ICdMTExMIHl5eXknLFxuICAgIGRhdGVBMTF5TGFiZWw6ICdMTEwnLFxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0geXl5eScsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLW1vbnRocGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZXBpY2tlcklucHV0LFxuICAgIE1hdERhdGVwaWNrZXJUb2dnbGUsXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdElucHV0LFxuICAgIE1hdExhYmVsLFxuICAgIE1hdFN1ZmZpeCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdFJpcHBsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsXG4gICAgICB1c2VDbGFzczogTHV4b25EYXRlQWRhcHRlcixcbiAgICAgIGRlcHM6IFtNQVRfREFURV9MT0NBTEUsIE1BVF9MVVhPTl9EQVRFX0FEQVBURVJfT1BUSU9OU10sXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBkYXRlUGlja2VyRm9ybWF0cyB9LFxuICAgIC8vcHJvdmlkZUx1eG9uRGF0ZUFkYXB0ZXIoZGF0ZVBpY2tlckZvcm1hdHMpLFxuICAgIHsgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogJ2RlLURFJyB9LFxuICAgIHsgcHJvdmlkZTogTUFUX0RBVEVfTE9DQUxFLCB1c2VWYWx1ZTogJ2RlLURFJyB9LFxuICAgIHsgcHJvdmlkZTogTUFUX0xVWE9OX0RBVEVfQURBUFRFUl9PUFRJT05TLCB1c2VWYWx1ZTogeyB1c2VVdGM6IHRydWUsIGZpcnN0RGF5T2ZXZWVrOiAxIH0gfSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21vbnRocGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21vbnRocGlja2VyLmNvbXBvbmVudC5jc3MnLFxufSlcbi8qKlxuICogVGhlb3JldGljYWxseSwgdGhpcyBjb21wb25lbnQgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGJvdGggbW9udGhseSBhbmQgZGFpbHkgZGF0ZSByYW5nZXMuXG4gKiBCdXQgSSBhbSB1bmFibGUgdG8gZmluZCBhIHdheSB0byBjaGFuZ2UgdGhlIGRhdGUgZm9ybWF0IG9mIHRoZSBkYXRlcGlja2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBNb250aHBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgc3RhcnRWaWV3OiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInID0gJ3llYXInO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBpbnB1dEdyb3VwOiBGb3JtR3JvdXA8eyBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+OyBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PiB9PjtcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdzdGFydCcsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJvdGVjdGVkIHN0YXJ0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdyaXBwbGUnLCB7XG4gICAgcmVhZDogTWF0UmlwcGxlLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJpcHBsZSE6IE1hdFJpcHBsZTtcblxuXG4gIHByb3RlY3RlZCBzZXRTdGFydChkYXRlOiBEYXRlVGltZTxib29sZWFuPiwgcGlja2VyOiBNYXREYXRlcGlja2VyPERhdGVUaW1lPGJvb2xlYW4+Pik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRHcm91cC5jb250cm9scy5zdGFydC5zZXRWYWx1ZShkYXRlKTtcbiAgICBwaWNrZXIuY2xvc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRFbmQoZGF0ZTogRGF0ZVRpbWU8Ym9vbGVhbj4sIHBpY2tlcjogTWF0RGF0ZXBpY2tlcjxEYXRlVGltZTxib29sZWFuPj4pOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0R3JvdXAuY29udHJvbHMuZW5kLnNldFZhbHVlKGRhdGUuZW5kT2YoJ21vbnRoJykpO1xuICAgIHBpY2tlci5jbG9zZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy9kZWZlciB0aGlzIHRvIGF2b2lkIGFuIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3Igb24gdGhlIHBhcmVudCBjb21wb25lbnRcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuaW5wdXRHcm91cC5yZXNldCgpKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuc3RhcnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLnJpcHBsZS5sYXVuY2goe1xuICAgICAgY2VudGVyZWQ6IHRydWUsIC8vIE1hdGVyaWFsIGJ1ZzogZGlzYWJsZWQgcmlwcGxlcyBkbyBub3QgdHJpZ2dlciB1bmxlc3MgY2VudGVyZWRcbiAgICAgIHJhZGl1czogMTAwMCxcbiAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICBleGl0RHVyYXRpb246IDEwMDAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG48bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPiBNb25hdGxpY2hlciBWZXJnbGVpY2ggPC9tYXQtY2FyZC10aXRsZT5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50IFtmb3JtR3JvdXBdPVwiaW5wdXRHcm91cFwiPlxuICAgIDwvIS0tIHN0YXJ0IGRhdGUgLS0vPlxuICAgIC0tPlxuPGRpdiBbZm9ybUdyb3VwXT1cImlucHV0R3JvdXBcIiBtYXRSaXBwbGUgI3JpcHBsZT1cIm1hdFJpcHBsZVwiIFttYXRSaXBwbGVEaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5aZWl0cHVua3QgMTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgI3N0YXJ0XG4gICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICBbbWluXT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICBbbWF4XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyMVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCJcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlN0YXJ0cyBkYXRlXCJcbiAgICAgID5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlcjFcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAjcGlja2VyMVxuICAgICAgICBbc3RhcnRBdF09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLnN0YXJ0LmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgIFtzdGFydFZpZXddPVwic3RhcnRWaWV3XCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2V0U3RhcnQoJGV2ZW50LCBwaWNrZXIxKVwiXG5cbiAgICAgID5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8IS0tIC9zdGFydCBkYXRlIC0tPlxuICAgIDwhLS0gZW5kIGRhdGUgLS0+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5aZWl0cHVua3QyPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgIFttaW5dPVwiaW5wdXRHcm91cC5jb250cm9scy5zdGFydC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgIFttYXhdPVwiaW5wdXRHcm91cC5jb250cm9scy5lbmQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIyXCJcbiAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIlxuICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIlxuICAgICAgPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyMlwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICNwaWNrZXIyXG4gICAgICAgIFtzdGFydEF0XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLnZhbHVlXCJcbiAgICAgICAgW3N0YXJ0Vmlld109XCJzdGFydFZpZXdcIlxuICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJzZXRFbmQoJGV2ZW50LCBwaWNrZXIyKVwiXG4gICAgICA+XG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPCEtLSAvZW5kIGRhdGUgLS0+XG48L2Rpdj5cbjwhLS1cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbi0tPlxuIl19
|
|
@@ -1,23 +0,0 @@
|
|
|
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 [collectionId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"collection\"\n></metaqs2-node-list>\n", styles: [".while-loading{filter:blur(2px)}: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", "collectionId"], outputs: ["countChanged"] }] }); }
|
|
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 [collectionId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"collection\"\n></metaqs2-node-list>\n", styles: [".while-loading{filter:blur(2px)}: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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi1pc3N1ZXMvY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi1pc3N1ZXMvY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRbEQsTUFBTSxPQUFPLHlCQUF5QjtJQUtwQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUp0RCxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBQ3RCLHVFQUF1RTtRQUN2RSxpQkFBWSxHQUFXLHNDQUFzQyxDQUFDO0lBRUwsQ0FBQztJQUUxRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RixDQUFDOytHQVRVLHlCQUF5QjttR0FBekIseUJBQXlCLGlFQ1J0QywySkFNQTs7NEZERWEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJBUElTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vamF2YS1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLWNvbGxlY3Rpb24taXNzdWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24taXNzdWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29sbGVjdGlvbi1pc3N1ZXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbklzc3Vlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgLy8gQFRPRE86IElucHV0IGlzIGJyb2tlbiwgbWF5YmUgY2F1c2Ugb2Ygd2l0aENvbXBvbmVudElucHV0QmluZGluZygpPyFcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcgPSAnOTRmMjJjOWItMGQzYS00YzFjLTg5ODctNGM4ZTgzZjNhOTJlJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbHRlckFQSVNlcnZpY2U6IEZpbHRlckFQSVNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc3N1ZXMgPSBhd2FpdCB0aGlzLmZpbHRlckFQSVNlcnZpY2UuZ2V0Q29sbGVjdGlvbklzc3VlRmllbGROYW1lcygpLnRvUHJvbWlzZSgpO1xuICB9XG59XG4iLCI8bWV0YXFzMi1ub2RlLWxpc3RcbiAgKm5nRm9yPVwibGV0IG1vZGUgb2YgaXNzdWVzXCJcbiAgW2NvbGxlY3Rpb25JZF09XCJjb2xsZWN0aW9uSWRcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgdHlwZT1cImNvbGxlY3Rpb25cIlxuPjwvbWV0YXFzMi1ub2RlLWxpc3Q+XG4iXX0=
|