@elderbyte/ngx-starter 16.1.0 → 16.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/common/data/filters/filter-context.mjs +8 -2
- package/esm2022/lib/components/forms/clipboard/elder-clipboard.service.mjs +1 -1
- package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +56 -0
- package/esm2022/lib/components/forms/search/elder-search-context-url-binding.directive.mjs +68 -0
- package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +40 -31
- package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +84 -29
- package/esm2022/lib/components/forms/search/elder-search.module.mjs +47 -30
- package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +1 -1
- package/esm2022/lib/components/forms/search/search-box/elder-search-context-filters.mjs +10 -0
- package/esm2022/lib/components/forms/search/search-box/elder-search-url-binding.service.mjs +136 -0
- package/esm2022/lib/components/select/multi/elder-multi-select-base.mjs +3 -2
- package/fesm2022/elderbyte-ngx-starter.mjs +505 -171
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/data/filters/filter-context.d.ts +2 -1
- package/lib/components/forms/directives/elder-initial-value.directive.d.ts +21 -0
- package/lib/components/forms/search/elder-search-context-url-binding.directive.d.ts +42 -0
- package/lib/components/forms/search/elder-search-context.directive.d.ts +14 -13
- package/lib/components/forms/search/elder-search-input.directive.d.ts +25 -12
- package/lib/components/forms/search/elder-search.module.d.ts +22 -19
- package/lib/components/forms/search/search-box/elder-search-context-filters.d.ts +7 -0
- package/lib/components/forms/search/search-box/elder-search-url-binding.service.d.ts +38 -0
- package/package.json +1 -1
- package/src/lib/components/select/single/elder-select/elder-select.component.scss +1 -0
|
@@ -5,7 +5,7 @@ import { Pipe, Injectable, LOCALE_ID, Inject, NgModule, Optional, SkipSelf, Dire
|
|
|
5
5
|
import * as i1 from '@angular/platform-browser';
|
|
6
6
|
import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, nativeJs, ZoneId, DateTimeFormatter, convert, ZonedDateTime, Temporal } from '@js-joda/core';
|
|
7
7
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
8
|
-
import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, Subject, EMPTY, combineLatest, merge, of, forkJoin, throwError, mergeWith, switchMap as switchMap$1, Observable, zip, mergeMap as mergeMap$1, fromEvent, NEVER } from 'rxjs';
|
|
8
|
+
import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, lastValueFrom, Subject, EMPTY, combineLatest, merge, of, forkJoin, throwError, mergeWith, switchMap as switchMap$1, Observable, zip, mergeMap as mergeMap$1, fromEvent, takeUntil as takeUntil$1, combineLatestWith as combineLatestWith$1, skipUntil, filter as filter$1, NEVER } from 'rxjs';
|
|
9
9
|
import { tap, takeUntil, takeWhile, map, filter, distinctUntilChanged, debounceTime, catchError, first, take, switchMap, mergeMap, expand, reduce, startWith, skip, delay, share, combineLatestWith, timeout, skipWhile } from 'rxjs/operators';
|
|
10
10
|
import * as i1$2 from '@angular/common/http';
|
|
11
11
|
import { HttpParams, HttpEventType, HttpRequest, HttpClient, HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
@@ -2569,6 +2569,12 @@ class FilterContext {
|
|
|
2569
2569
|
}
|
|
2570
2570
|
return Array.from(filterMap.values());
|
|
2571
2571
|
}
|
|
2572
|
+
static async of(filters) {
|
|
2573
|
+
const filterContext = new FilterContext();
|
|
2574
|
+
filterContext.updateFilters(filters);
|
|
2575
|
+
await lastValueFrom(filterContext.filters);
|
|
2576
|
+
return filterContext;
|
|
2577
|
+
}
|
|
2572
2578
|
/***************************************************************************
|
|
2573
2579
|
* *
|
|
2574
2580
|
* Read API *
|
|
@@ -21290,6 +21296,7 @@ class ElderMultiSelectBase extends ElderSelectBase {
|
|
|
21290
21296
|
}, () => this.removeEntities(toRemove));
|
|
21291
21297
|
}
|
|
21292
21298
|
removeEntities(toRemove) {
|
|
21299
|
+
console.warn("REMOVE");
|
|
21293
21300
|
toRemove.forEach(e => this.removeEntity(e));
|
|
21294
21301
|
}
|
|
21295
21302
|
removeEntity(toRemove) {
|
|
@@ -21417,7 +21424,7 @@ class ElderMultiSelectBase extends ElderSelectBase {
|
|
|
21417
21424
|
});
|
|
21418
21425
|
}
|
|
21419
21426
|
findOrLoadEntitiesByIds(ids) {
|
|
21420
|
-
if (ids.length == 0) {
|
|
21427
|
+
if (ids === null || ids.length == 0) {
|
|
21421
21428
|
return of([]);
|
|
21422
21429
|
}
|
|
21423
21430
|
if (this.dataContext) {
|
|
@@ -25496,144 +25503,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
25496
25503
|
type: Input
|
|
25497
25504
|
}] } });
|
|
25498
25505
|
|
|
25499
|
-
/**
|
|
25500
|
-
* The search container manages a group of search-inputs
|
|
25501
|
-
* and holds their values in a central search model.
|
|
25502
|
-
*/
|
|
25503
|
-
class ElderSearchContextDirective {
|
|
25504
|
-
constructor() {
|
|
25505
|
-
/***************************************************************************
|
|
25506
|
-
* *
|
|
25507
|
-
* Fields *
|
|
25508
|
-
* *
|
|
25509
|
-
**************************************************************************/
|
|
25510
|
-
this.forcedFilters$ = new BehaviorSubject$1([]);
|
|
25511
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25512
|
-
this.unsubscribe$ = new Subject$1();
|
|
25513
|
-
this._searchInputs = new BehaviorSubject$1([]);
|
|
25514
|
-
this._searchStates = new BehaviorSubject$1([]);
|
|
25515
|
-
this._filters = new BehaviorSubject$1([]);
|
|
25516
|
-
}
|
|
25517
|
-
/***************************************************************************
|
|
25518
|
-
* *
|
|
25519
|
-
* Life Cycle *
|
|
25520
|
-
* *
|
|
25521
|
-
**************************************************************************/
|
|
25522
|
-
ngAfterViewInit() {
|
|
25523
|
-
this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), combineLatestWith(this.forcedFilters$), debounceTime(5)).subscribe(([states, forcedFilters]) => {
|
|
25524
|
-
this._searchStates.next(states);
|
|
25525
|
-
const userFilters = this.convertToFilters(states);
|
|
25526
|
-
this._filters.next(userFilters);
|
|
25527
|
-
this.applyFilters(userFilters, forcedFilters);
|
|
25528
|
-
});
|
|
25529
|
-
}
|
|
25530
|
-
ngOnDestroy() {
|
|
25531
|
-
this.unsubscribe$.next();
|
|
25532
|
-
this.unsubscribe$.complete();
|
|
25533
|
-
}
|
|
25534
|
-
/***************************************************************************
|
|
25535
|
-
* *
|
|
25536
|
-
* Properties *
|
|
25537
|
-
* *
|
|
25538
|
-
**************************************************************************/
|
|
25539
|
-
set filterContext(value) {
|
|
25540
|
-
this._filterContext = value;
|
|
25541
|
-
}
|
|
25542
|
-
get filterContext() {
|
|
25543
|
-
return this._filterContext;
|
|
25544
|
-
}
|
|
25545
|
-
/**
|
|
25546
|
-
* Forced filters are always merged into the final FilterContext.
|
|
25547
|
-
*
|
|
25548
|
-
* This means they override user defined filters, but attempt
|
|
25549
|
-
* to also keep the users intent (by merging) them.
|
|
25550
|
-
*/
|
|
25551
|
-
set forcedFilters(filters) {
|
|
25552
|
-
this.forcedFilters$.next(filters);
|
|
25553
|
-
}
|
|
25554
|
-
get forcedFilters() {
|
|
25555
|
-
return this.forcedFilters$.getValue();
|
|
25556
|
-
}
|
|
25557
|
-
get attributes() {
|
|
25558
|
-
return this._searchInputs.asObservable();
|
|
25559
|
-
}
|
|
25560
|
-
get attributesSnapshot() {
|
|
25561
|
-
return this._searchInputs.getValue();
|
|
25562
|
-
}
|
|
25563
|
-
get states$() {
|
|
25564
|
-
return this._searchStates.asObservable();
|
|
25565
|
-
}
|
|
25566
|
-
get statesSnapshot() {
|
|
25567
|
-
return this._searchStates.getValue();
|
|
25568
|
-
}
|
|
25569
|
-
/**
|
|
25570
|
-
* Returns the current user touched attributes. (ignoring fallbacks)
|
|
25571
|
-
*/
|
|
25572
|
-
get userDefinedAttributes$() {
|
|
25573
|
-
return this.states$.pipe(map(states => states.filter(s => !s.pristine)));
|
|
25574
|
-
}
|
|
25575
|
-
/**
|
|
25576
|
-
* Returns the current active filters
|
|
25577
|
-
*/
|
|
25578
|
-
get filters$() {
|
|
25579
|
-
return this._filters.asObservable();
|
|
25580
|
-
}
|
|
25581
|
-
get filtersSnapshot() {
|
|
25582
|
-
return this._filters.getValue();
|
|
25583
|
-
}
|
|
25584
|
-
/***************************************************************************
|
|
25585
|
-
* *
|
|
25586
|
-
* Public API *
|
|
25587
|
-
* *
|
|
25588
|
-
**************************************************************************/
|
|
25589
|
-
/**
|
|
25590
|
-
* Register a new search name in this container
|
|
25591
|
-
*/
|
|
25592
|
-
register(searchInput) {
|
|
25593
|
-
this.log.debug('Registering search input [' + searchInput.name + ']');
|
|
25594
|
-
const current = this._searchInputs.getValue();
|
|
25595
|
-
this._searchInputs.next([...current, searchInput]);
|
|
25596
|
-
}
|
|
25597
|
-
reset() {
|
|
25598
|
-
this.attributesSnapshot
|
|
25599
|
-
.filter(attr => !attr.readonly)
|
|
25600
|
-
.forEach(a => {
|
|
25601
|
-
a.reset();
|
|
25602
|
-
});
|
|
25603
|
-
}
|
|
25604
|
-
/***************************************************************************
|
|
25605
|
-
* *
|
|
25606
|
-
* Private *
|
|
25607
|
-
* *
|
|
25608
|
-
**************************************************************************/
|
|
25609
|
-
convertToFilters(states) {
|
|
25610
|
-
return states
|
|
25611
|
-
.map(s => new Filter(s.queryKey, s.queryValue));
|
|
25612
|
-
}
|
|
25613
|
-
applyFilters(userFilters, forcedFilters) {
|
|
25614
|
-
const context = this.filterContext;
|
|
25615
|
-
if (context) {
|
|
25616
|
-
context.updateFilters(userFilters);
|
|
25617
|
-
context.mergeFilters(forcedFilters);
|
|
25618
|
-
this.log.trace('Search-Model filters updated:', Array.from(context.filtersSnapshot));
|
|
25619
|
-
}
|
|
25620
|
-
}
|
|
25621
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25622
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, exportAs: ["elderSearchContext"], ngImport: i0 }); }
|
|
25623
|
-
}
|
|
25624
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
|
|
25625
|
-
type: Directive,
|
|
25626
|
-
args: [{
|
|
25627
|
-
selector: '[elderSearchContext]',
|
|
25628
|
-
exportAs: 'elderSearchContext'
|
|
25629
|
-
}]
|
|
25630
|
-
}], propDecorators: { filterContext: [{
|
|
25631
|
-
type: Input,
|
|
25632
|
-
args: ['elderSearchContext']
|
|
25633
|
-
}], forcedFilters: [{
|
|
25634
|
-
type: Input
|
|
25635
|
-
}] } });
|
|
25636
|
-
|
|
25637
25506
|
/**
|
|
25638
25507
|
* Immutable representation of the state of an search input
|
|
25639
25508
|
*/
|
|
@@ -25711,6 +25580,58 @@ class SearchInputState {
|
|
|
25711
25580
|
}
|
|
25712
25581
|
}
|
|
25713
25582
|
|
|
25583
|
+
/**
|
|
25584
|
+
* Search name adapter for input controls.
|
|
25585
|
+
*/
|
|
25586
|
+
class ElderInitialValueDirective {
|
|
25587
|
+
constructor(ngModel) {
|
|
25588
|
+
this.ngModel = ngModel;
|
|
25589
|
+
this.newValue$ = new BehaviorSubject(null);
|
|
25590
|
+
this.unsubscribe$ = new Subject();
|
|
25591
|
+
this.initialDone$ = new Subject();
|
|
25592
|
+
this.isInitial = true;
|
|
25593
|
+
this.initialValue = this.ngModel.model;
|
|
25594
|
+
ngModel.control.valueChanges
|
|
25595
|
+
.pipe(takeUntil$1(this.initialDone$), takeUntil$1(this.unsubscribe$), combineLatestWith$1(this.newValue$)).subscribe(([value, ...newValues]) => {
|
|
25596
|
+
const newValue = newValues[0];
|
|
25597
|
+
if (this.initialValue === value) {
|
|
25598
|
+
this.initialDone$.next();
|
|
25599
|
+
this.initialDone$.complete();
|
|
25600
|
+
ngModel.control.setValue(newValue ? newValue : value);
|
|
25601
|
+
}
|
|
25602
|
+
});
|
|
25603
|
+
}
|
|
25604
|
+
get valueChanges$() {
|
|
25605
|
+
return this.ngModel.control.valueChanges
|
|
25606
|
+
.pipe(skipUntil(this.initialDone$), filter$1(value => this.filterInitialValue(value)));
|
|
25607
|
+
}
|
|
25608
|
+
setInitialValue(value) {
|
|
25609
|
+
this.newValue$.next(value);
|
|
25610
|
+
}
|
|
25611
|
+
ngOnDestroy() {
|
|
25612
|
+
this.unsubscribe$.next();
|
|
25613
|
+
this.unsubscribe$.complete();
|
|
25614
|
+
}
|
|
25615
|
+
filterInitialValue(value) {
|
|
25616
|
+
if (this.isInitial && this.initialValue === value) {
|
|
25617
|
+
this.isInitial = false;
|
|
25618
|
+
return false;
|
|
25619
|
+
}
|
|
25620
|
+
return true;
|
|
25621
|
+
}
|
|
25622
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderInitialValueDirective, deps: [{ token: i3.NgModel, host: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25623
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ElderInitialValueDirective, selector: "[elderInitialValue]", exportAs: ["elderInitialValue"], ngImport: i0 }); }
|
|
25624
|
+
}
|
|
25625
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderInitialValueDirective, decorators: [{
|
|
25626
|
+
type: Directive,
|
|
25627
|
+
args: [{
|
|
25628
|
+
selector: '[elderInitialValue]',
|
|
25629
|
+
exportAs: 'elderInitialValue',
|
|
25630
|
+
}]
|
|
25631
|
+
}], ctorParameters: function () { return [{ type: i3.NgModel, decorators: [{
|
|
25632
|
+
type: Host
|
|
25633
|
+
}] }]; } });
|
|
25634
|
+
|
|
25714
25635
|
/**
|
|
25715
25636
|
* Search name adapter for input controls.
|
|
25716
25637
|
*/
|
|
@@ -25720,28 +25641,31 @@ class ElderSearchInputDirective {
|
|
|
25720
25641
|
* Constructor *
|
|
25721
25642
|
* *
|
|
25722
25643
|
**************************************************************************/
|
|
25723
|
-
constructor(searchContext, ngModel) {
|
|
25644
|
+
constructor(searchContext, changeDetection, ngModel) {
|
|
25724
25645
|
this.searchContext = searchContext;
|
|
25646
|
+
this.changeDetection = changeDetection;
|
|
25725
25647
|
this.ngModel = ngModel;
|
|
25648
|
+
//TODO: In Angular 16, use standalone directives and host component to inject directive to component
|
|
25649
|
+
this.initialValueDirective = new ElderInitialValueDirective(this.ngModel);
|
|
25726
25650
|
this._state = new BehaviorSubject(null);
|
|
25727
|
-
this.
|
|
25651
|
+
this._unsubscribe$ = new Subject();
|
|
25728
25652
|
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25729
25653
|
}
|
|
25730
25654
|
/***************************************************************************
|
|
25731
25655
|
* *
|
|
25732
|
-
* Life Cycle
|
|
25656
|
+
* Life Cycle *
|
|
25733
25657
|
* *
|
|
25734
25658
|
**************************************************************************/
|
|
25735
25659
|
ngAfterViewInit() {
|
|
25736
25660
|
this._extractedName = this.extractName();
|
|
25737
|
-
this.
|
|
25661
|
+
console.log(this.extractName() + "|" + this.queryKey + "|" + this.resolvePath);
|
|
25738
25662
|
this.stateObservable().subscribe(state => {
|
|
25739
25663
|
this.emitState(state);
|
|
25740
25664
|
});
|
|
25741
25665
|
}
|
|
25742
25666
|
ngOnDestroy() {
|
|
25743
|
-
this.
|
|
25744
|
-
this.
|
|
25667
|
+
this._unsubscribe$.next();
|
|
25668
|
+
this._unsubscribe$.complete();
|
|
25745
25669
|
}
|
|
25746
25670
|
/***************************************************************************
|
|
25747
25671
|
* *
|
|
@@ -25761,8 +25685,8 @@ class ElderSearchInputDirective {
|
|
|
25761
25685
|
if (this._extractedName) {
|
|
25762
25686
|
return this._extractedName;
|
|
25763
25687
|
}
|
|
25764
|
-
throw new Error(
|
|
25765
|
-
|
|
25688
|
+
throw new Error("Could not determine the search name key name." +
|
|
25689
|
+
" Either specify the name property or explicitly set [elderSearchInputKey].");
|
|
25766
25690
|
}
|
|
25767
25691
|
get value() {
|
|
25768
25692
|
return this.ngModel.value;
|
|
@@ -25778,6 +25702,13 @@ class ElderSearchInputDirective {
|
|
|
25778
25702
|
* Public API *
|
|
25779
25703
|
* *
|
|
25780
25704
|
**************************************************************************/
|
|
25705
|
+
setInitialFilter(filters) {
|
|
25706
|
+
const filterValue = this.findFilterForThisInput(filters);
|
|
25707
|
+
if (filterValue) {
|
|
25708
|
+
const value = this.convertQueryStringToRawModelValue(filterValue.value);
|
|
25709
|
+
this.initialValueDirective.setInitialValue(value);
|
|
25710
|
+
}
|
|
25711
|
+
}
|
|
25781
25712
|
reset() {
|
|
25782
25713
|
this.ngModel.reset();
|
|
25783
25714
|
}
|
|
@@ -25786,16 +25717,36 @@ class ElderSearchInputDirective {
|
|
|
25786
25717
|
* Private methods *
|
|
25787
25718
|
* *
|
|
25788
25719
|
**************************************************************************/
|
|
25720
|
+
findFilterForThisInput(filters) {
|
|
25721
|
+
for (const filter of filters) {
|
|
25722
|
+
if (filter.key === this.queryKey || filter.key === this.extractName()) {
|
|
25723
|
+
return filter;
|
|
25724
|
+
}
|
|
25725
|
+
}
|
|
25726
|
+
return null;
|
|
25727
|
+
}
|
|
25789
25728
|
stateObservable() {
|
|
25790
|
-
return this.
|
|
25729
|
+
return this.initialValueDirective.valueChanges$.pipe(takeUntil(this._unsubscribe$), map(value => {
|
|
25730
|
+
console.warn(value + "|" + this.name);
|
|
25791
25731
|
const queryValue = this.convertRawModelValueToQueryString(value);
|
|
25792
25732
|
const pristine = !this.isAttributeValuePresent(value);
|
|
25793
25733
|
return new SearchInputState(this.name, queryValue, this.queryKey || this.name, pristine);
|
|
25794
25734
|
}));
|
|
25795
25735
|
}
|
|
25736
|
+
convertQueryStringToRawModelValue(queryString) {
|
|
25737
|
+
if (Objects.nonNull(queryString)) {
|
|
25738
|
+
return queryString;
|
|
25739
|
+
}
|
|
25740
|
+
else {
|
|
25741
|
+
return null;
|
|
25742
|
+
}
|
|
25743
|
+
}
|
|
25796
25744
|
convertRawModelValueToQueryString(model) {
|
|
25797
25745
|
let queryValue = null;
|
|
25798
|
-
if (this.
|
|
25746
|
+
if (this.valueAsId != undefined) {
|
|
25747
|
+
queryValue = this.checkAndConvertFaultyValuesToNull(model);
|
|
25748
|
+
}
|
|
25749
|
+
else if (this.isAttributeValuePresent(model)) {
|
|
25799
25750
|
// Attribute value is present
|
|
25800
25751
|
queryValue = this.resolveValue(model);
|
|
25801
25752
|
}
|
|
@@ -25809,9 +25760,27 @@ class ElderSearchInputDirective {
|
|
|
25809
25760
|
emitState(state) {
|
|
25810
25761
|
this._state.next(state);
|
|
25811
25762
|
}
|
|
25763
|
+
checkAndConvertFaultyValuesToNull(value) {
|
|
25764
|
+
let fixedValue = value;
|
|
25765
|
+
fixedValue = this.convertEmptyArrayToNull(fixedValue);
|
|
25766
|
+
fixedValue = this.convertEmptyStringToNull(fixedValue);
|
|
25767
|
+
return fixedValue;
|
|
25768
|
+
}
|
|
25769
|
+
convertEmptyArrayToNull(value) {
|
|
25770
|
+
if (value instanceof Array && value.length === 0) {
|
|
25771
|
+
return null;
|
|
25772
|
+
}
|
|
25773
|
+
return value;
|
|
25774
|
+
}
|
|
25775
|
+
convertEmptyStringToNull(value) {
|
|
25776
|
+
if (typeof value === "string" && value.length === 0) {
|
|
25777
|
+
return null;
|
|
25778
|
+
}
|
|
25779
|
+
return value;
|
|
25780
|
+
}
|
|
25812
25781
|
isAttributeValuePresent(value) {
|
|
25813
25782
|
return SearchInputState.isValueDefined(value)
|
|
25814
|
-
&& (value +
|
|
25783
|
+
&& (value + "").length !== 0;
|
|
25815
25784
|
}
|
|
25816
25785
|
resolveValue(value) {
|
|
25817
25786
|
if (Objects.nonNull(value)) {
|
|
@@ -25860,29 +25829,181 @@ class ElderSearchInputDirective {
|
|
|
25860
25829
|
});
|
|
25861
25830
|
return CollectionUtil.flatten(arrays);
|
|
25862
25831
|
}
|
|
25863
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchInputDirective, deps: [{ token: ElderSearchContextDirective }, { token: i3.NgModel, host: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25864
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: { queryKey: ["elderSearchInputKey", "queryKey"], valueTransform: ["elderSearchInputTransform", "valueTransform"], resolvePath: ["elderSearchInput", "resolvePath"], fallbackValue: ["elderSearchInputFallback", "fallbackValue"] }, exportAs: ["elderSearchInput"], ngImport: i0 }); }
|
|
25832
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchInputDirective, deps: [{ token: ElderSearchContextDirective }, { token: i0.ChangeDetectorRef }, { token: i3.NgModel, host: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25833
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: { queryKey: ["elderSearchInputKey", "queryKey"], valueTransform: ["elderSearchInputTransform", "valueTransform"], resolvePath: ["elderSearchInput", "resolvePath"], dataSource: "dataSource", fallbackValue: ["elderSearchInputFallback", "fallbackValue"], valueAsId: "valueAsId" }, exportAs: ["elderSearchInput"], ngImport: i0 }); }
|
|
25865
25834
|
}
|
|
25866
25835
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchInputDirective, decorators: [{
|
|
25867
25836
|
type: Directive,
|
|
25868
25837
|
args: [{
|
|
25869
|
-
selector:
|
|
25870
|
-
exportAs:
|
|
25838
|
+
selector: "[elderSearchInput]",
|
|
25839
|
+
exportAs: "elderSearchInput"
|
|
25871
25840
|
}]
|
|
25872
|
-
}], ctorParameters: function () { return [{ type: ElderSearchContextDirective }, { type: i3.NgModel, decorators: [{
|
|
25841
|
+
}], ctorParameters: function () { return [{ type: ElderSearchContextDirective }, { type: i0.ChangeDetectorRef }, { type: i3.NgModel, decorators: [{
|
|
25873
25842
|
type: Host
|
|
25874
25843
|
}] }]; }, propDecorators: { queryKey: [{
|
|
25875
25844
|
type: Input,
|
|
25876
|
-
args: [
|
|
25845
|
+
args: ["elderSearchInputKey"]
|
|
25877
25846
|
}], valueTransform: [{
|
|
25878
25847
|
type: Input,
|
|
25879
|
-
args: [
|
|
25848
|
+
args: ["elderSearchInputTransform"]
|
|
25880
25849
|
}], resolvePath: [{
|
|
25881
25850
|
type: Input,
|
|
25882
|
-
args: [
|
|
25851
|
+
args: ["elderSearchInput"]
|
|
25852
|
+
}], dataSource: [{
|
|
25853
|
+
type: Input,
|
|
25854
|
+
args: ["dataSource"]
|
|
25883
25855
|
}], fallbackValue: [{
|
|
25884
25856
|
type: Input,
|
|
25885
|
-
args: [
|
|
25857
|
+
args: ["elderSearchInputFallback"]
|
|
25858
|
+
}], valueAsId: [{
|
|
25859
|
+
type: Input,
|
|
25860
|
+
args: ["valueAsId"]
|
|
25861
|
+
}] } });
|
|
25862
|
+
|
|
25863
|
+
/**
|
|
25864
|
+
* The search container manages a group of search-inputs
|
|
25865
|
+
* and holds their values in a central search model.
|
|
25866
|
+
*/
|
|
25867
|
+
class ElderSearchContextDirective {
|
|
25868
|
+
constructor() {
|
|
25869
|
+
/***************************************************************************
|
|
25870
|
+
* *
|
|
25871
|
+
* Fields *
|
|
25872
|
+
* *
|
|
25873
|
+
**************************************************************************/
|
|
25874
|
+
this.forcedFilters$ = new BehaviorSubject$1([]);
|
|
25875
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25876
|
+
this._unsubscribe$ = new Subject$1();
|
|
25877
|
+
this._searchInputs = new BehaviorSubject$1([]);
|
|
25878
|
+
this._searchStates = new BehaviorSubject$1([]);
|
|
25879
|
+
this._filters$ = new BehaviorSubject$1([]);
|
|
25880
|
+
this._initialFilters$ = new BehaviorSubject$1([]);
|
|
25881
|
+
}
|
|
25882
|
+
/***************************************************************************
|
|
25883
|
+
* *
|
|
25884
|
+
* Life Cycle *
|
|
25885
|
+
* *
|
|
25886
|
+
**************************************************************************/
|
|
25887
|
+
ngAfterViewInit() {
|
|
25888
|
+
this._searchInputs.next(this.searchInputs.toArray());
|
|
25889
|
+
this.searchInputs.changes
|
|
25890
|
+
.pipe(startWith(this.searchInputs), takeUntil(this._unsubscribe$), map(input => input), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), combineLatestWith(this.forcedFilters$), debounceTime(5)).subscribe(([states, forcedFilters]) => {
|
|
25891
|
+
this._searchStates.next(states);
|
|
25892
|
+
const userFilters = this.convertToFilters(states);
|
|
25893
|
+
this._filters$.next(userFilters);
|
|
25894
|
+
this.applyFilters(userFilters, forcedFilters);
|
|
25895
|
+
});
|
|
25896
|
+
this.initialFilters$.pipe(takeUntil(this._unsubscribe$), skip(1)).subscribe((initialFilters) => {
|
|
25897
|
+
this.searchInputs.forEach(input => input.setInitialFilter(initialFilters));
|
|
25898
|
+
});
|
|
25899
|
+
}
|
|
25900
|
+
ngOnDestroy() {
|
|
25901
|
+
this._unsubscribe$.next();
|
|
25902
|
+
this._unsubscribe$.complete();
|
|
25903
|
+
}
|
|
25904
|
+
/***************************************************************************
|
|
25905
|
+
* *
|
|
25906
|
+
* Properties *
|
|
25907
|
+
* *
|
|
25908
|
+
**************************************************************************/
|
|
25909
|
+
set filterContext(value) {
|
|
25910
|
+
this._filterContext = value;
|
|
25911
|
+
}
|
|
25912
|
+
get filterContext() {
|
|
25913
|
+
return this._filterContext;
|
|
25914
|
+
}
|
|
25915
|
+
/**
|
|
25916
|
+
* Forced filters are always merged into the final FilterContext.
|
|
25917
|
+
*
|
|
25918
|
+
* This means they override user defined filters, but attempt
|
|
25919
|
+
* to also keep the users intent (by merging) them.
|
|
25920
|
+
*/
|
|
25921
|
+
set forcedFilters(filters) {
|
|
25922
|
+
this.forcedFilters$.next(filters);
|
|
25923
|
+
}
|
|
25924
|
+
get forcedFilters() {
|
|
25925
|
+
return this.forcedFilters$.getValue();
|
|
25926
|
+
}
|
|
25927
|
+
get attributes() {
|
|
25928
|
+
return this.searchInputs.changes.pipe(map(inputs => inputs), map(inputs => inputs.toArray()));
|
|
25929
|
+
}
|
|
25930
|
+
get attributesSnapshot() {
|
|
25931
|
+
return this.searchInputs.toArray();
|
|
25932
|
+
}
|
|
25933
|
+
get states$() {
|
|
25934
|
+
return this._searchStates.asObservable();
|
|
25935
|
+
}
|
|
25936
|
+
get statesSnapshot() {
|
|
25937
|
+
return this._searchStates.getValue();
|
|
25938
|
+
}
|
|
25939
|
+
/**
|
|
25940
|
+
* Returns the current user touched attributes. (ignoring fallbacks)
|
|
25941
|
+
*/
|
|
25942
|
+
get userDefinedAttributes$() {
|
|
25943
|
+
return this.states$.pipe(map(states => states.filter(s => !s.pristine)));
|
|
25944
|
+
}
|
|
25945
|
+
/**
|
|
25946
|
+
* Returns the current active filters
|
|
25947
|
+
*/
|
|
25948
|
+
get filters$() {
|
|
25949
|
+
return this._filters$.asObservable();
|
|
25950
|
+
}
|
|
25951
|
+
get initialFilters$() {
|
|
25952
|
+
return this._initialFilters$.asObservable();
|
|
25953
|
+
}
|
|
25954
|
+
get filtersSnapshot() {
|
|
25955
|
+
return this._filters$.getValue();
|
|
25956
|
+
}
|
|
25957
|
+
/***************************************************************************
|
|
25958
|
+
* *
|
|
25959
|
+
* Public API *
|
|
25960
|
+
* *
|
|
25961
|
+
**************************************************************************/
|
|
25962
|
+
registerInitialFilters(filters) {
|
|
25963
|
+
this._initialFilters$.next(filters);
|
|
25964
|
+
}
|
|
25965
|
+
reset() {
|
|
25966
|
+
this.attributesSnapshot
|
|
25967
|
+
.filter(attr => !attr.readonly)
|
|
25968
|
+
.forEach(a => {
|
|
25969
|
+
console.log(a.name);
|
|
25970
|
+
a.reset();
|
|
25971
|
+
});
|
|
25972
|
+
}
|
|
25973
|
+
/***************************************************************************
|
|
25974
|
+
* *
|
|
25975
|
+
* Private *
|
|
25976
|
+
* *
|
|
25977
|
+
**************************************************************************/
|
|
25978
|
+
convertToFilters(states) {
|
|
25979
|
+
return states
|
|
25980
|
+
.map(s => new Filter(s.queryKey, s.queryValue));
|
|
25981
|
+
}
|
|
25982
|
+
applyFilters(userFilters, forcedFilters) {
|
|
25983
|
+
const context = this.filterContext;
|
|
25984
|
+
if (context) {
|
|
25985
|
+
context.updateFilters(userFilters);
|
|
25986
|
+
context.mergeFilters(forcedFilters);
|
|
25987
|
+
this.log.trace("Search-Model filters updated:", Array.from(context.filtersSnapshot));
|
|
25988
|
+
}
|
|
25989
|
+
}
|
|
25990
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25991
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, queries: [{ propertyName: "searchInputs", predicate: ElderSearchInputDirective, descendants: true }], exportAs: ["elderSearchContext"], ngImport: i0 }); }
|
|
25992
|
+
}
|
|
25993
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
|
|
25994
|
+
type: Directive,
|
|
25995
|
+
args: [{
|
|
25996
|
+
selector: "[elderSearchContext]",
|
|
25997
|
+
exportAs: "elderSearchContext"
|
|
25998
|
+
}]
|
|
25999
|
+
}], propDecorators: { searchInputs: [{
|
|
26000
|
+
type: ContentChildren,
|
|
26001
|
+
args: [ElderSearchInputDirective, { descendants: true }]
|
|
26002
|
+
}], filterContext: [{
|
|
26003
|
+
type: Input,
|
|
26004
|
+
args: ["elderSearchContext"]
|
|
26005
|
+
}], forcedFilters: [{
|
|
26006
|
+
type: Input
|
|
25886
26007
|
}] } });
|
|
25887
26008
|
|
|
25888
26009
|
class ElderSearchPanelComponent {
|
|
@@ -26278,7 +26399,7 @@ class ElderSearchBoxComponent {
|
|
|
26278
26399
|
this.searchModel.reset();
|
|
26279
26400
|
}
|
|
26280
26401
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchBoxComponent, deps: [{ token: ElderSearchContextDirective }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26281
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchBoxComponent, selector: "elder-search-box", inputs: { autoPanel: "autoPanel", name: "name", queryKey: "queryKey", placeholder: "placeholder", label: "label", hint: "hint", autocomplete: "autocomplete", appearance: "appearance", dense: "dense" }, host: { classAttribute: "elder-form-field-host" }, queries: [{ propertyName: "advancedSearch", first: true, predicate: ElderSearchPanelComponent, descendants: true }], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }], exportAs: ["elderSearchBox"], ngImport: i0, template: "<div class=\"layout-row place-stretch-center full flex\" style=\"overflow: hidden\">\n <mat-form-field\n *ngIf=\"overlayState$ | async as overlayState\"\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto\" subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\">\n\n <button matPrefix mat-icon-button type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input matInput type=\"text\" [name]=\"name\" [placeholder]=\"placeholder\" #search cdkFocusInitial\n ngModel\n elderSearchInput [elderSearchInputKey]=\"queryKey\" #searchInput=\"elderSearchInput\"\n [autocomplete]=\"(autoPanel && overlayState.hasOverlay) ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"autoPanel && overlayState.hasOverlay && (searchInput?.state$ | async)?.pristine\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n\n <div class=\"layout-row\" matSuffix *ngIf=\"searchModel.userDefinedAttributes$ | async as userDefinedFilters\">\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"userDefinedFilters.length > 0\"\n (click)=\"clearSearch($event)\"\n name=\"clear\" aria-label=\"Clear\">\n <mat-icon>close</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"overlayState.hasOverlay\" name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\">\n <mat-icon\n [matBadge]=\"userDefinedFilters.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"userDefinedFilters.length == 0\"\n matBadgeColor=\"accent\"\n [color]=\"userDefinedFilters.length > 0 ? 'accent' : undefined\"\n >\n filter_list\n </mat-icon>\n </button>\n </div>\n </mat-form-field>\n</div>\n\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n\n <!-- Project the users search inputs here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-raised-button type=\"button\" name=\"clear\"\n (click)=\"clearSearch($event)\">{{'context.reset' | translate}}\n </button>\n\n <button mat-raised-button type=\"button\" name=\"ok\" color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\">Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-box-field{margin-top:4px;margin-bottom:4px}.elder-search-panel-container{min-width:250px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { kind: "directive", type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense", "subscriptSizing", "floatLabel"] }, { kind: "directive", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: ["elderSearchInputKey", "elderSearchInputTransform", "elderSearchInput", "elderSearchInputFallback"], exportAs: ["elderSearchInput"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26402
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchBoxComponent, selector: "elder-search-box", inputs: { autoPanel: "autoPanel", name: "name", queryKey: "queryKey", placeholder: "placeholder", label: "label", hint: "hint", autocomplete: "autocomplete", appearance: "appearance", dense: "dense" }, host: { classAttribute: "elder-form-field-host" }, queries: [{ propertyName: "advancedSearch", first: true, predicate: ElderSearchPanelComponent, descendants: true }], viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true }], exportAs: ["elderSearchBox"], ngImport: i0, template: "<div class=\"layout-row place-stretch-center full flex\" style=\"overflow: hidden\">\n <mat-form-field\n *ngIf=\"overlayState$ | async as overlayState\"\n [appearance]=\"appearance\"\n class=\"elder-search-box-field flex-auto\" subscriptSizing=\"dynamic\"\n [elderDense]=\"dense\">\n\n <button matPrefix mat-icon-button type=\"button\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <input matInput type=\"text\" [name]=\"name\" [placeholder]=\"placeholder\" #search cdkFocusInitial\n ngModel\n elderSearchInput [elderSearchInputKey]=\"queryKey\" #searchInput=\"elderSearchInput\"\n [autocomplete]=\"(autoPanel && overlayState.hasOverlay) ? 'off' : autocomplete\"\n [elderOverlayOrigin]=\"searchPanel\"\n [elderOverlayTrigger]=\"searchPanel\"\n [elderOverlayTriggerType]=\"'focus'\"\n [elderOverlayTriggerEnabled]=\"autoPanel && overlayState.hasOverlay && (searchInput?.state$ | async)?.pristine\"\n >\n <mat-hint *ngIf=\"hint\">{{hint}}</mat-hint>\n\n <div class=\"layout-row\" matSuffix *ngIf=\"searchModel.userDefinedAttributes$ | async as userDefinedFilters\">\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"userDefinedFilters.length > 0\"\n (click)=\"clearSearch($event)\"\n name=\"clear\" aria-label=\"Clear\">\n <mat-icon>close</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"overlayState.hasOverlay\" name=\"openPanel\"\n [elderOverlayTrigger]=\"searchPanel\" (click)=\"blurFocus($event)\">\n <mat-icon\n [matBadge]=\"userDefinedFilters.length\"\n matBadgeSize=\"small\"\n [matBadgeOverlap]=\"true\"\n [matBadgeHidden]=\"userDefinedFilters.length == 0\"\n matBadgeColor=\"accent\"\n [color]=\"userDefinedFilters.length > 0 ? 'accent' : undefined\"\n >\n filter_list\n </mat-icon>\n </button>\n </div>\n </mat-form-field>\n</div>\n\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n <elder-dialog-panel class=\"elder-search-panel-container\">\n\n <!-- Project the users search inputs here -->\n <ng-content select=\"elder-search-panel\"></ng-content>\n\n <div class=\"layout-row place-between-center\">\n <button mat-raised-button type=\"button\" name=\"clear\"\n (click)=\"clearSearch($event)\">{{'context.reset' | translate}}\n </button>\n\n <button mat-raised-button type=\"button\" name=\"ok\" color=\"primary\"\n (click)=\"searchPanel.closeOverlay()\">Ok\n </button>\n </div>\n </elder-dialog-panel>\n</elder-overlay>\n", styles: [".elder-search-box-field{margin-top:4px;margin-bottom:4px}.elder-search-panel-container{min-width:250px}\n"], dependencies: [{ kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { kind: "directive", type: ElderFormFieldDenseDirective, selector: "mat-form-field[elderDense]", inputs: ["elderDense", "subscriptSizing", "floatLabel"] }, { kind: "directive", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: ["elderSearchInputKey", "elderSearchInputTransform", "elderSearchInput", "dataSource", "elderSearchInputFallback", "valueAsId"], exportAs: ["elderSearchInput"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26282
26403
|
}
|
|
26283
26404
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchBoxComponent, decorators: [{
|
|
26284
26405
|
type: Component,
|
|
@@ -26340,18 +26461,224 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
26340
26461
|
}]
|
|
26341
26462
|
}] });
|
|
26342
26463
|
|
|
26464
|
+
class ElderSearchContextFilters {
|
|
26465
|
+
static empty(searchContextId) {
|
|
26466
|
+
return new ElderSearchContextFilters(searchContextId, new Map());
|
|
26467
|
+
}
|
|
26468
|
+
constructor(searchContextId, filters) {
|
|
26469
|
+
this.searchContextId = searchContextId;
|
|
26470
|
+
this.filters = filters;
|
|
26471
|
+
}
|
|
26472
|
+
}
|
|
26473
|
+
|
|
26474
|
+
class ElderSearchUrlBindingService {
|
|
26475
|
+
constructor(router, route) {
|
|
26476
|
+
this.router = router;
|
|
26477
|
+
this.route = route;
|
|
26478
|
+
//A search param has following structure: search-[searchContextId]-[filterId]=[value]
|
|
26479
|
+
//Example: search-browser1-hasStarted=true
|
|
26480
|
+
this._searchMap$ = new BehaviorSubject$1(new Map());
|
|
26481
|
+
this._initialSearchMap$ = new BehaviorSubject$1(new Map());
|
|
26482
|
+
this.searchParamPrefix = "q";
|
|
26483
|
+
this.unsubscribe$ = new Subject();
|
|
26484
|
+
this.router.events.pipe(first()).subscribe(() => {
|
|
26485
|
+
this.handleSearchParameters(this.route.snapshot.queryParams);
|
|
26486
|
+
});
|
|
26487
|
+
this._searchMap$.pipe(takeUntil(this.unsubscribe$)).subscribe(searchMap => {
|
|
26488
|
+
const resetParams = this.resetSearchParams();
|
|
26489
|
+
const queryParams = { ...resetParams, ...this.buildQueryParams(searchMap) };
|
|
26490
|
+
this.router.navigate([], {
|
|
26491
|
+
relativeTo: this.route,
|
|
26492
|
+
queryParams: queryParams,
|
|
26493
|
+
replaceUrl: true,
|
|
26494
|
+
queryParamsHandling: "merge"
|
|
26495
|
+
});
|
|
26496
|
+
});
|
|
26497
|
+
}
|
|
26498
|
+
resetSearchParams() {
|
|
26499
|
+
let params = { ...this.route.snapshot.queryParams };
|
|
26500
|
+
const searchParams = this.extractSearchParameters(params);
|
|
26501
|
+
for (const searchParam of searchParams) {
|
|
26502
|
+
params[searchParam] = null;
|
|
26503
|
+
}
|
|
26504
|
+
return params;
|
|
26505
|
+
}
|
|
26506
|
+
buildQueryParams(searchMap) {
|
|
26507
|
+
const params = {};
|
|
26508
|
+
for (const searchContextId of searchMap.keys()) {
|
|
26509
|
+
const filters = searchMap.get(searchContextId).filters;
|
|
26510
|
+
for (const filter of filters.values()) {
|
|
26511
|
+
params[`${this.searchParamPrefix}-${searchContextId}-${filter.key}`] = this.convertValueToArrayOrSingleValue(filter.value);
|
|
26512
|
+
}
|
|
26513
|
+
}
|
|
26514
|
+
return params;
|
|
26515
|
+
}
|
|
26516
|
+
convertValueToArrayOrSingleValue(value) {
|
|
26517
|
+
return Array.isArray(value) ? `(${value.toString()})` : value;
|
|
26518
|
+
}
|
|
26519
|
+
get initialSearchMap$() {
|
|
26520
|
+
return this._initialSearchMap$;
|
|
26521
|
+
}
|
|
26522
|
+
updateFiltersForContext(searchContextId, filters) {
|
|
26523
|
+
const searchMap = this._searchMap$.getValue();
|
|
26524
|
+
const filtersMap = new Map(filters
|
|
26525
|
+
.filter(filter => filter.value != null)
|
|
26526
|
+
.map(filter => {
|
|
26527
|
+
return [filter.key, filter];
|
|
26528
|
+
}));
|
|
26529
|
+
searchMap.set(searchContextId, new ElderSearchContextFilters(searchContextId, filtersMap));
|
|
26530
|
+
this._searchMap$.next(searchMap);
|
|
26531
|
+
}
|
|
26532
|
+
handleSearchParameters(params) {
|
|
26533
|
+
const searchParamKeys = this.extractSearchParameters(params);
|
|
26534
|
+
const searchMap = this.buildSearchContextMap(params, searchParamKeys);
|
|
26535
|
+
this._searchMap$.next(searchMap);
|
|
26536
|
+
this._initialSearchMap$.next(searchMap);
|
|
26537
|
+
}
|
|
26538
|
+
extractSearchParameters(params) {
|
|
26539
|
+
return Object.getOwnPropertyNames(params).filter(param => param.startsWith(this.searchParamPrefix));
|
|
26540
|
+
}
|
|
26541
|
+
buildSearchContextMap(params, searchParamKeys) {
|
|
26542
|
+
const searchMap = new Map();
|
|
26543
|
+
for (const key of searchParamKeys) {
|
|
26544
|
+
const filterValue = params[key];
|
|
26545
|
+
const filterParamData = this.extractFilterParam(key, filterValue);
|
|
26546
|
+
const filter = this.convertFilterStringToFilter(filterValue, filterParamData);
|
|
26547
|
+
this.checkAndSetFilter(searchMap, filterParamData, filter);
|
|
26548
|
+
}
|
|
26549
|
+
return searchMap;
|
|
26550
|
+
}
|
|
26551
|
+
checkAndSetFilter(searchMap, filterParamData, filter) {
|
|
26552
|
+
if (searchMap.has(filterParamData.searchContextId)) {
|
|
26553
|
+
this.setFilter(searchMap, filterParamData, filter);
|
|
26554
|
+
}
|
|
26555
|
+
else {
|
|
26556
|
+
searchMap.set(filterParamData.searchContextId, ElderSearchContextFilters.empty(filterParamData.searchContextId));
|
|
26557
|
+
this.setFilter(searchMap, filterParamData, filter);
|
|
26558
|
+
}
|
|
26559
|
+
}
|
|
26560
|
+
setFilter(searchMap, filterParamData, filter) {
|
|
26561
|
+
const searchContext = searchMap.get(filterParamData.searchContextId);
|
|
26562
|
+
searchContext.filters.set(filterParamData.filterId, filter);
|
|
26563
|
+
}
|
|
26564
|
+
extractFilterParam(key, filterValue) {
|
|
26565
|
+
const splitParams = key.split("-");
|
|
26566
|
+
return {
|
|
26567
|
+
searchContextId: splitParams[1],
|
|
26568
|
+
filterId: splitParams[2],
|
|
26569
|
+
isArray: this.checkIfParamIsArray(filterValue)
|
|
26570
|
+
};
|
|
26571
|
+
}
|
|
26572
|
+
checkIfParamIsArray(filterValue) {
|
|
26573
|
+
return filterValue.startsWith("(") && filterValue.endsWith(")");
|
|
26574
|
+
}
|
|
26575
|
+
convertFilterStringToFilter(paramValue, filterParamData) {
|
|
26576
|
+
let value = paramValue;
|
|
26577
|
+
if (this.isSingularArrayValue(value, filterParamData)) {
|
|
26578
|
+
value = this.convertValueToArray(value);
|
|
26579
|
+
}
|
|
26580
|
+
return new Filter(filterParamData.filterId, value);
|
|
26581
|
+
}
|
|
26582
|
+
isSingularArrayValue(value, filterParamData) {
|
|
26583
|
+
return !Array.isArray(value) && filterParamData.isArray;
|
|
26584
|
+
}
|
|
26585
|
+
convertValueToArray(value) {
|
|
26586
|
+
return value.slice(1).slice(0, -1).split(",");
|
|
26587
|
+
}
|
|
26588
|
+
ngOnDestroy() {
|
|
26589
|
+
this.unsubscribe$.next();
|
|
26590
|
+
this.unsubscribe$.complete();
|
|
26591
|
+
}
|
|
26592
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchUrlBindingService, deps: [{ token: i1$3.Router }, { token: i1$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26593
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchUrlBindingService, providedIn: "root" }); }
|
|
26594
|
+
}
|
|
26595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchUrlBindingService, decorators: [{
|
|
26596
|
+
type: Injectable,
|
|
26597
|
+
args: [{
|
|
26598
|
+
providedIn: "root"
|
|
26599
|
+
}]
|
|
26600
|
+
}], ctorParameters: function () { return [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }]; } });
|
|
26601
|
+
|
|
26602
|
+
/**
|
|
26603
|
+
* The search container manages a group of search-inputs
|
|
26604
|
+
* and holds their values in a central search model.
|
|
26605
|
+
*/
|
|
26606
|
+
class ElderSearchContextUrlBindingDirective {
|
|
26607
|
+
/***************************************************************************
|
|
26608
|
+
* *
|
|
26609
|
+
* Constructor *
|
|
26610
|
+
* *
|
|
26611
|
+
**************************************************************************/
|
|
26612
|
+
constructor(searchContext, urlBindingService) {
|
|
26613
|
+
this.searchContext = searchContext;
|
|
26614
|
+
this.urlBindingService = urlBindingService;
|
|
26615
|
+
/***************************************************************************
|
|
26616
|
+
* *
|
|
26617
|
+
* Fields *
|
|
26618
|
+
* *
|
|
26619
|
+
**************************************************************************/
|
|
26620
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
26621
|
+
this._unsubscribe$ = new Subject$1();
|
|
26622
|
+
}
|
|
26623
|
+
/***************************************************************************
|
|
26624
|
+
* *
|
|
26625
|
+
* Life Cycle *
|
|
26626
|
+
* *
|
|
26627
|
+
**************************************************************************/
|
|
26628
|
+
ngAfterViewInit() {
|
|
26629
|
+
this.urlBindingService.initialSearchMap$.pipe(first(), takeUntil(this._unsubscribe$), filter(searchMap => searchMap.has(this._urlBinding)), map(searchMap => searchMap.get(this._urlBinding)), map(filterMap => Array.from(filterMap.filters.values()))).subscribe(filters => {
|
|
26630
|
+
this.searchContext.registerInitialFilters(filters);
|
|
26631
|
+
});
|
|
26632
|
+
this.searchContext.filters$.pipe(takeUntil(this._unsubscribe$), skip(2) //Skip empty and skip initial filter
|
|
26633
|
+
).subscribe(filters => this.urlBindingService.updateFiltersForContext(this._urlBinding, filters));
|
|
26634
|
+
}
|
|
26635
|
+
ngOnDestroy() {
|
|
26636
|
+
this._unsubscribe$.next();
|
|
26637
|
+
this._unsubscribe$.complete();
|
|
26638
|
+
}
|
|
26639
|
+
/***************************************************************************
|
|
26640
|
+
* *
|
|
26641
|
+
* Properties *
|
|
26642
|
+
* *
|
|
26643
|
+
**************************************************************************/
|
|
26644
|
+
set elderSearchContextUrlBinding(value) {
|
|
26645
|
+
this._urlBinding = value;
|
|
26646
|
+
}
|
|
26647
|
+
get elderSearchContextUrlBinding() {
|
|
26648
|
+
return this._urlBinding;
|
|
26649
|
+
}
|
|
26650
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchContextUrlBindingDirective, deps: [{ token: ElderSearchContextDirective }, { token: ElderSearchUrlBindingService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26651
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: ElderSearchContextUrlBindingDirective, selector: "[elderSearchContextUrlBinding]", inputs: { elderSearchContextUrlBinding: "elderSearchContextUrlBinding" }, exportAs: ["elderSearchContextUrlBinding"], ngImport: i0 }); }
|
|
26652
|
+
}
|
|
26653
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchContextUrlBindingDirective, decorators: [{
|
|
26654
|
+
type: Directive,
|
|
26655
|
+
args: [{
|
|
26656
|
+
selector: "[elderSearchContextUrlBinding]",
|
|
26657
|
+
exportAs: "elderSearchContextUrlBinding"
|
|
26658
|
+
}]
|
|
26659
|
+
}], ctorParameters: function () { return [{ type: ElderSearchContextDirective }, { type: ElderSearchUrlBindingService }]; }, propDecorators: { elderSearchContextUrlBinding: [{
|
|
26660
|
+
type: Input
|
|
26661
|
+
}] } });
|
|
26662
|
+
|
|
26343
26663
|
class ElderSearchModule {
|
|
26344
26664
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26345
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchModule, declarations: [ElderSearchContextDirective,
|
|
26346
|
-
|
|
26665
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchModule, declarations: [ElderSearchContextDirective,
|
|
26666
|
+
ElderSearchContextUrlBindingDirective,
|
|
26667
|
+
ElderSearchInputDirective,
|
|
26668
|
+
ElderInitialValueDirective,
|
|
26669
|
+
ElderSearchBoxComponent,
|
|
26670
|
+
ElderSearchPanelComponent], imports: [CommonModule, FormsModule,
|
|
26347
26671
|
MatInputModule, MatButtonModule, MatIconModule,
|
|
26348
26672
|
MatBadgeModule,
|
|
26349
26673
|
A11yModule,
|
|
26350
26674
|
ElderOverlayModule,
|
|
26351
26675
|
ElderPanelModule,
|
|
26352
26676
|
ElderFormsDirectivesModule,
|
|
26353
|
-
TranslateModule], exports: [ElderSearchContextDirective,
|
|
26354
|
-
|
|
26677
|
+
TranslateModule], exports: [ElderSearchContextDirective,
|
|
26678
|
+
ElderSearchContextUrlBindingDirective,
|
|
26679
|
+
ElderSearchInputDirective,
|
|
26680
|
+
ElderSearchBoxComponent,
|
|
26681
|
+
ElderSearchPanelComponent] }); }
|
|
26355
26682
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ElderSearchModule, imports: [CommonModule, FormsModule,
|
|
26356
26683
|
MatInputModule, MatButtonModule, MatIconModule,
|
|
26357
26684
|
MatBadgeModule,
|
|
@@ -26375,13 +26702,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
26375
26702
|
TranslateModule
|
|
26376
26703
|
],
|
|
26377
26704
|
declarations: [
|
|
26378
|
-
ElderSearchContextDirective,
|
|
26379
|
-
|
|
26705
|
+
ElderSearchContextDirective,
|
|
26706
|
+
ElderSearchContextUrlBindingDirective,
|
|
26707
|
+
ElderSearchInputDirective,
|
|
26708
|
+
ElderInitialValueDirective,
|
|
26709
|
+
ElderSearchBoxComponent,
|
|
26710
|
+
ElderSearchPanelComponent
|
|
26380
26711
|
],
|
|
26381
26712
|
exports: [
|
|
26382
|
-
ElderSearchContextDirective,
|
|
26383
|
-
|
|
26384
|
-
|
|
26713
|
+
ElderSearchContextDirective,
|
|
26714
|
+
ElderSearchContextUrlBindingDirective,
|
|
26715
|
+
ElderSearchInputDirective,
|
|
26716
|
+
ElderSearchBoxComponent,
|
|
26717
|
+
ElderSearchPanelComponent
|
|
26718
|
+
]
|
|
26385
26719
|
}]
|
|
26386
26720
|
}] });
|
|
26387
26721
|
|
|
@@ -30337,5 +30671,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
30337
30671
|
* Generated bundle index. Do not edit.
|
|
30338
30672
|
*/
|
|
30339
30673
|
|
|
30340
|
-
export { ActivationEventSource, Arrays, AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceChangeType, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeComponent, ElderBadgeDirective, ElderBadgeModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectBase, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveMap, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, buildFormIntegrationProviders, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
|
|
30674
|
+
export { ActivationEventSource, Arrays, AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceChangeType, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeComponent, ElderBadgeDirective, ElderBadgeModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectBase, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchContextUrlBindingDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveMap, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, buildFormIntegrationProviders, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
|
|
30341
30675
|
//# sourceMappingURL=elderbyte-ngx-starter.mjs.map
|