@quadrel-enterprise-ui/framework 20.26.1 → 20.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/quadrel-enterprise-ui-framework.mjs +473 -222
- package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
- package/index.d.ts +247 -85
- package/package.json +1 -1
- package/src/assets/i18n/de.json +2 -0
- package/src/assets/i18n/en.json +2 -2
- package/src/assets/i18n/fr.json +2 -2
- package/src/assets/i18n/it.json +2 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, Directive, InjectionToken, HostBinding, Input, ViewEncapsulation, Component, Injectable, Injector, HostListener, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, NgModule, EventEmitter, Output, Renderer2, Pipe, ViewContainerRef, NO_ERRORS_SCHEMA, DestroyRef, SecurityContext, NgZone, ViewChildren, forwardRef, ContentChildren, ContentChild, isDevMode, QueryList, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer
|
|
2
|
+
import { inject, ElementRef, Directive, InjectionToken, HostBinding, Input, ViewEncapsulation, Component, Injectable, Injector, HostListener, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, NgModule, EventEmitter, Output, Renderer2, Pipe, ViewContainerRef, NO_ERRORS_SCHEMA, DestroyRef, SecurityContext, NgZone, ViewChildren, forwardRef, ContentChildren, ContentChild, isDevMode, QueryList, TemplateRef, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer } from '@angular/core';
|
|
3
3
|
import { Dialog, DialogRef, DialogModule } from '@angular/cdk/dialog';
|
|
4
4
|
import * as i1 from '@angular/common';
|
|
5
5
|
import { CommonModule, NgFor, NgIf, NgClass, NgTemplateOutlet, AsyncPipe } from '@angular/common';
|
|
6
|
-
import { BehaviorSubject, pairwise, from, switchMap, map as map$1, Subject, throwError, of, ReplaySubject, merge, fromEvent, isObservable, NEVER, Observable, EMPTY, shareReplay, Subscription, distinctUntilChanged as distinctUntilChanged$1, debounce, timer, startWith as startWith$1, debounceTime as debounceTime$1, takeUntil as takeUntil$1, firstValueFrom, combineLatest, concat, take as take$1,
|
|
6
|
+
import { BehaviorSubject, pairwise, from, switchMap, map as map$1, Subject, throwError, of, ReplaySubject, merge, fromEvent, isObservable, NEVER, Observable, EMPTY, shareReplay, Subscription, distinctUntilChanged as distinctUntilChanged$1, debounce, timer, startWith as startWith$1, debounceTime as debounceTime$1, takeUntil as takeUntil$1, firstValueFrom, combineLatest, concat, take as take$1, tap as tap$1, delay, first, scan, queueScheduler, filter as filter$1, concatMap as concatMap$1, exhaustMap, finalize, forkJoin, delayWhen, combineLatestWith, withLatestFrom as withLatestFrom$1, async } from 'rxjs';
|
|
7
7
|
import { map, takeUntil, take, filter, catchError, debounceTime, startWith, distinctUntilChanged, concatMap, skip, tap, auditTime, withLatestFrom, observeOn, switchMap as switchMap$1, pairwise as pairwise$1, mergeMap, delay as delay$1 } from 'rxjs/operators';
|
|
8
8
|
import { v4 } from 'uuid';
|
|
9
9
|
import * as i3 from '@ngx-translate/core';
|
|
@@ -2739,6 +2739,7 @@ class QdMockFilterItemDateRangeComponent {
|
|
|
2739
2739
|
get dataTestId() {
|
|
2740
2740
|
return this.testId;
|
|
2741
2741
|
}
|
|
2742
|
+
open() { }
|
|
2742
2743
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdMockFilterItemDateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2743
2744
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdMockFilterItemDateRangeComponent, isStandalone: false, selector: "qd-filter-item-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" } }, ngImport: i0, template: 'filterId: {{filterId}}, categoryIndex: {{categoryIndex}}, itemIndex: {{itemIndex}}, timePickerConfig: {{timePickerConfig | json}}', isInline: true, dependencies: [{ kind: "pipe", type: i1.JsonPipe, name: "json" }] });
|
|
2744
2745
|
}
|
|
@@ -2891,6 +2892,7 @@ class QdMockFilterService {
|
|
|
2891
2892
|
postBodyWithEmptyDefaultSubjects = [];
|
|
2892
2893
|
categoryByIdSubject = [];
|
|
2893
2894
|
itemByIdSubject = [];
|
|
2895
|
+
loadingSubject = [];
|
|
2894
2896
|
initializeFilterState() {
|
|
2895
2897
|
return;
|
|
2896
2898
|
}
|
|
@@ -2903,6 +2905,8 @@ class QdMockFilterService {
|
|
|
2903
2905
|
setFilterSelection = jest.fn();
|
|
2904
2906
|
updateItem = jest.fn();
|
|
2905
2907
|
setItemIsActive = jest.fn();
|
|
2908
|
+
clearCategorySelection = jest.fn();
|
|
2909
|
+
setItemsLoading = jest.fn();
|
|
2906
2910
|
selectFilterDataById$ = jest.fn();
|
|
2907
2911
|
getQueryString$(filterId) {
|
|
2908
2912
|
return this.getQueryStringSubject(filterId).asObservable();
|
|
@@ -2925,6 +2929,11 @@ class QdMockFilterService {
|
|
|
2925
2929
|
getItemById$(filterId) {
|
|
2926
2930
|
return this.itemByIdSubject[filterId].asObservable();
|
|
2927
2931
|
}
|
|
2932
|
+
getItemsLoading$(filterId) {
|
|
2933
|
+
if (!this.loadingSubject[filterId])
|
|
2934
|
+
this.loadingSubject[filterId] = new BehaviorSubject(false);
|
|
2935
|
+
return this.loadingSubject[filterId].asObservable();
|
|
2936
|
+
}
|
|
2928
2937
|
getQueryStringSubject(filterId) {
|
|
2929
2938
|
if (!this.queryStringSubjects[filterId])
|
|
2930
2939
|
this.queryStringSubjects[filterId] = new Subject();
|
|
@@ -2960,6 +2969,11 @@ class QdMockFilterService {
|
|
|
2960
2969
|
this.itemByIdSubject[filterId] = new BehaviorSubject(null);
|
|
2961
2970
|
this.itemByIdSubject[filterId].next(value);
|
|
2962
2971
|
}
|
|
2972
|
+
emitLoading(value, filterId) {
|
|
2973
|
+
if (!this.loadingSubject[filterId])
|
|
2974
|
+
this.loadingSubject[filterId] = new BehaviorSubject(false);
|
|
2975
|
+
this.loadingSubject[filterId].next(value);
|
|
2976
|
+
}
|
|
2963
2977
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdMockFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2964
2978
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdMockFilterService });
|
|
2965
2979
|
}
|
|
@@ -8128,6 +8142,20 @@ class QdPopoverOnClickDirective {
|
|
|
8128
8142
|
this.runSizingAndOpen(popover);
|
|
8129
8143
|
}));
|
|
8130
8144
|
}
|
|
8145
|
+
/**
|
|
8146
|
+
* Re-aligns an open overlay with its origin element.
|
|
8147
|
+
*
|
|
8148
|
+
* The connected position is only recomputed on scroll/resize, not when a
|
|
8149
|
+
* layout reflow moves the origin (e.g. a chip or action buttons appearing in
|
|
8150
|
+
* the host). Call this after such a reflow to keep the overlay attached to the
|
|
8151
|
+
* host. Deferred by one frame so the new layout is measured, and a no-op while
|
|
8152
|
+
* the overlay is detached, so it stays cheap to call on discrete events.
|
|
8153
|
+
*/
|
|
8154
|
+
updatePosition() {
|
|
8155
|
+
if (!this.overlayRef?.hasAttached())
|
|
8156
|
+
return;
|
|
8157
|
+
requestAnimationFrame(() => this.overlayRef.updatePosition());
|
|
8158
|
+
}
|
|
8131
8159
|
close() {
|
|
8132
8160
|
if (!this.overlayRef?.hasAttached())
|
|
8133
8161
|
return;
|
|
@@ -8445,7 +8473,9 @@ class QdAutofocusDirective {
|
|
|
8445
8473
|
return;
|
|
8446
8474
|
}
|
|
8447
8475
|
element.focus();
|
|
8448
|
-
this._blurHandler = () =>
|
|
8476
|
+
this._blurHandler = () => {
|
|
8477
|
+
this.autofocusService.isAutofocusActivated = false;
|
|
8478
|
+
};
|
|
8449
8479
|
element.addEventListener('blur', this._blurHandler, { once: true });
|
|
8450
8480
|
}, 0);
|
|
8451
8481
|
}
|
|
@@ -9453,11 +9483,11 @@ class QdFilterFormItemsComponent {
|
|
|
9453
9483
|
this.filterValueChange.emit($event);
|
|
9454
9484
|
}
|
|
9455
9485
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterFormItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9456
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterFormItemsComponent, isStandalone: false, selector: "qd-filter-form-items", inputs: { inputFilterValue: "inputFilterValue", testId: ["data-test-id", "testId"] }, outputs: { filterValueChange: "filterValueChange" }, host: { classAttribute: "qd-filter-form-items" }, ngImport: i0, template: "<qd-icon [icon]=\"'
|
|
9486
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterFormItemsComponent, isStandalone: false, selector: "qd-filter-form-items", inputs: { inputFilterValue: "inputFilterValue", testId: ["data-test-id", "testId"] }, outputs: { filterValueChange: "filterValueChange" }, host: { classAttribute: "qd-filter-form-items" }, ngImport: i0, template: "<qd-icon [icon]=\"'filter'\" class=\"qd-filter-form-items__filter-magnifier\"></qd-icon>\n\n<input\n type=\"text\"\n class=\"qd-filter-form-items__filter\"\n [(ngModel)]=\"filterValue\"\n (ngModelChange)=\"changeValue($event)\"\n [attr.data-test-id]=\"testId + '-filter-items'\"\n [qdAutofocus]=\"true\"\n autocomplete=\"off\"\n/>\n", styles: [".qd-filter-form-items__filter{width:100%;height:2.25rem;padding:0 .75rem 0 2.375rem;border:none;border-bottom:.0625rem solid rgb(213,213,213);margin-bottom:.5rem;background:#fff;color:#171717}.qd-filter-form-items__filter:focus,.qd-filter-form-items__filter:hover,.qd-filter-form-items__filter:active{border:none;background:#f5f5f5;outline:none}.qd-filter-form-items__filter:hover,.qd-filter-form-items__filter:active{border-bottom:.125rem solid rgb(23,23,23)}.qd-filter-form-items__filter:focus{border-bottom:.125rem solid rgb(0,102,153)}.qd-filter-form-items__filter-magnifier{position:absolute;padding:.625rem 0 .625rem .9375rem}.qd-filter-form-items__filter-magnifier .qd-icon{color:#757575}\n"], dependencies: [{ kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: QdAutofocusDirective, selector: "[qdAutofocus]", inputs: ["qdAutofocus"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon", "status"] }] });
|
|
9457
9487
|
}
|
|
9458
9488
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterFormItemsComponent, decorators: [{
|
|
9459
9489
|
type: Component,
|
|
9460
|
-
args: [{ selector: 'qd-filter-form-items', host: { class: 'qd-filter-form-items' }, standalone: false, template: "<qd-icon [icon]=\"'
|
|
9490
|
+
args: [{ selector: 'qd-filter-form-items', host: { class: 'qd-filter-form-items' }, standalone: false, template: "<qd-icon [icon]=\"'filter'\" class=\"qd-filter-form-items__filter-magnifier\"></qd-icon>\n\n<input\n type=\"text\"\n class=\"qd-filter-form-items__filter\"\n [(ngModel)]=\"filterValue\"\n (ngModelChange)=\"changeValue($event)\"\n [attr.data-test-id]=\"testId + '-filter-items'\"\n [qdAutofocus]=\"true\"\n autocomplete=\"off\"\n/>\n", styles: [".qd-filter-form-items__filter{width:100%;height:2.25rem;padding:0 .75rem 0 2.375rem;border:none;border-bottom:.0625rem solid rgb(213,213,213);margin-bottom:.5rem;background:#fff;color:#171717}.qd-filter-form-items__filter:focus,.qd-filter-form-items__filter:hover,.qd-filter-form-items__filter:active{border:none;background:#f5f5f5;outline:none}.qd-filter-form-items__filter:hover,.qd-filter-form-items__filter:active{border-bottom:.125rem solid rgb(23,23,23)}.qd-filter-form-items__filter:focus{border-bottom:.125rem solid rgb(0,102,153)}.qd-filter-form-items__filter-magnifier{position:absolute;padding:.625rem 0 .625rem .9375rem}.qd-filter-form-items__filter-magnifier .qd-icon{color:#757575}\n"] }]
|
|
9461
9491
|
}], propDecorators: { inputFilterValue: [{
|
|
9462
9492
|
type: Input
|
|
9463
9493
|
}], testId: [{
|
|
@@ -12289,6 +12319,11 @@ class QdDatepickerComponent {
|
|
|
12289
12319
|
setDisabledState(disabled) {
|
|
12290
12320
|
this.disabled = disabled;
|
|
12291
12321
|
}
|
|
12322
|
+
open() {
|
|
12323
|
+
if (this.disabled)
|
|
12324
|
+
return;
|
|
12325
|
+
this.popover?.open();
|
|
12326
|
+
}
|
|
12292
12327
|
handleUpdatedDate($rawValue) {
|
|
12293
12328
|
const $event = this.extractInputStringValue($rawValue);
|
|
12294
12329
|
if ($event === '') {
|
|
@@ -12524,7 +12559,7 @@ class QdDatepickerComponent {
|
|
|
12524
12559
|
useValue: true
|
|
12525
12560
|
},
|
|
12526
12561
|
QdFormsActionEmitterService
|
|
12527
|
-
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["qdPopoverOnClick"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<qd-input\n *ngIf=\"!readonly && !viewonly\"\n [value]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n (valueChange)=\"config?.timePicker ? handleUpdatedDateTime($event) : handleUpdatedDate($event)\"\n [config]=\"{ disabled, readonly, viewonly, placeholder: config?.placeholder }\"\n [isError]=\"hasError\"\n>\n <button\n type=\"button\"\n class=\"datepicker-toggle\"\n qdIconButton\n [qdPopoverOnClick]=\"disabled ? null : calendar\"\n [qdPopoverMaxWidth]=\"332\"\n qdPopoverCloseStrategy=\"onOutsideClick\"\n #qdPopoverOnClick=\"qdPopoverOnClick\"\n >\n <qd-icon [icon]=\"'calendar'\"></qd-icon>\n </button>\n</qd-input>\n\n<ng-template #calendar>\n <qd-calendar\n [selectedDate]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n [language]=\"language\"\n [disabledDates]=\"config?.disabledDates\"\n (selectedChange)=\"handleUpdatedDate($event)\"\n ></qd-calendar>\n <qd-dropdown\n class=\"timepicker-dropdown\"\n *ngIf=\"timePicker\"\n [value]=\"displayedTime\"\n (valueChange)=\"handleUpdatedTime($event)\"\n [config]=\"timePicker\"\n [qdPopoverMaxHeight]=\"300\"\n ></qd-dropdown>\n</ng-template>\n\n<qd-form-hint\n *ngIf=\"!readonly && !viewonly && (hint || hasError)\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[displayedDate]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[displayedDate]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: ["qd-datepicker{position:relative;display:block;width:100%;margin-bottom:.75rem}qd-datepicker .calendar{padding:1rem}qd-datepicker .calendar mat-calendar{display:block}qd-datepicker .datepicker-toggle{background-color:unset}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input{height:2.25rem;margin-bottom:.375rem!important}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-label,qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-hint{display:none}qd-datepicker .qd-form-disabled .datepicker-toggle{color:#979797;cursor:default}qd-datepicker.qd-datepicker-calendar-only{margin-bottom:0}qd-datepicker.qd-datepicker-calendar-only qd-input{margin:0}qd-datepicker.qd-datepicker-calendar-only .qd-form-label,qd-datepicker.qd-datepicker-calendar-only .qd-form-hint,qd-datepicker.qd-datepicker-calendar-only .qd-input-input input{display:none}qd-datepicker.qd-datepicker-calendar-only .qd-input-input{height:initial!important;padding:0!important;border:none!important;margin:0!important}qd-datepicker.qd-datepicker-calendar-only .qd-input-suffix{margin-left:0!important}.timepicker-dropdown{margin:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon", "status"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdCalendarComponent, selector: "qd-calendar", inputs: ["selectedDate", "language", "disabledDates"], outputs: ["selectedChange"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly", "optionsResolved"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly", "optionsResolved"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
12562
|
+
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["qdPopoverOnClick"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<qd-input\n *ngIf=\"!readonly && !viewonly\"\n [value]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n (valueChange)=\"config?.timePicker ? handleUpdatedDateTime($event) : handleUpdatedDate($event)\"\n [config]=\"{ disabled, readonly, viewonly, placeholder: config?.placeholder }\"\n [isError]=\"hasError\"\n>\n <button\n type=\"button\"\n class=\"datepicker-toggle\"\n qdIconButton\n [qdPopoverOnClick]=\"disabled ? null : calendar\"\n [qdPopoverMaxWidth]=\"332\"\n qdPopoverCloseStrategy=\"onOutsideClick\"\n #qdPopoverOnClick=\"qdPopoverOnClick\"\n >\n <qd-icon [icon]=\"'calendar'\"></qd-icon>\n </button>\n</qd-input>\n\n<ng-template #calendar>\n <qd-calendar\n [selectedDate]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n [language]=\"language\"\n [disabledDates]=\"config?.disabledDates\"\n (selectedChange)=\"handleUpdatedDate($event)\"\n ></qd-calendar>\n <qd-dropdown\n class=\"timepicker-dropdown\"\n *ngIf=\"timePicker\"\n [value]=\"displayedTime\"\n (valueChange)=\"handleUpdatedTime($event)\"\n [config]=\"timePicker\"\n [qdPopoverMaxHeight]=\"300\"\n ></qd-dropdown>\n</ng-template>\n\n<qd-form-hint\n *ngIf=\"!readonly && !viewonly && (hint || hasError)\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[displayedDate]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[displayedDate]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: ["qd-datepicker{position:relative;display:block;width:100%;margin-bottom:.75rem}qd-datepicker .calendar{padding:1rem}qd-datepicker .calendar mat-calendar{display:block}qd-datepicker .datepicker-toggle{background-color:unset;color:inherit}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input{height:2.25rem;margin-bottom:.375rem!important}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-label,qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-hint{display:none}qd-datepicker .qd-form-disabled .datepicker-toggle{color:#979797;cursor:default}qd-datepicker.qd-datepicker-calendar-only{margin-bottom:0}qd-datepicker.qd-datepicker-calendar-only qd-input{margin:0}qd-datepicker.qd-datepicker-calendar-only .qd-form-label,qd-datepicker.qd-datepicker-calendar-only .qd-form-hint,qd-datepicker.qd-datepicker-calendar-only .qd-input-input input{display:none}qd-datepicker.qd-datepicker-calendar-only .qd-input-input{height:initial!important;padding:0!important;border:none!important;margin:0!important}qd-datepicker.qd-datepicker-calendar-only .qd-input-suffix{margin-left:0!important}.timepicker-dropdown{margin:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon", "status"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdCalendarComponent, selector: "qd-calendar", inputs: ["selectedDate", "language", "disabledDates"], outputs: ["selectedChange"] }, { kind: "component", type: QdDropdownComponent, selector: "qd-dropdown", inputs: ["value", "id", "formControlName", "config", "data-test-id", "qdPopoverMaxHeight", "dense"], outputs: ["valueChange", "enterClick", "clickHint", "clickReadonly", "clickViewonly", "optionsResolved"] }, { kind: "component", type: QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly", "optionsResolved"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
12528
12563
|
}
|
|
12529
12564
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdDatepickerComponent, decorators: [{
|
|
12530
12565
|
type: Component,
|
|
@@ -12539,7 +12574,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
12539
12574
|
useValue: true
|
|
12540
12575
|
},
|
|
12541
12576
|
QdFormsActionEmitterService
|
|
12542
|
-
], standalone: false, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<qd-input\n *ngIf=\"!readonly && !viewonly\"\n [value]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n (valueChange)=\"config?.timePicker ? handleUpdatedDateTime($event) : handleUpdatedDate($event)\"\n [config]=\"{ disabled, readonly, viewonly, placeholder: config?.placeholder }\"\n [isError]=\"hasError\"\n>\n <button\n type=\"button\"\n class=\"datepicker-toggle\"\n qdIconButton\n [qdPopoverOnClick]=\"disabled ? null : calendar\"\n [qdPopoverMaxWidth]=\"332\"\n qdPopoverCloseStrategy=\"onOutsideClick\"\n #qdPopoverOnClick=\"qdPopoverOnClick\"\n >\n <qd-icon [icon]=\"'calendar'\"></qd-icon>\n </button>\n</qd-input>\n\n<ng-template #calendar>\n <qd-calendar\n [selectedDate]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n [language]=\"language\"\n [disabledDates]=\"config?.disabledDates\"\n (selectedChange)=\"handleUpdatedDate($event)\"\n ></qd-calendar>\n <qd-dropdown\n class=\"timepicker-dropdown\"\n *ngIf=\"timePicker\"\n [value]=\"displayedTime\"\n (valueChange)=\"handleUpdatedTime($event)\"\n [config]=\"timePicker\"\n [qdPopoverMaxHeight]=\"300\"\n ></qd-dropdown>\n</ng-template>\n\n<qd-form-hint\n *ngIf=\"!readonly && !viewonly && (hint || hasError)\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[displayedDate]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[displayedDate]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: ["qd-datepicker{position:relative;display:block;width:100%;margin-bottom:.75rem}qd-datepicker .calendar{padding:1rem}qd-datepicker .calendar mat-calendar{display:block}qd-datepicker .datepicker-toggle{background-color:unset}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input{height:2.25rem;margin-bottom:.375rem!important}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-label,qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-hint{display:none}qd-datepicker .qd-form-disabled .datepicker-toggle{color:#979797;cursor:default}qd-datepicker.qd-datepicker-calendar-only{margin-bottom:0}qd-datepicker.qd-datepicker-calendar-only qd-input{margin:0}qd-datepicker.qd-datepicker-calendar-only .qd-form-label,qd-datepicker.qd-datepicker-calendar-only .qd-form-hint,qd-datepicker.qd-datepicker-calendar-only .qd-input-input input{display:none}qd-datepicker.qd-datepicker-calendar-only .qd-input-input{height:initial!important;padding:0!important;border:none!important;margin:0!important}qd-datepicker.qd-datepicker-calendar-only .qd-input-suffix{margin-left:0!important}.timepicker-dropdown{margin:.75rem}\n"] }]
|
|
12577
|
+
], standalone: false, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<qd-input\n *ngIf=\"!readonly && !viewonly\"\n [value]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n (valueChange)=\"config?.timePicker ? handleUpdatedDateTime($event) : handleUpdatedDate($event)\"\n [config]=\"{ disabled, readonly, viewonly, placeholder: config?.placeholder }\"\n [isError]=\"hasError\"\n>\n <button\n type=\"button\"\n class=\"datepicker-toggle\"\n qdIconButton\n [qdPopoverOnClick]=\"disabled ? null : calendar\"\n [qdPopoverMaxWidth]=\"332\"\n qdPopoverCloseStrategy=\"onOutsideClick\"\n #qdPopoverOnClick=\"qdPopoverOnClick\"\n >\n <qd-icon [icon]=\"'calendar'\"></qd-icon>\n </button>\n</qd-input>\n\n<ng-template #calendar>\n <qd-calendar\n [selectedDate]=\"config?.timePicker && displayedDateTime ? displayedDateTime : displayedDate\"\n [language]=\"language\"\n [disabledDates]=\"config?.disabledDates\"\n (selectedChange)=\"handleUpdatedDate($event)\"\n ></qd-calendar>\n <qd-dropdown\n class=\"timepicker-dropdown\"\n *ngIf=\"timePicker\"\n [value]=\"displayedTime\"\n (valueChange)=\"handleUpdatedTime($event)\"\n [config]=\"timePicker\"\n [qdPopoverMaxHeight]=\"300\"\n ></qd-dropdown>\n</ng-template>\n\n<qd-form-hint\n *ngIf=\"!readonly && !viewonly && (hint || hasError)\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[displayedDate]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[displayedDate]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: ["qd-datepicker{position:relative;display:block;width:100%;margin-bottom:.75rem}qd-datepicker .calendar{padding:1rem}qd-datepicker .calendar mat-calendar{display:block}qd-datepicker .datepicker-toggle{background-color:unset;color:inherit}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input{height:2.25rem;margin-bottom:.375rem!important}qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-label,qd-datepicker:not(.qd-datepicker-calendar-only) qd-input .qd-form-hint{display:none}qd-datepicker .qd-form-disabled .datepicker-toggle{color:#979797;cursor:default}qd-datepicker.qd-datepicker-calendar-only{margin-bottom:0}qd-datepicker.qd-datepicker-calendar-only qd-input{margin:0}qd-datepicker.qd-datepicker-calendar-only .qd-form-label,qd-datepicker.qd-datepicker-calendar-only .qd-form-hint,qd-datepicker.qd-datepicker-calendar-only .qd-input-input input{display:none}qd-datepicker.qd-datepicker-calendar-only .qd-input-input{height:initial!important;padding:0!important;border:none!important;margin:0!important}qd-datepicker.qd-datepicker-calendar-only .qd-input-suffix{margin-left:0!important}.timepicker-dropdown{margin:.75rem}\n"] }]
|
|
12543
12578
|
}], propDecorators: { config: [{
|
|
12544
12579
|
type: Input
|
|
12545
12580
|
}], formControlName: [{
|
|
@@ -20727,6 +20762,7 @@ const updateCategoryTranslation = createAction('[QdUi Filter] updateCategoryTran
|
|
|
20727
20762
|
const setFilterSelection = createAction('[QdUi Filter] setFilterSelection', props());
|
|
20728
20763
|
const setCategoryFilter = createAction('[QdUi Filter] setCategoryFilter', props());
|
|
20729
20764
|
const resetCategoryFilter = createAction('[QdUi Filter] resetCategoryFilter', props());
|
|
20765
|
+
const clearCategorySelection = createAction('[QdUi Filter] clearCategorySelection', props());
|
|
20730
20766
|
const QdFilterActions = {
|
|
20731
20767
|
initFilterState,
|
|
20732
20768
|
updateItem,
|
|
@@ -20737,7 +20773,8 @@ const QdFilterActions = {
|
|
|
20737
20773
|
updateCategoryTranslation,
|
|
20738
20774
|
setFilterSelection,
|
|
20739
20775
|
setCategoryFilter,
|
|
20740
|
-
resetCategoryFilter
|
|
20776
|
+
resetCategoryFilter,
|
|
20777
|
+
clearCategorySelection
|
|
20741
20778
|
};
|
|
20742
20779
|
|
|
20743
20780
|
function validateFilterSelection(filterSelection, filterCategories, selectionSource) {
|
|
@@ -20859,6 +20896,12 @@ const _filterReducer = createReducer(initialState$2, on(QdFilterActions.initFilt
|
|
|
20859
20896
|
...state,
|
|
20860
20897
|
[filterId]: resetCategoryFilter$1(state[filterId], categoryIndex)
|
|
20861
20898
|
};
|
|
20899
|
+
}), on(QdFilterActions.clearCategorySelection, (state, { filterId, categoryIndex }) => {
|
|
20900
|
+
const newCategory = getNewCategory(state, filterId, categoryIndex);
|
|
20901
|
+
newCategory.items.forEach((item) => {
|
|
20902
|
+
item.active = false;
|
|
20903
|
+
});
|
|
20904
|
+
return updateStateWithNewCategory(state, filterId, categoryIndex, newCategory);
|
|
20862
20905
|
}));
|
|
20863
20906
|
function filterReducer(state, action) {
|
|
20864
20907
|
return _filterReducer(state, action);
|
|
@@ -20988,6 +21031,7 @@ class QdFilterService {
|
|
|
20988
21031
|
queryStringSubjects = [];
|
|
20989
21032
|
filterUrlParameterSubjects = [];
|
|
20990
21033
|
postBodySubjects = [];
|
|
21034
|
+
itemsLoadingSubjects = {};
|
|
20991
21035
|
getItems$(filterId, categoryIndex) {
|
|
20992
21036
|
return this.store.select(QdFilterSelector.selectItems, {
|
|
20993
21037
|
filterId,
|
|
@@ -21069,6 +21113,9 @@ class QdFilterService {
|
|
|
21069
21113
|
categoryIndex
|
|
21070
21114
|
});
|
|
21071
21115
|
}
|
|
21116
|
+
getItemsLoading$(filterId, categoryIndex) {
|
|
21117
|
+
return this.getItemsLoadingSubject(filterId, categoryIndex).asObservable();
|
|
21118
|
+
}
|
|
21072
21119
|
getFilterCategoryValue$(filterId, categoryIndex) {
|
|
21073
21120
|
return this.store.select(QdFilterSelector.selectFilterCategoryValue, {
|
|
21074
21121
|
filterId,
|
|
@@ -21149,6 +21196,21 @@ class QdFilterService {
|
|
|
21149
21196
|
categoryIndex
|
|
21150
21197
|
}));
|
|
21151
21198
|
}
|
|
21199
|
+
clearCategorySelection(filterId, categoryIndex) {
|
|
21200
|
+
this.store.dispatch(QdFilterActions.clearCategorySelection({
|
|
21201
|
+
filterId,
|
|
21202
|
+
categoryIndex
|
|
21203
|
+
}));
|
|
21204
|
+
}
|
|
21205
|
+
setItemsLoading(filterId, categoryIndex, loading) {
|
|
21206
|
+
this.getItemsLoadingSubject(filterId, categoryIndex).next(loading);
|
|
21207
|
+
}
|
|
21208
|
+
getItemsLoadingSubject(filterId, categoryIndex) {
|
|
21209
|
+
const key = `${filterId}-${categoryIndex}`;
|
|
21210
|
+
if (!this.itemsLoadingSubjects[key])
|
|
21211
|
+
this.itemsLoadingSubjects[key] = new BehaviorSubject(false);
|
|
21212
|
+
return this.itemsLoadingSubjects[key];
|
|
21213
|
+
}
|
|
21152
21214
|
getQueryStringSubject(filterId) {
|
|
21153
21215
|
if (!this.queryStringSubjects[filterId])
|
|
21154
21216
|
this.queryStringSubjects[filterId] = new ReplaySubject(1);
|
|
@@ -21205,11 +21267,11 @@ class QdFilterItemBooleanComponent {
|
|
|
21205
21267
|
this.filterService.setItemIsActive(this.filterId, this.categoryIndex, this.itemIndex, value === this.itemData);
|
|
21206
21268
|
}
|
|
21207
21269
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemBooleanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21208
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemBooleanComponent, isStandalone: false, selector: "qd-filter-item-boolean", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", i18n: "i18n", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" } }, ngImport: i0, template: "<qd-checkbox\n [inputData]=\"{ value: itemData, i18n: i18n || '', disabled: false }\"\n [value]=\"active ? itemData : null\"\n (valueChange)=\"clickToggle($event)\"\n qdRwdDisabled\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + '-checkbox'\"\n></qd-checkbox>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap-reverse;margin:0 .75rem;line-height:2.125rem}:host ::ng-deep .qd-checkbox,:host ::ng-deep .qd-checkbox__label,:host ::ng-deep .qd-checkbox__caption{padding:0!important;border:0;margin:0!important}:host ::ng-deep .qd-
|
|
21270
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemBooleanComponent, isStandalone: false, selector: "qd-filter-item-boolean", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", i18n: "i18n", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "this.dataTestId" } }, ngImport: i0, template: "<qd-checkbox\n [inputData]=\"{ value: itemData, i18n: i18n || '', disabled: false }\"\n [value]=\"active ? itemData : null\"\n (valueChange)=\"clickToggle($event)\"\n qdRwdDisabled\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + '-checkbox'\"\n></qd-checkbox>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap-reverse;margin:0 .75rem;line-height:2.125rem}:host ::ng-deep .qd-checkbox,:host ::ng-deep .qd-checkbox__label,:host ::ng-deep .qd-checkbox__caption{padding:0!important;border:0;margin:0!important}:host ::ng-deep .qd-checkbox__label{color:#757575!important}:host ::ng-deep .qd-checkbox__label:hover,:host ::ng-deep .qd-checkbox__label:focus,:host ::ng-deep .qd-checkbox__label:active{color:#171717!important}:host ::ng-deep .qd-checkbox__indicator{margin-right:.5rem!important}\n"], dependencies: [{ kind: "directive", type: QdRwdDisabledDirective, selector: "[qdRwdDisabled]" }, { kind: "component", type: QdCheckboxComponent, selector: "qd-checkbox", inputs: ["inputData", "value", "data-test-id", "disabled", "hasAutofocus"], outputs: ["valueChange"] }] });
|
|
21209
21271
|
}
|
|
21210
21272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemBooleanComponent, decorators: [{
|
|
21211
21273
|
type: Component,
|
|
21212
|
-
args: [{ selector: 'qd-filter-item-boolean', standalone: false, template: "<qd-checkbox\n [inputData]=\"{ value: itemData, i18n: i18n || '', disabled: false }\"\n [value]=\"active ? itemData : null\"\n (valueChange)=\"clickToggle($event)\"\n qdRwdDisabled\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + '-checkbox'\"\n></qd-checkbox>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap-reverse;margin:0 .75rem;line-height:2.125rem}:host ::ng-deep .qd-checkbox,:host ::ng-deep .qd-checkbox__label,:host ::ng-deep .qd-checkbox__caption{padding:0!important;border:0;margin:0!important}:host ::ng-deep .qd-
|
|
21274
|
+
args: [{ selector: 'qd-filter-item-boolean', standalone: false, template: "<qd-checkbox\n [inputData]=\"{ value: itemData, i18n: i18n || '', disabled: false }\"\n [value]=\"active ? itemData : null\"\n (valueChange)=\"clickToggle($event)\"\n qdRwdDisabled\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + '-checkbox'\"\n></qd-checkbox>\n", styles: [":host{position:relative;display:flex;flex-wrap:wrap-reverse;margin:0 .75rem;line-height:2.125rem}:host ::ng-deep .qd-checkbox,:host ::ng-deep .qd-checkbox__label,:host ::ng-deep .qd-checkbox__caption{padding:0!important;border:0;margin:0!important}:host ::ng-deep .qd-checkbox__label{color:#757575!important}:host ::ng-deep .qd-checkbox__label:hover,:host ::ng-deep .qd-checkbox__label:focus,:host ::ng-deep .qd-checkbox__label:active{color:#171717!important}:host ::ng-deep .qd-checkbox__indicator{margin-right:.5rem!important}\n"] }]
|
|
21213
21275
|
}], propDecorators: { filterId: [{
|
|
21214
21276
|
type: Input
|
|
21215
21277
|
}], categoryIndex: [{
|
|
@@ -21271,6 +21333,7 @@ class QdFilterItemFreeTextComponent {
|
|
|
21271
21333
|
get value() {
|
|
21272
21334
|
return (this.item && this.item.item) || '';
|
|
21273
21335
|
}
|
|
21336
|
+
inputValue = '';
|
|
21274
21337
|
_destroyed$ = new Subject();
|
|
21275
21338
|
ngOnInit() {
|
|
21276
21339
|
this.filterService
|
|
@@ -21291,24 +21354,27 @@ class QdFilterItemFreeTextComponent {
|
|
|
21291
21354
|
this._destroyed$.complete();
|
|
21292
21355
|
}
|
|
21293
21356
|
handleValueChange(value) {
|
|
21294
|
-
|
|
21357
|
+
this.inputValue = value;
|
|
21358
|
+
if (!this.isInstantFiltering && value !== '') {
|
|
21295
21359
|
this.filterService.updateItem(this.filterId, this.categoryIndex, this.itemIndex, value);
|
|
21296
21360
|
}
|
|
21297
21361
|
}
|
|
21298
21362
|
handleEnter($event) {
|
|
21299
|
-
if (this.isInstantFiltering)
|
|
21300
|
-
this.
|
|
21363
|
+
if (this.isInstantFiltering && $event !== '') {
|
|
21364
|
+
this.filterService.updateItem(this.filterId, this.categoryIndex, this.itemIndex, $event);
|
|
21365
|
+
}
|
|
21301
21366
|
this.enterClick.emit();
|
|
21367
|
+
this.inputValue = '';
|
|
21302
21368
|
}
|
|
21303
21369
|
handleReset() {
|
|
21304
21370
|
this.filterService.updateItem(this.filterId, this.categoryIndex, this.itemIndex, '');
|
|
21305
21371
|
}
|
|
21306
21372
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemFreeTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21307
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemFreeTextComponent, isStandalone: false, selector: "qd-filter-item-free-text", inputs: { filterId: "filterId", isInstantFiltering: "isInstantFiltering", categoryIndex: "categoryIndex", itemIndex: "itemIndex", testId: ["data-test-id", "testId"] }, outputs: { enterClick: "enterClick" }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-filter__item-free-text" }, ngImport: i0, template: "<qd-input\n [value]=\"
|
|
21373
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemFreeTextComponent, isStandalone: false, selector: "qd-filter-item-free-text", inputs: { filterId: "filterId", isInstantFiltering: "isInstantFiltering", categoryIndex: "categoryIndex", itemIndex: "itemIndex", testId: ["data-test-id", "testId"] }, outputs: { enterClick: "enterClick" }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-filter__item-free-text" }, ngImport: i0, template: "<qd-input\n [value]=\"inputValue\"\n (valueChange)=\"handleValueChange($event)\"\n (enterClick)=\"handleEnter($event)\"\n [config]=\"{ placeholder: { i18n: i18n }, viewonly: false }\"\n [data-test-id]=\"testId\"\n></qd-input>\n", styles: [":host ::ng-deep qd-input{width:10.25rem;max-width:12.5rem;height:2.125rem;margin-bottom:0!important}:host ::ng-deep qd-input .qd-form-label,:host ::ng-deep qd-input .qd-form-hint{display:none}:host ::ng-deep qd-input .qd-form-label,:host ::ng-deep qd-input .qd-input-input,:host ::ng-deep qd-input .qd-form-hint{margin-bottom:0!important}:host ::ng-deep qd-input .qd-input-input{height:2.125rem!important;border-color:transparent!important}:host ::ng-deep qd-input .qd-input-input input::placeholder{color:#757575!important}:host:hover ::ng-deep qd-input .qd-input-input input::placeholder{color:#171717!important}\n"], dependencies: [{ kind: "component", type: QdInputComponent, selector: "qd-input", inputs: ["formControlName", "value", "config", "isError", "data-test-id"], outputs: ["valueChange", "enterClick", "clickClear", "clickHint", "clickReadonly", "clickViewonly", "optionsResolved"] }] });
|
|
21308
21374
|
}
|
|
21309
21375
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemFreeTextComponent, decorators: [{
|
|
21310
21376
|
type: Component,
|
|
21311
|
-
args: [{ selector: 'qd-filter-item-free-text', host: { class: 'qd-filter__item-free-text' }, standalone: false, template: "<qd-input\n [value]=\"
|
|
21377
|
+
args: [{ selector: 'qd-filter-item-free-text', host: { class: 'qd-filter__item-free-text' }, standalone: false, template: "<qd-input\n [value]=\"inputValue\"\n (valueChange)=\"handleValueChange($event)\"\n (enterClick)=\"handleEnter($event)\"\n [config]=\"{ placeholder: { i18n: i18n }, viewonly: false }\"\n [data-test-id]=\"testId\"\n></qd-input>\n", styles: [":host ::ng-deep qd-input{width:10.25rem;max-width:12.5rem;height:2.125rem;margin-bottom:0!important}:host ::ng-deep qd-input .qd-form-label,:host ::ng-deep qd-input .qd-form-hint{display:none}:host ::ng-deep qd-input .qd-form-label,:host ::ng-deep qd-input .qd-input-input,:host ::ng-deep qd-input .qd-form-hint{margin-bottom:0!important}:host ::ng-deep qd-input .qd-input-input{height:2.125rem!important;border-color:transparent!important}:host ::ng-deep qd-input .qd-input-input input::placeholder{color:#757575!important}:host:hover ::ng-deep qd-input .qd-input-input input::placeholder{color:#171717!important}\n"] }]
|
|
21312
21378
|
}], propDecorators: { filterId: [{
|
|
21313
21379
|
type: Input
|
|
21314
21380
|
}], isInstantFiltering: [{
|
|
@@ -21389,6 +21455,7 @@ class QdFilterItemDateComponent {
|
|
|
21389
21455
|
get dataTestId() {
|
|
21390
21456
|
return this.testId;
|
|
21391
21457
|
}
|
|
21458
|
+
datepicker;
|
|
21392
21459
|
datepickerConfig = { viewonly: false };
|
|
21393
21460
|
item;
|
|
21394
21461
|
_destroyed$ = new Subject();
|
|
@@ -21407,6 +21474,9 @@ class QdFilterItemDateComponent {
|
|
|
21407
21474
|
handleClickTimePlaceholder($event) {
|
|
21408
21475
|
this.clickTimePlaceholder.emit($event);
|
|
21409
21476
|
}
|
|
21477
|
+
open() {
|
|
21478
|
+
this.datepicker?.open();
|
|
21479
|
+
}
|
|
21410
21480
|
subscribeGetItem() {
|
|
21411
21481
|
this.filterService
|
|
21412
21482
|
.getItemById$(this.filterId, this.categoryIndex, this.itemIndex)
|
|
@@ -21414,7 +21484,7 @@ class QdFilterItemDateComponent {
|
|
|
21414
21484
|
.subscribe();
|
|
21415
21485
|
}
|
|
21416
21486
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21417
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateComponent, isStandalone: false, selector: "qd-filter-item-date", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, outputs: { clickTimePlaceholder: "clickTimePlaceholder" }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-filter__item-date" }, ngImport: i0, template: "<qd-datepicker\n [(value)]=\"item\"\n (valueChange)=\"handleDateChange($event)\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n [hasCalendarOnly]=\"true\"\n [config]=\"datepickerConfig\"\n></qd-datepicker>\n", styles: [":host qd-datepicker{padding-top:.125rem;margin-left:.25rem}:host ::ng-deep+.qd-chip.filter{margin-left:.1875rem!important}\n"], dependencies: [{ kind: "component", type: QdDatepickerComponent, selector: "qd-datepicker", inputs: ["config", "formControlName", "value", "hasCalendarOnly", "data-test-id"], outputs: ["valueChange", "clickTimePlaceholder", "clickHint", "clickReadonly", "clickViewonly"] }] });
|
|
21487
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateComponent, isStandalone: false, selector: "qd-filter-item-date", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, outputs: { clickTimePlaceholder: "clickTimePlaceholder" }, host: { properties: { "attr.data-test-id": "this.dataTestId" }, classAttribute: "qd-filter__item-date" }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: QdDatepickerComponent, descendants: true }], ngImport: i0, template: "<qd-datepicker\n [(value)]=\"item\"\n (valueChange)=\"handleDateChange($event)\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n [hasCalendarOnly]=\"true\"\n [config]=\"datepickerConfig\"\n></qd-datepicker>\n", styles: [":host qd-datepicker{padding-top:.125rem;margin-left:.25rem}:host ::ng-deep+.qd-chip.filter{margin-left:.1875rem!important}\n"], dependencies: [{ kind: "component", type: QdDatepickerComponent, selector: "qd-datepicker", inputs: ["config", "formControlName", "value", "hasCalendarOnly", "data-test-id"], outputs: ["valueChange", "clickTimePlaceholder", "clickHint", "clickReadonly", "clickViewonly"] }] });
|
|
21418
21488
|
}
|
|
21419
21489
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateComponent, decorators: [{
|
|
21420
21490
|
type: Component,
|
|
@@ -21435,6 +21505,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
21435
21505
|
}], dataTestId: [{
|
|
21436
21506
|
type: HostBinding,
|
|
21437
21507
|
args: ['attr.data-test-id']
|
|
21508
|
+
}], datepicker: [{
|
|
21509
|
+
type: ViewChild,
|
|
21510
|
+
args: [QdDatepickerComponent]
|
|
21438
21511
|
}] } });
|
|
21439
21512
|
|
|
21440
21513
|
// @ts-strict-ignore
|
|
@@ -21469,11 +21542,11 @@ class QdFilterItemDateCategoryComponent {
|
|
|
21469
21542
|
this.item$ = this.filterService.getItemById$(this.filterId, this.categoryIndex, this.itemIndex);
|
|
21470
21543
|
}
|
|
21471
21544
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21472
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateCategoryComponent, isStandalone: false, selector: "qd-filter-category-date", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-filter__category-date" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}
|
|
21545
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateCategoryComponent, isStandalone: false, selector: "qd-filter-category-date", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-filter__category-date" }, ngImport: i0, template: "<span\n class=\"qd-filter__date-label\"\n (click)=\"dateItem.open(); $event.stopPropagation()\"\n [attr.data-test-id]=\"testId + '-label'\"\n>\n {{ this.i18n$ | async | translate }} {{ \"i18n.qd.filter.date.on\" | translate }}\n</span>\n\n<qd-filter-item-date\n #dateItem\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [data-test-id]=\"testId + '-item'\"\n [timePickerConfig]=\"timePickerConfig\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n></qd-filter-item-date>\n\n<qd-chip\n *ngIf=\"(item$ | async)?.active && (item$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (item$ | async).item\"\n>\n {{ (item$ | async).item | localeDate : !!timePickerConfig : timePlaceholderSelected | async }}\n</qd-chip>\n", styles: [":host{display:flex;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;cursor:default;line-height:2.125rem}:host:hover{color:#171717}:host .qd-filter__date-label{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterItemDateComponent, selector: "qd-filter-item-date", inputs: ["filterId", "categoryIndex", "itemIndex", "timePickerConfig", "data-test-id"], outputs: ["clickTimePlaceholder"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] });
|
|
21473
21546
|
}
|
|
21474
21547
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateCategoryComponent, decorators: [{
|
|
21475
21548
|
type: Component,
|
|
21476
|
-
args: [{ selector: 'qd-filter-category-date', host: { class: 'qd-filter__category-date' }, standalone: false, template: "{{ this.i18n$ | async | translate }}
|
|
21549
|
+
args: [{ selector: 'qd-filter-category-date', host: { class: 'qd-filter__category-date' }, standalone: false, template: "<span\n class=\"qd-filter__date-label\"\n (click)=\"dateItem.open(); $event.stopPropagation()\"\n [attr.data-test-id]=\"testId + '-label'\"\n>\n {{ this.i18n$ | async | translate }} {{ \"i18n.qd.filter.date.on\" | translate }}\n</span>\n\n<qd-filter-item-date\n #dateItem\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [data-test-id]=\"testId + '-item'\"\n [timePickerConfig]=\"timePickerConfig\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n></qd-filter-item-date>\n\n<qd-chip\n *ngIf=\"(item$ | async)?.active && (item$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (item$ | async).item\"\n>\n {{ (item$ | async).item | localeDate : !!timePickerConfig : timePlaceholderSelected | async }}\n</qd-chip>\n", styles: [":host{display:flex;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;cursor:default;line-height:2.125rem}:host:hover{color:#171717}:host .qd-filter__date-label{cursor:pointer}\n"] }]
|
|
21477
21550
|
}], propDecorators: { filterId: [{
|
|
21478
21551
|
type: Input
|
|
21479
21552
|
}], categoryIndex: [{
|
|
@@ -21503,6 +21576,10 @@ class QdFilterItemDateRangeComponent {
|
|
|
21503
21576
|
get dataTestId() {
|
|
21504
21577
|
return this.testId;
|
|
21505
21578
|
}
|
|
21579
|
+
datepicker;
|
|
21580
|
+
open() {
|
|
21581
|
+
this.datepicker?.open();
|
|
21582
|
+
}
|
|
21506
21583
|
get minDate$() {
|
|
21507
21584
|
return this.filterService.getMinDate$(this.filterId, this.categoryIndex, this.itemIndex);
|
|
21508
21585
|
}
|
|
@@ -21556,7 +21633,7 @@ class QdFilterItemDateRangeComponent {
|
|
|
21556
21633
|
};
|
|
21557
21634
|
}
|
|
21558
21635
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21559
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateRangeComponent, isStandalone: false, selector: "qd-filter-item-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, outputs: { clickTimePlaceholder: "clickTimePlaceholder" }, host: { properties: { "attr.class": "this.itemClassName", "attr.data-test-id": "this.dataTestId" } }, ngImport: i0, template: "<qd-datepicker\n [config]=\"config\"\n [(value)]=\"item\"\n (valueChange)=\"handleDateChange($event)\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n [hasCalendarOnly]=\"true\"\n></qd-datepicker>\n", styles: [":host input{width:0!important;height:0!important;border:none!important}:host.qd-filter__item-date-range--0 ::ng-deep+.qd-chip.filter{margin-right:.25rem;margin-left:.1875rem!important}:host.qd-filter__item-date-range--1 ::ng-deep+.qd-chip.filter{margin-left:.1875rem!important}\n"], dependencies: [{ kind: "component", type: QdDatepickerComponent, selector: "qd-datepicker", inputs: ["config", "formControlName", "value", "hasCalendarOnly", "data-test-id"], outputs: ["valueChange", "clickTimePlaceholder", "clickHint", "clickReadonly", "clickViewonly"] }] });
|
|
21636
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateRangeComponent, isStandalone: false, selector: "qd-filter-item-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", itemIndex: "itemIndex", timePickerConfig: "timePickerConfig", testId: ["data-test-id", "testId"] }, outputs: { clickTimePlaceholder: "clickTimePlaceholder" }, host: { properties: { "attr.class": "this.itemClassName", "attr.data-test-id": "this.dataTestId" } }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: QdDatepickerComponent, descendants: true }], ngImport: i0, template: "<qd-datepicker\n [config]=\"config\"\n [(value)]=\"item\"\n (valueChange)=\"handleDateChange($event)\"\n (clickTimePlaceholder)=\"handleClickTimePlaceholder($event)\"\n [hasCalendarOnly]=\"true\"\n></qd-datepicker>\n", styles: [":host input{width:0!important;height:0!important;border:none!important}:host.qd-filter__item-date-range--0 ::ng-deep+.qd-chip.filter{margin-right:.25rem;margin-left:.1875rem!important}:host.qd-filter__item-date-range--1 ::ng-deep+.qd-chip.filter{margin-left:.1875rem!important}\n"], dependencies: [{ kind: "component", type: QdDatepickerComponent, selector: "qd-datepicker", inputs: ["config", "formControlName", "value", "hasCalendarOnly", "data-test-id"], outputs: ["valueChange", "clickTimePlaceholder", "clickHint", "clickReadonly", "clickViewonly"] }] });
|
|
21560
21637
|
}
|
|
21561
21638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateRangeComponent, decorators: [{
|
|
21562
21639
|
type: Component,
|
|
@@ -21580,6 +21657,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
21580
21657
|
}], dataTestId: [{
|
|
21581
21658
|
type: HostBinding,
|
|
21582
21659
|
args: ['attr.data-test-id']
|
|
21660
|
+
}], datepicker: [{
|
|
21661
|
+
type: ViewChild,
|
|
21662
|
+
args: [QdDatepickerComponent]
|
|
21583
21663
|
}] } });
|
|
21584
21664
|
|
|
21585
21665
|
// @ts-strict-ignore
|
|
@@ -21609,6 +21689,10 @@ class QdFilterItemDateRangeCategoryComponent {
|
|
|
21609
21689
|
? { ...this.timePickerConfig, label: { i18n: 'i18n.qd.filter.dateRange.end' } }
|
|
21610
21690
|
: undefined;
|
|
21611
21691
|
}
|
|
21692
|
+
openItem(itemRef, event) {
|
|
21693
|
+
itemRef.open();
|
|
21694
|
+
event.stopPropagation();
|
|
21695
|
+
}
|
|
21612
21696
|
removeItem(itemIndex) {
|
|
21613
21697
|
this.filterService.updateItem(this.filterId, this.categoryIndex, itemIndex, '');
|
|
21614
21698
|
this.filterService.setItemIsActive(this.filterId, this.categoryIndex, itemIndex, false);
|
|
@@ -21628,11 +21712,11 @@ class QdFilterItemDateRangeCategoryComponent {
|
|
|
21628
21712
|
this[targetMember] = this.filterService.getItemById$(this.filterId, this.categoryIndex, index);
|
|
21629
21713
|
}
|
|
21630
21714
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateRangeCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21631
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateRangeCategoryComponent, isStandalone: false, selector: "qd-filter-category-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"], timePickerConfig: "timePickerConfig" }, host: { classAttribute: "qd-filter__category-date-range" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}\n\n<span class=\"qd-filter__date-range__group\">\n <span class=\"qd-filter__item-date-range__label\">{{
|
|
21715
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemDateRangeCategoryComponent, isStandalone: false, selector: "qd-filter-category-date-range", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"], timePickerConfig: "timePickerConfig" }, host: { classAttribute: "qd-filter__category-date-range" }, ngImport: i0, template: "{{ this.i18n$ | async | translate }}\n\n<span class=\"qd-filter__date-range__group\">\n <span class=\"qd-filter__item-date-range__label\" (click)=\"openItem(fromItemRef, $event)\">{{\n \"i18n.qd.filter.dateRange.from\" | translate\n }}</span>\n\n <qd-filter-item-date-range\n #fromItemRef\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-item-date-from'\"\n [timePickerConfig]=\"fromItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleFromTimePlaceholderClicked($event)\"\n ></qd-filter-item-date-range>\n\n <qd-chip\n *ngIf=\"(fromItem$ | async)?.active && (fromItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (fromItem$ | async).item\"\n >\n {{ (fromItem$ | async).item | localeDate : !!timePickerConfig : fromItemTimePlaceholderClicked | async }}\n </qd-chip>\n</span>\n\n<span class=\"qd-filter__date-range__group\">\n <span class=\"qd-filter__item-date-range__label\" (click)=\"openItem(untilItemRef, $event)\">{{\n \"i18n.qd.filter.dateRange.until\" | translate\n }}</span>\n\n <qd-filter-item-date-range\n #untilItemRef\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-item-date-until'\"\n [timePickerConfig]=\"untilItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleUntilTimePlaceholderClicked($event)\"\n ></qd-filter-item-date-range>\n\n <qd-chip\n *ngIf=\"(untilItem$ | async)?.active && (untilItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (untilItem$ | async).item\"\n >\n {{ (untilItem$ | async).item | localeDate : !!timePickerConfig : untilItemTimePlaceholderClicked | async }}\n </qd-chip>\n</span>\n", styles: [":host{display:flex;flex-wrap:wrap;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;cursor:default;line-height:2.125rem}:host:hover{color:#171717}:host .qd-filter__item-date-range__label{margin-left:.25rem;cursor:pointer}:host .qd-filter__date-range__group{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterItemDateRangeComponent, selector: "qd-filter-item-date-range", inputs: ["filterId", "categoryIndex", "itemIndex", "timePickerConfig", "data-test-id"], outputs: ["clickTimePlaceholder"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }] });
|
|
21632
21716
|
}
|
|
21633
21717
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemDateRangeCategoryComponent, decorators: [{
|
|
21634
21718
|
type: Component,
|
|
21635
|
-
args: [{ selector: 'qd-filter-category-date-range', host: { class: 'qd-filter__category-date-range' }, standalone: false, template: "{{ this.i18n$ | async | translate }}\n\n<span class=\"qd-filter__date-range__group\">\n <span class=\"qd-filter__item-date-range__label\">{{
|
|
21719
|
+
args: [{ selector: 'qd-filter-category-date-range', host: { class: 'qd-filter__category-date-range' }, standalone: false, template: "{{ this.i18n$ | async | translate }}\n\n<span class=\"qd-filter__date-range__group\">\n <span class=\"qd-filter__item-date-range__label\" (click)=\"openItem(fromItemRef, $event)\">{{\n \"i18n.qd.filter.dateRange.from\" | translate\n }}</span>\n\n <qd-filter-item-date-range\n #fromItemRef\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-item-date-from'\"\n [timePickerConfig]=\"fromItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleFromTimePlaceholderClicked($event)\"\n ></qd-filter-item-date-range>\n\n <qd-chip\n *ngIf=\"(fromItem$ | async)?.active && (fromItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"fromItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (fromItem$ | async).item\"\n >\n {{ (fromItem$ | async).item | localeDate : !!timePickerConfig : fromItemTimePlaceholderClicked | async }}\n </qd-chip>\n</span>\n\n<span class=\"qd-filter__date-range__group\">\n <span class=\"qd-filter__item-date-range__label\" (click)=\"openItem(untilItemRef, $event)\">{{\n \"i18n.qd.filter.dateRange.until\" | translate\n }}</span>\n\n <qd-filter-item-date-range\n #untilItemRef\n [filterId]=\"filterId\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-item-date-until'\"\n [timePickerConfig]=\"untilItemTimePickerConfig\"\n (clickTimePlaceholder)=\"handleUntilTimePlaceholderClicked($event)\"\n ></qd-filter-item-date-range>\n\n <qd-chip\n *ngIf=\"(untilItem$ | async)?.active && (untilItem$ | async)?.item\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"removeItem($event)\"\n [data]=\"untilItemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + (untilItem$ | async).item\"\n >\n {{ (untilItem$ | async).item | localeDate : !!timePickerConfig : untilItemTimePlaceholderClicked | async }}\n </qd-chip>\n</span>\n", styles: [":host{display:flex;flex-wrap:wrap;align-items:center;padding-right:.75rem;padding-left:.75rem;color:#757575;cursor:default;line-height:2.125rem}:host:hover{color:#171717}:host .qd-filter__item-date-range__label{margin-left:.25rem;cursor:pointer}:host .qd-filter__date-range__group{display:flex;align-items:center}\n"] }]
|
|
21636
21720
|
}], propDecorators: { filterId: [{
|
|
21637
21721
|
type: Input
|
|
21638
21722
|
}], categoryIndex: [{
|
|
@@ -21758,6 +21842,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
21758
21842
|
|
|
21759
21843
|
class QdFilterItemSelectCategoryComponent {
|
|
21760
21844
|
filterService = inject(QdFilterService);
|
|
21845
|
+
breakpointService = inject(QdBreakpointService);
|
|
21846
|
+
isMobile$ = this.breakpointService.isViewportBelow('md');
|
|
21761
21847
|
filterId;
|
|
21762
21848
|
categoryIndex;
|
|
21763
21849
|
testId;
|
|
@@ -21769,15 +21855,34 @@ class QdFilterItemSelectCategoryComponent {
|
|
|
21769
21855
|
items;
|
|
21770
21856
|
dependsOn = [];
|
|
21771
21857
|
showSelectButton$;
|
|
21858
|
+
itemsLoading$;
|
|
21772
21859
|
positionStrategy = [
|
|
21773
21860
|
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: -1 },
|
|
21774
21861
|
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', weight: 0.8, offsetY: 1 }
|
|
21775
21862
|
];
|
|
21776
21863
|
maxFlyoutHeight = 378;
|
|
21777
21864
|
_destroyRef = inject(DestroyRef);
|
|
21865
|
+
frozenSelectedKeys = [];
|
|
21866
|
+
frozenUnselectedKeys = [];
|
|
21778
21867
|
get closeButton() {
|
|
21779
21868
|
return this.type === 'multiSelect';
|
|
21780
21869
|
}
|
|
21870
|
+
get activeItemCount() {
|
|
21871
|
+
return this.items?.filter(item => item.active).length ?? 0;
|
|
21872
|
+
}
|
|
21873
|
+
get selectedDropdownEntries() {
|
|
21874
|
+
return this.toEntries(this.frozenSelectedKeys);
|
|
21875
|
+
}
|
|
21876
|
+
get unselectedDropdownEntries() {
|
|
21877
|
+
return this.toEntries(this.frozenUnselectedKeys);
|
|
21878
|
+
}
|
|
21879
|
+
get showSelectedSeparator() {
|
|
21880
|
+
return (this.selectedDropdownEntries.some(entry => !entry.item.hidden) &&
|
|
21881
|
+
this.unselectedDropdownEntries.some(entry => !entry.item.hidden));
|
|
21882
|
+
}
|
|
21883
|
+
get hasNoVisibleItems() {
|
|
21884
|
+
return (this.items ?? []).every(item => item.hidden);
|
|
21885
|
+
}
|
|
21781
21886
|
get buttonClassName() {
|
|
21782
21887
|
return `
|
|
21783
21888
|
qd-filter__category-button
|
|
@@ -21796,9 +21901,11 @@ class QdFilterItemSelectCategoryComponent {
|
|
|
21796
21901
|
this.initCategorySubscription();
|
|
21797
21902
|
this.initItemsSubscription();
|
|
21798
21903
|
this.initShowSelectButton();
|
|
21904
|
+
this.itemsLoading$ = this.filterService.getItemsLoading$(this.filterId, this.categoryIndex);
|
|
21799
21905
|
}
|
|
21800
21906
|
onLayerOpened() {
|
|
21801
21907
|
this.open = true;
|
|
21908
|
+
this.freezeDropdownOrder();
|
|
21802
21909
|
}
|
|
21803
21910
|
onLayerClosed() {
|
|
21804
21911
|
this.open = false;
|
|
@@ -21810,6 +21917,27 @@ class QdFilterItemSelectCategoryComponent {
|
|
|
21810
21917
|
this.filterService.setItemIsActive(this.filterId, this.categoryIndex, itemIndex, false);
|
|
21811
21918
|
this.filterService.resetCategoryFilter(this.filterId, this.categoryIndex);
|
|
21812
21919
|
}
|
|
21920
|
+
clearAll() {
|
|
21921
|
+
this.filterService.clearCategorySelection(this.filterId, this.categoryIndex);
|
|
21922
|
+
this.filterService.resetCategoryFilter(this.filterId, this.categoryIndex);
|
|
21923
|
+
}
|
|
21924
|
+
trackByItem(_index, entry) {
|
|
21925
|
+
return entry.item.item;
|
|
21926
|
+
}
|
|
21927
|
+
freezeDropdownOrder() {
|
|
21928
|
+
const items = this.items ?? [];
|
|
21929
|
+
this.frozenSelectedKeys = items.filter(item => item.active).map(item => item.item);
|
|
21930
|
+
this.frozenUnselectedKeys = items.filter(item => !item.active).map(item => item.item);
|
|
21931
|
+
}
|
|
21932
|
+
toEntries(keys) {
|
|
21933
|
+
const items = this.items ?? [];
|
|
21934
|
+
return keys
|
|
21935
|
+
.map(key => {
|
|
21936
|
+
const itemIndex = items.findIndex(item => item.item === key);
|
|
21937
|
+
return { item: items[itemIndex], itemIndex };
|
|
21938
|
+
})
|
|
21939
|
+
.filter(entry => !!entry.item);
|
|
21940
|
+
}
|
|
21813
21941
|
changeValue($event) {
|
|
21814
21942
|
this.filterService.hideShowItems(this.filterId, this.categoryIndex, $event);
|
|
21815
21943
|
this.filterService.setCategoryFilter(this.filterId, this.categoryIndex, $event);
|
|
@@ -21829,7 +21957,19 @@ class QdFilterItemSelectCategoryComponent {
|
|
|
21829
21957
|
this.filterService
|
|
21830
21958
|
.getItems$(this.filterId, this.categoryIndex)
|
|
21831
21959
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
21832
|
-
.subscribe(items =>
|
|
21960
|
+
.subscribe(items => {
|
|
21961
|
+
const itemSetChanged = !this.haveSameItemKeys(this.items, items);
|
|
21962
|
+
this.items = items;
|
|
21963
|
+
if (this.open && itemSetChanged)
|
|
21964
|
+
this.freezeDropdownOrder();
|
|
21965
|
+
this.popoverDirective?.updatePosition();
|
|
21966
|
+
});
|
|
21967
|
+
}
|
|
21968
|
+
haveSameItemKeys(previous, next) {
|
|
21969
|
+
const previousItems = previous ?? [];
|
|
21970
|
+
const nextItems = next ?? [];
|
|
21971
|
+
return (previousItems.length === nextItems.length &&
|
|
21972
|
+
previousItems.every((item, index) => item.item === nextItems[index].item));
|
|
21833
21973
|
}
|
|
21834
21974
|
initShowSelectButton() {
|
|
21835
21975
|
const category$ = this.filterService
|
|
@@ -21851,11 +21991,11 @@ class QdFilterItemSelectCategoryComponent {
|
|
|
21851
21991
|
}));
|
|
21852
21992
|
}
|
|
21853
21993
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemSelectCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21854
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemSelectCategoryComponent, isStandalone: false, selector: "qd-filter-category-select", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-filter__category-select" }, viewQueries: [{ propertyName: "popoverDirective", first: true, predicate: QdPopoverOnClickDirective, descendants: true }], ngImport: i0, template: "<div\n *ngIf=\"showSelectButton$ | async\"\n [class]=\"buttonClassName\"\n [qdPopoverOnClick]=\"filterLayer\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMaxHeight]=\"maxFlyoutHeight\"\n [positionStrategy]=\"positionStrategy\"\n (opened)=\"onLayerOpened()\"\n (closed)=\"onLayerClosed()\"\n [attr.data-test-id]=\"testId + '-select-button'\"\n>\n <qd-icon\n *ngIf=\"!open\"\n [icon]=\"'ctrlDown'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--closed'\"\n [attr.data-test-id]=\"testId + '-closed'\"\n ></qd-icon>\n <qd-icon\n *ngIf=\"open\"\n [icon]=\"'ctrlTop'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--open'\"\n [attr.data-test-id]=\"testId + '-opened'\"\n ></qd-icon>\n\n <div class=\"qd-filter__category-button-caption\">\n <span>\n {{ i18n | translate }}\n </span>\n </div>\n\n <ng-container *ngTemplateOutlet=\"SelectedChip\"></ng-container>\n</div>\n\n<ng-template #filterLayer>\n <div [class]=\"layerContentClassName\">\n <qd-icon\n *ngIf=\"closeButton\"\n [class]=\"'qd-filter__category-layer-close'\"\n (click)=\"closeLayer()\"\n [icon]=\"'
|
|
21994
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdFilterItemSelectCategoryComponent, isStandalone: false, selector: "qd-filter-category-select", inputs: { filterId: "filterId", categoryIndex: "categoryIndex", testId: ["data-test-id", "testId"] }, host: { classAttribute: "qd-filter__category-select" }, viewQueries: [{ propertyName: "popoverDirective", first: true, predicate: QdPopoverOnClickDirective, descendants: true }], ngImport: i0, template: "<div\n *ngIf=\"showSelectButton$ | async\"\n [class]=\"buttonClassName\"\n [qdPopoverOnClick]=\"filterLayer\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMaxHeight]=\"maxFlyoutHeight\"\n [positionStrategy]=\"positionStrategy\"\n (opened)=\"onLayerOpened()\"\n (closed)=\"onLayerClosed()\"\n [attr.data-test-id]=\"testId + '-select-button'\"\n>\n <qd-icon\n *ngIf=\"!open\"\n [icon]=\"'ctrlDown'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--closed'\"\n [attr.data-test-id]=\"testId + '-closed'\"\n ></qd-icon>\n <qd-icon\n *ngIf=\"open\"\n [icon]=\"'ctrlTop'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--open'\"\n [attr.data-test-id]=\"testId + '-opened'\"\n ></qd-icon>\n\n <div class=\"qd-filter__category-button-caption\">\n <span>\n {{ i18n | translate }}\n </span>\n </div>\n\n <ng-container *ngIf=\"(isMobile$ | async) && type === 'multiSelect'; else desktopChips\">\n <qd-chip\n *ngIf=\"activeItemCount > 0\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"clearAll()\"\n [data-test-id]=\"testId + '-selected-chip-count'\"\n >{{ activeItemCount }}</qd-chip\n >\n </ng-container>\n <ng-template #desktopChips>\n <ng-container *ngTemplateOutlet=\"SelectedChip\"></ng-container>\n </ng-template>\n</div>\n\n<ng-template #filterLayer>\n <div [class]=\"layerContentClassName\">\n <qd-icon\n *ngIf=\"closeButton\"\n [class]=\"'qd-filter__category-layer-close'\"\n (click)=\"closeLayer()\"\n [icon]=\"'ctrlTop'\"\n [attr.data-test-id]=\"testId + '-layer-close'\"\n ></qd-icon>\n\n <ng-container *ngIf=\"itemsLoading$ | async; else categoryContent\" [ngTemplateOutlet]=\"loadingState\"></ng-container>\n\n <ng-template #categoryContent>\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'multiSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <div class=\"qd-filter__category-layer-items\">\n <ng-container\n *ngFor=\"let entry of selectedDropdownEntries; trackBy: trackByItem\"\n [ngTemplateOutlet]=\"multiSelectItem\"\n [ngTemplateOutletContext]=\"{ item: entry.item, itemIndex: entry.itemIndex }\"\n ></ng-container>\n\n <div\n *ngIf=\"showSelectedSeparator\"\n class=\"qd-filter__category-layer-separator\"\n [attr.data-test-id]=\"testId + '-selected-separator'\"\n ></div>\n\n <ng-container\n *ngFor=\"let entry of unselectedDropdownEntries; trackBy: trackByItem\"\n [ngTemplateOutlet]=\"multiSelectItem\"\n [ngTemplateOutletContext]=\"{ item: entry.item, itemIndex: entry.itemIndex }\"\n ></ng-container>\n\n <ng-container *ngIf=\"hasNoVisibleItems\" [ngTemplateOutlet]=\"emptyState\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'singleSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <div class=\"qd-filter__category-layer-items\">\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <qd-filter-item-single-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n (closeEventEmitter)=\"closeLayer()\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n >\n </qd-filter-item-single-select>\n </ng-container>\n\n <ng-container *ngIf=\"hasNoVisibleItems\" [ngTemplateOutlet]=\"emptyState\"></ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #emptyState>\n <p class=\"qd-filter__category-layer-empty\" [attr.data-test-id]=\"testId + '-no-results'\">\n {{ \"i18n.qd.filter.noResults\" | translate }}\n </p>\n</ng-template>\n\n<ng-template #loadingState>\n <p class=\"qd-filter__category-layer-loading\" [attr.data-test-id]=\"testId + '-items-loading'\">\n {{ \"i18n.qd.filter.loading\" | translate }}\n </p>\n</ng-template>\n\n<ng-template #multiSelectItem let-item=\"item\" let-itemIndex=\"itemIndex\">\n <qd-filter-item-multi-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n ></qd-filter-item-multi-select>\n</ng-template>\n\n<ng-template #SelectedChip>\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <!-- TODO: Add tooltip-->\n <qd-chip\n *ngIf=\"item.active\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"close($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + item.item\"\n >{{ item.i18n | translate }}</qd-chip\n >\n </ng-container>\n</ng-template>\n", styles: ["::ng-deep .qd-filter__category-layer{position:relative;display:flex;overflow:hidden;min-width:16.25rem;max-width:56.25rem;height:100%;flex-direction:column;padding:0;border:.0625rem solid rgb(151,151,151);background:#fff;box-shadow:#d5d5d5 .125rem .25rem .4375rem}::ng-deep .qd-filter__category-layer .qd-filter-form-items__filter{flex-shrink:0;margin-bottom:0}::ng-deep .qd-filter__category-layer .qd-checkbox__label{display:flex;height:2.5rem}::ng-deep .qd-filter__category-layer .qd-checkbox__indicator,::ng-deep .qd-filter__category-layer .qd-radio-buttons__indicator{transform:translateY(-.0625rem)}::ng-deep .qd-filter__category-layer-items{flex:1;overflow-y:auto}::ng-deep .qd-filter__category-layer-separator{height:.0625rem;flex-shrink:0;background:#d5d5d5}::ng-deep .qd-filter__category-layer-empty,::ng-deep .qd-filter__category-layer-loading{padding:0 .9375rem;margin:0;color:#757575;font-size:.875rem;line-height:2.5rem}::ng-deep .qd-filter__category-layer-container{position:relative}::ng-deep .qd-filter__category-layer-close{position:absolute;z-index:1;top:.5rem;right:1rem;color:#757575;cursor:pointer}::ng-deep .qd-filter__category-layer-close:before{position:absolute;content:\"\";inset:-.5rem}::ng-deep .qd-filter__category-layer-close:hover,::ng-deep .qd-filter__category-layer-close:focus{color:#171717}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: QdChipComponent, selector: "qd-chip", inputs: ["state", "close", "data", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: QdFilterFormItemsComponent, selector: "qd-filter-form-items", inputs: ["inputFilterValue", "data-test-id"], outputs: ["filterValueChange"] }, { kind: "component", type: QdIconComponent, selector: "qd-icon", inputs: ["icon", "status"] }, { kind: "directive", type: QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: QdFilterItemMultiSelectComponent, selector: "qd-filter-item-multi-select", inputs: ["filterId", "categoryIndex", "itemIndex", "data-test-id"] }, { kind: "component", type: QdFilterItemSingleSelectComponent, selector: "qd-filter-item-single-select", inputs: ["filterId", "categoryIndex", "itemIndex", "data-test-id"], outputs: ["closeEventEmitter"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
21855
21995
|
}
|
|
21856
21996
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdFilterItemSelectCategoryComponent, decorators: [{
|
|
21857
21997
|
type: Component,
|
|
21858
|
-
args: [{ selector: 'qd-filter-category-select', host: { class: 'qd-filter__category-select' }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div\n *ngIf=\"showSelectButton$ | async\"\n [class]=\"buttonClassName\"\n [qdPopoverOnClick]=\"filterLayer\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMaxHeight]=\"maxFlyoutHeight\"\n [positionStrategy]=\"positionStrategy\"\n (opened)=\"onLayerOpened()\"\n (closed)=\"onLayerClosed()\"\n [attr.data-test-id]=\"testId + '-select-button'\"\n>\n <qd-icon\n *ngIf=\"!open\"\n [icon]=\"'ctrlDown'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--closed'\"\n [attr.data-test-id]=\"testId + '-closed'\"\n ></qd-icon>\n <qd-icon\n *ngIf=\"open\"\n [icon]=\"'ctrlTop'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--open'\"\n [attr.data-test-id]=\"testId + '-opened'\"\n ></qd-icon>\n\n <div class=\"qd-filter__category-button-caption\">\n <span>\n {{ i18n | translate }}\n </span>\n </div>\n\n <ng-container *ngTemplateOutlet=\"SelectedChip\"></ng-container>\n</div>\n\n<ng-template #filterLayer>\n <div [class]=\"layerContentClassName\">\n <qd-icon\n *ngIf=\"closeButton\"\n [class]=\"'qd-filter__category-layer-close'\"\n (click)=\"closeLayer()\"\n [icon]=\"'
|
|
21998
|
+
args: [{ selector: 'qd-filter-category-select', host: { class: 'qd-filter__category-select' }, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div\n *ngIf=\"showSelectButton$ | async\"\n [class]=\"buttonClassName\"\n [qdPopoverOnClick]=\"filterLayer\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverStopPropagation]=\"true\"\n [qdPopoverMaxHeight]=\"maxFlyoutHeight\"\n [positionStrategy]=\"positionStrategy\"\n (opened)=\"onLayerOpened()\"\n (closed)=\"onLayerClosed()\"\n [attr.data-test-id]=\"testId + '-select-button'\"\n>\n <qd-icon\n *ngIf=\"!open\"\n [icon]=\"'ctrlDown'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--closed'\"\n [attr.data-test-id]=\"testId + '-closed'\"\n ></qd-icon>\n <qd-icon\n *ngIf=\"open\"\n [icon]=\"'ctrlTop'\"\n [class]=\"'qd-filter__category-icon qd-filter__category-icon--open'\"\n [attr.data-test-id]=\"testId + '-opened'\"\n ></qd-icon>\n\n <div class=\"qd-filter__category-button-caption\">\n <span>\n {{ i18n | translate }}\n </span>\n </div>\n\n <ng-container *ngIf=\"(isMobile$ | async) && type === 'multiSelect'; else desktopChips\">\n <qd-chip\n *ngIf=\"activeItemCount > 0\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"clearAll()\"\n [data-test-id]=\"testId + '-selected-chip-count'\"\n >{{ activeItemCount }}</qd-chip\n >\n </ng-container>\n <ng-template #desktopChips>\n <ng-container *ngTemplateOutlet=\"SelectedChip\"></ng-container>\n </ng-template>\n</div>\n\n<ng-template #filterLayer>\n <div [class]=\"layerContentClassName\">\n <qd-icon\n *ngIf=\"closeButton\"\n [class]=\"'qd-filter__category-layer-close'\"\n (click)=\"closeLayer()\"\n [icon]=\"'ctrlTop'\"\n [attr.data-test-id]=\"testId + '-layer-close'\"\n ></qd-icon>\n\n <ng-container *ngIf=\"itemsLoading$ | async; else categoryContent\" [ngTemplateOutlet]=\"loadingState\"></ng-container>\n\n <ng-template #categoryContent>\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'multiSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <div class=\"qd-filter__category-layer-items\">\n <ng-container\n *ngFor=\"let entry of selectedDropdownEntries; trackBy: trackByItem\"\n [ngTemplateOutlet]=\"multiSelectItem\"\n [ngTemplateOutletContext]=\"{ item: entry.item, itemIndex: entry.itemIndex }\"\n ></ng-container>\n\n <div\n *ngIf=\"showSelectedSeparator\"\n class=\"qd-filter__category-layer-separator\"\n [attr.data-test-id]=\"testId + '-selected-separator'\"\n ></div>\n\n <ng-container\n *ngFor=\"let entry of unselectedDropdownEntries; trackBy: trackByItem\"\n [ngTemplateOutlet]=\"multiSelectItem\"\n [ngTemplateOutletContext]=\"{ item: entry.item, itemIndex: entry.itemIndex }\"\n ></ng-container>\n\n <ng-container *ngIf=\"hasNoVisibleItems\" [ngTemplateOutlet]=\"emptyState\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'singleSelect'\">\n <qd-filter-form-items\n *ngIf=\"filter\"\n [inputFilterValue]=\"filterCategoryValue$ | async\"\n (filterValueChange)=\"changeValue($event)\"\n [data-test-id]=\"testId\"\n ></qd-filter-form-items>\n\n <div class=\"qd-filter__category-layer-items\">\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <qd-filter-item-single-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n (closeEventEmitter)=\"closeLayer()\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n >\n </qd-filter-item-single-select>\n </ng-container>\n\n <ng-container *ngIf=\"hasNoVisibleItems\" [ngTemplateOutlet]=\"emptyState\"></ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #emptyState>\n <p class=\"qd-filter__category-layer-empty\" [attr.data-test-id]=\"testId + '-no-results'\">\n {{ \"i18n.qd.filter.noResults\" | translate }}\n </p>\n</ng-template>\n\n<ng-template #loadingState>\n <p class=\"qd-filter__category-layer-loading\" [attr.data-test-id]=\"testId + '-items-loading'\">\n {{ \"i18n.qd.filter.loading\" | translate }}\n </p>\n</ng-template>\n\n<ng-template #multiSelectItem let-item=\"item\" let-itemIndex=\"itemIndex\">\n <qd-filter-item-multi-select\n *ngIf=\"!item.hidden\"\n [categoryIndex]=\"categoryIndex\"\n [itemIndex]=\"itemIndex\"\n [filterId]=\"filterId\"\n [data-test-id]=\"testId + '-item-' + itemIndex + '-' + item.item\"\n ></qd-filter-item-multi-select>\n</ng-template>\n\n<ng-template #SelectedChip>\n <ng-container *ngFor=\"let item of items; let itemIndex = index\">\n <!-- TODO: Add tooltip-->\n <qd-chip\n *ngIf=\"item.active\"\n [state]=\"'filter'\"\n [close]=\"true\"\n (closeClickEmitter)=\"close($event)\"\n [data]=\"itemIndex\"\n [data-test-id]=\"testId + '-selected-chip-' + item.item\"\n >{{ item.i18n | translate }}</qd-chip\n >\n </ng-container>\n</ng-template>\n", styles: ["::ng-deep .qd-filter__category-layer{position:relative;display:flex;overflow:hidden;min-width:16.25rem;max-width:56.25rem;height:100%;flex-direction:column;padding:0;border:.0625rem solid rgb(151,151,151);background:#fff;box-shadow:#d5d5d5 .125rem .25rem .4375rem}::ng-deep .qd-filter__category-layer .qd-filter-form-items__filter{flex-shrink:0;margin-bottom:0}::ng-deep .qd-filter__category-layer .qd-checkbox__label{display:flex;height:2.5rem}::ng-deep .qd-filter__category-layer .qd-checkbox__indicator,::ng-deep .qd-filter__category-layer .qd-radio-buttons__indicator{transform:translateY(-.0625rem)}::ng-deep .qd-filter__category-layer-items{flex:1;overflow-y:auto}::ng-deep .qd-filter__category-layer-separator{height:.0625rem;flex-shrink:0;background:#d5d5d5}::ng-deep .qd-filter__category-layer-empty,::ng-deep .qd-filter__category-layer-loading{padding:0 .9375rem;margin:0;color:#757575;font-size:.875rem;line-height:2.5rem}::ng-deep .qd-filter__category-layer-container{position:relative}::ng-deep .qd-filter__category-layer-close{position:absolute;z-index:1;top:.5rem;right:1rem;color:#757575;cursor:pointer}::ng-deep .qd-filter__category-layer-close:before{position:absolute;content:\"\";inset:-.5rem}::ng-deep .qd-filter__category-layer-close:hover,::ng-deep .qd-filter__category-layer-close:focus{color:#171717}\n"] }]
|
|
21859
21999
|
}], propDecorators: { filterId: [{
|
|
21860
22000
|
type: Input
|
|
21861
22001
|
}], categoryIndex: [{
|
|
@@ -22106,11 +22246,17 @@ class QdDependentFiltersService {
|
|
|
22106
22246
|
return this.categories.filter(category => category.hasOwnProperty('dependsOn'));
|
|
22107
22247
|
}
|
|
22108
22248
|
resolveItemsWhenDependsOnCategoriesChange(dependentCategory) {
|
|
22249
|
+
const dependentCategoryIndex = this.categories.indexOf(dependentCategory);
|
|
22109
22250
|
return combineLatest(dependentCategory.dependsOn.map(dependsOnCategory => this.filterService.getCategoryById$(this.filterId, this.categories.findIndex(({ category }) => category === dependsOnCategory)))).pipe(distinctUntilChanged(isEqual), switchMap(parentCategories => {
|
|
22110
22251
|
const allParentsActive = parentCategories.every((parent) => Array.isArray(parent.items) && parent.items.some(item => item.active));
|
|
22111
|
-
if (!allParentsActive)
|
|
22252
|
+
if (!allParentsActive) {
|
|
22253
|
+
this.filterService.setItemsLoading(this.filterId, dependentCategoryIndex, false);
|
|
22112
22254
|
return of([]);
|
|
22113
|
-
|
|
22255
|
+
}
|
|
22256
|
+
this.filterService.setItemsLoading(this.filterId, dependentCategoryIndex, true);
|
|
22257
|
+
return dependentCategory
|
|
22258
|
+
.itemsResolver(parentCategories)
|
|
22259
|
+
.pipe(tap$1(() => this.filterService.setItemsLoading(this.filterId, dependentCategoryIndex, false)));
|
|
22114
22260
|
}));
|
|
22115
22261
|
}
|
|
22116
22262
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdDependentFiltersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -22122,43 +22268,123 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
22122
22268
|
|
|
22123
22269
|
// @ts-strict-ignore
|
|
22124
22270
|
/**
|
|
22125
|
-
*
|
|
22271
|
+
* **QdFilterComponent** lets users build and apply a filter with several categories over a data set.
|
|
22272
|
+
*
|
|
22273
|
+
* #### **Features**
|
|
22274
|
+
*
|
|
22275
|
+
* - **Category types**: single and multi select dropdowns, a boolean toggle, date and date-time pickers, date and date-time ranges, and free text. A select dropdown can also show a filter field that narrows the item list.
|
|
22276
|
+
* - **Outputs**: react to the applied selection through the query-string and post-body outputs, or read the current selection at any time.
|
|
22277
|
+
* - **Multi-staging**: chain categories so one stage loads its items from the selection of another.
|
|
22278
|
+
* - **URL sync**: the selection is kept in the URL, so a view can be shared, bookmarked, and reopened.
|
|
22279
|
+
*
|
|
22280
|
+
* #### **Quick start**
|
|
22281
|
+
*
|
|
22282
|
+
* **1. Add the filter to the template**
|
|
22283
|
+
*
|
|
22284
|
+
* ```html
|
|
22285
|
+
* <qd-filter
|
|
22286
|
+
* [filterData]="myFilterConfig"
|
|
22287
|
+
* (queryStringOutput)="callBackendWithQueryString($event)"
|
|
22288
|
+
* (postBodyOutput)="callBackendWithResultObject($event)"
|
|
22289
|
+
* ></qd-filter>
|
|
22290
|
+
* ```
|
|
22291
|
+
*
|
|
22292
|
+
* **2. Define the config in your component**
|
|
22293
|
+
*
|
|
22294
|
+
* ```typescript
|
|
22295
|
+
* myFilterConfig: QdFilterConfigData = {
|
|
22296
|
+
* categories: [
|
|
22297
|
+
* {
|
|
22298
|
+
* type: 'singleSelect',
|
|
22299
|
+
* category: 'controlObject',
|
|
22300
|
+
* i18n: 'i18n.my.category.controlObject',
|
|
22301
|
+
* items: [
|
|
22302
|
+
* { item: 'vehicle', i18n: 'i18n.my.item.vehicle', active: true },
|
|
22303
|
+
* { item: 'article', i18n: 'i18n.my.item.article' }
|
|
22304
|
+
* ],
|
|
22305
|
+
* filter: true
|
|
22306
|
+
* },
|
|
22307
|
+
* {
|
|
22308
|
+
* type: 'multiSelect',
|
|
22309
|
+
* category: 'enrollmentCountry',
|
|
22310
|
+
* i18n: 'i18n.my.category.enrollmentCountry',
|
|
22311
|
+
* items: [
|
|
22312
|
+
* { item: 'de', i18n: 'i18n.my.item.de' },
|
|
22313
|
+
* { item: 'ch', i18n: 'i18n.my.item.ch' }
|
|
22314
|
+
* ]
|
|
22315
|
+
* }
|
|
22316
|
+
* ],
|
|
22317
|
+
* uid: 'overview-filter'
|
|
22318
|
+
* };
|
|
22319
|
+
* ```
|
|
22320
|
+
*
|
|
22321
|
+
* The `filterData` input is the only configuration. It holds the categories and the behavior flags.
|
|
22126
22322
|
*
|
|
22127
|
-
*
|
|
22128
|
-
* - **Filter**: Name of the component.
|
|
22129
|
-
* - **Categories**: A list of one or more different categories.
|
|
22130
|
-
* - **Items**: A list with one or more items belongs to a parent category.
|
|
22323
|
+
* #### **Category types**
|
|
22131
22324
|
*
|
|
22132
|
-
*
|
|
22325
|
+
* A category sets its type to one of: singleSelect, multiSelect, boolean, date, dateTime,
|
|
22326
|
+
* dateRange, dateTimeRange or freeText. Single and multi select show a dropdown, boolean is a
|
|
22327
|
+
* toggle, the date types open a picker (the date-time variants add a time picker), and free text
|
|
22328
|
+
* is a text field applied on enter.
|
|
22133
22329
|
*
|
|
22134
|
-
*
|
|
22135
|
-
*
|
|
22136
|
-
* the applied filters as an url string with an encoded *filter* parameter. The `(postBodyOutput)`
|
|
22137
|
-
* yields an object containing the categories and active items.
|
|
22330
|
+
* On a single or multi select you can add a filter field above the items with `filter: true` to
|
|
22331
|
+
* narrow the item list. It has no effect on the other types.
|
|
22138
22332
|
*
|
|
22139
|
-
*
|
|
22140
|
-
* filter component methods `getCurrentQueryString`, `getCurrentFilterUrlParameterString` and `getCurrentPostBody`.
|
|
22333
|
+
* #### **Filter selection**
|
|
22141
22334
|
*
|
|
22142
|
-
*
|
|
22335
|
+
* Listen to the outputs to react when the user applies the filter. The query-string output gives
|
|
22336
|
+
* the selection as a URL string (for example filter=...); the post-body output gives it as an
|
|
22337
|
+
* object with the active categories and their values.
|
|
22143
22338
|
*
|
|
22144
|
-
*
|
|
22145
|
-
*
|
|
22339
|
+
* The outputs fire when the user applies the filter, on reset (only when a preselection exists),
|
|
22340
|
+
* when the last active item is removed, and on load if a category starts active.
|
|
22146
22341
|
*
|
|
22147
|
-
*
|
|
22342
|
+
* To read the selection without waiting for an apply, call `getCurrentQueryString` or
|
|
22343
|
+
* `getCurrentPostBody`, or subscribe to `getFilterChanges$` for a continuous stream.
|
|
22148
22344
|
*
|
|
22149
|
-
*
|
|
22150
|
-
* other filters. In the `dependsOn` property you set the names of the filter categories the category depends on.
|
|
22151
|
-
* Always when one of these categories change the `itemsResolver` will be called with the list
|
|
22152
|
-
* of categories given in `dependsOn`. The `itemsResolver` can also be defined in the config where `dependsOn`
|
|
22153
|
-
* is also defined.
|
|
22345
|
+
* #### **Multi-staging filters**
|
|
22154
22346
|
*
|
|
22155
|
-
*
|
|
22156
|
-
* the
|
|
22347
|
+
* To chain categories, give one a `dependsOn` list and an `itemsResolver`. In `dependsOn` you
|
|
22348
|
+
* name the parent categories. The resolver receives the active parents and returns the items for
|
|
22349
|
+
* this stage.
|
|
22157
22350
|
*
|
|
22158
|
-
*
|
|
22351
|
+
* ```typescript
|
|
22352
|
+
* const cityCategory: QdDependentFilterCategory = {
|
|
22353
|
+
* type: 'multiSelect',
|
|
22354
|
+
* category: 'city',
|
|
22355
|
+
* i18n: 'i18n.my.category.city',
|
|
22356
|
+
* dependsOn: ['country'],
|
|
22357
|
+
* itemsResolver: ([country]) =>
|
|
22358
|
+
* loadCitiesFor(country.items.filter(item => item.active)),
|
|
22359
|
+
* filter: true
|
|
22360
|
+
* };
|
|
22361
|
+
* ```
|
|
22362
|
+
*
|
|
22363
|
+
* The stage appears once every parent has an active item. While its items load, the open
|
|
22364
|
+
* dropdown shows a loading text instead of the list. If the resolver returns nothing, the list
|
|
22365
|
+
* stays empty. Multi-staging works only for single and multi select categories.
|
|
22366
|
+
*
|
|
22367
|
+
* #### **URL synchronization**
|
|
22159
22368
|
*
|
|
22160
|
-
*
|
|
22369
|
+
* The filter keeps its selection in the URL filter parameter: it is saved when the selection
|
|
22370
|
+
* changes and read back when the page opens, so a user can share or bookmark the URL and return
|
|
22371
|
+
* to the same filter.
|
|
22161
22372
|
*
|
|
22373
|
+
* This is on by default. With more than one filter in a view, only one may own the URL, so set
|
|
22374
|
+
* `connectWithRouter` to false on every other filter.
|
|
22375
|
+
*
|
|
22376
|
+
* #### **Preserve filter state**
|
|
22377
|
+
*
|
|
22378
|
+
* Give the config a stable `uid` to keep the selection while the user moves around the app, for
|
|
22379
|
+
* example from an overview to a detail page and back. The selection is restored the next time a
|
|
22380
|
+
* filter with the same `uid` is shown.
|
|
22381
|
+
*
|
|
22382
|
+
* #### **Reset behavior**
|
|
22383
|
+
*
|
|
22384
|
+
* An item set to active is a preselection. The reset button reads "Reset" when there is no
|
|
22385
|
+
* preselection, and "Back to preselection" when the config starts with active items. It restores
|
|
22386
|
+
* the initial state. With instant filtering (`isInstantFiltering`) the apply and reset buttons
|
|
22387
|
+
* are hidden and the filter applies on every change.
|
|
22162
22388
|
*/
|
|
22163
22389
|
class QdFilterComponent {
|
|
22164
22390
|
filterService = inject(QdFilterService);
|
|
@@ -30190,8 +30416,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
30190
30416
|
/**
|
|
30191
30417
|
* **QdPageTabHeader* renders the header of a single tab. It is used quadrel-internally.
|
|
30192
30418
|
*/
|
|
30193
|
-
class QdPageTabHeaderComponent
|
|
30194
|
-
STEP_STATE = STEP_STATE;
|
|
30419
|
+
class QdPageTabHeaderComponent {
|
|
30195
30420
|
/** State of the given tab. */
|
|
30196
30421
|
state;
|
|
30197
30422
|
/** Label of the given tab. */
|
|
@@ -30208,24 +30433,21 @@ class QdPageTabHeaderComponent extends CdkStepHeader {
|
|
|
30208
30433
|
* A static test ID for integration tests can be set.
|
|
30209
30434
|
*/
|
|
30210
30435
|
testId;
|
|
30211
|
-
constructor() {
|
|
30212
|
-
const elementRef = inject(ElementRef);
|
|
30213
|
-
super(elementRef);
|
|
30214
|
-
}
|
|
30215
30436
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30216
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabHeaderComponent, isStandalone: true, selector: "qd-page-tab-header", inputs: { state: "state", label: "label", counters: "counters", index: "index", isSelected: "isSelected", isDisabled: "isDisabled", testId: ["data-test-id", "testId"] }, host: { properties: { "attr.data-test-id": "testId", "class.qd-tab-current": "isSelected && !isDisabled", "class.qd-tab-disabled": "isDisabled", "class.qd-tab-done": "state ===
|
|
30437
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabHeaderComponent, isStandalone: true, selector: "qd-page-tab-header", inputs: { state: "state", label: "label", counters: "counters", index: "index", isSelected: "isSelected", isDisabled: "isDisabled", testId: ["data-test-id", "testId"] }, host: { attributes: { "role": "tab" }, properties: { "attr.data-test-id": "testId", "class.qd-tab-current": "isSelected && !isDisabled", "class.qd-tab-disabled": "isDisabled", "class.qd-tab-done": "state === 'done'", "class.qd-tab-edit": "state === 'edit'", "class.qd-tab-error": "state === 'error'" } }, ngImport: i0, template: "<span class=\"qd-tab-caption\">\n {{ label }}\n <qd-page-tab-header-counters [counters]=\"counters\" [data-test-id]=\"testId + '-counters'\" />\n</span>\n", styles: [":host{position:relative;display:inline-flex;height:2.5rem;padding:.625rem 0;cursor:pointer;color:#757575;font-size:14px;font-weight:400;line-height:18px}:host .qd-tab-caption{font-weight:500;white-space:nowrap}:host:hover,:host.qd-tab-current{color:#069}:host.qd-tab-current .qd-tab-caption{position:relative}:host.qd-tab-current .qd-tab-caption:after{position:absolute;bottom:-.6875rem;left:0;display:inline-block;width:100%;height:.25rem;background-color:#069;content:\"\"}:host.qd-tab-done,:host.qd-tab-edit{color:#171717}:host.qd-tab-error{color:#c70023}:host.qd-tab-disabled{color:#b4b4b4;cursor:default}:host.qd-tab-disabled:hover{color:#b4b4b4}\n"], dependencies: [{ kind: "component", type: QdPageTabHeaderCountersComponent, selector: "qd-page-tab-header-counters", inputs: ["counters", "data-test-id"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
30217
30438
|
}
|
|
30218
30439
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabHeaderComponent, decorators: [{
|
|
30219
30440
|
type: Component,
|
|
30220
30441
|
args: [{ selector: 'qd-page-tab-header', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
30221
30442
|
'[attr.data-test-id]': 'testId',
|
|
30443
|
+
role: 'tab',
|
|
30222
30444
|
'[class.qd-tab-current]': 'isSelected && !isDisabled',
|
|
30223
30445
|
'[class.qd-tab-disabled]': 'isDisabled',
|
|
30224
|
-
'[class.qd-tab-done]':
|
|
30225
|
-
'[class.qd-tab-edit]':
|
|
30226
|
-
'[class.qd-tab-error]':
|
|
30446
|
+
'[class.qd-tab-done]': "state === 'done'",
|
|
30447
|
+
'[class.qd-tab-edit]': "state === 'edit'",
|
|
30448
|
+
'[class.qd-tab-error]': "state === 'error'"
|
|
30227
30449
|
}, standalone: true, imports: [QdPageTabHeaderCountersComponent], template: "<span class=\"qd-tab-caption\">\n {{ label }}\n <qd-page-tab-header-counters [counters]=\"counters\" [data-test-id]=\"testId + '-counters'\" />\n</span>\n", styles: [":host{position:relative;display:inline-flex;height:2.5rem;padding:.625rem 0;cursor:pointer;color:#757575;font-size:14px;font-weight:400;line-height:18px}:host .qd-tab-caption{font-weight:500;white-space:nowrap}:host:hover,:host.qd-tab-current{color:#069}:host.qd-tab-current .qd-tab-caption{position:relative}:host.qd-tab-current .qd-tab-caption:after{position:absolute;bottom:-.6875rem;left:0;display:inline-block;width:100%;height:.25rem;background-color:#069;content:\"\"}:host.qd-tab-done,:host.qd-tab-edit{color:#171717}:host.qd-tab-error{color:#c70023}:host.qd-tab-disabled{color:#b4b4b4;cursor:default}:host.qd-tab-disabled:hover{color:#b4b4b4}\n"] }]
|
|
30228
|
-
}],
|
|
30450
|
+
}], propDecorators: { state: [{
|
|
30229
30451
|
type: Input
|
|
30230
30452
|
}], label: [{
|
|
30231
30453
|
type: Input
|
|
@@ -30242,13 +30464,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
30242
30464
|
args: ['data-test-id']
|
|
30243
30465
|
}] } });
|
|
30244
30466
|
|
|
30467
|
+
// @ts-strict-ignore
|
|
30468
|
+
/**
|
|
30469
|
+
* The **QdPageTab** is a single tab inside the **QdPageTabs** within a **QdPage**.
|
|
30470
|
+
*/
|
|
30471
|
+
class QdPageTabComponent {
|
|
30472
|
+
_pageTabs = inject(forwardRef(() => QdPageTabsComponent));
|
|
30473
|
+
translate = inject(TranslateService);
|
|
30474
|
+
/**
|
|
30475
|
+
* Configuration of QdPageTabComponent.
|
|
30476
|
+
*
|
|
30477
|
+
* * @note The use of CDK attributes is not permitted. Please configure this component here.
|
|
30478
|
+
*/
|
|
30479
|
+
config;
|
|
30480
|
+
/** Form control for this tab. */
|
|
30481
|
+
set tabControl(tabControl) {
|
|
30482
|
+
this.stepControl = tabControl;
|
|
30483
|
+
}
|
|
30484
|
+
get tabControl() {
|
|
30485
|
+
return this.stepControl;
|
|
30486
|
+
}
|
|
30487
|
+
infoBanners;
|
|
30488
|
+
content;
|
|
30489
|
+
stepControl;
|
|
30490
|
+
interacted = false;
|
|
30491
|
+
editable = true;
|
|
30492
|
+
get completed() {
|
|
30493
|
+
if (!this.interacted)
|
|
30494
|
+
return false;
|
|
30495
|
+
const control = this.tabControl;
|
|
30496
|
+
if (!control)
|
|
30497
|
+
return true;
|
|
30498
|
+
return !control.invalid && !control.pending;
|
|
30499
|
+
}
|
|
30500
|
+
get hasError() {
|
|
30501
|
+
return this.interacted && !!this.tabControl?.invalid;
|
|
30502
|
+
}
|
|
30503
|
+
_destroyed$ = new Subject();
|
|
30504
|
+
select() {
|
|
30505
|
+
const index = this._pageTabs.tabs.toArray().indexOf(this);
|
|
30506
|
+
if (index >= 0)
|
|
30507
|
+
this._pageTabs.selectedIndex = index;
|
|
30508
|
+
}
|
|
30509
|
+
ngOnInit() {
|
|
30510
|
+
this.validateLabel();
|
|
30511
|
+
if (this.tabControl)
|
|
30512
|
+
this.initErrorCheck();
|
|
30513
|
+
}
|
|
30514
|
+
ngOnChanges(changes) {
|
|
30515
|
+
['label', 'errorMessage', 'state']
|
|
30516
|
+
.filter(inputName => !!changes[inputName])
|
|
30517
|
+
.forEach(inputName => this.blockCdkInput(inputName));
|
|
30518
|
+
}
|
|
30519
|
+
ngOnDestroy() {
|
|
30520
|
+
this._destroyed$.complete();
|
|
30521
|
+
}
|
|
30522
|
+
blockCdkInput(inputName) {
|
|
30523
|
+
throw new Error(`Quadrel Framework | QdPageTab - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabConfig instead.`);
|
|
30524
|
+
}
|
|
30525
|
+
validateLabel() {
|
|
30526
|
+
if (!this.config?.label?.i18n)
|
|
30527
|
+
console.error('Quadrel Framework | QdPageTab - Please provide a label for the tab.');
|
|
30528
|
+
}
|
|
30529
|
+
initErrorCheck() {
|
|
30530
|
+
this.tabControl.statusChanges.pipe(takeUntil$1(this._destroyed$)).subscribe(() => {
|
|
30531
|
+
if (this.hasAnyError(this.tabControl)) {
|
|
30532
|
+
this.interacted = true;
|
|
30533
|
+
}
|
|
30534
|
+
this._pageTabs._stateChanged();
|
|
30535
|
+
});
|
|
30536
|
+
}
|
|
30537
|
+
hasAnyError(control) {
|
|
30538
|
+
if (control.errors && control.touched)
|
|
30539
|
+
return true;
|
|
30540
|
+
if (control instanceof FormGroup) {
|
|
30541
|
+
return Object.values(control.controls).some(control => this.hasAnyError(control));
|
|
30542
|
+
}
|
|
30543
|
+
if (control instanceof FormArray) {
|
|
30544
|
+
return control.controls.some(control => this.hasAnyError(control));
|
|
30545
|
+
}
|
|
30546
|
+
return false;
|
|
30547
|
+
}
|
|
30548
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30549
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabComponent, isStandalone: true, selector: "qd-page-tab", inputs: { config: "config", tabControl: "tabControl" }, queries: [{ propertyName: "infoBanners", predicate: QdPageInfoBannerComponent }], viewQueries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template>\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</ng-template>\n", styles: [".page-info-banners:has(>qd-page-info-banner:not(.qd-page-info-banner-empty)){padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.page-info-banners>qd-page-info-banner:last-child{margin-bottom:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
30550
|
+
}
|
|
30551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabComponent, decorators: [{
|
|
30552
|
+
type: Component,
|
|
30553
|
+
args: [{ selector: 'qd-page-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-template>\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</ng-template>\n", styles: [".page-info-banners:has(>qd-page-info-banner:not(.qd-page-info-banner-empty)){padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.page-info-banners>qd-page-info-banner:last-child{margin-bottom:0}\n"] }]
|
|
30554
|
+
}], propDecorators: { config: [{
|
|
30555
|
+
type: Input
|
|
30556
|
+
}], tabControl: [{
|
|
30557
|
+
type: Input
|
|
30558
|
+
}], infoBanners: [{
|
|
30559
|
+
type: ContentChildren,
|
|
30560
|
+
args: [QdPageInfoBannerComponent]
|
|
30561
|
+
}], content: [{
|
|
30562
|
+
type: ViewChild,
|
|
30563
|
+
args: [TemplateRef, { static: true }]
|
|
30564
|
+
}] } });
|
|
30565
|
+
|
|
30245
30566
|
const TAB_PARAM_NAME = 'tab';
|
|
30246
30567
|
const OWNED_PARAMS = [TAB_PARAM_NAME];
|
|
30247
30568
|
const FEATURE_LABEL = { name: 'Page Tabs', plural: 'page tabs' };
|
|
30248
30569
|
/**
|
|
30249
30570
|
* Per-view adapter that syncs `QdPageTabsComponent` selection with the URL `?tab=` query
|
|
30250
30571
|
* param via `QdRouterQueryParamHubService`. Reads on activation and selects the matching
|
|
30251
|
-
* tab (with fallback for unknown/disabled names), writes on `
|
|
30572
|
+
* tab (with fallback for unknown/disabled names), writes on `tabSelection`. Coordination,
|
|
30252
30573
|
* ownership, and write batching are delegated to the hub — see its JSDoc for details.
|
|
30253
30574
|
* Behavior contracts live in `page-tabs-router-connector.service.spec.ts` and
|
|
30254
30575
|
* `router-query-param-hub.integration.cy.ts`.
|
|
@@ -30259,9 +30580,9 @@ const FEATURE_LABEL = { name: 'Page Tabs', plural: 'page tabs' };
|
|
|
30259
30580
|
* write pipeline (see commit 57f0a271a).
|
|
30260
30581
|
*
|
|
30261
30582
|
* Internal invariant: when the requested tab is unknown or disabled, `selectFallbackTab()`
|
|
30262
|
-
* writes the URL explicitly.
|
|
30263
|
-
*
|
|
30264
|
-
*
|
|
30583
|
+
* writes the URL explicitly. `tabSelection` is not emitted if the fallback is already
|
|
30584
|
+
* the selected tab, so without the explicit write deep-links like `?tab=phantom` would
|
|
30585
|
+
* leave a stale param in the URL.
|
|
30265
30586
|
*/
|
|
30266
30587
|
class QdPageTabsRouterConnectorService {
|
|
30267
30588
|
_hub = inject(QdRouterQueryParamHubService);
|
|
@@ -30310,8 +30631,8 @@ class QdPageTabsRouterConnectorService {
|
|
|
30310
30631
|
}
|
|
30311
30632
|
subscribeToTabChanges() {
|
|
30312
30633
|
const component = this._connectedComponent;
|
|
30313
|
-
this._writeSubscription = component.
|
|
30314
|
-
.pipe(map(event => event.
|
|
30634
|
+
this._writeSubscription = component.tabSelection
|
|
30635
|
+
.pipe(map(event => event.selectedTab?.config?.name), takeUntilDestroyed(this._destroyRef))
|
|
30315
30636
|
.subscribe(name => this.writeUrl(name));
|
|
30316
30637
|
}
|
|
30317
30638
|
writeUrl(name) {
|
|
@@ -30547,10 +30868,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
30547
30868
|
* - If an invalid tab name is provided in URL, the first available tab is selected
|
|
30548
30869
|
* - If no tab parameter is present, the `selectedIndex` or first non-disabled tab is selected
|
|
30549
30870
|
*/
|
|
30550
|
-
class QdPageTabsComponent
|
|
30871
|
+
class QdPageTabsComponent {
|
|
30551
30872
|
footerService = inject(QdPageFooterService, { optional: true });
|
|
30552
30873
|
pageStoreService = inject(QdPageStoreService);
|
|
30553
30874
|
routerConnector = inject(QdPageTabsRouterConnectorService);
|
|
30875
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
30876
|
+
destroyRef = inject(DestroyRef);
|
|
30877
|
+
static _idCounter = 0;
|
|
30878
|
+
_id = QdPageTabsComponent._idCounter++;
|
|
30554
30879
|
get hasPageFooter() {
|
|
30555
30880
|
return !!this.footerService;
|
|
30556
30881
|
}
|
|
@@ -30563,23 +30888,45 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
30563
30888
|
*/
|
|
30564
30889
|
testId = 'page-tabs';
|
|
30565
30890
|
tabSelection = new EventEmitter();
|
|
30891
|
+
_tabs;
|
|
30892
|
+
linear = false;
|
|
30893
|
+
_selectedIndex = 0;
|
|
30566
30894
|
_viewonly;
|
|
30567
|
-
destroyRef = inject(DestroyRef);
|
|
30568
30895
|
get tabs() {
|
|
30569
|
-
return this.
|
|
30896
|
+
return this._tabs;
|
|
30570
30897
|
}
|
|
30571
30898
|
get selected() {
|
|
30572
|
-
return
|
|
30899
|
+
return this._tabs?.get(this._selectedIndex);
|
|
30573
30900
|
}
|
|
30574
|
-
set selected(
|
|
30575
|
-
|
|
30901
|
+
set selected(tab) {
|
|
30902
|
+
if (!tab)
|
|
30903
|
+
return;
|
|
30904
|
+
const index = this._tabs?.toArray().indexOf(tab);
|
|
30905
|
+
if (index !== undefined && index >= 0) {
|
|
30906
|
+
this.selectedIndex = index;
|
|
30907
|
+
}
|
|
30576
30908
|
}
|
|
30577
|
-
|
|
30578
|
-
|
|
30579
|
-
|
|
30580
|
-
|
|
30581
|
-
|
|
30582
|
-
|
|
30909
|
+
get selectedIndex() {
|
|
30910
|
+
return this._selectedIndex;
|
|
30911
|
+
}
|
|
30912
|
+
set selectedIndex(newIndex) {
|
|
30913
|
+
if (newIndex === this._selectedIndex)
|
|
30914
|
+
return;
|
|
30915
|
+
const prevIndex = this._selectedIndex;
|
|
30916
|
+
const prevTab = this._tabs?.get(prevIndex);
|
|
30917
|
+
if (prevTab?.tabControl) {
|
|
30918
|
+
prevTab.interacted = true;
|
|
30919
|
+
}
|
|
30920
|
+
this._selectedIndex = newIndex;
|
|
30921
|
+
if (this._tabs) {
|
|
30922
|
+
this.tabSelection.emit({
|
|
30923
|
+
selectedIndex: newIndex,
|
|
30924
|
+
previouslySelectedIndex: prevIndex,
|
|
30925
|
+
selectedTab: this._tabs.get(newIndex),
|
|
30926
|
+
previouslySelectedTab: this._tabs.get(prevIndex)
|
|
30927
|
+
});
|
|
30928
|
+
}
|
|
30929
|
+
this._changeDetectorRef.markForCheck();
|
|
30583
30930
|
}
|
|
30584
30931
|
ngOnInit() {
|
|
30585
30932
|
this.linear = false;
|
|
@@ -30593,24 +30940,10 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
30593
30940
|
.filter(inputName => !!changes[inputName])
|
|
30594
30941
|
.forEach(inputName => this.blockCdkInput(inputName));
|
|
30595
30942
|
}
|
|
30596
|
-
_getIndicatorType(index, state) {
|
|
30597
|
-
if (state)
|
|
30598
|
-
return state;
|
|
30599
|
-
const step = this.steps.get(index);
|
|
30600
|
-
if (!step)
|
|
30601
|
-
return 'number';
|
|
30602
|
-
if (step.hasError)
|
|
30603
|
-
return 'error';
|
|
30604
|
-
if (step.completed)
|
|
30605
|
-
return step.editable ? 'edit' : 'done';
|
|
30606
|
-
return 'number';
|
|
30607
|
-
}
|
|
30608
30943
|
ngAfterContentInit() {
|
|
30609
|
-
|
|
30610
|
-
this.tabs.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this._stateChanged());
|
|
30944
|
+
this._tabs.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this._stateChanged());
|
|
30611
30945
|
}
|
|
30612
30946
|
ngAfterViewInit() {
|
|
30613
|
-
super.ngAfterViewInit();
|
|
30614
30947
|
setTimeout(() => {
|
|
30615
30948
|
if (this.config?.connectWithRouter) {
|
|
30616
30949
|
this.configureBookmarkableTabs();
|
|
@@ -30619,9 +30952,42 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
30619
30952
|
this.initializeTabSelection();
|
|
30620
30953
|
});
|
|
30621
30954
|
}
|
|
30955
|
+
_stateChanged() {
|
|
30956
|
+
this._changeDetectorRef.markForCheck();
|
|
30957
|
+
}
|
|
30958
|
+
_getIndicatorType(index) {
|
|
30959
|
+
const tab = this._tabs.get(index);
|
|
30960
|
+
if (!tab)
|
|
30961
|
+
return 'number';
|
|
30962
|
+
if (tab.hasError && !this._viewonly)
|
|
30963
|
+
return 'error';
|
|
30964
|
+
if (tab.completed)
|
|
30965
|
+
return tab.editable ? 'edit' : 'done';
|
|
30966
|
+
return 'number';
|
|
30967
|
+
}
|
|
30968
|
+
_getTabLabelId(i) {
|
|
30969
|
+
return `qd-tabs-${this._id}-label-${i}`;
|
|
30970
|
+
}
|
|
30971
|
+
save() {
|
|
30972
|
+
this.selected?.tabControl?.markAllAsTouched();
|
|
30973
|
+
const tabControlValues = this._tabs.map(tab => tab.tabControl?.value);
|
|
30974
|
+
this.config?.submitButton?.handler?.(tabControlValues);
|
|
30975
|
+
}
|
|
30976
|
+
selectTab(tab) {
|
|
30977
|
+
if (tab.config?.isDisabled)
|
|
30978
|
+
return;
|
|
30979
|
+
tab.select();
|
|
30980
|
+
}
|
|
30981
|
+
isSubmitButtonShown() {
|
|
30982
|
+
return this.config?.submitButton?.isHidden !== true && !this.footerService;
|
|
30983
|
+
}
|
|
30984
|
+
isSubmitButtonDisabled() {
|
|
30985
|
+
return this.config?.submitButton?.isDisabled;
|
|
30986
|
+
}
|
|
30622
30987
|
initializeTabSelection() {
|
|
30623
30988
|
if (this.config?.selectedIndex && this.isTabSelectable(this.config.selectedIndex)) {
|
|
30624
|
-
this.
|
|
30989
|
+
this._selectedIndex = this.config.selectedIndex;
|
|
30990
|
+
this._changeDetectorRef.markForCheck();
|
|
30625
30991
|
return;
|
|
30626
30992
|
}
|
|
30627
30993
|
this.selectFirstNotDisabledTab();
|
|
@@ -30630,19 +30996,20 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
30630
30996
|
this.routerConnector.connectTabsWithRouter(this).pipe(takeUntilDestroyed(this.destroyRef)).subscribe();
|
|
30631
30997
|
}
|
|
30632
30998
|
isTabSelectable(index) {
|
|
30633
|
-
const tab = this.
|
|
30999
|
+
const tab = this._tabs.get(index);
|
|
30634
31000
|
return !!tab && !tab.config.isDisabled;
|
|
30635
31001
|
}
|
|
30636
31002
|
/**
|
|
30637
31003
|
* Selects the first tab that is not disabled.
|
|
30638
31004
|
*/
|
|
30639
31005
|
selectFirstNotDisabledTab() {
|
|
30640
|
-
this.
|
|
31006
|
+
this._tabs.some((tab, tabIndex) => {
|
|
30641
31007
|
if (!tab.config.isDisabled) {
|
|
30642
31008
|
if (this.config) {
|
|
30643
31009
|
this.config.selectedIndex = tabIndex;
|
|
30644
31010
|
}
|
|
30645
|
-
this.
|
|
31011
|
+
this._selectedIndex = tabIndex;
|
|
31012
|
+
this._changeDetectorRef.markForCheck();
|
|
30646
31013
|
return true;
|
|
30647
31014
|
}
|
|
30648
31015
|
else {
|
|
@@ -30650,51 +31017,25 @@ class QdPageTabsComponent extends CdkStepper {
|
|
|
30650
31017
|
}
|
|
30651
31018
|
});
|
|
30652
31019
|
}
|
|
30653
|
-
save() {
|
|
30654
|
-
this.selected?.tabControl?.markAllAsTouched();
|
|
30655
|
-
const tabControlValues = this.tabs.map(tab => tab.tabControl?.value);
|
|
30656
|
-
this.config?.submitButton?.handler?.(tabControlValues);
|
|
30657
|
-
}
|
|
30658
|
-
selectTab(tab) {
|
|
30659
|
-
if (tab.config?.isDisabled)
|
|
30660
|
-
return;
|
|
30661
|
-
tab.select();
|
|
30662
|
-
}
|
|
30663
|
-
isSubmitButtonShown() {
|
|
30664
|
-
return this.config?.submitButton?.isHidden !== true && !this.footerService;
|
|
30665
|
-
}
|
|
30666
|
-
isSubmitButtonDisabled() {
|
|
30667
|
-
return this.config?.submitButton?.isDisabled;
|
|
30668
|
-
}
|
|
30669
|
-
_getTabLabelId(i) {
|
|
30670
|
-
return this._getStepLabelId(i);
|
|
30671
|
-
}
|
|
30672
31020
|
blockCdkInput(inputName) {
|
|
30673
31021
|
throw new Error(`Quadrel Framework | QdPageTabs - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabsConfig instead.`);
|
|
30674
31022
|
}
|
|
30675
|
-
mapSelectionChangeToTabSelectionOutput() {
|
|
30676
|
-
this.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(selectionEvent => {
|
|
30677
|
-
this.tabSelection.emit({
|
|
30678
|
-
selectedIndex: selectionEvent.selectedIndex,
|
|
30679
|
-
previouslySelectedIndex: selectionEvent.previouslySelectedIndex,
|
|
30680
|
-
selectedTab: selectionEvent.selectedStep,
|
|
30681
|
-
previouslySelectedTab: selectionEvent.previouslySelectedStep
|
|
30682
|
-
});
|
|
30683
|
-
});
|
|
30684
|
-
}
|
|
30685
31023
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30686
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabsComponent, isStandalone: true, selector: "qd-page-tabs", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { tabSelection: "tabSelection" }, host: { properties: { "class.standalone": "!
|
|
31024
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabsComponent, isStandalone: true, selector: "qd-page-tabs", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { tabSelection: "tabSelection" }, host: { properties: { "class.standalone": "!footerService" }, classAttribute: "qd-tabs" }, providers: [QdPageTabsRouterConnectorService], queries: [{ propertyName: "_tabs", predicate: i0.forwardRef(() => QdPageTabComponent) }], usesOnChanges: true, ngImport: i0, template: "<div class=\"qd-tabs-items-container\" [ngClass]=\"{ scrollable: config?.scrollabe }\">\n <qd-page-tab-header\n *ngFor=\"let tab of tabs; let i = index\"\n (click)=\"selectTab(tab)\"\n [id]=\"_getTabLabelId(i)\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i)\"\n [label]=\"tab.config.label.i18n | translate\"\n [counters]=\"tab.config.counters\"\n [isSelected]=\"selectedIndex === i\"\n [isDisabled]=\"tab.config?.isDisabled\"\n [data-test-id]=\"testId + '-header' + '-' + i\"\n >\n </qd-page-tab-header>\n</div>\n\n<div class=\"tabs-content\">\n <ng-container *ngIf=\"!selected?.config?.isDisabled\" [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-tabs-action-area\" *ngIf=\"isSubmitButtonShown()\">\n <button qdButton (click)=\"save()\" [disabled]=\"isSubmitButtonDisabled()\" [data-test-id]=\"testId + '-submit'\">\n {{ config?.submitButton?.i18n || \"i18n.qd.tabs.button.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-tabs-items-container{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .9375rem}@media (max-width: 599.98px){:host .qd-tabs-items-container{padding:0 .9375rem}}@media (max-width: 1279.98px){:host .qd-tabs-items-container.scrollable{flex-wrap:nowrap;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}}:host .tabs-content{flex:1 1 auto}:host .qd-tabs-action-area{display:flex;width:100%;height:50px;justify-content:flex-end}:host .qd-tabs-action-area button{margin-right:1.25rem}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: QdPageTabHeaderComponent, selector: "qd-page-tab-header", inputs: ["state", "label", "counters", "index", "isSelected", "isDisabled", "data-test-id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: QdButtonModule }, { kind: "component", type: QdButtonComponent, selector: "button[qdButton], a[qdButton], button[qd-button]", inputs: ["disabled", "color", "icon", "data-test-id", "additionalInfo"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
30687
31025
|
}
|
|
30688
31026
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsComponent, decorators: [{
|
|
30689
31027
|
type: Component,
|
|
30690
|
-
args: [{ selector: 'qd-page-tabs', providers: [
|
|
30691
|
-
}],
|
|
31028
|
+
args: [{ selector: 'qd-page-tabs', providers: [QdPageTabsRouterConnectorService], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'qd-tabs', '[class.standalone]': '!footerService' }, standalone: true, imports: [NgFor, NgIf, NgTemplateOutlet, QdPageTabHeaderComponent, TranslateModule, QdButtonModule, CommonModule], template: "<div class=\"qd-tabs-items-container\" [ngClass]=\"{ scrollable: config?.scrollabe }\">\n <qd-page-tab-header\n *ngFor=\"let tab of tabs; let i = index\"\n (click)=\"selectTab(tab)\"\n [id]=\"_getTabLabelId(i)\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i)\"\n [label]=\"tab.config.label.i18n | translate\"\n [counters]=\"tab.config.counters\"\n [isSelected]=\"selectedIndex === i\"\n [isDisabled]=\"tab.config?.isDisabled\"\n [data-test-id]=\"testId + '-header' + '-' + i\"\n >\n </qd-page-tab-header>\n</div>\n\n<div class=\"tabs-content\">\n <ng-container *ngIf=\"!selected?.config?.isDisabled\" [ngTemplateOutlet]=\"selected?.content\"></ng-container>\n</div>\n\n<div class=\"qd-tabs-action-area\" *ngIf=\"isSubmitButtonShown()\">\n <button qdButton (click)=\"save()\" [disabled]=\"isSubmitButtonDisabled()\" [data-test-id]=\"testId + '-submit'\">\n {{ config?.submitButton?.i18n || \"i18n.qd.tabs.button.submit\" | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host.standalone{height:calc(100% - 50px)}:host .qd-tabs-items-container{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;padding:0 1.25rem;border-bottom:.125rem solid rgb(213,213,213);background-color:#fff;gap:0 .9375rem}@media (max-width: 599.98px){:host .qd-tabs-items-container{padding:0 .9375rem}}@media (max-width: 1279.98px){:host .qd-tabs-items-container.scrollable{flex-wrap:nowrap;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none}}:host .tabs-content{flex:1 1 auto}:host .qd-tabs-action-area{display:flex;width:100%;height:50px;justify-content:flex-end}:host .qd-tabs-action-area button{margin-right:1.25rem}\n"] }]
|
|
31029
|
+
}], propDecorators: { config: [{
|
|
30692
31030
|
type: Input
|
|
30693
31031
|
}], testId: [{
|
|
30694
31032
|
type: Input,
|
|
30695
31033
|
args: ['data-test-id']
|
|
30696
31034
|
}], tabSelection: [{
|
|
30697
31035
|
type: Output
|
|
31036
|
+
}], _tabs: [{
|
|
31037
|
+
type: ContentChildren,
|
|
31038
|
+
args: [forwardRef(() => QdPageTabComponent)]
|
|
30698
31039
|
}] } });
|
|
30699
31040
|
|
|
30700
31041
|
class QdPageSubmitActionService {
|
|
@@ -34278,93 +34619,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
34278
34619
|
}]
|
|
34279
34620
|
}] });
|
|
34280
34621
|
|
|
34281
|
-
// @ts-strict-ignore
|
|
34282
|
-
/**
|
|
34283
|
-
* The **QdPageTab** is a single tab inside the **QdPageTabs** within a **QdPage**.
|
|
34284
|
-
*/
|
|
34285
|
-
class QdPageTabComponent extends CdkStep {
|
|
34286
|
-
translate = inject(TranslateService);
|
|
34287
|
-
/**
|
|
34288
|
-
* Configuration of QdPageTabComponent.
|
|
34289
|
-
*
|
|
34290
|
-
* * @note The use of CDK attributes is not permitted. Please configure this component here.
|
|
34291
|
-
*/
|
|
34292
|
-
config;
|
|
34293
|
-
/** Form control for this tab. */
|
|
34294
|
-
set tabControl(tabControl) {
|
|
34295
|
-
this.stepControl = tabControl;
|
|
34296
|
-
}
|
|
34297
|
-
get tabControl() {
|
|
34298
|
-
return this.stepControl;
|
|
34299
|
-
}
|
|
34300
|
-
infoBanners;
|
|
34301
|
-
_destroyed$ = new Subject();
|
|
34302
|
-
constructor() {
|
|
34303
|
-
const tabs = inject(QdPageTabsComponent);
|
|
34304
|
-
const stepperOptions = inject(STEPPER_GLOBAL_OPTIONS, { optional: true });
|
|
34305
|
-
super(tabs, stepperOptions);
|
|
34306
|
-
}
|
|
34307
|
-
ngOnInit() {
|
|
34308
|
-
this.validateLabel();
|
|
34309
|
-
if (this.tabControl)
|
|
34310
|
-
this.initErrorCheck();
|
|
34311
|
-
}
|
|
34312
|
-
ngOnChanges(changes) {
|
|
34313
|
-
super.ngOnChanges();
|
|
34314
|
-
['label', 'errorMessage', 'state']
|
|
34315
|
-
.filter(inputName => !!changes[inputName])
|
|
34316
|
-
.forEach(inputName => this.blockCdkInput(inputName));
|
|
34317
|
-
}
|
|
34318
|
-
ngOnDestroy() {
|
|
34319
|
-
this._destroyed$.complete();
|
|
34320
|
-
}
|
|
34321
|
-
blockCdkInput(inputName) {
|
|
34322
|
-
throw new Error(`Quadrel Framework | QdPageTab - The use of the "${inputName}" attribute is not permitted. Please use QdPageTabConfig instead.`);
|
|
34323
|
-
}
|
|
34324
|
-
validateLabel() {
|
|
34325
|
-
if (!this.config?.label?.i18n)
|
|
34326
|
-
console.error('Quadrel Framework | QdPageTab - Please provide a label for the tab.');
|
|
34327
|
-
}
|
|
34328
|
-
initErrorCheck() {
|
|
34329
|
-
this.tabControl.statusChanges.pipe(takeUntil$1(this._destroyed$)).subscribe(() => {
|
|
34330
|
-
if (this.hasAnyError(this.tabControl)) {
|
|
34331
|
-
this.interacted = true;
|
|
34332
|
-
}
|
|
34333
|
-
});
|
|
34334
|
-
}
|
|
34335
|
-
hasAnyError(control) {
|
|
34336
|
-
if (control.errors && control.touched)
|
|
34337
|
-
return true;
|
|
34338
|
-
if (control instanceof FormGroup) {
|
|
34339
|
-
return Object.values(control.controls).some(control => this.hasAnyError(control));
|
|
34340
|
-
}
|
|
34341
|
-
if (control instanceof FormArray) {
|
|
34342
|
-
return control.controls.some(control => this.hasAnyError(control));
|
|
34343
|
-
}
|
|
34344
|
-
return false;
|
|
34345
|
-
}
|
|
34346
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
34347
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: QdPageTabComponent, isStandalone: true, selector: "qd-page-tab", inputs: { config: "config", tabControl: "tabControl" }, providers: [
|
|
34348
|
-
{ provide: CdkStep, useExisting: QdPageTabComponent },
|
|
34349
|
-
{ provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true } }
|
|
34350
|
-
], queries: [{ propertyName: "infoBanners", predicate: QdPageInfoBannerComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template>\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</ng-template>\n", styles: [".page-info-banners:has(>qd-page-info-banner:not(.qd-page-info-banner-empty)){padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.page-info-banners>qd-page-info-banner:last-child{margin-bottom:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
34351
|
-
}
|
|
34352
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabComponent, decorators: [{
|
|
34353
|
-
type: Component,
|
|
34354
|
-
args: [{ selector: 'qd-page-tab', providers: [
|
|
34355
|
-
{ provide: CdkStep, useExisting: QdPageTabComponent },
|
|
34356
|
-
{ provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true } }
|
|
34357
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true // inherited by CdkStep
|
|
34358
|
-
, template: "<ng-template>\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</ng-template>\n", styles: [".page-info-banners:has(>qd-page-info-banner:not(.qd-page-info-banner-empty)){padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}.page-info-banners>qd-page-info-banner:last-child{margin-bottom:0}\n"] }]
|
|
34359
|
-
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
34360
|
-
type: Input
|
|
34361
|
-
}], tabControl: [{
|
|
34362
|
-
type: Input
|
|
34363
|
-
}], infoBanners: [{
|
|
34364
|
-
type: ContentChildren,
|
|
34365
|
-
args: [QdPageInfoBannerComponent]
|
|
34366
|
-
}] } });
|
|
34367
|
-
|
|
34368
34622
|
/**
|
|
34369
34623
|
* **qdPageTabParameterize** turns the active page tab into the `tab` query parameter
|
|
34370
34624
|
* (`?tab=<name>`).
|
|
@@ -34395,7 +34649,6 @@ class QdPageTabsModule {
|
|
|
34395
34649
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
34396
34650
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsModule, declarations: [QdPageTabsAdapterDirective], imports: [CommonModule,
|
|
34397
34651
|
TranslateModule,
|
|
34398
|
-
CdkStepperModule,
|
|
34399
34652
|
QdButtonModule,
|
|
34400
34653
|
QdIconModule,
|
|
34401
34654
|
QdPageTabsComponent,
|
|
@@ -34404,7 +34657,6 @@ class QdPageTabsModule {
|
|
|
34404
34657
|
QdPageTabHeaderCountersComponent], exports: [QdPageTabsComponent, QdPageTabComponent, QdPageTabsAdapterDirective] });
|
|
34405
34658
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: QdPageTabsModule, imports: [CommonModule,
|
|
34406
34659
|
TranslateModule,
|
|
34407
|
-
CdkStepperModule,
|
|
34408
34660
|
QdButtonModule,
|
|
34409
34661
|
QdIconModule,
|
|
34410
34662
|
QdPageTabsComponent] });
|
|
@@ -34415,7 +34667,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
34415
34667
|
imports: [
|
|
34416
34668
|
CommonModule,
|
|
34417
34669
|
TranslateModule,
|
|
34418
|
-
CdkStepperModule,
|
|
34419
34670
|
QdButtonModule,
|
|
34420
34671
|
QdIconModule,
|
|
34421
34672
|
QdPageTabsComponent,
|
|
@@ -35072,5 +35323,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
35072
35323
|
* Generated bundle index. Do not edit.
|
|
35073
35324
|
*/
|
|
35074
35325
|
|
|
35075
|
-
export { APP_ENVIRONMENT, AVAILABLE_ICONS, BACKEND_ERROR_CODES, MockLocaleDatePipe, NavigationTileComponent, NavigationTilesComponent, QD_DIALOG_CONFIRMATION_RESOLVER_TOKEN, QD_FILE_MANAGER_TOKEN, QD_FILE_UPLOAD_MANAGER_TOKEN, QD_FORM_OPTIONS_RESOLVER, QD_PAGE_OBJECT_RESOLVER_TOKEN, QD_PAGE_STEP_RESOLVER_TOKEN, QD_POPOVER_TOP_FIRST, QD_SAFE_BOTTOM_OFFSET, QD_TABLE_DATA_RESOLVER_TOKEN, QD_UPLOAD_HTTP_OPTIONS, QdButtonComponent, QdButtonGhostDirective, QdButtonGridComponent, QdButtonLinkDirective, QdButtonModule, QdButtonStackButtonComponent, QdButtonStackComponent, QdCheckboxChipsComponent, QdCheckboxComponent, QdCheckboxesComponent, QdChipComponent, QdChipModule, QdColumnAutoFillDirective, QdColumnBreakBeforeDirective, QdColumnDirective, QdColumnDisableResponsiveColspansDirective, QdColumnFullGridWidthDirective, QdColumnNextInSameRowDirective, QdColumnsDirective, QdColumnsDisableAutoFillDirective, QdColumnsDisableResponsiveColspansDirective, QdColumnsMaxDirective, QdCommentsComponent, QdCommentsModule, QdConnectFormStateToPageDirective, QdConnectorTableContextDirective, QdConnectorTableFilterDirective, QdConnectorTableSearchDirective, QdContactCardComponent, QdContactCardModule, QdContainerPairsCaptionComponent, QdContainerPairsContainerComponent, QdContainerPairsHeaderComponent, QdContainerPairsItemComponent, QdContainerPairsValueComponent, QdContextService, QdCoreModule, QdDatepickerComponent, QdDialogActionComponent, QdDialogAuthSessionEndComponent, QdDialogAuthSessionEndService, QdDialogComponent, QdDialogConfirmationComponent, QdDialogConfirmationErrorDirective, QdDialogConfirmationInfoDirective, QdDialogConfirmationSuccessDirective, QdDialogModule, QdDialogRecordStepperComponent, QdDialogService, QdDialogSize, QdDisabledDirective, QdDropdownComponent, QdFileCollectorComponent, QdFileCollectorModule, QdFileSizePipe$1 as QdFileSizePipe, QdFileUploadComponent, QdFileUploadService, QdFilterComponent, QdFilterFormItemsComponent, QdFilterModule, QdFilterRestParamBuilder, QdFilterService, QdFooterActionType, QdFormArray, QdFormBuilder, QdFormControl, QdFormGroup, QdFormModule, QdGridComponent, QdGridModule, QdHorizontalPairsCaptionComponent, QdHorizontalPairsComponent, QdHorizontalPairsItemComponent, QdHorizontalPairsValueComponent, QdIconButtonComponent, QdIconComponent, QdIconModule, QdImageComponent, QdImageModule, QdIndeterminateProgressBarComponent, QdInputComponent, QdListModule, QdMenuButtonComponent, QdMockBreakpointService, QdMockButtonComponent, QdMockButtonGhostDirective, QdMockButtonGridComponent, QdMockButtonLinkDirective, QdMockButtonModule, QdMockButtonStackButtonComponent, QdMockButtonStackComponent, QdMockCalendarComponent, QdMockCheckboxChipsComponent, QdMockCheckboxComponent, QdMockCheckboxesComponent, QdMockChipComponent, QdMockChipModule, QdMockColumnDirective, QdMockColumnsDirective, QdMockContactCardComponent, QdMockContactCardModule, QdMockContainerPairsCaptionComponent, QdMockContainerPairsContainerComponent, QdMockContainerPairsHeaderComponent, QdMockContainerPairsItemComponent, QdMockContainerPairsValueComponent, QdMockCoreModule, QdMockCounterBadgeComponent, QdMockDatepickerComponent, QdMockDisabledDirective, QdMockDropdownComponent, QdMockFileCollectorComponent, QdMockFileCollectorModule, QdMockFilterCategoryBooleanComponent, QdMockFilterCategoryComponent, QdMockFilterCategoryDateComponent, QdMockFilterCategoryDateRangeComponent, QdMockFilterCategoryFreeTextComponent, QdMockFilterCategorySelectComponent, QdMockFilterComponent, QdMockFilterFormItemsComponent, QdMockFilterItemBooleanComponent, QdMockFilterItemDateComponent, QdMockFilterItemDateRangeComponent, QdMockFilterItemFreeTextComponent, QdMockFilterItemMultiSelectComponent, QdMockFilterItemSingleSelectComponent, QdMockFilterModule, QdMockFilterService, QdMockFormErrorComponent, QdMockFormGroupErrorComponent, QdMockFormHintComponent, QdMockFormLabelComponent, QdMockFormReadonlyComponent, QdMockFormViewonlyComponent, QdMockFormsModule, QdMockGridModule, QdMockIconButtonComponent, QdMockIconComponent, QdMockIconModule, QdMockImageComponent, QdMockImageModule, QdMockIndeterminateProgressBarComponent, QdMockInputComponent, QdMockListModule, QdMockNavigationTileComponent, QdMockNavigationTilesComponent, QdMockNavigationTilesModule, QdMockNotificationComponent, QdMockNotificationContentComponent, QdMockNotificationsComponent, QdMockNotificationsModule, QdMockNotificationsService, QdMockPageComponent, QdMockPageModule, QdMockPercentageProgressBarComponent, QdMockPinCodeComponent, QdMockPlaceHolderModule, QdMockPopoverOnClickDirective, QdMockProgressBarModule, QdMockQdPlaceHolderComponent, QdMockRadioButtonsComponent, QdMockRwdDisabledDirective, QdMockSearchComponent, QdMockSearchModule, QdMockSectionComponent, QdMockSectionModule, QdMockShellComponent, QdMockShellFooterComponent, QdMockShellHeaderBannerComponent, QdMockShellHeaderComponent, QdMockShellHeaderSearchComponent, QdMockShellHeaderWidgetComponent, QdMockShellModule, QdMockShellToolbarComponent, QdMockShellToolbarItemComponent, QdMockStatusIndicatorCaptionComponent, QdMockStatusIndicatorComponent, QdMockStatusIndicatorItemComponent, QdMockStatusIndicatorModule, QdMockStatusPairsCaptionComponent, QdMockStatusPairsComponent, QdMockStatusPairsErrorComponent, QdMockStatusPairsItemComponent, QdMockStatusPairsValueComponent, QdMockSwitchComponent, QdMockSwitchesComponent, QdMockTableComponent, QdMockTableModule, QdMockTextSectionComponent, QdMockTextSectionHeadlineComponent, QdMockTextSectionModule, QdMockTextSectionParagraphComponent, QdMockTextareaComponent, QdMockTileButtonListComponent, QdMockTileComponent, QdMockTileTextListComponent, QdMockTileTextListItemComponent, QdMockTileTitleComponent, QdMockTilesContainerComponent, QdMockTilesContainerTitleComponent, QdMockTilesModule, QdMockTranslatePipe, QdMockVisuallyHiddenDirective, QdMultiInputComponent, QdNavigationTilesModule, QdNotificationComponent, QdNotificationContentComponent, QdNotificationsComponent, QdNotificationsHttpInterceptorService, QdNotificationsModule, QdNotificationsService, QdNotificationsSnackbarListenerDirective, QdNumberInputService, QdPageComponent, QdPageControlPanelComponent, QdPageFooterComponent, QdPageFooterCustomContentDirective, QdPageInfoBannerComponent, QdPageModule, QdPageStepComponent, QdPageStepperAdapterDirective, QdPageStepperComponent, QdPageStepperModule, QdPageStoreService, QdPageTabComponent, QdPageTabsAdapterDirective, QdPageTabsComponent, QdPageTabsModule, QdPanelSectionActionsComponent, QdPanelSectionComponent, QdPanelSectionModule, QdPanelSectionStatusComponent, QdPanelSectionTextParagraphComponent, QdPendingChangesGuardDirective, QdPercentageProgressBarComponent, QdPinCodeComponent, QdPlaceHolderComponent, QdPlaceHolderModule, QdPlaceholderPipe, QdProgressBarModule, QdProjectionGuardComponent, QdPushEventsService, QdQuickEditComponent, QdQuickEditModule, QdRadioButtonsComponent, QdRichtextComponent, QdRouterQueryParamHubService, QdRwdDisabledDirective, QdSearchComponent, QdSearchModule, QdSearchService, QdSectionAdapterDirective, QdSectionComponent, QdSectionModule, QdSectionToolbarComponent, QdShellComponent, QdShellModule, QdSortDirection, QdSpinnerComponent, QdSpinnerModule, QdStatusIndicatorComponent, QdStatusIndicatorModule, QdStatusPairsCaptionComponent, QdStatusPairsComponent, QdStatusPairsErrorComponent, QdStatusPairsItemComponent, QdStatusPairsValueComponent, QdSubgridComponent, QdSwitchComponent, QdSwitchesComponent, QdTableComponent, QdTableModule, QdTableSpringTools, QdTextSectionComponent, QdTextSectionHeadlineComponent, QdTextSectionModule, QdTextSectionParagraphComponent, QdTextareaComponent, QdTileButtonListComponent, QdTileComponent, QdTileTextListComponent, QdTileTextListItemComponent, QdTileTitleComponent, QdTilesComponent, QdTilesModule, QdTilesTitleComponent, QdTooltipAtIntersectionDirective, QdTooltipIconComponent, QdTreeComponent, QdTreeModule, QdTreeRowExpanderService, QdUiMockModule, QdUiModule, QdUploadErrorType, QdValidators, QdViewportAdaptiveDirective, QdVisuallyHiddenDirective, chipColorDefault, createMetadataStream, qdFilterParameterize, qdMergeParams, qdPageTabParameterize, qdPaginationParameterize, qdSearchParameterize, qdSortParameterize, qdTableQueryParameterize, qdWrapParams, quadrelIconNames, updateHtmlLang };
|
|
35326
|
+
export { APP_ENVIRONMENT, AVAILABLE_ICONS, BACKEND_ERROR_CODES, MockLocaleDatePipe, NavigationTileComponent, NavigationTilesComponent, QD_DIALOG_CONFIRMATION_RESOLVER_TOKEN, QD_FILE_MANAGER_TOKEN, QD_FILE_UPLOAD_MANAGER_TOKEN, QD_FORM_OPTIONS_RESOLVER, QD_PAGE_OBJECT_RESOLVER_TOKEN, QD_PAGE_STEP_RESOLVER_TOKEN, QD_POPOVER_TOP_FIRST, QD_SAFE_BOTTOM_OFFSET, QD_TABLE_DATA_RESOLVER_TOKEN, QD_UPLOAD_HTTP_OPTIONS, QdButtonComponent, QdButtonGhostDirective, QdButtonGridComponent, QdButtonLinkDirective, QdButtonModule, QdButtonStackButtonComponent, QdButtonStackComponent, QdCheckboxChipsComponent, QdCheckboxComponent, QdCheckboxesComponent, QdChipComponent, QdChipModule, QdColumnAutoFillDirective, QdColumnBreakBeforeDirective, QdColumnDirective, QdColumnDisableResponsiveColspansDirective, QdColumnFullGridWidthDirective, QdColumnNextInSameRowDirective, QdColumnsDirective, QdColumnsDisableAutoFillDirective, QdColumnsDisableResponsiveColspansDirective, QdColumnsMaxDirective, QdCommentsComponent, QdCommentsModule, QdConnectFormStateToPageDirective, QdConnectorTableContextDirective, QdConnectorTableFilterDirective, QdConnectorTableSearchDirective, QdContactCardComponent, QdContactCardModule, QdContainerPairsCaptionComponent, QdContainerPairsContainerComponent, QdContainerPairsHeaderComponent, QdContainerPairsItemComponent, QdContainerPairsValueComponent, QdContextService, QdCoreModule, QdDatepickerComponent, QdDialogActionComponent, QdDialogAuthSessionEndComponent, QdDialogAuthSessionEndService, QdDialogComponent, QdDialogConfirmationComponent, QdDialogConfirmationErrorDirective, QdDialogConfirmationInfoDirective, QdDialogConfirmationSuccessDirective, QdDialogModule, QdDialogRecordStepperComponent, QdDialogService, QdDialogSize, QdDisabledDirective, QdDropdownComponent, QdFileCollectorComponent, QdFileCollectorModule, QdFileSizePipe$1 as QdFileSizePipe, QdFileUploadComponent, QdFileUploadService, QdFilterComponent, QdFilterFormItemsComponent, QdFilterModule, QdFilterRestParamBuilder, QdFilterService, QdFooterActionType, QdFormArray, QdFormBuilder, QdFormControl, QdFormGroup, QdFormModule, QdGridComponent, QdGridModule, QdHorizontalPairsCaptionComponent, QdHorizontalPairsComponent, QdHorizontalPairsItemComponent, QdHorizontalPairsValueComponent, QdIconButtonComponent, QdIconComponent, QdIconModule, QdImageComponent, QdImageModule, QdIndeterminateProgressBarComponent, QdInputComponent, QdListModule, QdMenuButtonComponent, QdMockBreakpointService, QdMockButtonComponent, QdMockButtonGhostDirective, QdMockButtonGridComponent, QdMockButtonLinkDirective, QdMockButtonModule, QdMockButtonStackButtonComponent, QdMockButtonStackComponent, QdMockCalendarComponent, QdMockCheckboxChipsComponent, QdMockCheckboxComponent, QdMockCheckboxesComponent, QdMockChipComponent, QdMockChipModule, QdMockColumnDirective, QdMockColumnsDirective, QdMockContactCardComponent, QdMockContactCardModule, QdMockContainerPairsCaptionComponent, QdMockContainerPairsContainerComponent, QdMockContainerPairsHeaderComponent, QdMockContainerPairsItemComponent, QdMockContainerPairsValueComponent, QdMockCoreModule, QdMockCounterBadgeComponent, QdMockDatepickerComponent, QdMockDisabledDirective, QdMockDropdownComponent, QdMockFileCollectorComponent, QdMockFileCollectorModule, QdMockFilterCategoryBooleanComponent, QdMockFilterCategoryComponent, QdMockFilterCategoryDateComponent, QdMockFilterCategoryDateRangeComponent, QdMockFilterCategoryFreeTextComponent, QdMockFilterCategorySelectComponent, QdMockFilterComponent, QdMockFilterFormItemsComponent, QdMockFilterItemBooleanComponent, QdMockFilterItemDateComponent, QdMockFilterItemDateRangeComponent, QdMockFilterItemFreeTextComponent, QdMockFilterItemMultiSelectComponent, QdMockFilterItemSingleSelectComponent, QdMockFilterModule, QdMockFilterService, QdMockFormErrorComponent, QdMockFormGroupErrorComponent, QdMockFormHintComponent, QdMockFormLabelComponent, QdMockFormReadonlyComponent, QdMockFormViewonlyComponent, QdMockFormsModule, QdMockGridModule, QdMockIconButtonComponent, QdMockIconComponent, QdMockIconModule, QdMockImageComponent, QdMockImageModule, QdMockIndeterminateProgressBarComponent, QdMockInputComponent, QdMockListModule, QdMockNavigationTileComponent, QdMockNavigationTilesComponent, QdMockNavigationTilesModule, QdMockNotificationComponent, QdMockNotificationContentComponent, QdMockNotificationsComponent, QdMockNotificationsModule, QdMockNotificationsService, QdMockPageComponent, QdMockPageModule, QdMockPercentageProgressBarComponent, QdMockPinCodeComponent, QdMockPlaceHolderModule, QdMockPopoverOnClickDirective, QdMockProgressBarModule, QdMockQdPlaceHolderComponent, QdMockRadioButtonsComponent, QdMockRwdDisabledDirective, QdMockSearchComponent, QdMockSearchModule, QdMockSectionComponent, QdMockSectionModule, QdMockShellComponent, QdMockShellFooterComponent, QdMockShellHeaderBannerComponent, QdMockShellHeaderComponent, QdMockShellHeaderSearchComponent, QdMockShellHeaderWidgetComponent, QdMockShellModule, QdMockShellToolbarComponent, QdMockShellToolbarItemComponent, QdMockStatusIndicatorCaptionComponent, QdMockStatusIndicatorComponent, QdMockStatusIndicatorItemComponent, QdMockStatusIndicatorModule, QdMockStatusPairsCaptionComponent, QdMockStatusPairsComponent, QdMockStatusPairsErrorComponent, QdMockStatusPairsItemComponent, QdMockStatusPairsValueComponent, QdMockSwitchComponent, QdMockSwitchesComponent, QdMockTableComponent, QdMockTableModule, QdMockTextSectionComponent, QdMockTextSectionHeadlineComponent, QdMockTextSectionModule, QdMockTextSectionParagraphComponent, QdMockTextareaComponent, QdMockTileButtonListComponent, QdMockTileComponent, QdMockTileTextListComponent, QdMockTileTextListItemComponent, QdMockTileTitleComponent, QdMockTilesContainerComponent, QdMockTilesContainerTitleComponent, QdMockTilesModule, QdMockTranslatePipe, QdMockVisuallyHiddenDirective, QdMultiInputComponent, QdNavigationTilesModule, QdNotificationComponent, QdNotificationContentComponent, QdNotificationsComponent, QdNotificationsHttpInterceptorService, QdNotificationsModule, QdNotificationsService, QdNotificationsSnackbarListenerDirective, QdNumberInputService, QdPageComponent, QdPageControlPanelComponent, QdPageFooterComponent, QdPageFooterCustomContentDirective, QdPageInfoBannerComponent, QdPageModule, QdPageStepComponent, QdPageStepperAdapterDirective, QdPageStepperComponent, QdPageStepperModule, QdPageStoreService, QdPageTabComponent, QdPageTabsAdapterDirective, QdPageTabsComponent, QdPageTabsModule, QdPanelSectionActionsComponent, QdPanelSectionComponent, QdPanelSectionModule, QdPanelSectionStatusComponent, QdPanelSectionTextParagraphComponent, QdPendingChangesGuardDirective, QdPercentageProgressBarComponent, QdPinCodeComponent, QdPlaceHolderComponent, QdPlaceHolderModule, QdPlaceholderPipe, QdProgressBarModule, QdProjectionGuardComponent, QdPushEventsService, QdQuickEditComponent, QdQuickEditModule, QdRadioButtonsComponent, QdRichtextComponent, QdRouterQueryParamHubService, QdRwdDisabledDirective, QdSearchComponent, QdSearchModule, QdSearchService, QdSectionAdapterDirective, QdSectionComponent, QdSectionModule, QdSectionToolbarComponent, QdShellComponent, QdShellModule, QdSortDirection, QdSpinnerComponent, QdSpinnerModule, QdStatusIndicatorComponent, QdStatusIndicatorModule, QdStatusPairsCaptionComponent, QdStatusPairsComponent, QdStatusPairsErrorComponent, QdStatusPairsItemComponent, QdStatusPairsValueComponent, QdSubgridComponent, QdSwitchComponent, QdSwitchesComponent, QdTableComponent, QdTableModule, QdTableSpringTools, QdTextSectionComponent, QdTextSectionHeadlineComponent, QdTextSectionModule, QdTextSectionParagraphComponent, QdTextareaComponent, QdTileButtonListComponent, QdTileComponent, QdTileTextListComponent, QdTileTextListItemComponent, QdTileTitleComponent, QdTilesComponent, QdTilesModule, QdTilesTitleComponent, QdTooltipAtIntersectionDirective, QdTooltipIconComponent, QdTreeComponent, QdTreeModule, QdTreeRowExpanderService, QdUiMockModule, QdUiModule, QdUploadErrorType, QdValidators, QdViewportAdaptiveDirective, QdVisuallyHiddenDirective, WHITELIST_ERROR_CODES, chipColorDefault, createMetadataStream, qdFilterParameterize, qdMergeParams, qdPageTabParameterize, qdPaginationParameterize, qdSearchParameterize, qdSortParameterize, qdTableQueryParameterize, qdWrapParams, quadrelIconNames, updateHtmlLang };
|
|
35076
35327
|
//# sourceMappingURL=quadrel-enterprise-ui-framework.mjs.map
|