@elderbyte/ngx-starter 16.3.4 → 16.4.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/data-context/data-context-active-page.mjs +5 -5
- package/esm2022/lib/common/data/data-context/data-context-auto-starter.mjs +2 -2
- package/esm2022/lib/common/data/data-context/data-context-base.mjs +58 -28
- package/esm2022/lib/common/data/data-context/data-context-continuable-base.mjs +7 -7
- package/esm2022/lib/common/data/data-context/data-context-continuable-paged.mjs +10 -10
- package/esm2022/lib/common/data/data-context/data-context-continuable-token.mjs +8 -8
- package/esm2022/lib/common/data/data-context/data-context-simple.mjs +6 -5
- package/esm2022/lib/common/data/data-context/data-context-source-event-binding.mjs +2 -2
- package/esm2022/lib/common/data/data-context/data-context.mjs +1 -1
- package/esm2022/lib/common/data/filters/filter-context.mjs +12 -26
- package/esm2022/lib/common/data/required-filter-evaluator.mjs +2 -3
- package/esm2022/lib/common/data/sort-context.mjs +2 -2
- package/esm2022/lib/common/utils/filter-util.mjs +19 -1
- package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +2 -2
- package/esm2022/lib/components/forms/search/domain/context/search-context.mjs +57 -0
- package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +42 -0
- package/esm2022/lib/components/forms/search/domain/input/search-input-state.mjs +81 -0
- package/esm2022/lib/components/forms/search/domain/input/search-input.mjs +2 -0
- package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +74 -0
- package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +162 -0
- package/esm2022/lib/components/forms/search/domain/url/search-query-params-parser.mjs +81 -0
- package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +88 -50
- package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +6 -5
- package/esm2022/lib/components/forms/search/elder-search.module.mjs +30 -9
- package/fesm2022/elderbyte-ngx-starter.mjs +663 -432
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/data/data-context/data-context-base.d.ts +10 -3
- package/lib/common/data/data-context/data-context.d.ts +6 -1
- package/lib/common/data/filters/filter-context.d.ts +1 -6
- package/lib/common/utils/filter-util.d.ts +1 -0
- package/lib/components/forms/search/domain/context/search-context.d.ts +38 -0
- package/lib/components/forms/search/domain/context/search-context.service.d.ts +25 -0
- package/lib/components/forms/search/{elder-search-context-url-binding.directive.d.ts → domain/url/elder-search-url.directive.d.ts} +12 -13
- package/lib/components/forms/search/domain/url/elder-search-url.service.d.ts +60 -0
- package/lib/components/forms/search/domain/url/search-query-params-parser.d.ts +36 -0
- package/lib/components/forms/search/elder-search-context.directive.d.ts +29 -16
- package/lib/components/forms/search/elder-search-input.directive.d.ts +2 -2
- package/lib/components/forms/search/elder-search.module.d.ts +5 -3
- package/package.json +1 -1
- package/esm2022/lib/components/forms/search/elder-search-context-url-binding.directive.mjs +0 -71
- package/esm2022/lib/components/forms/search/model/search-input-state.mjs +0 -81
- package/esm2022/lib/components/forms/search/model/search-input.mjs +0 -2
- package/esm2022/lib/components/forms/search/search-box/elder-search-context-filters.mjs +0 -10
- package/esm2022/lib/components/forms/search/search-box/elder-search-url-binding.service.mjs +0 -184
- package/lib/components/forms/search/search-box/elder-search-context-filters.d.ts +0 -7
- package/lib/components/forms/search/search-box/elder-search-url-binding.service.d.ts +0 -74
- /package/lib/components/forms/search/{model → domain/input}/search-input-state.d.ts +0 -0
- /package/lib/components/forms/search/{model → domain/input}/search-input.d.ts +0 -0
|
@@ -5,8 +5,8 @@ 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, lastValueFrom, Subject,
|
|
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';
|
|
8
|
+
import { timer, defer, ReplaySubject, concat, finalize, exhaustMap, BehaviorSubject, lastValueFrom, Subject, switchMap, of, combineLatest, EMPTY, merge, forkJoin, throwError, mergeWith, Observable, zip, mergeMap as mergeMap$1, fromEvent, combineLatestWith as combineLatestWith$1, skipUntil, NEVER } from 'rxjs';
|
|
9
|
+
import { tap, takeUntil, takeWhile, map, filter, distinctUntilChanged, debounceTime, catchError, first, take, switchMap as switchMap$1, 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';
|
|
12
12
|
import { DataSource } from '@angular/cdk/collections';
|
|
@@ -20,7 +20,7 @@ import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
|
20
20
|
import * as i5 from '@angular/material/form-field';
|
|
21
21
|
import { MatFormFieldControl, MatFormField, MatFormFieldModule } from '@angular/material/form-field';
|
|
22
22
|
import * as i1$3 from '@angular/router';
|
|
23
|
-
import { RouterModule, NavigationEnd, RouterLinkActive } from '@angular/router';
|
|
23
|
+
import { RouterModule, NavigationEnd, RouterLinkActive, convertToParamMap } from '@angular/router';
|
|
24
24
|
import * as i2$1 from '@elderbyte/ngx-simple-webstorage';
|
|
25
25
|
import { SimpleWebStorageModule } from '@elderbyte/ngx-simple-webstorage';
|
|
26
26
|
import * as i4 from '@angular/material/slide-toggle';
|
|
@@ -84,7 +84,6 @@ import { MatSidenavModule } from '@angular/material/sidenav';
|
|
|
84
84
|
import * as i6 from '@angular/material/datepicker';
|
|
85
85
|
import { MatDatepicker, MatDatepickerModule } from '@angular/material/datepicker';
|
|
86
86
|
import localeDECH from '@angular/common/locales/de-CH';
|
|
87
|
-
import { BehaviorSubject as BehaviorSubject$1 } from 'rxjs/internal/BehaviorSubject';
|
|
88
87
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
89
88
|
import * as i1$a from '@angular/cdk/overlay';
|
|
90
89
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
@@ -2530,6 +2529,134 @@ class Filter {
|
|
|
2530
2529
|
}
|
|
2531
2530
|
}
|
|
2532
2531
|
|
|
2532
|
+
class FilterUtil {
|
|
2533
|
+
static { this.logger = LoggerFactory.getLogger(FilterUtil.constructor.name); }
|
|
2534
|
+
static equals(aFilters, bFilters) {
|
|
2535
|
+
if (aFilters.length !== bFilters.length) {
|
|
2536
|
+
return false;
|
|
2537
|
+
}
|
|
2538
|
+
if (aFilters.length === 0 && bFilters.length === 0) {
|
|
2539
|
+
return true;
|
|
2540
|
+
}
|
|
2541
|
+
// The both filter arrays have the same length, so we must compare them by value
|
|
2542
|
+
const bIndex = new Map();
|
|
2543
|
+
bFilters.forEach(f => bIndex.set(f.key, f));
|
|
2544
|
+
for (const fa of aFilters) {
|
|
2545
|
+
const bFilter = bIndex.get(fa.key);
|
|
2546
|
+
if (!Filter.equals(bFilter, fa)) {
|
|
2547
|
+
return false;
|
|
2548
|
+
}
|
|
2549
|
+
}
|
|
2550
|
+
return true;
|
|
2551
|
+
}
|
|
2552
|
+
/**
|
|
2553
|
+
* Merge the provided filter sets. The second parameter will
|
|
2554
|
+
* replace filters which exist in the first.
|
|
2555
|
+
* @param filtersA
|
|
2556
|
+
* @param filtersB
|
|
2557
|
+
*/
|
|
2558
|
+
static mergeFlat(filtersA, filtersB) {
|
|
2559
|
+
const mergeContext = new FilterContext();
|
|
2560
|
+
mergeContext.updateFilters(filtersA);
|
|
2561
|
+
mergeContext.updateFilters(filtersB);
|
|
2562
|
+
return mergeContext.filtersSnapshot;
|
|
2563
|
+
}
|
|
2564
|
+
/**
|
|
2565
|
+
* Performs a combining merge of the provided filters.
|
|
2566
|
+
* Array based filter values will be combined.
|
|
2567
|
+
* @param filtersA
|
|
2568
|
+
* @param filtersB
|
|
2569
|
+
*/
|
|
2570
|
+
static mergeCombine(filtersA, filtersB) {
|
|
2571
|
+
const mergeContext = new FilterContext();
|
|
2572
|
+
mergeContext.updateFilters(filtersA);
|
|
2573
|
+
mergeContext.mergeFilters(filtersB);
|
|
2574
|
+
return mergeContext.filtersSnapshot;
|
|
2575
|
+
}
|
|
2576
|
+
static strip(base, toRemove) {
|
|
2577
|
+
const removeMap = new Map();
|
|
2578
|
+
toRemove.forEach(r => removeMap.set(r.key, r));
|
|
2579
|
+
return base.map(filter => {
|
|
2580
|
+
if (removeMap.has(filter.key)) {
|
|
2581
|
+
const stripped = FilterUtil.stripValue(filter.value, removeMap.get(filter.key).value);
|
|
2582
|
+
if (stripped !== null) {
|
|
2583
|
+
return new Filter(filter.key, stripped);
|
|
2584
|
+
}
|
|
2585
|
+
else {
|
|
2586
|
+
return null;
|
|
2587
|
+
}
|
|
2588
|
+
}
|
|
2589
|
+
else {
|
|
2590
|
+
return filter;
|
|
2591
|
+
}
|
|
2592
|
+
}).filter(f => !!f);
|
|
2593
|
+
}
|
|
2594
|
+
static stripValue(baseValue, removeValue) {
|
|
2595
|
+
if (Array.isArray(baseValue)) {
|
|
2596
|
+
if (Array.isArray(removeValue)) {
|
|
2597
|
+
const filtered = baseValue.filter(b => removeValue.indexOf(b) === -1);
|
|
2598
|
+
if (filtered.length > 0) {
|
|
2599
|
+
return filtered;
|
|
2600
|
+
}
|
|
2601
|
+
}
|
|
2602
|
+
else {
|
|
2603
|
+
const filtered = baseValue.filter(b => b != removeValue);
|
|
2604
|
+
if (filtered.length > 0) {
|
|
2605
|
+
return filtered;
|
|
2606
|
+
}
|
|
2607
|
+
}
|
|
2608
|
+
}
|
|
2609
|
+
return null;
|
|
2610
|
+
}
|
|
2611
|
+
static filterData(data, filters) {
|
|
2612
|
+
FilterUtil.logger.debug('Filtering data with ' + data.length + ' items.', filters);
|
|
2613
|
+
if (filters && filters.length > 0) {
|
|
2614
|
+
for (const filter of filters) {
|
|
2615
|
+
data = data.filter(e => FilterUtil.matches(e, filter));
|
|
2616
|
+
}
|
|
2617
|
+
}
|
|
2618
|
+
return data;
|
|
2619
|
+
}
|
|
2620
|
+
static matches(entity, filter) {
|
|
2621
|
+
if (filter.value === null || filter.value === undefined) {
|
|
2622
|
+
return true;
|
|
2623
|
+
}
|
|
2624
|
+
let value;
|
|
2625
|
+
if (entity === null || entity === undefined) {
|
|
2626
|
+
value = null;
|
|
2627
|
+
}
|
|
2628
|
+
else if (typeof entity === 'object') {
|
|
2629
|
+
value = entity[filter.key];
|
|
2630
|
+
}
|
|
2631
|
+
else {
|
|
2632
|
+
value = String(entity); // Support filtering primitive values
|
|
2633
|
+
}
|
|
2634
|
+
if (Array.isArray(filter.value)) {
|
|
2635
|
+
for (const val of filter.value) {
|
|
2636
|
+
if (FilterUtil.matchesValue(value, val)) {
|
|
2637
|
+
return true;
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
return false;
|
|
2641
|
+
}
|
|
2642
|
+
else {
|
|
2643
|
+
return FilterUtil.matchesValue(value, filter.value);
|
|
2644
|
+
}
|
|
2645
|
+
}
|
|
2646
|
+
static matchesValue(haystack, needle) {
|
|
2647
|
+
if (haystack === needle) {
|
|
2648
|
+
return true;
|
|
2649
|
+
}
|
|
2650
|
+
if (haystack === null || haystack === undefined) {
|
|
2651
|
+
return false;
|
|
2652
|
+
}
|
|
2653
|
+
const str = String(haystack);
|
|
2654
|
+
const match = str.toLowerCase().startsWith(needle.toLowerCase());
|
|
2655
|
+
// FilterUtil.logger.debug('Haystack: ' + str + ' starts with needle: ' + needle + ' --> ' + match);
|
|
2656
|
+
return match;
|
|
2657
|
+
}
|
|
2658
|
+
}
|
|
2659
|
+
|
|
2533
2660
|
class FilterContext {
|
|
2534
2661
|
constructor() {
|
|
2535
2662
|
/***************************************************************************
|
|
@@ -2538,6 +2665,11 @@ class FilterContext {
|
|
|
2538
2665
|
* *
|
|
2539
2666
|
**************************************************************************/
|
|
2540
2667
|
this._filters$ = new BehaviorSubject([]);
|
|
2668
|
+
/***************************************************************************
|
|
2669
|
+
* *
|
|
2670
|
+
* Private methods *
|
|
2671
|
+
* *
|
|
2672
|
+
**************************************************************************/
|
|
2541
2673
|
}
|
|
2542
2674
|
static empty() {
|
|
2543
2675
|
return new FilterContext();
|
|
@@ -2583,11 +2715,14 @@ class FilterContext {
|
|
|
2583
2715
|
* Read API *
|
|
2584
2716
|
* *
|
|
2585
2717
|
**************************************************************************/
|
|
2718
|
+
get isEmpty() {
|
|
2719
|
+
return this.filtersSnapshot.length == 0;
|
|
2720
|
+
}
|
|
2586
2721
|
get filters() {
|
|
2587
|
-
return this._filters$.asObservable().pipe(distinctUntilChanged((a, b) =>
|
|
2722
|
+
return this._filters$.asObservable().pipe(distinctUntilChanged((a, b) => FilterUtil.equals(a, b)));
|
|
2588
2723
|
}
|
|
2589
2724
|
get filtersSnapshot() {
|
|
2590
|
-
return this._filters$.getValue();
|
|
2725
|
+
return [...this._filters$.getValue()];
|
|
2591
2726
|
}
|
|
2592
2727
|
findFilterValue(key) {
|
|
2593
2728
|
const f = this.findFilter(key);
|
|
@@ -2652,29 +2787,6 @@ class FilterContext {
|
|
|
2652
2787
|
this.updateFilter(Filter.merge(existing, filter));
|
|
2653
2788
|
}
|
|
2654
2789
|
}
|
|
2655
|
-
/***************************************************************************
|
|
2656
|
-
* *
|
|
2657
|
-
* Private methods *
|
|
2658
|
-
* *
|
|
2659
|
-
**************************************************************************/
|
|
2660
|
-
equals(aFilters, bFilters) {
|
|
2661
|
-
if (aFilters.length !== bFilters.length) {
|
|
2662
|
-
return false;
|
|
2663
|
-
}
|
|
2664
|
-
if (aFilters.length === 0 && bFilters.length === 0) {
|
|
2665
|
-
return true;
|
|
2666
|
-
}
|
|
2667
|
-
// The both filter arrays have the same length, so we must compare them by value
|
|
2668
|
-
const bIndex = new Map();
|
|
2669
|
-
bFilters.forEach(f => bIndex.set(f.key, f));
|
|
2670
|
-
for (const fa of aFilters) {
|
|
2671
|
-
const bFilter = bIndex.get(fa.key);
|
|
2672
|
-
if (!Filter.equals(bFilter, fa)) {
|
|
2673
|
-
return false;
|
|
2674
|
-
}
|
|
2675
|
-
}
|
|
2676
|
-
return true;
|
|
2677
|
-
}
|
|
2678
2790
|
}
|
|
2679
2791
|
|
|
2680
2792
|
class Sort {
|
|
@@ -3380,7 +3492,7 @@ class SortContext {
|
|
|
3380
3492
|
return this._sorts.asObservable();
|
|
3381
3493
|
}
|
|
3382
3494
|
get sortsSnapshot() {
|
|
3383
|
-
return this._sorts.getValue();
|
|
3495
|
+
return [...this._sorts.getValue()];
|
|
3384
3496
|
}
|
|
3385
3497
|
findSortDirection(prop) {
|
|
3386
3498
|
const f = this.findSort(prop);
|
|
@@ -3431,7 +3543,28 @@ class SortContext {
|
|
|
3431
3543
|
}
|
|
3432
3544
|
}
|
|
3433
3545
|
|
|
3546
|
+
class ReloadRequest {
|
|
3547
|
+
constructor(number, reason) {
|
|
3548
|
+
this.number = number;
|
|
3549
|
+
this.reason = reason;
|
|
3550
|
+
}
|
|
3551
|
+
}
|
|
3552
|
+
class AfterReload {
|
|
3553
|
+
constructor(request, result) {
|
|
3554
|
+
this.request = request;
|
|
3555
|
+
this.result = result;
|
|
3556
|
+
}
|
|
3557
|
+
fulfills(minRequest) {
|
|
3558
|
+
return this.request.number >= minRequest.number;
|
|
3559
|
+
}
|
|
3560
|
+
}
|
|
3434
3561
|
class DataContextBase extends DataSource {
|
|
3562
|
+
/***************************************************************************
|
|
3563
|
+
* *
|
|
3564
|
+
* Fields *
|
|
3565
|
+
* *
|
|
3566
|
+
**************************************************************************/
|
|
3567
|
+
static { this.DC_ID_COUNTER = 0; }
|
|
3435
3568
|
/***************************************************************************
|
|
3436
3569
|
* *
|
|
3437
3570
|
* Constructor *
|
|
@@ -3442,11 +3575,6 @@ class DataContextBase extends DataSource {
|
|
|
3442
3575
|
this._indexFn = _indexFn;
|
|
3443
3576
|
this._localApply = _localApply;
|
|
3444
3577
|
this._localSort = _localSort;
|
|
3445
|
-
/***************************************************************************
|
|
3446
|
-
* *
|
|
3447
|
-
* Fields *
|
|
3448
|
-
* *
|
|
3449
|
-
**************************************************************************/
|
|
3450
3578
|
this.baselog = LoggerFactory.getLogger('DataContextBase');
|
|
3451
3579
|
this._filter = new FilterContext();
|
|
3452
3580
|
this._sort = new SortContext();
|
|
@@ -3455,18 +3583,20 @@ class DataContextBase extends DataSource {
|
|
|
3455
3583
|
this._started = new BehaviorSubject(false);
|
|
3456
3584
|
this._closed = new BehaviorSubject(false);
|
|
3457
3585
|
this._customIndex = new Map();
|
|
3586
|
+
this._reloadCounter = 0;
|
|
3458
3587
|
this._reloadQueue = new Subject();
|
|
3459
|
-
this.
|
|
3588
|
+
this._reloaded = new Subject();
|
|
3589
|
+
this.destroy$ = new Subject();
|
|
3590
|
+
this.id = 'DataContext#' + (++DataContextBase.DC_ID_COUNTER);
|
|
3460
3591
|
this._dataSource = dataSource;
|
|
3461
3592
|
this._data = new IndexedEntities(e => dataSource.getId(e), _localSort, this._sort);
|
|
3462
3593
|
this._loading = this._status.pipe(map(status => status.loading));
|
|
3463
|
-
this._filter.filters.pipe(filter(() => this.started), takeUntil(this.
|
|
3464
|
-
this._sort.sorts.pipe(filter(() => this.started), takeUntil(this.
|
|
3465
|
-
this._reloadQueue.pipe(
|
|
3466
|
-
this.baselog.error('Reload queue detected error, bad!', err);
|
|
3467
|
-
return
|
|
3468
|
-
})).subscribe(
|
|
3469
|
-
// Maybe skipMap the real requests for auto abort pending (except for continuation / paged)
|
|
3594
|
+
this._filter.filters.pipe(filter(() => this.started), takeUntil(this.destroy$)).subscribe(filters => this.onFiltersChanged(filters));
|
|
3595
|
+
this._sort.sorts.pipe(filter(() => this.started), takeUntil(this.destroy$)).subscribe(sorts => this.onSortsChanged(sorts));
|
|
3596
|
+
this._reloadQueue.pipe(takeUntil(this.destroy$), filter(request => this.started), debounceTime(50), switchMap(request => this.reloadNow(request).pipe(map(result => new AfterReload(request, result)), catchError(err => {
|
|
3597
|
+
this.baselog.error(this.id + ': Reload queue detected error, bad!', err);
|
|
3598
|
+
return of(new AfterReload(request, err));
|
|
3599
|
+
})))).subscribe(afterReload => this._reloaded.next(afterReload));
|
|
3470
3600
|
}
|
|
3471
3601
|
/***************************************************************************
|
|
3472
3602
|
* *
|
|
@@ -3545,22 +3675,28 @@ class DataContextBase extends DataSource {
|
|
|
3545
3675
|
**************************************************************************/
|
|
3546
3676
|
start(sorts, filters) {
|
|
3547
3677
|
if (this.isClosed) {
|
|
3548
|
-
throw new Error('Restarting a closed DataContext is not possible!'); // See unsubscribe$
|
|
3678
|
+
throw new Error(this.id + ': Restarting a closed DataContext is not possible!'); // See unsubscribe$
|
|
3549
3679
|
}
|
|
3550
|
-
this.baselog.debug('Starting fresh dataContext ...');
|
|
3551
3680
|
this.started = false;
|
|
3552
3681
|
this._sort.replaceSorts(sorts || this.sort.sortsSnapshot);
|
|
3553
3682
|
this._filter.replaceFilters(filters || this.filter.filtersSnapshot);
|
|
3683
|
+
this.baselog.debug(this.id + ': Start ...', {
|
|
3684
|
+
dataSource: this.dataSource,
|
|
3685
|
+
sort: this._sort.sortsSnapshot,
|
|
3686
|
+
filter: this._filter.filtersSnapshot
|
|
3687
|
+
});
|
|
3554
3688
|
this.started = true;
|
|
3555
|
-
return this.
|
|
3689
|
+
return this.reload('START');
|
|
3556
3690
|
}
|
|
3557
|
-
reload() {
|
|
3558
|
-
|
|
3559
|
-
this.
|
|
3691
|
+
reload(reason) {
|
|
3692
|
+
const request = new ReloadRequest(++this._reloadCounter, reason);
|
|
3693
|
+
this.baselog.debug(this.id + ': Enqueuing reload request #' + request.number + ' [' + reason + ']');
|
|
3694
|
+
this._reloadQueue.next(request);
|
|
3695
|
+
return this._reloaded.pipe(filter(reload => reload.fulfills(request)), map(reload => reload.result));
|
|
3560
3696
|
}
|
|
3561
3697
|
findByIndex(key) {
|
|
3562
3698
|
if (!this._indexFn) {
|
|
3563
|
-
throw new Error('findByIndex requires you to pass a index function!');
|
|
3699
|
+
throw new Error(this.id + ': findByIndex requires you to pass a index function!');
|
|
3564
3700
|
}
|
|
3565
3701
|
return this._customIndex.get(key);
|
|
3566
3702
|
}
|
|
@@ -3572,14 +3708,14 @@ class DataContextBase extends DataSource {
|
|
|
3572
3708
|
*/
|
|
3573
3709
|
close() {
|
|
3574
3710
|
this.started = false;
|
|
3575
|
-
this.
|
|
3576
|
-
this.
|
|
3711
|
+
this.destroy$.next();
|
|
3712
|
+
this.destroy$.complete();
|
|
3577
3713
|
this._closed.next(true);
|
|
3578
3714
|
this._data.destroy();
|
|
3579
3715
|
this._total.complete();
|
|
3580
3716
|
this._status.complete();
|
|
3581
3717
|
this.clearAll();
|
|
3582
|
-
this.baselog.debug('
|
|
3718
|
+
this.baselog.debug(this.id + ': Has been closed and resources cleaned up!');
|
|
3583
3719
|
}
|
|
3584
3720
|
refresh() {
|
|
3585
3721
|
this._data.notify();
|
|
@@ -3592,7 +3728,13 @@ class DataContextBase extends DataSource {
|
|
|
3592
3728
|
* Protected methods *
|
|
3593
3729
|
* *
|
|
3594
3730
|
**************************************************************************/
|
|
3595
|
-
reloadNow() {
|
|
3731
|
+
reloadNow(request) {
|
|
3732
|
+
this.baselog.debug(this.id + ": reloadNow triggered. Request #" + request.number + ' ' + request.reason, {
|
|
3733
|
+
filter: this._filter.filtersSnapshot,
|
|
3734
|
+
sort: this._sort.sortsSnapshot,
|
|
3735
|
+
dataSource: this.dataSource,
|
|
3736
|
+
request: request
|
|
3737
|
+
});
|
|
3596
3738
|
return this.reloadInternal(); // TODO This should actually return the real (http) request
|
|
3597
3739
|
}
|
|
3598
3740
|
/**
|
|
@@ -3690,7 +3832,7 @@ class DataContextBase extends DataSource {
|
|
|
3690
3832
|
*/
|
|
3691
3833
|
onSortsChanged(sorts) {
|
|
3692
3834
|
if (!this._localSort) {
|
|
3693
|
-
this.reload();
|
|
3835
|
+
this.reload('Sort Changed');
|
|
3694
3836
|
}
|
|
3695
3837
|
else {
|
|
3696
3838
|
this.setData(this.dataSnapshot, true);
|
|
@@ -3700,7 +3842,7 @@ class DataContextBase extends DataSource {
|
|
|
3700
3842
|
* Occurs when the filter has changed.
|
|
3701
3843
|
*/
|
|
3702
3844
|
onFiltersChanged(filters) {
|
|
3703
|
-
this.reload();
|
|
3845
|
+
this.reload('Filters Changed');
|
|
3704
3846
|
}
|
|
3705
3847
|
onError(err) {
|
|
3706
3848
|
this.onStatus(DataContextStatus.error(err));
|
|
@@ -3762,18 +3904,19 @@ class DataContextSimple extends DataContextBase {
|
|
|
3762
3904
|
this.onIdle();
|
|
3763
3905
|
this.setTotal(list.length);
|
|
3764
3906
|
this.setData(list);
|
|
3765
|
-
this.log.debug('
|
|
3907
|
+
this.log.debug(this.id + ': Got list data: ' + list.length);
|
|
3766
3908
|
subject.next();
|
|
3767
3909
|
}, err => {
|
|
3768
3910
|
this.onError(err);
|
|
3769
3911
|
this.clearAll();
|
|
3770
|
-
this.log.error('
|
|
3912
|
+
this.log.error(this.id + ': Failed to query data', err);
|
|
3771
3913
|
subject.error(err);
|
|
3772
3914
|
});
|
|
3773
3915
|
}
|
|
3774
3916
|
else {
|
|
3775
|
-
this.
|
|
3776
|
-
|
|
3917
|
+
const errorMsg = this.id + ': Skipping data context load - no list fetcher present!';
|
|
3918
|
+
this.log.warn(errorMsg);
|
|
3919
|
+
subject.error(new Error(errorMsg));
|
|
3777
3920
|
}
|
|
3778
3921
|
return subject.pipe(first());
|
|
3779
3922
|
}
|
|
@@ -3805,16 +3948,16 @@ class DataContextContinuableBase extends DataContextBase {
|
|
|
3805
3948
|
* *
|
|
3806
3949
|
**************************************************************************/
|
|
3807
3950
|
loadAll(sorts, filters) {
|
|
3808
|
-
this.cblogger.debug('Starting to load all data ...');
|
|
3951
|
+
this.cblogger.debug(this.id + ': Starting to load all data ...');
|
|
3809
3952
|
// load first page
|
|
3810
3953
|
this.start(sorts, filters)
|
|
3811
3954
|
.subscribe(() => {
|
|
3812
|
-
this.cblogger.debug('First page has been loaded. Loading remaining data ...');
|
|
3955
|
+
this.cblogger.debug(this.id + ': First page has been loaded. Loading remaining data ...');
|
|
3813
3956
|
// load rest in a recursive manner
|
|
3814
3957
|
this.loadAllRec();
|
|
3815
3958
|
}, err => {
|
|
3816
3959
|
this.onError(err);
|
|
3817
|
-
this.cblogger.error('Failed to load first page of load all procedure!', err);
|
|
3960
|
+
this.cblogger.error(this.id + ': Failed to load first page of load all procedure!', err);
|
|
3818
3961
|
});
|
|
3819
3962
|
}
|
|
3820
3963
|
get chunkSize() {
|
|
@@ -3835,13 +3978,13 @@ class DataContextContinuableBase extends DataContextBase {
|
|
|
3835
3978
|
loadAllRec() {
|
|
3836
3979
|
this.loadMore()
|
|
3837
3980
|
.subscribe(() => {
|
|
3838
|
-
this.cblogger.debug('Loading data chunk finished, loading next...');
|
|
3981
|
+
this.cblogger.debug(this.id + ': Loading data chunk finished, loading next...');
|
|
3839
3982
|
this.loadAllRec();
|
|
3840
3983
|
}, err => {
|
|
3841
3984
|
this.onError(err);
|
|
3842
|
-
this.cblogger.error('Loading all failed!', err);
|
|
3985
|
+
this.cblogger.error(this.id + ': Loading all failed!', err);
|
|
3843
3986
|
}, () => {
|
|
3844
|
-
this.cblogger.info('All data loaded completely.');
|
|
3987
|
+
this.cblogger.info(this.id + ': All data loaded completely.');
|
|
3845
3988
|
});
|
|
3846
3989
|
}
|
|
3847
3990
|
}
|
|
@@ -3866,7 +4009,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3866
4009
|
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
3867
4010
|
this._pageCache = new Map();
|
|
3868
4011
|
this._latestPage = 0;
|
|
3869
|
-
this._hasMoreData = combineLatest([this.total, this.data]).pipe(map(([total, data]) => this.checkHasMoreData(total, data)), takeUntil(this.
|
|
4012
|
+
this._hasMoreData = combineLatest([this.total, this.data]).pipe(map(([total, data]) => this.checkHasMoreData(total, data)), takeUntil(this.destroy$));
|
|
3870
4013
|
}
|
|
3871
4014
|
/***************************************************************************
|
|
3872
4015
|
* *
|
|
@@ -3888,7 +4031,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3888
4031
|
*/
|
|
3889
4032
|
loadMore() {
|
|
3890
4033
|
if (this.hasMoreDataSnapshot) {
|
|
3891
|
-
this.logger.info('Loading more...' + this._latestPage);
|
|
4034
|
+
this.logger.info(this.id + ': Loading more...' + this._latestPage);
|
|
3892
4035
|
if (this.loadingSnapshot) {
|
|
3893
4036
|
return EMPTY;
|
|
3894
4037
|
}
|
|
@@ -3896,7 +4039,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3896
4039
|
return this.fetchPage(nextPage, this.chunkSize);
|
|
3897
4040
|
}
|
|
3898
4041
|
else {
|
|
3899
|
-
this.logger.debug('Cannot load more data, since no more data available.');
|
|
4042
|
+
this.logger.debug(this.id + ': Cannot load more data, since no more data available.');
|
|
3900
4043
|
return EMPTY;
|
|
3901
4044
|
}
|
|
3902
4045
|
}
|
|
@@ -3918,7 +4061,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3918
4061
|
return false;
|
|
3919
4062
|
}
|
|
3920
4063
|
onChunkSizeChanged(newSize) {
|
|
3921
|
-
this.reload();
|
|
4064
|
+
this.reload('ChunkSizeChanged');
|
|
3922
4065
|
}
|
|
3923
4066
|
reloadInternal() {
|
|
3924
4067
|
// Since continuable data-contexts are appending data,
|
|
@@ -3936,16 +4079,16 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3936
4079
|
const pageRequest = new Pageable(pageIndex, pageSize, this.sort.sortsSnapshot);
|
|
3937
4080
|
if (this._pageCache.has(pageIndex)) {
|
|
3938
4081
|
// Page already loaded - skipping request!
|
|
3939
|
-
this.logger.trace('Skipping fetching page since its already in page observable cache.');
|
|
4082
|
+
this.logger.trace(this.id + ': Skipping fetching page since its already in page observable cache.');
|
|
3940
4083
|
subject.next();
|
|
3941
4084
|
}
|
|
3942
4085
|
else {
|
|
3943
4086
|
this.onLoading();
|
|
3944
|
-
this.logger.debug(
|
|
4087
|
+
this.logger.debug(this.id + `: Loading page ${pageIndex} using pageable:`, pageRequest);
|
|
3945
4088
|
const pageObs = this.dataSource.findAllPaged(pageRequest, this.filter.filtersSnapshot);
|
|
3946
4089
|
this._pageCache.set(pageIndex, pageObs);
|
|
3947
4090
|
pageObs.subscribe((page) => {
|
|
3948
|
-
this.logger.debug('Got page data:', page);
|
|
4091
|
+
this.logger.debug(this.id + ': Got page data:', page);
|
|
3949
4092
|
this.populatePageData(page, clear);
|
|
3950
4093
|
if (this._latestPage < page.number) {
|
|
3951
4094
|
this._latestPage = page.number; // TODO This might cause that pages are skipped
|
|
@@ -3956,7 +4099,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3956
4099
|
this.onError(err);
|
|
3957
4100
|
this.clearData();
|
|
3958
4101
|
this.setTotal(0);
|
|
3959
|
-
this.logger.error('Failed to query data', err);
|
|
4102
|
+
this.logger.error(this.id + ': Failed to query data', err);
|
|
3960
4103
|
subject.error(err);
|
|
3961
4104
|
});
|
|
3962
4105
|
}
|
|
@@ -3978,7 +4121,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
|
|
|
3978
4121
|
}
|
|
3979
4122
|
catch (err) {
|
|
3980
4123
|
this.onError(err);
|
|
3981
|
-
this.logger.error('Failed to populate data with page', page, err);
|
|
4124
|
+
this.logger.error(this.id + ': Failed to populate data with page', page, err);
|
|
3982
4125
|
}
|
|
3983
4126
|
}
|
|
3984
4127
|
}
|
|
@@ -4022,7 +4165,7 @@ class DataContextContinuableToken extends DataContextContinuableBase {
|
|
|
4022
4165
|
}
|
|
4023
4166
|
loadMore() {
|
|
4024
4167
|
if (this.loadingSnapshot) {
|
|
4025
|
-
this.logger.debug('Skipping load-more since already loading a chunk!');
|
|
4168
|
+
this.logger.debug(this.id + ': Skipping load-more since already loading a chunk!');
|
|
4026
4169
|
return EMPTY;
|
|
4027
4170
|
}
|
|
4028
4171
|
const token = this._expectedChunkToken;
|
|
@@ -4030,7 +4173,7 @@ class DataContextContinuableToken extends DataContextContinuableBase {
|
|
|
4030
4173
|
return this.fetchNextChunk(token);
|
|
4031
4174
|
}
|
|
4032
4175
|
else {
|
|
4033
|
-
this.logger.debug('Cannot load more data, since no more data available.');
|
|
4176
|
+
this.logger.debug(this.id + ': Cannot load more data, since no more data available.');
|
|
4034
4177
|
return EMPTY;
|
|
4035
4178
|
}
|
|
4036
4179
|
}
|
|
@@ -4055,7 +4198,7 @@ class DataContextContinuableToken extends DataContextContinuableBase {
|
|
|
4055
4198
|
const subject = new Subject();
|
|
4056
4199
|
nextToken = nextToken ? nextToken : undefined;
|
|
4057
4200
|
if (this._chunkCache.has(nextToken)) {
|
|
4058
|
-
this.logger.debug('Skipping fetching chunk for token "' + nextToken + '" since its already in observable cache.');
|
|
4201
|
+
this.logger.debug(this.id + ': Skipping fetching chunk for token "' + nextToken + '" since its already in observable cache.');
|
|
4059
4202
|
subject.complete();
|
|
4060
4203
|
}
|
|
4061
4204
|
else {
|
|
@@ -4064,7 +4207,7 @@ class DataContextContinuableToken extends DataContextContinuableBase {
|
|
|
4064
4207
|
this.dataSource.findAllContinuable(new TokenChunkRequest(nextToken, this.filter.filtersSnapshot, this.sort.sortsSnapshot))
|
|
4065
4208
|
.pipe(first())
|
|
4066
4209
|
.subscribe(chunk => {
|
|
4067
|
-
this.logger.debug('Got next chunk data:', chunk);
|
|
4210
|
+
this.logger.debug(this.id + ': Got next chunk data:', chunk);
|
|
4068
4211
|
this._hasMoreData.next(chunk.hasMore);
|
|
4069
4212
|
this.chunkSize = chunk.chunkSize;
|
|
4070
4213
|
this.populateChunkData(chunk);
|
|
@@ -4072,7 +4215,7 @@ class DataContextContinuableToken extends DataContextContinuableBase {
|
|
|
4072
4215
|
this.onIdle();
|
|
4073
4216
|
}, err => {
|
|
4074
4217
|
this.onError(err);
|
|
4075
|
-
this.logger.error('Failed to query data', err);
|
|
4218
|
+
this.logger.error(this.id + ': Failed to query data', err);
|
|
4076
4219
|
this.clearData();
|
|
4077
4220
|
this.setTotal(0);
|
|
4078
4221
|
subject.error(err);
|
|
@@ -4097,12 +4240,12 @@ class DataContextContinuableToken extends DataContextContinuableBase {
|
|
|
4097
4240
|
}
|
|
4098
4241
|
catch (err) {
|
|
4099
4242
|
this.onError(err);
|
|
4100
|
-
this.logger.error('Failed to populate data with chunk', chunk, err);
|
|
4243
|
+
this.logger.error(this.id + ': Failed to populate data with chunk', chunk, err);
|
|
4101
4244
|
}
|
|
4102
4245
|
this._expectedChunkToken = chunk.nextContinuationToken;
|
|
4103
4246
|
}
|
|
4104
4247
|
else {
|
|
4105
|
-
this.logger.warn('Discarding continuable chunk (items: ' + chunk.content.length + ', token: ' + chunk.continuationToken + ' )' +
|
|
4248
|
+
this.logger.warn(this.id + ': Discarding continuable chunk (items: ' + chunk.content.length + ', token: ' + chunk.continuationToken + ' )' +
|
|
4106
4249
|
' as it does not match the expected contiunation-token: ' + this._expectedChunkToken);
|
|
4107
4250
|
}
|
|
4108
4251
|
}
|
|
@@ -4160,9 +4303,9 @@ class DataContextActivePage extends DataContextBase {
|
|
|
4160
4303
|
* Sets the current page index / size and reload.
|
|
4161
4304
|
*/
|
|
4162
4305
|
setActivePage(request) {
|
|
4163
|
-
this.actlogger.trace('Setting page to ', request);
|
|
4306
|
+
// this.actlogger.trace('Setting page to ', request);
|
|
4164
4307
|
if (!request) {
|
|
4165
|
-
throw new Error('Setting page PageRequest must not be null!');
|
|
4308
|
+
throw new Error(this.id + ': Setting page PageRequest must not be null!');
|
|
4166
4309
|
}
|
|
4167
4310
|
let hasChange = false;
|
|
4168
4311
|
const page = this.pageSnapshot;
|
|
@@ -4174,7 +4317,7 @@ class DataContextActivePage extends DataContextBase {
|
|
|
4174
4317
|
}
|
|
4175
4318
|
if (hasChange) {
|
|
4176
4319
|
this._page.next(request);
|
|
4177
|
-
this.reload();
|
|
4320
|
+
this.reload('setActivePage');
|
|
4178
4321
|
}
|
|
4179
4322
|
}
|
|
4180
4323
|
close() {
|
|
@@ -4210,7 +4353,7 @@ class DataContextActivePage extends DataContextBase {
|
|
|
4210
4353
|
this.onIdle();
|
|
4211
4354
|
}, err => {
|
|
4212
4355
|
this.clearData();
|
|
4213
|
-
this.actlogger.error('Failed to query data', err);
|
|
4356
|
+
this.actlogger.error(this.id + ': Failed to query data', err);
|
|
4214
4357
|
subject.error(err);
|
|
4215
4358
|
this.onError(err);
|
|
4216
4359
|
}, () => {
|
|
@@ -4307,7 +4450,7 @@ class MatTableDataContextBinding {
|
|
|
4307
4450
|
}
|
|
4308
4451
|
}
|
|
4309
4452
|
bindDataContextToMatSortsUntil(matSorts$, destroy$) {
|
|
4310
|
-
const dcSorts$ = this._dataContext$.pipe(filter(dc => !!dc), switchMap(dc => dc.sort.sorts));
|
|
4453
|
+
const dcSorts$ = this._dataContext$.pipe(filter(dc => !!dc), switchMap$1(dc => dc.sort.sorts));
|
|
4311
4454
|
combineLatest([dcSorts$, matSorts$]).pipe(takeUntil(destroy$)).subscribe(([dcSorts, matSorts]) => {
|
|
4312
4455
|
if (dcSorts.length >= 1) {
|
|
4313
4456
|
// At least one sort active
|
|
@@ -4350,7 +4493,7 @@ class MatTableDataContextBinding {
|
|
|
4350
4493
|
});
|
|
4351
4494
|
}
|
|
4352
4495
|
bindPaginatorUntil(paginator$, destroy$) {
|
|
4353
|
-
const pageRequest$ = paginator$.pipe(filter(paginator => !!paginator), switchMap(paginator => paginator.page), map(pageEvent => new PageRequest(pageEvent.pageIndex, pageEvent.pageSize)));
|
|
4496
|
+
const pageRequest$ = paginator$.pipe(filter(paginator => !!paginator), switchMap$1(paginator => paginator.page), map(pageEvent => new PageRequest(pageEvent.pageIndex, pageEvent.pageSize)));
|
|
4354
4497
|
combineLatest([this._dataContext$, pageRequest$]).pipe(takeUntil(destroy$)).subscribe(([dc, pageRequest]) => {
|
|
4355
4498
|
if (dc) {
|
|
4356
4499
|
if (isActivePagedDataContext(dc)) {
|
|
@@ -4460,8 +4603,7 @@ class RequiredFilterEvaluator {
|
|
|
4460
4603
|
}
|
|
4461
4604
|
allRequiredFiltersPresent(requiredFilters, currentFilters) {
|
|
4462
4605
|
if (requiredFilters) {
|
|
4463
|
-
|
|
4464
|
-
return validatedFilterGroups.find(validGroup => !!validGroup);
|
|
4606
|
+
return requiredFilters.some(filterGroup => this.hasAllFilters(filterGroup, currentFilters));
|
|
4465
4607
|
}
|
|
4466
4608
|
return true;
|
|
4467
4609
|
}
|
|
@@ -4543,7 +4685,7 @@ class DataContextAutoStarter extends DataContextLifeCycleBinding {
|
|
|
4543
4685
|
return new RequiredFilterEvaluator(this._dataContext.filter, this._autoStartSpec.requiredFilters).context$.pipe(map(event => event.isValid));
|
|
4544
4686
|
}
|
|
4545
4687
|
startDataContext() {
|
|
4546
|
-
this.logger.debug('Auto starting
|
|
4688
|
+
this.logger.debug(this._dataContext.id + ': Auto starting ...');
|
|
4547
4689
|
this._dataContext.start(this._autoStartSpec.initialSort);
|
|
4548
4690
|
}
|
|
4549
4691
|
}
|
|
@@ -4580,7 +4722,7 @@ class DataContextSourceEventBinding extends DataContextLifeCycleBinding {
|
|
|
4580
4722
|
**************************************************************************/
|
|
4581
4723
|
handleDataChangeEvent(event) {
|
|
4582
4724
|
if (this.reloadOnChanges && this.isReloadDesirable(event)) {
|
|
4583
|
-
this._dataContext.reload();
|
|
4725
|
+
this._dataContext.reload('DataSourceChangeEvent');
|
|
4584
4726
|
return;
|
|
4585
4727
|
}
|
|
4586
4728
|
// We might also be able to perform deletions locally, and avoid reload data
|
|
@@ -5047,116 +5189,6 @@ class DelegateContinuableDataSource extends DelegateDataSource {
|
|
|
5047
5189
|
}
|
|
5048
5190
|
}
|
|
5049
5191
|
|
|
5050
|
-
class FilterUtil {
|
|
5051
|
-
static { this.logger = LoggerFactory.getLogger(FilterUtil.constructor.name); }
|
|
5052
|
-
/**
|
|
5053
|
-
* Merge the provided filter sets. The second parameter will
|
|
5054
|
-
* replace filters which exist in the first.
|
|
5055
|
-
* @param filtersA
|
|
5056
|
-
* @param filtersB
|
|
5057
|
-
*/
|
|
5058
|
-
static mergeFlat(filtersA, filtersB) {
|
|
5059
|
-
const mergeContext = new FilterContext();
|
|
5060
|
-
mergeContext.updateFilters(filtersA);
|
|
5061
|
-
mergeContext.updateFilters(filtersB);
|
|
5062
|
-
return mergeContext.filtersSnapshot;
|
|
5063
|
-
}
|
|
5064
|
-
/**
|
|
5065
|
-
* Performs a combining merge of the provided filters.
|
|
5066
|
-
* Array based filter values will be combined.
|
|
5067
|
-
* @param filtersA
|
|
5068
|
-
* @param filtersB
|
|
5069
|
-
*/
|
|
5070
|
-
static mergeCombine(filtersA, filtersB) {
|
|
5071
|
-
const mergeContext = new FilterContext();
|
|
5072
|
-
mergeContext.updateFilters(filtersA);
|
|
5073
|
-
mergeContext.mergeFilters(filtersB);
|
|
5074
|
-
return mergeContext.filtersSnapshot;
|
|
5075
|
-
}
|
|
5076
|
-
static strip(base, toRemove) {
|
|
5077
|
-
const removeMap = new Map();
|
|
5078
|
-
toRemove.forEach(r => removeMap.set(r.key, r));
|
|
5079
|
-
return base.map(filter => {
|
|
5080
|
-
if (removeMap.has(filter.key)) {
|
|
5081
|
-
const stripped = FilterUtil.stripValue(filter.value, removeMap.get(filter.key).value);
|
|
5082
|
-
if (stripped !== null) {
|
|
5083
|
-
return new Filter(filter.key, stripped);
|
|
5084
|
-
}
|
|
5085
|
-
else {
|
|
5086
|
-
return null;
|
|
5087
|
-
}
|
|
5088
|
-
}
|
|
5089
|
-
else {
|
|
5090
|
-
return filter;
|
|
5091
|
-
}
|
|
5092
|
-
}).filter(f => !!f);
|
|
5093
|
-
}
|
|
5094
|
-
static stripValue(baseValue, removeValue) {
|
|
5095
|
-
if (Array.isArray(baseValue)) {
|
|
5096
|
-
if (Array.isArray(removeValue)) {
|
|
5097
|
-
const filtered = baseValue.filter(b => removeValue.indexOf(b) === -1);
|
|
5098
|
-
if (filtered.length > 0) {
|
|
5099
|
-
return filtered;
|
|
5100
|
-
}
|
|
5101
|
-
}
|
|
5102
|
-
else {
|
|
5103
|
-
const filtered = baseValue.filter(b => b != removeValue);
|
|
5104
|
-
if (filtered.length > 0) {
|
|
5105
|
-
return filtered;
|
|
5106
|
-
}
|
|
5107
|
-
}
|
|
5108
|
-
}
|
|
5109
|
-
return null;
|
|
5110
|
-
}
|
|
5111
|
-
static filterData(data, filters) {
|
|
5112
|
-
FilterUtil.logger.debug('Filtering data with ' + data.length + ' items.', filters);
|
|
5113
|
-
if (filters && filters.length > 0) {
|
|
5114
|
-
for (const filter of filters) {
|
|
5115
|
-
data = data.filter(e => FilterUtil.matches(e, filter));
|
|
5116
|
-
}
|
|
5117
|
-
}
|
|
5118
|
-
return data;
|
|
5119
|
-
}
|
|
5120
|
-
static matches(entity, filter) {
|
|
5121
|
-
if (filter.value === null || filter.value === undefined) {
|
|
5122
|
-
return true;
|
|
5123
|
-
}
|
|
5124
|
-
let value;
|
|
5125
|
-
if (entity === null || entity === undefined) {
|
|
5126
|
-
value = null;
|
|
5127
|
-
}
|
|
5128
|
-
else if (typeof entity === 'object') {
|
|
5129
|
-
value = entity[filter.key];
|
|
5130
|
-
}
|
|
5131
|
-
else {
|
|
5132
|
-
value = String(entity); // Support filtering primitive values
|
|
5133
|
-
}
|
|
5134
|
-
if (Array.isArray(filter.value)) {
|
|
5135
|
-
for (const val of filter.value) {
|
|
5136
|
-
if (FilterUtil.matchesValue(value, val)) {
|
|
5137
|
-
return true;
|
|
5138
|
-
}
|
|
5139
|
-
}
|
|
5140
|
-
return false;
|
|
5141
|
-
}
|
|
5142
|
-
else {
|
|
5143
|
-
return FilterUtil.matchesValue(value, filter.value);
|
|
5144
|
-
}
|
|
5145
|
-
}
|
|
5146
|
-
static matchesValue(haystack, needle) {
|
|
5147
|
-
if (haystack === needle) {
|
|
5148
|
-
return true;
|
|
5149
|
-
}
|
|
5150
|
-
if (haystack === null || haystack === undefined) {
|
|
5151
|
-
return false;
|
|
5152
|
-
}
|
|
5153
|
-
const str = String(haystack);
|
|
5154
|
-
const match = str.toLowerCase().startsWith(needle.toLowerCase());
|
|
5155
|
-
// FilterUtil.logger.debug('Haystack: ' + str + ' starts with needle: ' + needle + ' --> ' + match);
|
|
5156
|
-
return match;
|
|
5157
|
-
}
|
|
5158
|
-
}
|
|
5159
|
-
|
|
5160
5192
|
/**
|
|
5161
5193
|
* Provides the ability to build a IDataContext<T>.
|
|
5162
5194
|
*/
|
|
@@ -5537,7 +5569,7 @@ class DataSourceProcessor {
|
|
|
5537
5569
|
* @param sorts to sort the data source
|
|
5538
5570
|
*/
|
|
5539
5571
|
process$(processFn, filters, sorts) {
|
|
5540
|
-
return this._process$.pipe(takeWhile(ctx => this.notCompleted(ctx)), switchMap(ctx => this.loadNext(ctx, filters, sorts)), tap(updatedCtx => {
|
|
5572
|
+
return this._process$.pipe(takeWhile(ctx => this.notCompleted(ctx)), switchMap$1(ctx => this.loadNext(ctx, filters, sorts)), tap(updatedCtx => {
|
|
5541
5573
|
processFn(updatedCtx.items);
|
|
5542
5574
|
this._process$.next(updatedCtx);
|
|
5543
5575
|
}));
|
|
@@ -6613,7 +6645,7 @@ class ElderFromFieldBase {
|
|
|
6613
6645
|
this._logger = LoggerFactory.getLogger(this.constructor.name);
|
|
6614
6646
|
this.formFieldControl$ = new BehaviorSubject(null);
|
|
6615
6647
|
this._controlActionQueue = [];
|
|
6616
|
-
this._value$ = this.formFieldControl$.pipe(filter(ctrl => !!ctrl), switchMap
|
|
6648
|
+
this._value$ = this.formFieldControl$.pipe(filter(ctrl => !!ctrl), switchMap(ctrl => this.controlValue$(ctrl)));
|
|
6617
6649
|
}
|
|
6618
6650
|
/***************************************************************************
|
|
6619
6651
|
* *
|
|
@@ -6695,8 +6727,8 @@ class ElderFromFieldEntityBase extends ElderFromFieldBase {
|
|
|
6695
6727
|
constructor() {
|
|
6696
6728
|
super();
|
|
6697
6729
|
this._entityAccessor$ = this.formFieldControl$.pipe(filter(ctrl => !!ctrl), filter(ctrl => isElderEntityValueAccessor(ctrl)), map(ctrl => ctrl));
|
|
6698
|
-
this._entityId$ = this._entityAccessor$.pipe(switchMap
|
|
6699
|
-
this._entity$ = this._entityAccessor$.pipe(switchMap
|
|
6730
|
+
this._entityId$ = this._entityAccessor$.pipe(switchMap(evac => ElderEntityValueAccessorUtil.entityId$(evac)));
|
|
6731
|
+
this._entity$ = this._entityAccessor$.pipe(switchMap(evac => ElderEntityValueAccessorUtil.entity$(evac)));
|
|
6700
6732
|
}
|
|
6701
6733
|
/***************************************************************************
|
|
6702
6734
|
* *
|
|
@@ -6728,10 +6760,10 @@ class ElderFromFieldMultiEntityBase extends ElderFromFieldBase {
|
|
|
6728
6760
|
constructor() {
|
|
6729
6761
|
super();
|
|
6730
6762
|
this._entitiesAccessor$ = this.formFieldControl$.pipe(filter(ctrl => !!ctrl), filter(ctrl => isElderMultiEntityValueAccessor(ctrl)), map(ctrl => ctrl));
|
|
6731
|
-
this._entityIds$ = this._entitiesAccessor$.pipe(switchMap
|
|
6732
|
-
this._entities$ = this._entitiesAccessor$.pipe(switchMap
|
|
6733
|
-
this._entitiesUpdated$ = this._entitiesAccessor$.pipe(switchMap
|
|
6734
|
-
this._entityIdsUpdated$ = this._entitiesAccessor$.pipe(switchMap
|
|
6763
|
+
this._entityIds$ = this._entitiesAccessor$.pipe(switchMap(evac => ElderMultiEntityValueAccessorUtil.entityIds$(evac)));
|
|
6764
|
+
this._entities$ = this._entitiesAccessor$.pipe(switchMap(evac => ElderMultiEntityValueAccessorUtil.entities$(evac)));
|
|
6765
|
+
this._entitiesUpdated$ = this._entitiesAccessor$.pipe(switchMap(evac => evac.entitiesUpdated));
|
|
6766
|
+
this._entityIdsUpdated$ = this._entitiesAccessor$.pipe(switchMap(evac => evac.entityIdsUpdated));
|
|
6735
6767
|
}
|
|
6736
6768
|
/***************************************************************************
|
|
6737
6769
|
* *
|
|
@@ -8557,7 +8589,7 @@ class RefreshingEntity {
|
|
|
8557
8589
|
if (this.dataSource) {
|
|
8558
8590
|
this.entityId = this.dataSource.getId(entity);
|
|
8559
8591
|
}
|
|
8560
|
-
this._refreshing$ = this.current$.pipe(takeWhile(e => this.keepRefreshing(e)), delay(this.interval), switchMap(e => this.refresh(e)), tap(refreshed => this.current$.next(refreshed)), startWith(this.current$.getValue()), share() // Prevent multiple refreshes for each subscriber
|
|
8592
|
+
this._refreshing$ = this.current$.pipe(takeWhile(e => this.keepRefreshing(e)), delay(this.interval), switchMap$1(e => this.refresh(e)), tap(refreshed => this.current$.next(refreshed)), startWith(this.current$.getValue()), share() // Prevent multiple refreshes for each subscriber
|
|
8561
8593
|
);
|
|
8562
8594
|
}
|
|
8563
8595
|
/***************************************************************************
|
|
@@ -9420,7 +9452,7 @@ class ElderLabelInputComponent extends FormFieldBaseComponent {
|
|
|
9420
9452
|
}
|
|
9421
9453
|
set suggestionLoader(provider) {
|
|
9422
9454
|
if (provider) {
|
|
9423
|
-
this.availableSuggestions$ = this.labelInputControl.valueChanges.pipe(startWith(null), debounceTime(150), switchMap((value) => provider.loadSuggestions(value)), map(labels => this.filterNotPresent(labels)));
|
|
9455
|
+
this.availableSuggestions$ = this.labelInputControl.valueChanges.pipe(startWith(null), debounceTime(150), switchMap$1((value) => provider.loadSuggestions(value)), map(labels => this.filterNotPresent(labels)));
|
|
9424
9456
|
}
|
|
9425
9457
|
else {
|
|
9426
9458
|
this.logger.debug('Cant provide suggestions since no suggestion provider was registered!');
|
|
@@ -12631,7 +12663,7 @@ class ElderDialogService {
|
|
|
12631
12663
|
const rawMessages = new Map();
|
|
12632
12664
|
rawMessages.set('title', config.title);
|
|
12633
12665
|
rawMessages.set('message', config.message);
|
|
12634
|
-
return this.resolveTranslatedMap(rawMessages, config.interpolateParams).pipe(switchMap(messages => {
|
|
12666
|
+
return this.resolveTranslatedMap(rawMessages, config.interpolateParams).pipe(switchMap$1(messages => {
|
|
12635
12667
|
const title = messages.get('title');
|
|
12636
12668
|
const message = messages.get('message');
|
|
12637
12669
|
let dialogRef;
|
|
@@ -12654,7 +12686,7 @@ class ElderDialogService {
|
|
|
12654
12686
|
const rawMessages = new Map();
|
|
12655
12687
|
rawMessages.set('title', config.title);
|
|
12656
12688
|
rawMessages.set('question', config.question);
|
|
12657
|
-
return this.resolveTranslatedMap(rawMessages, config.interpolateParams).pipe(switchMap(messages => {
|
|
12689
|
+
return this.resolveTranslatedMap(rawMessages, config.interpolateParams).pipe(switchMap$1(messages => {
|
|
12658
12690
|
const title = messages.get('title');
|
|
12659
12691
|
const question = messages.get('question');
|
|
12660
12692
|
const dlgConf = this.matDialogConfig(config);
|
|
@@ -12709,7 +12741,7 @@ class ElderDialogService {
|
|
|
12709
12741
|
**************************************************************************/
|
|
12710
12742
|
resolveTranslatedMap(messages, interpolateParams) {
|
|
12711
12743
|
const rawMessages = Array.from(messages.values());
|
|
12712
|
-
return this.translateInterpolatedParams(interpolateParams).pipe(switchMap(translatedParams => this.translateService.get(rawMessages, translatedParams)), map(translatedValues => {
|
|
12744
|
+
return this.translateInterpolatedParams(interpolateParams).pipe(switchMap$1(translatedParams => this.translateService.get(rawMessages, translatedParams)), map(translatedValues => {
|
|
12713
12745
|
const translated = new Map();
|
|
12714
12746
|
messages.forEach((rawValue, key) => {
|
|
12715
12747
|
translated.set(key, translatedValues[rawValue] || rawValue);
|
|
@@ -13077,7 +13109,7 @@ class DataContextSelectionDirective {
|
|
|
13077
13109
|
* *
|
|
13078
13110
|
**************************************************************************/
|
|
13079
13111
|
buildSelectionState$(selectionModel$, dataContext$) {
|
|
13080
|
-
return combineLatest([selectionModel$, dataContext$]).pipe(filter(([model, dc]) => !!model && !!dc), switchMap(([model, dc]) => this.buildSelectionStateInner$(model, dc)));
|
|
13112
|
+
return combineLatest([selectionModel$, dataContext$]).pipe(filter(([model, dc]) => !!model && !!dc), switchMap$1(([model, dc]) => this.buildSelectionStateInner$(model, dc)));
|
|
13081
13113
|
}
|
|
13082
13114
|
buildSelectionStateInner$(model, dc) {
|
|
13083
13115
|
return combineLatest([model.selection, dc.data]).pipe(map(([selection, currentData]) => {
|
|
@@ -13581,7 +13613,7 @@ class ElderTableRowDirective {
|
|
|
13581
13613
|
this._activated = false;
|
|
13582
13614
|
this._activationDir$ = new BehaviorSubject(null);
|
|
13583
13615
|
this.focused$ = new BehaviorSubject(false);
|
|
13584
|
-
this._activationDir$.pipe(filter(x => x !== null), switchMap
|
|
13616
|
+
this._activationDir$.pipe(filter(x => x !== null), switchMap(provider => provider.activeItemEventChange), filter(e => e.item == this.model), filter(e => e.focus)).subscribe({
|
|
13585
13617
|
next: focusMe => {
|
|
13586
13618
|
this.focus();
|
|
13587
13619
|
}
|
|
@@ -14621,7 +14653,7 @@ class ElderTableComponent extends ElderDataViewBaseComponent {
|
|
|
14621
14653
|
return (index, entity) => this.getId(entity);
|
|
14622
14654
|
}
|
|
14623
14655
|
isDataValid(data) {
|
|
14624
|
-
return data
|
|
14656
|
+
return data?.length > 0;
|
|
14625
14657
|
}
|
|
14626
14658
|
/***************************************************************************
|
|
14627
14659
|
* *
|
|
@@ -16481,7 +16513,7 @@ class ElderTableActivationDirective {
|
|
|
16481
16513
|
**************************************************************************/
|
|
16482
16514
|
ngAfterViewInit() {
|
|
16483
16515
|
const rows$ = this.elderTable.rows$;
|
|
16484
|
-
const data$ = this.elderTable.dataContext$.pipe(switchMap(dc => dc.data), tap(data => this._data = data));
|
|
16516
|
+
const data$ = this.elderTable.dataContext$.pipe(switchMap$1(dc => dc.data), tap(data => this._data = data));
|
|
16485
16517
|
+combineLatest([rows$, data$]).pipe(takeUntil(this.destroy$)).subscribe(([rows, data]) => {
|
|
16486
16518
|
this.rows$.next(this.rowDataUpdated(rows, data));
|
|
16487
16519
|
this.handleAutoActivations();
|
|
@@ -16489,7 +16521,7 @@ class ElderTableActivationDirective {
|
|
|
16489
16521
|
combineLatest([this.rows$, this.activeItem$]).pipe(takeUntil(this.destroy$)).subscribe(([rows, activeItem]) => {
|
|
16490
16522
|
this.updateRowsActivation(rows, activeItem);
|
|
16491
16523
|
});
|
|
16492
|
-
this.elderTable.dataContext$.pipe(takeUntil(this.destroy$), map(dc => dc.dataSource), switchMap(ds => ds.dataChanged), filter(event => event.deletedIds?.length > 0)).subscribe({
|
|
16524
|
+
this.elderTable.dataContext$.pipe(takeUntil(this.destroy$), map(dc => dc.dataSource), switchMap$1(ds => ds.dataChanged), filter(event => event.deletedIds?.length > 0)).subscribe({
|
|
16493
16525
|
next: deleteEvent => {
|
|
16494
16526
|
deleteEvent.deletedIds.forEach(id => this.deactivateById(id));
|
|
16495
16527
|
}
|
|
@@ -17126,7 +17158,7 @@ class ElderGridComponent extends ElderDataViewBaseComponent {
|
|
|
17126
17158
|
? this.responsiveColumn()
|
|
17127
17159
|
: this._columnCount);
|
|
17128
17160
|
this.dataRows$ = combineLatest([
|
|
17129
|
-
this.dataContext$.pipe(filter(dc => !!dc), switchMap(dc => dc.data)),
|
|
17161
|
+
this.dataContext$.pipe(filter(dc => !!dc), switchMap$1(dc => dc.data)),
|
|
17130
17162
|
columnCount$
|
|
17131
17163
|
]).pipe(debounceTime(50), map(([data, columns]) => this.groupForColumns(data, columns)));
|
|
17132
17164
|
}
|
|
@@ -18906,7 +18938,7 @@ class SelectionModelPopupDirective {
|
|
|
18906
18938
|
// view container is outside the invoking control, which
|
|
18907
18939
|
// happens when using ng-content projection.
|
|
18908
18940
|
this.changeDetectorRef.markForCheck();
|
|
18909
|
-
return dialogRef.afterClosed().pipe(switchMap((chosenEntities) => {
|
|
18941
|
+
return dialogRef.afterClosed().pipe(switchMap$1((chosenEntities) => {
|
|
18910
18942
|
if (chosenEntities) {
|
|
18911
18943
|
return this._transformerFn
|
|
18912
18944
|
? of(chosenEntities.map(value => this._transformerFn(value)))
|
|
@@ -19053,7 +19085,7 @@ class ElderSelectBase extends ElderFormFieldControlBase {
|
|
|
19053
19085
|
this.currentClicked = new EventEmitter();
|
|
19054
19086
|
this.state$ = new BehaviorSubject(ElderSelectComponentState.idle());
|
|
19055
19087
|
this.mergedState$ = combineLatest([
|
|
19056
|
-
this.dataContext$.pipe(filter(dc => !!dc), switchMap(dc => dc.status)),
|
|
19088
|
+
this.dataContext$.pipe(filter(dc => !!dc), switchMap$1(dc => dc.status)),
|
|
19057
19089
|
this.state$
|
|
19058
19090
|
]).pipe(map(([dcState, state]) => {
|
|
19059
19091
|
if (dcState.idle) {
|
|
@@ -19276,7 +19308,7 @@ class ElderSelectFirstUtil {
|
|
|
19276
19308
|
const dataContextFirstItem = suggestionsDc?.isStarted
|
|
19277
19309
|
? this.firstItemInDataContextSoon(suggestionsDc)
|
|
19278
19310
|
: of(null);
|
|
19279
|
-
dataContextFirstItem.pipe(takeUntil(elderSelect.valueChange.pipe(filter(value => !!value))), switchMap(firstItem => firstItem ? of(firstItem) : this.firstSuggestionItem(elderSelect))).subscribe(firstItem => {
|
|
19311
|
+
dataContextFirstItem.pipe(takeUntil(elderSelect.valueChange.pipe(filter(value => !!value))), switchMap$1(firstItem => firstItem ? of(firstItem) : this.firstSuggestionItem(elderSelect))).subscribe(firstItem => {
|
|
19280
19312
|
if (firstItem && !elderSelect.entityId) {
|
|
19281
19313
|
elderSelect.updateValueByEntity(firstItem);
|
|
19282
19314
|
}
|
|
@@ -19357,8 +19389,8 @@ class ElderAutocompleteComponent {
|
|
|
19357
19389
|
this.triggerReload$ = new Subject();
|
|
19358
19390
|
this.displayPropertyResolver$ = new BehaviorSubject((value) => this.propertyStringValue(value, null));
|
|
19359
19391
|
this.optionSelected = new Subject();
|
|
19360
|
-
this.dataState$ = this.dataContext$.pipe(filter(dc => !!dc), switchMap(dc => dc.status), runInZone(this.zone));
|
|
19361
|
-
this.availableSuggestions$ = this.dataContext$.pipe(switchMap(dc => dc ? dc.data : of([])), runInZone(this.zone));
|
|
19392
|
+
this.dataState$ = this.dataContext$.pipe(filter(dc => !!dc), switchMap$1(dc => dc.status), runInZone(this.zone));
|
|
19393
|
+
this.availableSuggestions$ = this.dataContext$.pipe(switchMap$1(dc => dc ? dc.data : of([])), runInZone(this.zone));
|
|
19362
19394
|
}
|
|
19363
19395
|
/***************************************************************************
|
|
19364
19396
|
* *
|
|
@@ -19767,7 +19799,7 @@ class ElderSelectComponent extends ElderSelectBase {
|
|
|
19767
19799
|
this.entityChange = this._entity$.pipe(skip(1) // Skip the initial or current value
|
|
19768
19800
|
);
|
|
19769
19801
|
this.entityIdUpdated = this.valueUpdated.pipe(map(value => this.entityIdFromValue(value)));
|
|
19770
|
-
this.entityUpdated = this.entityIdUpdated.pipe(switchMap(entityId => this.awaitEntityWithId(entityId, this.timeoutAfterMs)), catchError(err => {
|
|
19802
|
+
this.entityUpdated = this.entityIdUpdated.pipe(switchMap$1(entityId => this.awaitEntityWithId(entityId, this.timeoutAfterMs)), catchError(err => {
|
|
19771
19803
|
this.logger.warn(`awaitEntityWithId -> timed out after: ${this.timeoutAfterMs}`, err);
|
|
19772
19804
|
return EMPTY;
|
|
19773
19805
|
}));
|
|
@@ -21306,7 +21338,7 @@ class ElderMultiSelectBase extends ElderSelectBase {
|
|
|
21306
21338
|
this.entitiesChange = this._entities$.pipe(skip(1) // Skip the initial or current value
|
|
21307
21339
|
);
|
|
21308
21340
|
this.entityIdsUpdated = this.valueUpdated.pipe(map(values => this.entityIdsFromValues(values)));
|
|
21309
|
-
this.entitiesUpdated = this.entityIdsUpdated.pipe(tap(entityIds => this.logger.debug('Awaiting entities with ids', entityIds)), switchMap(entityIds => this.awaitEntitiesWithId(entityIds, this.timeoutAfterMs)), catchError(err => {
|
|
21341
|
+
this.entitiesUpdated = this.entityIdsUpdated.pipe(tap(entityIds => this.logger.debug('Awaiting entities with ids', entityIds)), switchMap$1(entityIds => this.awaitEntitiesWithId(entityIds, this.timeoutAfterMs)), catchError(err => {
|
|
21310
21342
|
this.logger.warn(`awaitEntitiesWithId -> timed out after: ${this.timeoutAfterMs}`, err);
|
|
21311
21343
|
return EMPTY;
|
|
21312
21344
|
}));
|
|
@@ -22178,7 +22210,7 @@ class ElderMultiSelectChipOptionsComponent extends ElderMultiSelectBase {
|
|
|
22178
22210
|
disabled: disabled
|
|
22179
22211
|
};
|
|
22180
22212
|
}));
|
|
22181
|
-
const available$ = this.dataContext$.pipe(filter(dc => !!dc), switchMap
|
|
22213
|
+
const available$ = this.dataContext$.pipe(filter(dc => !!dc), switchMap(dc => dc.data));
|
|
22182
22214
|
this.selectChips$ = combineLatest([
|
|
22183
22215
|
this.entities$,
|
|
22184
22216
|
this.entityIds$,
|
|
@@ -22861,7 +22893,7 @@ class ElderNavLinkComponent {
|
|
|
22861
22893
|
* *
|
|
22862
22894
|
**************************************************************************/
|
|
22863
22895
|
ngOnInit() {
|
|
22864
|
-
this._routerLinkActive$.pipe(takeUntil(this.destroy$), filter(rla => !!rla), switchMap
|
|
22896
|
+
this._routerLinkActive$.pipe(takeUntil(this.destroy$), filter(rla => !!rla), switchMap(rla => {
|
|
22865
22897
|
return rla.isActiveChange.pipe(startWith(rla.isActive));
|
|
22866
22898
|
})).subscribe(active => this._active$.next(active));
|
|
22867
22899
|
this.navList.valueChange.pipe(takeUntil(this.destroy$), map(value => this.isCurrentValueActive)).subscribe(active => this._active$.next(active));
|
|
@@ -25718,7 +25750,7 @@ class LocalisationPickerService {
|
|
|
25718
25750
|
return this.languageService.currentLanguage$.pipe(map(current => this.pick(choices, current)));
|
|
25719
25751
|
}
|
|
25720
25752
|
pickCurrentRx(choices$) {
|
|
25721
|
-
return choices$.pipe(switchMap(choices => this.pickCurrent(choices)));
|
|
25753
|
+
return choices$.pipe(switchMap$1(choices => this.pickCurrent(choices)));
|
|
25722
25754
|
}
|
|
25723
25755
|
/***************************************************************************
|
|
25724
25756
|
* *
|
|
@@ -25783,7 +25815,7 @@ class ElderLocalizedInputComponent extends FormFieldBaseComponent {
|
|
|
25783
25815
|
this.inputText$ = combineLatest([
|
|
25784
25816
|
this.value$,
|
|
25785
25817
|
this.textColumns$
|
|
25786
|
-
]).pipe(switchMap(([values, columns]) => this.toInputText(values, columns)));
|
|
25818
|
+
]).pipe(switchMap$1(([values, columns]) => this.toInputText(values, columns)));
|
|
25787
25819
|
this.hintText$ = this.value$.pipe(map(values => this.toHintText(values)));
|
|
25788
25820
|
this.translatedValueChange = this.valueChange.pipe(map(localized => TranslatedConverter.toTranslatedText(localized)));
|
|
25789
25821
|
}
|
|
@@ -25884,9 +25916,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25884
25916
|
type: Input
|
|
25885
25917
|
}] } });
|
|
25886
25918
|
|
|
25919
|
+
class SearchContext {
|
|
25920
|
+
static standalone() {
|
|
25921
|
+
return new SearchContext(null);
|
|
25922
|
+
}
|
|
25923
|
+
/***************************************************************************
|
|
25924
|
+
* *
|
|
25925
|
+
* Constructor *
|
|
25926
|
+
* *
|
|
25927
|
+
**************************************************************************/
|
|
25928
|
+
constructor(id) {
|
|
25929
|
+
/***************************************************************************
|
|
25930
|
+
* *
|
|
25931
|
+
* Fields *
|
|
25932
|
+
* *
|
|
25933
|
+
**************************************************************************/
|
|
25934
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25935
|
+
this.userFilterContext = new FilterContext();
|
|
25936
|
+
this.forcedFilterContext = new FilterContext();
|
|
25937
|
+
this.allFilters$ = new BehaviorSubject(undefined);
|
|
25938
|
+
this.id = id;
|
|
25939
|
+
this.userFilterContext.filters.pipe(combineLatestWith(this.forcedFilterContext.filters), skip(1), map(([userFilters, forcedFilters]) => FilterUtil.mergeCombine(userFilters, forcedFilters)), tap(x => this.log.debug('allFilters changed: ', x))).subscribe(merged => this.allFilters$.next(merged));
|
|
25940
|
+
}
|
|
25941
|
+
/***************************************************************************
|
|
25942
|
+
* *
|
|
25943
|
+
* Properties *
|
|
25944
|
+
* *
|
|
25945
|
+
**************************************************************************/
|
|
25946
|
+
get allFiltersChanged() {
|
|
25947
|
+
return this.allFilters$.pipe(filter(filters => !!filters));
|
|
25948
|
+
}
|
|
25949
|
+
get userFilters() {
|
|
25950
|
+
return this.userFilterContext;
|
|
25951
|
+
}
|
|
25952
|
+
get forcedFilters() {
|
|
25953
|
+
return this.forcedFilterContext;
|
|
25954
|
+
}
|
|
25955
|
+
/***************************************************************************
|
|
25956
|
+
* *
|
|
25957
|
+
* Public API *
|
|
25958
|
+
* *
|
|
25959
|
+
**************************************************************************/
|
|
25960
|
+
updateUserFilters(filters) {
|
|
25961
|
+
this.userFilterContext.updateFilters(filters);
|
|
25962
|
+
}
|
|
25963
|
+
replaceUserFilters(filters) {
|
|
25964
|
+
this.userFilterContext.replaceFilters(filters);
|
|
25965
|
+
}
|
|
25966
|
+
replaceForcedFilters(filters) {
|
|
25967
|
+
this.forcedFilterContext.replaceFilters(filters);
|
|
25968
|
+
}
|
|
25969
|
+
}
|
|
25970
|
+
|
|
25971
|
+
class SearchContextService {
|
|
25972
|
+
/***************************************************************************
|
|
25973
|
+
* *
|
|
25974
|
+
* Constructor *
|
|
25975
|
+
* *
|
|
25976
|
+
**************************************************************************/
|
|
25977
|
+
constructor() {
|
|
25978
|
+
/***************************************************************************
|
|
25979
|
+
* *
|
|
25980
|
+
* Fields *
|
|
25981
|
+
* *
|
|
25982
|
+
**************************************************************************/
|
|
25983
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25984
|
+
this.searchContexts = new Map();
|
|
25985
|
+
}
|
|
25986
|
+
/***************************************************************************
|
|
25987
|
+
* *
|
|
25988
|
+
* Public API *
|
|
25989
|
+
* *
|
|
25990
|
+
**************************************************************************/
|
|
25991
|
+
context(contextId) {
|
|
25992
|
+
let ctx = this.searchContexts.get(contextId);
|
|
25993
|
+
if (!ctx) {
|
|
25994
|
+
ctx = new SearchContext(contextId);
|
|
25995
|
+
this.searchContexts.set(contextId, ctx);
|
|
25996
|
+
}
|
|
25997
|
+
return ctx;
|
|
25998
|
+
}
|
|
25999
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26000
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchContextService, providedIn: 'root' }); }
|
|
26001
|
+
}
|
|
26002
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchContextService, decorators: [{
|
|
26003
|
+
type: Injectable,
|
|
26004
|
+
args: [{
|
|
26005
|
+
providedIn: 'root'
|
|
26006
|
+
}]
|
|
26007
|
+
}], ctorParameters: function () { return []; } });
|
|
26008
|
+
|
|
25887
26009
|
/**
|
|
25888
|
-
* The
|
|
25889
|
-
*
|
|
26010
|
+
* The SearchContextDirective binds a group of search-inputs
|
|
26011
|
+
* to a SearchContext with a two-way binding.
|
|
26012
|
+
*
|
|
26013
|
+
* It also binds the SearchContext to a FilterContext (DataContext).
|
|
26014
|
+
* TODO Maybe separate this??
|
|
25890
26015
|
*/
|
|
25891
26016
|
class ElderSearchContextDirective {
|
|
25892
26017
|
/***************************************************************************
|
|
@@ -25894,50 +26019,35 @@ class ElderSearchContextDirective {
|
|
|
25894
26019
|
* Constructor *
|
|
25895
26020
|
* *
|
|
25896
26021
|
**************************************************************************/
|
|
25897
|
-
constructor() {
|
|
26022
|
+
constructor(searchContextService) {
|
|
25898
26023
|
/***************************************************************************
|
|
25899
26024
|
* *
|
|
25900
26025
|
* Fields *
|
|
25901
26026
|
* *
|
|
25902
26027
|
**************************************************************************/
|
|
25903
|
-
this._forcedFilters$ = new BehaviorSubject$1([]);
|
|
25904
26028
|
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
25905
|
-
this.destroy$ = new Subject
|
|
25906
|
-
this._searchInputs$ = new BehaviorSubject
|
|
25907
|
-
this._searchStates$ = new BehaviorSubject
|
|
25908
|
-
this._filterContext$ = new BehaviorSubject
|
|
25909
|
-
this.
|
|
25910
|
-
|
|
25911
|
-
|
|
26029
|
+
this.destroy$ = new Subject();
|
|
26030
|
+
this._searchInputs$ = new BehaviorSubject([]);
|
|
26031
|
+
this._searchStates$ = new BehaviorSubject([]);
|
|
26032
|
+
this._filterContext$ = new BehaviorSubject(null);
|
|
26033
|
+
this._searchContext$ = new BehaviorSubject(SearchContext.standalone());
|
|
26034
|
+
this.searchContextId$ = new BehaviorSubject(null);
|
|
26035
|
+
this.searchContextId$.pipe(takeUntil(this.destroy$), filter(contextId => !!contextId), map(contextId => searchContextService.context(contextId))).subscribe(ctx => this._searchContext$.next(ctx));
|
|
25912
26036
|
}
|
|
25913
26037
|
/***************************************************************************
|
|
25914
26038
|
* *
|
|
25915
26039
|
* Life Cycle *
|
|
25916
26040
|
* *
|
|
25917
26041
|
**************************************************************************/
|
|
25918
|
-
|
|
25919
|
-
this.
|
|
25920
|
-
|
|
25921
|
-
const userFilters = this.convertToFilters(states);
|
|
25922
|
-
this.applyFilters(userFilters, forcedFilters);
|
|
25923
|
-
});
|
|
26042
|
+
ngOnInit() {
|
|
26043
|
+
this.applyDefaultFiltersToSearchContext();
|
|
26044
|
+
this.syncSearchContextToBoundFilterContext();
|
|
25924
26045
|
}
|
|
25925
|
-
|
|
25926
|
-
|
|
25927
|
-
if (context) {
|
|
25928
|
-
context.updateFilters(userFilters);
|
|
25929
|
-
context.mergeFilters(forcedFilters);
|
|
25930
|
-
this.log.trace("Search-Model filters updated:", Array.from(context.filtersSnapshot));
|
|
25931
|
-
}
|
|
25932
|
-
else {
|
|
25933
|
-
this.log.warn("Failed to apply filters since no FilterContext is available!", {
|
|
25934
|
-
userFilters: userFilters,
|
|
25935
|
-
forcedFilters: forcedFilters
|
|
25936
|
-
});
|
|
25937
|
-
}
|
|
26046
|
+
ngAfterContentInit() {
|
|
26047
|
+
this.syncSearchInputsToSearchContext();
|
|
25938
26048
|
}
|
|
25939
26049
|
ngAfterViewInit() {
|
|
25940
|
-
this.
|
|
26050
|
+
this.applySearchContextToInputs();
|
|
25941
26051
|
}
|
|
25942
26052
|
ngOnDestroy() {
|
|
25943
26053
|
this.destroy$.next();
|
|
@@ -25948,15 +26058,27 @@ class ElderSearchContextDirective {
|
|
|
25948
26058
|
* Properties *
|
|
25949
26059
|
* *
|
|
25950
26060
|
**************************************************************************/
|
|
26061
|
+
set searchContextId(contextId) {
|
|
26062
|
+
this.searchContextId$.next(contextId);
|
|
26063
|
+
}
|
|
26064
|
+
get searchContextId() {
|
|
26065
|
+
return this.searchContextId$.getValue();
|
|
26066
|
+
}
|
|
26067
|
+
get searchContext$() {
|
|
26068
|
+
return this._searchContext$.asObservable();
|
|
26069
|
+
}
|
|
26070
|
+
get searchContext() {
|
|
26071
|
+
return this._searchContext$.getValue();
|
|
26072
|
+
}
|
|
25951
26073
|
set filterContext(value) {
|
|
25952
26074
|
let context;
|
|
25953
26075
|
if (value) {
|
|
25954
|
-
if (typeof value !==
|
|
26076
|
+
if (typeof value !== 'string') {
|
|
25955
26077
|
context = value;
|
|
25956
26078
|
}
|
|
25957
26079
|
else {
|
|
25958
|
-
this.log.warn(
|
|
25959
|
-
throw new Error(
|
|
26080
|
+
this.log.warn('Illegal value provided for property filterContext: ', JSON.stringify(value));
|
|
26081
|
+
throw new Error('Illegal value provided for property filterContext! ' + value);
|
|
25960
26082
|
}
|
|
25961
26083
|
}
|
|
25962
26084
|
else {
|
|
@@ -25974,10 +26096,10 @@ class ElderSearchContextDirective {
|
|
|
25974
26096
|
* to also keep the users intent (by merging) them.
|
|
25975
26097
|
*/
|
|
25976
26098
|
set forcedFilters(filters) {
|
|
25977
|
-
this.
|
|
26099
|
+
this.searchContext.replaceForcedFilters(filters);
|
|
25978
26100
|
}
|
|
25979
26101
|
get forcedFilters() {
|
|
25980
|
-
return this.
|
|
26102
|
+
return this.searchContext.forcedFilters.filtersSnapshot;
|
|
25981
26103
|
}
|
|
25982
26104
|
get attributes() {
|
|
25983
26105
|
return this._searchInputs$.asObservable();
|
|
@@ -26006,7 +26128,7 @@ class ElderSearchContextDirective {
|
|
|
26006
26128
|
* Register a new search name in this container
|
|
26007
26129
|
*/
|
|
26008
26130
|
register(searchInput) {
|
|
26009
|
-
this.log.debug(
|
|
26131
|
+
this.log.debug('Registering search input [' + searchInput.name + ']');
|
|
26010
26132
|
const current = this._searchInputs$.getValue();
|
|
26011
26133
|
this._searchInputs$.next([...current, searchInput]);
|
|
26012
26134
|
}
|
|
@@ -26022,8 +26144,44 @@ class ElderSearchContextDirective {
|
|
|
26022
26144
|
* Private *
|
|
26023
26145
|
* *
|
|
26024
26146
|
**************************************************************************/
|
|
26025
|
-
|
|
26026
|
-
this.
|
|
26147
|
+
applyDefaultFiltersToSearchContext() {
|
|
26148
|
+
const dcFilters = this.filterContext;
|
|
26149
|
+
const searchContext = this.searchContext;
|
|
26150
|
+
if (searchContext.userFilters.isEmpty) {
|
|
26151
|
+
if (!dcFilters.isEmpty) {
|
|
26152
|
+
// Consider all filters in DC as defaults, expect for foced filters.
|
|
26153
|
+
searchContext.updateUserFilters(FilterUtil.strip(dcFilters.filtersSnapshot, this.forcedFilters));
|
|
26154
|
+
}
|
|
26155
|
+
}
|
|
26156
|
+
else {
|
|
26157
|
+
dcFilters.replaceFilters(searchContext.userFilters.filtersSnapshot);
|
|
26158
|
+
}
|
|
26159
|
+
}
|
|
26160
|
+
syncSearchInputsToSearchContext() {
|
|
26161
|
+
const inputFilters$ = this._searchInputs$.pipe(switchMap$1(inputs => combineLatest(inputs.map(i => i.state$))), debounceTime(5), tap(states => this._searchStates$.next(states)), map(states => this.convertToFilters(states)));
|
|
26162
|
+
inputFilters$
|
|
26163
|
+
.pipe(takeUntil(this.destroy$), combineLatestWith(this._searchContext$))
|
|
26164
|
+
.subscribe(([inputFilters, searchContext]) => {
|
|
26165
|
+
searchContext.updateUserFilters(inputFilters);
|
|
26166
|
+
});
|
|
26167
|
+
}
|
|
26168
|
+
syncSearchContextToBoundFilterContext() {
|
|
26169
|
+
this._searchContext$.pipe(takeUntil(this.destroy$), switchMap$1(context => context.allFiltersChanged)).subscribe(allFilters => this.applyToBoundFilterContext(allFilters));
|
|
26170
|
+
}
|
|
26171
|
+
applyToBoundFilterContext(filters) {
|
|
26172
|
+
const filterCtx = this.filterContext;
|
|
26173
|
+
if (filterCtx) {
|
|
26174
|
+
filterCtx.replaceFilters(filters);
|
|
26175
|
+
this.log.debug('Applied Filters of SearchContext ' + this.searchContextId + ' to DataContext FilterContext.', filters);
|
|
26176
|
+
}
|
|
26177
|
+
else {
|
|
26178
|
+
this.log.warn('Failed to apply filters since no FilterContext is available!', filters);
|
|
26179
|
+
}
|
|
26180
|
+
}
|
|
26181
|
+
applySearchContextToInputs() {
|
|
26182
|
+
const ctx = this.searchContext;
|
|
26183
|
+
this.applyFiltersToInputs(ctx.userFilters.filtersSnapshot // this.filterContext.filtersSnapshot (old)
|
|
26184
|
+
);
|
|
26027
26185
|
}
|
|
26028
26186
|
applyFiltersToInputs(filters) {
|
|
26029
26187
|
this.log.warn('applyFiltersToInputs', filters);
|
|
@@ -26047,18 +26205,20 @@ class ElderSearchContextDirective {
|
|
|
26047
26205
|
.filter(s => !!s.queryKey)
|
|
26048
26206
|
.map(s => new Filter(s.queryKey, s.queryValue));
|
|
26049
26207
|
}
|
|
26050
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26051
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, exportAs: ["elderSearchContext"], ngImport: i0 }); }
|
|
26208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchContextDirective, deps: [{ token: SearchContextService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26209
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { searchContextId: "searchContextId", filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, exportAs: ["elderSearchContext"], ngImport: i0 }); }
|
|
26052
26210
|
}
|
|
26053
26211
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
|
|
26054
26212
|
type: Directive,
|
|
26055
26213
|
args: [{
|
|
26056
|
-
selector:
|
|
26057
|
-
exportAs:
|
|
26214
|
+
selector: '[elderSearchContext]',
|
|
26215
|
+
exportAs: 'elderSearchContext'
|
|
26058
26216
|
}]
|
|
26059
|
-
}], ctorParameters: function () { return []; }, propDecorators: {
|
|
26217
|
+
}], ctorParameters: function () { return [{ type: SearchContextService }]; }, propDecorators: { searchContextId: [{
|
|
26218
|
+
type: Input
|
|
26219
|
+
}], filterContext: [{
|
|
26060
26220
|
type: Input,
|
|
26061
|
-
args: [
|
|
26221
|
+
args: ['elderSearchContext']
|
|
26062
26222
|
}], forcedFilters: [{
|
|
26063
26223
|
type: Input
|
|
26064
26224
|
}] } });
|
|
@@ -26262,7 +26422,8 @@ class ElderSearchInputDirective {
|
|
|
26262
26422
|
ngAfterViewInit() {
|
|
26263
26423
|
this._extractedName = this.extractName();
|
|
26264
26424
|
this.log.debug(this._extractedName + "|" + this.queryKey + "|" + this.resolvePath);
|
|
26265
|
-
|
|
26425
|
+
const viewStabilized$ = of('stabilized$').pipe(delay(20), first());
|
|
26426
|
+
this.stateObservable().pipe(skipUntil(viewStabilized$)).subscribe(state => {
|
|
26266
26427
|
this.emitState(state);
|
|
26267
26428
|
});
|
|
26268
26429
|
}
|
|
@@ -26906,147 +27067,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
26906
27067
|
}]
|
|
26907
27068
|
}] });
|
|
26908
27069
|
|
|
26909
|
-
class
|
|
26910
|
-
static empty(searchContextId) {
|
|
26911
|
-
return new ElderSearchContextFilters(searchContextId, new Map());
|
|
26912
|
-
}
|
|
26913
|
-
constructor(searchContextId, filters) {
|
|
26914
|
-
this.searchContextId = searchContextId;
|
|
26915
|
-
this.filters = filters;
|
|
26916
|
-
}
|
|
26917
|
-
}
|
|
26918
|
-
|
|
26919
|
-
class ElderSearchUrlBindingService {
|
|
27070
|
+
class SearchQueryParamsParser {
|
|
26920
27071
|
/***************************************************************************
|
|
26921
27072
|
* *
|
|
26922
27073
|
* Constructor *
|
|
26923
27074
|
* *
|
|
26924
27075
|
**************************************************************************/
|
|
26925
|
-
constructor(
|
|
26926
|
-
this.router = router;
|
|
26927
|
-
this.route = route;
|
|
26928
|
-
//A search param has following structure: q-[searchContextId]-[filterId]=[value]
|
|
26929
|
-
//Example: search-browser1-hasStarted=true
|
|
27076
|
+
constructor(queryPrefix) {
|
|
26930
27077
|
/***************************************************************************
|
|
26931
27078
|
* *
|
|
26932
27079
|
* Fields *
|
|
26933
27080
|
* *
|
|
26934
27081
|
**************************************************************************/
|
|
26935
27082
|
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
26936
|
-
this.
|
|
26937
|
-
value: new Map(),
|
|
26938
|
-
emit: true
|
|
26939
|
-
});
|
|
26940
|
-
this._initialSearchMap$ = new BehaviorSubject$1(new Map());
|
|
26941
|
-
this.searchParamPrefix = "q";
|
|
26942
|
-
this.unsubscribe$ = new Subject();
|
|
26943
|
-
this.router.events.pipe(first()).subscribe(() => {
|
|
26944
|
-
this.handleSearchParameters(this.route.snapshot.queryParams);
|
|
26945
|
-
});
|
|
26946
|
-
this._searchMap$.pipe(filter(searchMapUpdate => searchMapUpdate.emit), takeUntil(this.unsubscribe$)).subscribe(searchMapUpdate => {
|
|
26947
|
-
this.log.warn("SET URL");
|
|
26948
|
-
const searchMap = searchMapUpdate.value;
|
|
26949
|
-
const resetParams = this.resetSearchParams();
|
|
26950
|
-
const queryParams = { ...resetParams, ...this.buildQueryParams(searchMap) };
|
|
26951
|
-
this.log.warn("searchMap :", searchMap);
|
|
26952
|
-
this.log.warn("queryParams :", queryParams);
|
|
26953
|
-
this.router.navigate([], {
|
|
26954
|
-
queryParams: queryParams,
|
|
26955
|
-
replaceUrl: true,
|
|
26956
|
-
queryParamsHandling: "merge"
|
|
26957
|
-
});
|
|
26958
|
-
});
|
|
26959
|
-
this.router.events.subscribe((event) => this.log.warn("Type: " + event.constructor?.name, event));
|
|
26960
|
-
}
|
|
26961
|
-
/***************************************************************************
|
|
26962
|
-
* *
|
|
26963
|
-
* Life Cycle *
|
|
26964
|
-
* *
|
|
26965
|
-
**************************************************************************/
|
|
26966
|
-
ngOnDestroy() {
|
|
26967
|
-
this.unsubscribe$.next();
|
|
26968
|
-
this.unsubscribe$.complete();
|
|
26969
|
-
}
|
|
26970
|
-
/***************************************************************************
|
|
26971
|
-
* *
|
|
26972
|
-
* Properties *
|
|
26973
|
-
* *
|
|
26974
|
-
**************************************************************************/
|
|
26975
|
-
get initialSearchMap$() {
|
|
26976
|
-
return this._initialSearchMap$;
|
|
27083
|
+
this.queryPrefix = queryPrefix;
|
|
26977
27084
|
}
|
|
26978
27085
|
/***************************************************************************
|
|
26979
27086
|
* *
|
|
26980
27087
|
* Public API *
|
|
26981
27088
|
* *
|
|
26982
27089
|
**************************************************************************/
|
|
26983
|
-
|
|
26984
|
-
const
|
|
26985
|
-
const
|
|
26986
|
-
|
|
26987
|
-
.filter(filter => filter.value != null)
|
|
26988
|
-
.map(filter => {
|
|
26989
|
-
return [filter.key, filter];
|
|
26990
|
-
}));
|
|
26991
|
-
searchMap.set(searchContextId, new ElderSearchContextFilters(searchContextId, filtersMap));
|
|
26992
|
-
this._searchMap$.next({ value: searchMap, emit: true });
|
|
26993
|
-
}
|
|
26994
|
-
resetFilterForContext(contextId) {
|
|
26995
|
-
const searchMapUpdate = this._searchMap$.getValue();
|
|
26996
|
-
const searchMap = searchMapUpdate.value;
|
|
26997
|
-
if (searchMap.has(contextId)) {
|
|
26998
|
-
searchMap.delete(contextId);
|
|
26999
|
-
this._searchMap$.next({ value: searchMap, emit: false });
|
|
27000
|
-
}
|
|
27090
|
+
parse(params) {
|
|
27091
|
+
const paramMap = convertToParamMap(params);
|
|
27092
|
+
const searchParamKeys = this.extractSearchParameters(paramMap);
|
|
27093
|
+
return this.buildSearchContextMap(paramMap, searchParamKeys);
|
|
27001
27094
|
}
|
|
27002
27095
|
/***************************************************************************
|
|
27003
27096
|
* *
|
|
27004
27097
|
* Private methods *
|
|
27005
27098
|
* *
|
|
27006
27099
|
**************************************************************************/
|
|
27007
|
-
|
|
27008
|
-
|
|
27009
|
-
const searchMap = this.buildSearchContextMap(params, searchParamKeys);
|
|
27010
|
-
this._searchMap$.next({ value: searchMap, emit: true });
|
|
27011
|
-
this._initialSearchMap$.next(searchMap);
|
|
27012
|
-
}
|
|
27013
|
-
extractSearchParameters(params) {
|
|
27014
|
-
return Object.getOwnPropertyNames(params).filter(param => param.startsWith(this.searchParamPrefix + "-"));
|
|
27100
|
+
extractSearchParameters(paramMap) {
|
|
27101
|
+
return paramMap.keys.filter(param => param.startsWith(this.queryPrefix + '-'));
|
|
27015
27102
|
}
|
|
27016
|
-
buildSearchContextMap(
|
|
27017
|
-
const
|
|
27103
|
+
buildSearchContextMap(paramMap, searchParamKeys) {
|
|
27104
|
+
const filtersByContextId = new Map();
|
|
27018
27105
|
for (const key of searchParamKeys) {
|
|
27019
|
-
const
|
|
27106
|
+
const filterValues = paramMap.getAll(key);
|
|
27107
|
+
const filterValue = filterValues[0]; // TODO Support multiple values
|
|
27020
27108
|
const filterParamData = this.extractFilterParam(key, filterValue);
|
|
27021
27109
|
const filter = this.convertFilterStringToFilter(filterValue, filterParamData);
|
|
27022
|
-
this.checkAndSetFilter(
|
|
27110
|
+
this.checkAndSetFilter(filtersByContextId, filterParamData.searchContextId, filter);
|
|
27023
27111
|
}
|
|
27024
|
-
return
|
|
27112
|
+
return filtersByContextId;
|
|
27025
27113
|
}
|
|
27026
|
-
checkAndSetFilter(
|
|
27027
|
-
|
|
27028
|
-
|
|
27029
|
-
|
|
27030
|
-
|
|
27031
|
-
searchMap.set(filterParamData.searchContextId, ElderSearchContextFilters.empty(filterParamData.searchContextId));
|
|
27032
|
-
this.setFilter(searchMap, filterParamData, filter);
|
|
27114
|
+
checkAndSetFilter(filtersByContextId, searchContextId, filter) {
|
|
27115
|
+
let filtersInContext = filtersByContextId.get(searchContextId);
|
|
27116
|
+
if (!filtersInContext) {
|
|
27117
|
+
filtersInContext = [];
|
|
27118
|
+
filtersByContextId.set(searchContextId, filtersInContext);
|
|
27033
27119
|
}
|
|
27034
|
-
|
|
27035
|
-
setFilter(searchMap, filterParamData, filter) {
|
|
27036
|
-
const searchContext = searchMap.get(filterParamData.searchContextId);
|
|
27037
|
-
searchContext.filters.set(filterParamData.filterId, filter);
|
|
27120
|
+
filtersInContext.push(filter);
|
|
27038
27121
|
}
|
|
27039
27122
|
extractFilterParam(key, filterValue) {
|
|
27040
|
-
const splitParams = key.split(
|
|
27123
|
+
const splitParams = key.split('-');
|
|
27041
27124
|
return {
|
|
27042
27125
|
searchContextId: splitParams[1],
|
|
27043
27126
|
filterId: splitParams[2],
|
|
27044
27127
|
isArray: this.checkIfParamIsArray(filterValue)
|
|
27045
27128
|
};
|
|
27046
27129
|
}
|
|
27047
|
-
checkIfParamIsArray(filterValue) {
|
|
27048
|
-
return filterValue.startsWith("(") && filterValue.endsWith(")");
|
|
27049
|
-
}
|
|
27050
27130
|
convertFilterStringToFilter(paramValue, filterParamData) {
|
|
27051
27131
|
let value = paramValue;
|
|
27052
27132
|
if (this.isSingularArrayValue(value, filterParamData)) {
|
|
@@ -27058,59 +27138,189 @@ class ElderSearchUrlBindingService {
|
|
|
27058
27138
|
return !Array.isArray(value) && filterParamData.isArray;
|
|
27059
27139
|
}
|
|
27060
27140
|
convertValueToArray(value) {
|
|
27061
|
-
return value.slice(1).slice(0, -1).split(
|
|
27141
|
+
return value.slice(1).slice(0, -1).split(',');
|
|
27142
|
+
}
|
|
27143
|
+
checkIfParamIsArray(filterValue) {
|
|
27144
|
+
return filterValue.startsWith('(') && filterValue.endsWith(')');
|
|
27145
|
+
}
|
|
27146
|
+
}
|
|
27147
|
+
|
|
27148
|
+
class UrlFilterByContext {
|
|
27149
|
+
constructor(urlFiltersByContext) {
|
|
27150
|
+
this.byContext = urlFiltersByContext ?? new Map();
|
|
27151
|
+
}
|
|
27152
|
+
filtersOf(contextId) {
|
|
27153
|
+
return this.byContext.get(contextId);
|
|
27154
|
+
}
|
|
27155
|
+
static empty() {
|
|
27156
|
+
return new UrlFilterByContext();
|
|
27157
|
+
}
|
|
27158
|
+
withUrlFilters(current) {
|
|
27159
|
+
const copy = new Map(this.byContext);
|
|
27160
|
+
current
|
|
27161
|
+
.forEach((v, k) => copy.set(k, new UrlFilters(v)));
|
|
27162
|
+
return new UrlFilterByContext(copy);
|
|
27163
|
+
}
|
|
27164
|
+
}
|
|
27165
|
+
class UrlFilters {
|
|
27166
|
+
constructor(filters) {
|
|
27167
|
+
this.consumed = false;
|
|
27168
|
+
this.filters = [...filters];
|
|
27062
27169
|
}
|
|
27063
|
-
|
|
27064
|
-
|
|
27065
|
-
|
|
27066
|
-
|
|
27067
|
-
|
|
27170
|
+
consumeFilters() {
|
|
27171
|
+
this.consumed = true;
|
|
27172
|
+
return this.filters;
|
|
27173
|
+
}
|
|
27174
|
+
}
|
|
27175
|
+
class ElderSearchUrlService {
|
|
27176
|
+
/***************************************************************************
|
|
27177
|
+
* *
|
|
27178
|
+
* Constructor *
|
|
27179
|
+
* *
|
|
27180
|
+
**************************************************************************/
|
|
27181
|
+
constructor(router) {
|
|
27182
|
+
this.router = router;
|
|
27183
|
+
/***************************************************************************
|
|
27184
|
+
* *
|
|
27185
|
+
* Fields *
|
|
27186
|
+
* *
|
|
27187
|
+
**************************************************************************/
|
|
27188
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
27189
|
+
this.SEARCH_QUERY_KEY = 'q';
|
|
27190
|
+
this.paramsParser = new SearchQueryParamsParser(this.SEARCH_QUERY_KEY);
|
|
27191
|
+
this.urlFiltersByContext$ = new BehaviorSubject(UrlFilterByContext.empty());
|
|
27192
|
+
}
|
|
27193
|
+
/***************************************************************************
|
|
27194
|
+
* *
|
|
27195
|
+
* Public API *
|
|
27196
|
+
* *
|
|
27197
|
+
**************************************************************************/
|
|
27198
|
+
init() {
|
|
27199
|
+
// this.logRouterEvents();
|
|
27200
|
+
this.router.events.pipe(filter(event => event.type === 1 /* EventType.NavigationEnd */), map(event => this.extractUrlFilters(this.router.routerState.snapshot))).subscribe(currentContextFilters => this.updateSeenUrlFilters(currentContextFilters));
|
|
27201
|
+
}
|
|
27202
|
+
urlFiltersOfContext$(contextId) {
|
|
27203
|
+
if (!contextId) {
|
|
27204
|
+
throw new Error('Illegal contextId Argument: ' + contextId);
|
|
27205
|
+
}
|
|
27206
|
+
return this.urlFiltersByContext$.pipe(map(byContext => byContext.filtersOf(contextId)), filter(filters => !!filters));
|
|
27207
|
+
}
|
|
27208
|
+
updateQueryParams(contextId, filters) {
|
|
27209
|
+
if (!contextId)
|
|
27210
|
+
throw new Error('Illegal searchContextId Argument: ' + contextId);
|
|
27211
|
+
if (!filters)
|
|
27212
|
+
throw new Error('Illegal filters Argument: ' + contextId);
|
|
27213
|
+
filters = filters.filter(f => f.value !== null && f.value !== undefined);
|
|
27214
|
+
const currentUrlAll = this.extractUrlFilters(this.router.routerState.snapshot);
|
|
27215
|
+
const currentUrl = currentUrlAll.get(contextId) ?? [];
|
|
27216
|
+
if (!FilterUtil.equals(filters, currentUrl)) {
|
|
27217
|
+
const resetParams = this.resetSearchParams(contextId, currentUrl);
|
|
27218
|
+
const queryParams = { ...resetParams, ...this.buildQueryParams(contextId, filters) };
|
|
27219
|
+
this.log.info('writeUrlQueryParams: ' + contextId, {
|
|
27220
|
+
searchMap: filters,
|
|
27221
|
+
queryParams: queryParams
|
|
27222
|
+
});
|
|
27223
|
+
this.router.navigate([], {
|
|
27224
|
+
queryParams: queryParams,
|
|
27225
|
+
replaceUrl: true,
|
|
27226
|
+
queryParamsHandling: 'merge'
|
|
27227
|
+
});
|
|
27228
|
+
}
|
|
27229
|
+
else {
|
|
27230
|
+
// this.log.info('writeUrlQueryParams PREVENTED')
|
|
27231
|
+
}
|
|
27232
|
+
}
|
|
27233
|
+
/***************************************************************************
|
|
27234
|
+
* *
|
|
27235
|
+
* Private methods *
|
|
27236
|
+
* *
|
|
27237
|
+
**************************************************************************/
|
|
27238
|
+
updateSeenUrlFilters(current) {
|
|
27239
|
+
if (current.size > 0) {
|
|
27240
|
+
const filtersByContext = this.urlFiltersByContext$.getValue();
|
|
27241
|
+
const newUrlFilters = filtersByContext.withUrlFilters(current);
|
|
27242
|
+
this.log.info('updateSeenUrlFilters:', newUrlFilters);
|
|
27243
|
+
this.urlFiltersByContext$.next(newUrlFilters);
|
|
27244
|
+
}
|
|
27245
|
+
}
|
|
27246
|
+
logRouterEvents() {
|
|
27247
|
+
this.router.events.pipe(map(e => e)).subscribe(e => this.log.debug('ROUTER-EVENT [' + (e.constructor.name) + ']#' + e.id + ': ' + e.url));
|
|
27248
|
+
}
|
|
27249
|
+
parseUrlFilters(params) {
|
|
27250
|
+
return this.paramsParser.parse(params);
|
|
27251
|
+
}
|
|
27252
|
+
collectAllRouteParams(routerState) {
|
|
27253
|
+
return this.collectRouteQueryParams(routerState.root);
|
|
27254
|
+
}
|
|
27255
|
+
collectRouteQueryParams(root) {
|
|
27256
|
+
let params = {};
|
|
27257
|
+
let stack = [root];
|
|
27258
|
+
while (stack.length > 0) {
|
|
27259
|
+
const route = stack.pop();
|
|
27260
|
+
params = { ...params, ...route.queryParams };
|
|
27261
|
+
stack.push(...route.children);
|
|
27068
27262
|
}
|
|
27069
27263
|
return params;
|
|
27070
27264
|
}
|
|
27071
|
-
|
|
27265
|
+
extractUrlFilters(routerState) {
|
|
27266
|
+
const params = this.collectAllRouteParams(routerState);
|
|
27267
|
+
return this.parseUrlFilters(params);
|
|
27268
|
+
}
|
|
27269
|
+
resetSearchParams(searchContextId, urlFiltersOf) {
|
|
27270
|
+
if (urlFiltersOf && urlFiltersOf.length > 0) {
|
|
27271
|
+
const params = {};
|
|
27272
|
+
urlFiltersOf.forEach(toRemove => {
|
|
27273
|
+
params[this.queryParamKey(searchContextId, toRemove)] = null;
|
|
27274
|
+
});
|
|
27275
|
+
return params;
|
|
27276
|
+
}
|
|
27277
|
+
return {};
|
|
27278
|
+
}
|
|
27279
|
+
buildQueryParams(searchContextId, filters) {
|
|
27072
27280
|
const params = {};
|
|
27073
|
-
for (const
|
|
27074
|
-
|
|
27075
|
-
for (const filter of filters.values()) {
|
|
27076
|
-
params[`${this.searchParamPrefix}-${searchContextId}-${filter.key}`] = this.convertValueToArrayOrSingleValue(filter.value);
|
|
27077
|
-
}
|
|
27281
|
+
for (const filter of filters) {
|
|
27282
|
+
params[this.queryParamKey(searchContextId, filter)] = this.convertValueToArrayOrSingleValue(filter.value);
|
|
27078
27283
|
}
|
|
27079
27284
|
return params;
|
|
27080
27285
|
}
|
|
27286
|
+
queryParamKey(searchContextId, filter) {
|
|
27287
|
+
return `${this.SEARCH_QUERY_KEY}-${searchContextId}-${filter.key}`;
|
|
27288
|
+
}
|
|
27081
27289
|
convertValueToArrayOrSingleValue(value) {
|
|
27082
27290
|
return Array.isArray(value) ? `(${value.toString()})` : value;
|
|
27083
27291
|
}
|
|
27084
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
27085
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
27292
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlService, deps: [{ token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27293
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlService, providedIn: 'root' }); }
|
|
27086
27294
|
}
|
|
27087
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
27295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlService, decorators: [{
|
|
27088
27296
|
type: Injectable,
|
|
27089
27297
|
args: [{
|
|
27090
|
-
providedIn:
|
|
27298
|
+
providedIn: 'root'
|
|
27091
27299
|
}]
|
|
27092
|
-
}], ctorParameters: function () { return [{ type: i1$3.Router }
|
|
27300
|
+
}], ctorParameters: function () { return [{ type: i1$3.Router }]; } });
|
|
27093
27301
|
|
|
27094
27302
|
/**
|
|
27095
27303
|
* The search container manages a group of search-inputs
|
|
27096
27304
|
* and holds their values in a central search model.
|
|
27097
27305
|
*/
|
|
27098
|
-
class
|
|
27306
|
+
class ElderSearchUrlDirective {
|
|
27099
27307
|
/***************************************************************************
|
|
27100
27308
|
* *
|
|
27101
27309
|
* Constructor *
|
|
27102
27310
|
* *
|
|
27103
27311
|
**************************************************************************/
|
|
27104
|
-
constructor(
|
|
27105
|
-
this.
|
|
27106
|
-
this.urlBindingService = urlBindingService;
|
|
27312
|
+
constructor(searchContextDirective, searchUrlService) {
|
|
27313
|
+
this.searchUrlService = searchUrlService;
|
|
27107
27314
|
/***************************************************************************
|
|
27108
27315
|
* *
|
|
27109
27316
|
* Fields *
|
|
27110
27317
|
* *
|
|
27111
27318
|
**************************************************************************/
|
|
27112
27319
|
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
27113
|
-
this.destroy$ = new Subject
|
|
27320
|
+
this.destroy$ = new Subject();
|
|
27321
|
+
this.searchContextId = searchContextDirective.searchContextId;
|
|
27322
|
+
this.searchContext$ = searchContextDirective.searchContext$;
|
|
27323
|
+
this.searchContext$.pipe(combineLatestWith(this.searchUrlService.urlFiltersOfContext$(this.searchContextId))).subscribe(([context, urlFilters]) => this.applyUrlFilters(context, urlFilters));
|
|
27114
27324
|
}
|
|
27115
27325
|
/***************************************************************************
|
|
27116
27326
|
* *
|
|
@@ -27118,47 +27328,53 @@ class ElderSearchContextUrlBindingDirective {
|
|
|
27118
27328
|
* *
|
|
27119
27329
|
**************************************************************************/
|
|
27120
27330
|
ngAfterViewInit() {
|
|
27121
|
-
if (this.
|
|
27122
|
-
this.
|
|
27123
|
-
|
|
27124
|
-
|
|
27125
|
-
});
|
|
27126
|
-
this.searchContext.userFilters$.pipe(takeUntil(this.destroy$)).subscribe(filters => this.urlBindingService.updateFiltersForContext(this._urlBinding, filters));
|
|
27331
|
+
if (this.searchContextId) {
|
|
27332
|
+
this.searchContext$.pipe(takeUntil(this.destroy$), switchMap(searchContext => searchContext.userFilters.filters)).subscribe(userFilters =>
|
|
27333
|
+
// this.urlBindingService.updateFiltersForContext(this.searchContextId, userFilters)
|
|
27334
|
+
this.searchUrlService.updateQueryParams(this.searchContextId, userFilters));
|
|
27127
27335
|
}
|
|
27128
27336
|
}
|
|
27129
27337
|
ngOnDestroy() {
|
|
27130
|
-
this.urlBindingService.resetFilterForContext(this._urlBinding);
|
|
27131
27338
|
this.destroy$.next();
|
|
27132
27339
|
this.destroy$.complete();
|
|
27133
27340
|
}
|
|
27134
27341
|
/***************************************************************************
|
|
27135
27342
|
* *
|
|
27136
|
-
*
|
|
27343
|
+
* Private methods *
|
|
27137
27344
|
* *
|
|
27138
27345
|
**************************************************************************/
|
|
27139
|
-
|
|
27140
|
-
|
|
27141
|
-
|
|
27142
|
-
|
|
27143
|
-
|
|
27346
|
+
applyUrlFilters(context, urlFilters) {
|
|
27347
|
+
if (!urlFilters.consumed) {
|
|
27348
|
+
const consumedFilters = urlFilters.consumeFilters();
|
|
27349
|
+
if (consumedFilters.length > 0) {
|
|
27350
|
+
this.log.info('URL SEARCH BINDING Replacing Filters: ', {
|
|
27351
|
+
context: context,
|
|
27352
|
+
urlFilters: consumedFilters
|
|
27353
|
+
});
|
|
27354
|
+
context.replaceUserFilters(consumedFilters);
|
|
27355
|
+
}
|
|
27356
|
+
}
|
|
27144
27357
|
}
|
|
27145
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
27146
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type:
|
|
27358
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlDirective, deps: [{ token: ElderSearchContextDirective }, { token: ElderSearchUrlService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
27359
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ElderSearchUrlDirective, selector: "[elderSearchUrl]", exportAs: ["elderSearchUrl"], ngImport: i0 }); }
|
|
27147
27360
|
}
|
|
27148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
27361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlDirective, decorators: [{
|
|
27149
27362
|
type: Directive,
|
|
27150
27363
|
args: [{
|
|
27151
|
-
selector:
|
|
27152
|
-
exportAs:
|
|
27364
|
+
selector: '[elderSearchUrl]',
|
|
27365
|
+
exportAs: 'elderSearchUrl'
|
|
27153
27366
|
}]
|
|
27154
|
-
}], ctorParameters: function () { return [{ type: ElderSearchContextDirective }, { type:
|
|
27155
|
-
type: Input
|
|
27156
|
-
}] } });
|
|
27367
|
+
}], ctorParameters: function () { return [{ type: ElderSearchContextDirective }, { type: ElderSearchUrlService }]; } });
|
|
27157
27368
|
|
|
27369
|
+
// Because of AOT Compiler
|
|
27370
|
+
function initSearchUrlService(searchUrlService) {
|
|
27371
|
+
// Hack to use Lambda here!
|
|
27372
|
+
return () => { searchUrlService.init(); };
|
|
27373
|
+
}
|
|
27158
27374
|
class ElderSearchModule {
|
|
27159
27375
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27160
27376
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchModule, declarations: [ElderSearchContextDirective,
|
|
27161
|
-
|
|
27377
|
+
ElderSearchUrlDirective,
|
|
27162
27378
|
ElderSearchInputDirective,
|
|
27163
27379
|
ElderInitialValueDirective,
|
|
27164
27380
|
ElderSearchBoxComponent,
|
|
@@ -27170,11 +27386,18 @@ class ElderSearchModule {
|
|
|
27170
27386
|
ElderPanelModule,
|
|
27171
27387
|
ElderFormsDirectivesModule,
|
|
27172
27388
|
TranslateModule], exports: [ElderSearchContextDirective,
|
|
27173
|
-
|
|
27389
|
+
ElderSearchUrlDirective,
|
|
27174
27390
|
ElderSearchInputDirective,
|
|
27175
27391
|
ElderSearchBoxComponent,
|
|
27176
27392
|
ElderSearchPanelComponent] }); }
|
|
27177
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchModule,
|
|
27393
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchModule, providers: [
|
|
27394
|
+
{
|
|
27395
|
+
provide: APP_INITIALIZER,
|
|
27396
|
+
useFactory: initSearchUrlService,
|
|
27397
|
+
deps: [ElderSearchUrlService],
|
|
27398
|
+
multi: true
|
|
27399
|
+
},
|
|
27400
|
+
], imports: [CommonModule, FormsModule,
|
|
27178
27401
|
MatInputModule, MatButtonModule, MatIconModule,
|
|
27179
27402
|
MatBadgeModule,
|
|
27180
27403
|
A11yModule,
|
|
@@ -27186,6 +27409,14 @@ class ElderSearchModule {
|
|
|
27186
27409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchModule, decorators: [{
|
|
27187
27410
|
type: NgModule,
|
|
27188
27411
|
args: [{
|
|
27412
|
+
providers: [
|
|
27413
|
+
{
|
|
27414
|
+
provide: APP_INITIALIZER,
|
|
27415
|
+
useFactory: initSearchUrlService,
|
|
27416
|
+
deps: [ElderSearchUrlService],
|
|
27417
|
+
multi: true
|
|
27418
|
+
},
|
|
27419
|
+
],
|
|
27189
27420
|
imports: [
|
|
27190
27421
|
CommonModule, FormsModule,
|
|
27191
27422
|
MatInputModule, MatButtonModule, MatIconModule,
|
|
@@ -27198,7 +27429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
27198
27429
|
],
|
|
27199
27430
|
declarations: [
|
|
27200
27431
|
ElderSearchContextDirective,
|
|
27201
|
-
|
|
27432
|
+
ElderSearchUrlDirective,
|
|
27202
27433
|
ElderSearchInputDirective,
|
|
27203
27434
|
ElderInitialValueDirective,
|
|
27204
27435
|
ElderSearchBoxComponent,
|
|
@@ -27206,7 +27437,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
27206
27437
|
],
|
|
27207
27438
|
exports: [
|
|
27208
27439
|
ElderSearchContextDirective,
|
|
27209
|
-
|
|
27440
|
+
ElderSearchUrlDirective,
|
|
27210
27441
|
ElderSearchInputDirective,
|
|
27211
27442
|
ElderSearchBoxComponent,
|
|
27212
27443
|
ElderSearchPanelComponent
|
|
@@ -27621,7 +27852,7 @@ class HttpDataTransferComponent {
|
|
|
27621
27852
|
**************************************************************************/
|
|
27622
27853
|
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
27623
27854
|
this._transfer$ = new BehaviorSubject(null);
|
|
27624
|
-
this.$state = this._transfer$.pipe(filter(transfer => !!transfer), switchMap
|
|
27855
|
+
this.$state = this._transfer$.pipe(filter(transfer => !!transfer), switchMap(transfer => transfer.state$));
|
|
27625
27856
|
this.$detail = this.$state.pipe(map(state => this.renderTransferProgress(state)));
|
|
27626
27857
|
}
|
|
27627
27858
|
/***************************************************************************
|
|
@@ -27722,7 +27953,7 @@ class ElderDataTransferService {
|
|
|
27722
27953
|
return this._completed.asObservable();
|
|
27723
27954
|
}
|
|
27724
27955
|
get transferAggregate() {
|
|
27725
|
-
return this.transfers.pipe(switchMap
|
|
27956
|
+
return this.transfers.pipe(switchMap(transfers => this.aggregateProgress(transfers)), startWith(DataTransferProgressAggregate.Empty));
|
|
27726
27957
|
}
|
|
27727
27958
|
/***************************************************************************
|
|
27728
27959
|
* *
|
|
@@ -31167,5 +31398,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
31167
31398
|
* Generated bundle index. Do not edit.
|
|
31168
31399
|
*/
|
|
31169
31400
|
|
|
31170
|
-
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, ElderMultiSelectChipOptionsComponent, 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, SelectChipSpecUtil, SelectOptionChipSpecUtil, 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 };
|
|
31401
|
+
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, ElderMultiSelectChipOptionsComponent, 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, ElderSearchUrlDirective, 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, SelectChipSpecUtil, SelectOptionChipSpecUtil, 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, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
|
|
31171
31402
|
//# sourceMappingURL=elderbyte-ngx-starter.mjs.map
|