@elderbyte/ngx-starter 14.6.0 → 14.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/common/data/data-context/data-context-active-page.mjs +1 -1
- package/esm2020/lib/common/data/data-context/data-context-base.mjs +2 -2
- package/esm2020/lib/common/data/data-context/data-context-continuable-base.mjs +1 -1
- package/esm2020/lib/common/data/data-context/data-context.mjs +1 -1
- package/esm2020/lib/common/data/datasource/data-source-adapter.mjs +1 -1
- package/esm2020/lib/common/data/datasource/data-source-processor.mjs +1 -1
- package/esm2020/lib/common/data/datasource/data-source.mjs +1 -1
- package/esm2020/lib/common/data/datasource/fetcher/delegate-data-source.mjs +1 -1
- package/esm2020/lib/common/data/datasource/local/local-list-data-source.mjs +1 -1
- package/esm2020/lib/common/data/datasource/local/local-paged-data-source.mjs +1 -1
- package/esm2020/lib/common/data/datasource/rest/rest-client.mjs +2 -2
- package/esm2020/lib/common/data/filters/filter-context.mjs +141 -0
- package/esm2020/lib/common/data/filters/filter.mjs +109 -0
- package/esm2020/lib/common/data/http-params-builder.mjs +2 -2
- package/esm2020/lib/common/data/public_api.mjs +3 -3
- package/esm2020/lib/common/data/required-filter-evaluator.mjs +1 -1
- package/esm2020/lib/common/data/token-chunk-request.mjs +1 -1
- package/esm2020/lib/common/utils/filter-util.mjs +1 -1
- package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +1 -1
- package/esm2020/lib/components/csv/elder-csv-stream-exporter.mjs +1 -1
- package/esm2020/lib/components/data-view/base/elder-data-view-options.mjs +1 -1
- package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +33 -19
- package/esm2020/lib/components/http-support/elder-http-client.service.mjs +1 -1
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +2 -2
- package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +2 -2
- package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +2 -2
- package/esm2020/lib/components/select/elder-select-base.mjs +2 -2
- package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +1 -1
- package/fesm2015/elderbyte-ngx-starter.mjs +90 -27
- package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
- package/fesm2020/elderbyte-ngx-starter.mjs +90 -27
- package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/data/data-context/data-context-active-page.d.ts +1 -1
- package/lib/common/data/data-context/data-context-base.d.ts +2 -2
- package/lib/common/data/data-context/data-context-continuable-base.d.ts +1 -1
- package/lib/common/data/data-context/data-context.d.ts +2 -2
- package/lib/common/data/datasource/data-source-adapter.d.ts +1 -1
- package/lib/common/data/datasource/data-source-processor.d.ts +1 -1
- package/lib/common/data/datasource/data-source.d.ts +1 -1
- package/lib/common/data/datasource/fetcher/delegate-data-source.d.ts +1 -1
- package/lib/common/data/datasource/local/local-list-data-source.d.ts +1 -1
- package/lib/common/data/datasource/local/local-paged-data-source.d.ts +1 -1
- package/lib/common/data/datasource/rest/rest-client.d.ts +1 -1
- package/lib/common/data/{filter-context.d.ts → filters/filter-context.d.ts} +3 -1
- package/lib/common/data/{filter.d.ts → filters/filter.d.ts} +15 -3
- package/lib/common/data/http-params-builder.d.ts +1 -1
- package/lib/common/data/public_api.d.ts +2 -2
- package/lib/common/data/required-filter-evaluator.d.ts +2 -2
- package/lib/common/data/token-chunk-request.d.ts +1 -1
- package/lib/common/utils/filter-util.d.ts +1 -1
- package/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.d.ts +1 -1
- package/lib/components/csv/elder-csv-stream-exporter.d.ts +1 -1
- package/lib/components/data-view/base/elder-data-view-options.d.ts +1 -1
- package/lib/components/forms/search/elder-search-context.directive.d.ts +15 -12
- package/lib/components/http-support/elder-http-client.service.d.ts +1 -1
- package/lib/components/input/autocomplete/elder-autocomplete-many.directive.d.ts +1 -1
- package/lib/components/input/autocomplete/elder-autocomplete.directive.d.ts +1 -1
- package/lib/components/select/elder-select-base.d.ts +1 -1
- package/lib/components/select/popup/selection-model-popup.directive.d.ts +1 -1
- package/package.json +1 -1
- package/esm2020/lib/common/data/filter-context.mjs +0 -129
- package/esm2020/lib/common/data/filter.mjs +0 -72
|
@@ -6,7 +6,7 @@ import * as i1 from '@angular/platform-browser';
|
|
|
6
6
|
import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, nativeJs, ZoneId } from '@js-joda/core';
|
|
7
7
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
8
8
|
import { BehaviorSubject, Subject, EMPTY, combineLatest, merge, of, forkJoin, throwError, mergeWith, switchMap as switchMap$1, Observable, ReplaySubject, fromEvent, NEVER } from 'rxjs';
|
|
9
|
-
import { distinctUntilChanged, map, filter, takeUntil, debounceTime, catchError, first, take, switchMap, mergeMap, takeWhile, tap, expand, reduce, startWith, skip, delay, share, throttleTime, flatMap, timeout, skipWhile } from 'rxjs/operators';
|
|
9
|
+
import { distinctUntilChanged, map, filter, takeUntil, debounceTime, catchError, first, take, switchMap, mergeMap, takeWhile, tap, expand, reduce, startWith, skip, delay, share, throttleTime, combineLatestWith, flatMap, 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';
|
|
@@ -2299,13 +2299,34 @@ class Filter {
|
|
|
2299
2299
|
}
|
|
2300
2300
|
/***************************************************************************
|
|
2301
2301
|
* *
|
|
2302
|
-
*
|
|
2302
|
+
* Public API *
|
|
2303
2303
|
* *
|
|
2304
2304
|
**************************************************************************/
|
|
2305
|
+
static merge(current, forcedFilter) {
|
|
2306
|
+
let newFilterValue;
|
|
2307
|
+
if (Filter.isMulti(current) || Filter.isMulti(forcedFilter)) {
|
|
2308
|
+
// We have a list of values. We just have to ensure our forced values are in there
|
|
2309
|
+
const valueSet = new Set();
|
|
2310
|
+
Filter.addValuesToSet(valueSet, current);
|
|
2311
|
+
Filter.addValuesToSet(valueSet, forcedFilter);
|
|
2312
|
+
newFilterValue = Array.from(valueSet);
|
|
2313
|
+
}
|
|
2314
|
+
else {
|
|
2315
|
+
newFilterValue = forcedFilter.value;
|
|
2316
|
+
}
|
|
2317
|
+
return new Filter(current.key, newFilterValue);
|
|
2318
|
+
}
|
|
2319
|
+
/**
|
|
2320
|
+
* Checks if this filter supports multiple values.
|
|
2321
|
+
* @param filter
|
|
2322
|
+
*/
|
|
2323
|
+
static isMulti(filter) {
|
|
2324
|
+
return Array.isArray(filter.value);
|
|
2325
|
+
}
|
|
2305
2326
|
/**
|
|
2306
2327
|
* Checks if this filter has a value.
|
|
2307
|
-
* This is the case when the value is non
|
|
2308
|
-
* in case
|
|
2328
|
+
* This is the case when the value is non-null and
|
|
2329
|
+
* in case it's an array, also non-empty.
|
|
2309
2330
|
*/
|
|
2310
2331
|
static hasValue(self) {
|
|
2311
2332
|
if (!self) {
|
|
@@ -2343,15 +2364,31 @@ class Filter {
|
|
|
2343
2364
|
return true;
|
|
2344
2365
|
} // Same key and same value reference
|
|
2345
2366
|
// In case the filter has a multi value array, we need to compare those by value
|
|
2346
|
-
if (self.value
|
|
2347
|
-
const valueArr = self.value
|
|
2348
|
-
const otherArr = other
|
|
2367
|
+
if (Array.isArray(self.value) || Array.isArray(other.value)) {
|
|
2368
|
+
const valueArr = Array.isArray(self.value) ? self.value : [self.value];
|
|
2369
|
+
const otherArr = Array.isArray(other.value) ? other.value : [other.value];
|
|
2349
2370
|
return CollectionUtil.equalSetDeep(new Set(valueArr), new Set(otherArr));
|
|
2350
2371
|
}
|
|
2351
2372
|
else {
|
|
2352
2373
|
return false; // Otherwise, they are not equal
|
|
2353
2374
|
}
|
|
2354
2375
|
}
|
|
2376
|
+
/***************************************************************************
|
|
2377
|
+
* *
|
|
2378
|
+
* Private methods *
|
|
2379
|
+
* *
|
|
2380
|
+
**************************************************************************/
|
|
2381
|
+
static addValuesToSet(valueSet, filter) {
|
|
2382
|
+
const filterValue = filter.value;
|
|
2383
|
+
if (Array.isArray(filterValue)) {
|
|
2384
|
+
const values = filterValue;
|
|
2385
|
+
values.forEach(v => valueSet.add(v));
|
|
2386
|
+
}
|
|
2387
|
+
else {
|
|
2388
|
+
const value = filterValue;
|
|
2389
|
+
valueSet.add(value);
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2355
2392
|
}
|
|
2356
2393
|
|
|
2357
2394
|
class FilterContext {
|
|
@@ -2361,7 +2398,7 @@ class FilterContext {
|
|
|
2361
2398
|
* Fields *
|
|
2362
2399
|
* *
|
|
2363
2400
|
**************************************************************************/
|
|
2364
|
-
this._filters = new BehaviorSubject([]);
|
|
2401
|
+
this._filters$ = new BehaviorSubject([]);
|
|
2365
2402
|
}
|
|
2366
2403
|
/***************************************************************************
|
|
2367
2404
|
* *
|
|
@@ -2399,10 +2436,10 @@ class FilterContext {
|
|
|
2399
2436
|
* *
|
|
2400
2437
|
**************************************************************************/
|
|
2401
2438
|
get filters() {
|
|
2402
|
-
return this._filters
|
|
2439
|
+
return this._filters$.asObservable().pipe(distinctUntilChanged((a, b) => this.equals(a, b)));
|
|
2403
2440
|
}
|
|
2404
2441
|
get filtersSnapshot() {
|
|
2405
|
-
return this._filters
|
|
2442
|
+
return this._filters$.getValue();
|
|
2406
2443
|
}
|
|
2407
2444
|
findFilterValue(key) {
|
|
2408
2445
|
const f = this.findFilter(key);
|
|
@@ -2450,11 +2487,23 @@ class FilterContext {
|
|
|
2450
2487
|
* @param newFilters
|
|
2451
2488
|
*/
|
|
2452
2489
|
replaceFilters(newFilters) {
|
|
2453
|
-
this._filters
|
|
2490
|
+
this._filters$.next(newFilters || []);
|
|
2454
2491
|
}
|
|
2455
2492
|
clear() {
|
|
2456
2493
|
this.replaceFilters([]);
|
|
2457
2494
|
}
|
|
2495
|
+
mergeFilters(filters) {
|
|
2496
|
+
filters.forEach(filter => this.mergeFilter(filter));
|
|
2497
|
+
}
|
|
2498
|
+
mergeFilter(filter) {
|
|
2499
|
+
const existing = this.findFilter(filter.key);
|
|
2500
|
+
if (!existing) {
|
|
2501
|
+
this.updateFilter(filter);
|
|
2502
|
+
}
|
|
2503
|
+
else {
|
|
2504
|
+
this.updateFilter(Filter.merge(existing, filter));
|
|
2505
|
+
}
|
|
2506
|
+
}
|
|
2458
2507
|
/***************************************************************************
|
|
2459
2508
|
* *
|
|
2460
2509
|
* Private methods *
|
|
@@ -18901,18 +18950,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
|
|
|
18901
18950
|
* and holds their values in a central search model.
|
|
18902
18951
|
*/
|
|
18903
18952
|
class ElderSearchContextDirective {
|
|
18904
|
-
/***************************************************************************
|
|
18905
|
-
* *
|
|
18906
|
-
* Constructor *
|
|
18907
|
-
* *
|
|
18908
|
-
**************************************************************************/
|
|
18909
18953
|
constructor() {
|
|
18910
18954
|
/***************************************************************************
|
|
18911
18955
|
* *
|
|
18912
18956
|
* Fields *
|
|
18913
18957
|
* *
|
|
18914
18958
|
**************************************************************************/
|
|
18915
|
-
this.
|
|
18959
|
+
this.forcedFilters$ = new BehaviorSubject$1([]);
|
|
18960
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
18916
18961
|
this.unsubscribe$ = new Subject$1();
|
|
18917
18962
|
this._searchInputs = new BehaviorSubject$1([]);
|
|
18918
18963
|
this._searchStates = new BehaviorSubject$1([]);
|
|
@@ -18923,16 +18968,12 @@ class ElderSearchContextDirective {
|
|
|
18923
18968
|
* Life Cycle *
|
|
18924
18969
|
* *
|
|
18925
18970
|
**************************************************************************/
|
|
18926
|
-
ngOnInit() { }
|
|
18927
18971
|
ngAfterViewInit() {
|
|
18928
|
-
this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), debounceTime(5)).subscribe(states => {
|
|
18972
|
+
this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), combineLatestWith(this.forcedFilters$), debounceTime(5)).subscribe(([states, forcedFilters]) => {
|
|
18929
18973
|
this._searchStates.next(states);
|
|
18930
|
-
const
|
|
18931
|
-
this._filters.next(
|
|
18932
|
-
this.
|
|
18933
|
-
if (this.filterContext) {
|
|
18934
|
-
this.filterContext.updateFilters(filters);
|
|
18935
|
-
}
|
|
18974
|
+
const userFilters = this.convertToFilters(states);
|
|
18975
|
+
this._filters.next(userFilters);
|
|
18976
|
+
this.applyFilters(userFilters, forcedFilters);
|
|
18936
18977
|
});
|
|
18937
18978
|
}
|
|
18938
18979
|
ngOnDestroy() {
|
|
@@ -18950,6 +18991,18 @@ class ElderSearchContextDirective {
|
|
|
18950
18991
|
get filterContext() {
|
|
18951
18992
|
return this._filterContext;
|
|
18952
18993
|
}
|
|
18994
|
+
/**
|
|
18995
|
+
* Forced filters are always merged into the final FilterContext.
|
|
18996
|
+
*
|
|
18997
|
+
* This means they override user defined filters, but attempt
|
|
18998
|
+
* to also keep the users intent (by merging) them.
|
|
18999
|
+
*/
|
|
19000
|
+
set forcedFilters(filters) {
|
|
19001
|
+
this.forcedFilters$.next(filters);
|
|
19002
|
+
}
|
|
19003
|
+
get forcedFilters() {
|
|
19004
|
+
return this.forcedFilters$.getValue();
|
|
19005
|
+
}
|
|
18953
19006
|
get attributes() {
|
|
18954
19007
|
return this._searchInputs.asObservable();
|
|
18955
19008
|
}
|
|
@@ -19006,18 +19059,28 @@ class ElderSearchContextDirective {
|
|
|
19006
19059
|
return states
|
|
19007
19060
|
.map(s => new Filter(s.queryKey, s.queryValue));
|
|
19008
19061
|
}
|
|
19062
|
+
applyFilters(userFilters, forcedFilters) {
|
|
19063
|
+
const context = this.filterContext;
|
|
19064
|
+
if (context) {
|
|
19065
|
+
context.updateFilters(userFilters);
|
|
19066
|
+
context.mergeFilters(forcedFilters);
|
|
19067
|
+
this.log.trace('Search-Model filters updated:', Array.from(context.filtersSnapshot));
|
|
19068
|
+
}
|
|
19069
|
+
}
|
|
19009
19070
|
}
|
|
19010
19071
|
ElderSearchContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19011
|
-
ElderSearchContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"] }, exportAs: ["elderSearchContext"], ngImport: i0 });
|
|
19072
|
+
ElderSearchContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, exportAs: ["elderSearchContext"], ngImport: i0 });
|
|
19012
19073
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
|
|
19013
19074
|
type: Directive,
|
|
19014
19075
|
args: [{
|
|
19015
19076
|
selector: '[elderSearchContext]',
|
|
19016
19077
|
exportAs: 'elderSearchContext'
|
|
19017
19078
|
}]
|
|
19018
|
-
}],
|
|
19079
|
+
}], propDecorators: { filterContext: [{
|
|
19019
19080
|
type: Input,
|
|
19020
19081
|
args: ['elderSearchContext']
|
|
19082
|
+
}], forcedFilters: [{
|
|
19083
|
+
type: Input
|
|
19021
19084
|
}] } });
|
|
19022
19085
|
|
|
19023
19086
|
/**
|