@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';
|
|
@@ -2309,13 +2309,34 @@ class Filter {
|
|
|
2309
2309
|
}
|
|
2310
2310
|
/***************************************************************************
|
|
2311
2311
|
* *
|
|
2312
|
-
*
|
|
2312
|
+
* Public API *
|
|
2313
2313
|
* *
|
|
2314
2314
|
**************************************************************************/
|
|
2315
|
+
static merge(current, forcedFilter) {
|
|
2316
|
+
let newFilterValue;
|
|
2317
|
+
if (Filter.isMulti(current) || Filter.isMulti(forcedFilter)) {
|
|
2318
|
+
// We have a list of values. We just have to ensure our forced values are in there
|
|
2319
|
+
const valueSet = new Set();
|
|
2320
|
+
Filter.addValuesToSet(valueSet, current);
|
|
2321
|
+
Filter.addValuesToSet(valueSet, forcedFilter);
|
|
2322
|
+
newFilterValue = Array.from(valueSet);
|
|
2323
|
+
}
|
|
2324
|
+
else {
|
|
2325
|
+
newFilterValue = forcedFilter.value;
|
|
2326
|
+
}
|
|
2327
|
+
return new Filter(current.key, newFilterValue);
|
|
2328
|
+
}
|
|
2329
|
+
/**
|
|
2330
|
+
* Checks if this filter supports multiple values.
|
|
2331
|
+
* @param filter
|
|
2332
|
+
*/
|
|
2333
|
+
static isMulti(filter) {
|
|
2334
|
+
return Array.isArray(filter.value);
|
|
2335
|
+
}
|
|
2315
2336
|
/**
|
|
2316
2337
|
* Checks if this filter has a value.
|
|
2317
|
-
* This is the case when the value is non
|
|
2318
|
-
* in case
|
|
2338
|
+
* This is the case when the value is non-null and
|
|
2339
|
+
* in case it's an array, also non-empty.
|
|
2319
2340
|
*/
|
|
2320
2341
|
static hasValue(self) {
|
|
2321
2342
|
if (!self) {
|
|
@@ -2353,15 +2374,31 @@ class Filter {
|
|
|
2353
2374
|
return true;
|
|
2354
2375
|
} // Same key and same value reference
|
|
2355
2376
|
// In case the filter has a multi value array, we need to compare those by value
|
|
2356
|
-
if (self.value
|
|
2357
|
-
const valueArr = self.value
|
|
2358
|
-
const otherArr = other
|
|
2377
|
+
if (Array.isArray(self.value) || Array.isArray(other.value)) {
|
|
2378
|
+
const valueArr = Array.isArray(self.value) ? self.value : [self.value];
|
|
2379
|
+
const otherArr = Array.isArray(other.value) ? other.value : [other.value];
|
|
2359
2380
|
return CollectionUtil.equalSetDeep(new Set(valueArr), new Set(otherArr));
|
|
2360
2381
|
}
|
|
2361
2382
|
else {
|
|
2362
2383
|
return false; // Otherwise, they are not equal
|
|
2363
2384
|
}
|
|
2364
2385
|
}
|
|
2386
|
+
/***************************************************************************
|
|
2387
|
+
* *
|
|
2388
|
+
* Private methods *
|
|
2389
|
+
* *
|
|
2390
|
+
**************************************************************************/
|
|
2391
|
+
static addValuesToSet(valueSet, filter) {
|
|
2392
|
+
const filterValue = filter.value;
|
|
2393
|
+
if (Array.isArray(filterValue)) {
|
|
2394
|
+
const values = filterValue;
|
|
2395
|
+
values.forEach(v => valueSet.add(v));
|
|
2396
|
+
}
|
|
2397
|
+
else {
|
|
2398
|
+
const value = filterValue;
|
|
2399
|
+
valueSet.add(value);
|
|
2400
|
+
}
|
|
2401
|
+
}
|
|
2365
2402
|
}
|
|
2366
2403
|
|
|
2367
2404
|
class FilterContext {
|
|
@@ -2371,7 +2408,7 @@ class FilterContext {
|
|
|
2371
2408
|
* Fields *
|
|
2372
2409
|
* *
|
|
2373
2410
|
**************************************************************************/
|
|
2374
|
-
this._filters = new BehaviorSubject([]);
|
|
2411
|
+
this._filters$ = new BehaviorSubject([]);
|
|
2375
2412
|
}
|
|
2376
2413
|
/***************************************************************************
|
|
2377
2414
|
* *
|
|
@@ -2409,10 +2446,10 @@ class FilterContext {
|
|
|
2409
2446
|
* *
|
|
2410
2447
|
**************************************************************************/
|
|
2411
2448
|
get filters() {
|
|
2412
|
-
return this._filters
|
|
2449
|
+
return this._filters$.asObservable().pipe(distinctUntilChanged((a, b) => this.equals(a, b)));
|
|
2413
2450
|
}
|
|
2414
2451
|
get filtersSnapshot() {
|
|
2415
|
-
return this._filters
|
|
2452
|
+
return this._filters$.getValue();
|
|
2416
2453
|
}
|
|
2417
2454
|
findFilterValue(key) {
|
|
2418
2455
|
const f = this.findFilter(key);
|
|
@@ -2460,11 +2497,23 @@ class FilterContext {
|
|
|
2460
2497
|
* @param newFilters
|
|
2461
2498
|
*/
|
|
2462
2499
|
replaceFilters(newFilters) {
|
|
2463
|
-
this._filters
|
|
2500
|
+
this._filters$.next(newFilters || []);
|
|
2464
2501
|
}
|
|
2465
2502
|
clear() {
|
|
2466
2503
|
this.replaceFilters([]);
|
|
2467
2504
|
}
|
|
2505
|
+
mergeFilters(filters) {
|
|
2506
|
+
filters.forEach(filter => this.mergeFilter(filter));
|
|
2507
|
+
}
|
|
2508
|
+
mergeFilter(filter) {
|
|
2509
|
+
const existing = this.findFilter(filter.key);
|
|
2510
|
+
if (!existing) {
|
|
2511
|
+
this.updateFilter(filter);
|
|
2512
|
+
}
|
|
2513
|
+
else {
|
|
2514
|
+
this.updateFilter(Filter.merge(existing, filter));
|
|
2515
|
+
}
|
|
2516
|
+
}
|
|
2468
2517
|
/***************************************************************************
|
|
2469
2518
|
* *
|
|
2470
2519
|
* Private methods *
|
|
@@ -18965,18 +19014,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
|
|
|
18965
19014
|
* and holds their values in a central search model.
|
|
18966
19015
|
*/
|
|
18967
19016
|
class ElderSearchContextDirective {
|
|
18968
|
-
/***************************************************************************
|
|
18969
|
-
* *
|
|
18970
|
-
* Constructor *
|
|
18971
|
-
* *
|
|
18972
|
-
**************************************************************************/
|
|
18973
19017
|
constructor() {
|
|
18974
19018
|
/***************************************************************************
|
|
18975
19019
|
* *
|
|
18976
19020
|
* Fields *
|
|
18977
19021
|
* *
|
|
18978
19022
|
**************************************************************************/
|
|
18979
|
-
this.
|
|
19023
|
+
this.forcedFilters$ = new BehaviorSubject$1([]);
|
|
19024
|
+
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
18980
19025
|
this.unsubscribe$ = new Subject$1();
|
|
18981
19026
|
this._searchInputs = new BehaviorSubject$1([]);
|
|
18982
19027
|
this._searchStates = new BehaviorSubject$1([]);
|
|
@@ -18987,16 +19032,12 @@ class ElderSearchContextDirective {
|
|
|
18987
19032
|
* Life Cycle *
|
|
18988
19033
|
* *
|
|
18989
19034
|
**************************************************************************/
|
|
18990
|
-
ngOnInit() { }
|
|
18991
19035
|
ngAfterViewInit() {
|
|
18992
|
-
this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), debounceTime(5)).subscribe(states => {
|
|
19036
|
+
this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), combineLatestWith(this.forcedFilters$), debounceTime(5)).subscribe(([states, forcedFilters]) => {
|
|
18993
19037
|
this._searchStates.next(states);
|
|
18994
|
-
const
|
|
18995
|
-
this._filters.next(
|
|
18996
|
-
this.
|
|
18997
|
-
if (this.filterContext) {
|
|
18998
|
-
this.filterContext.updateFilters(filters);
|
|
18999
|
-
}
|
|
19038
|
+
const userFilters = this.convertToFilters(states);
|
|
19039
|
+
this._filters.next(userFilters);
|
|
19040
|
+
this.applyFilters(userFilters, forcedFilters);
|
|
19000
19041
|
});
|
|
19001
19042
|
}
|
|
19002
19043
|
ngOnDestroy() {
|
|
@@ -19014,6 +19055,18 @@ class ElderSearchContextDirective {
|
|
|
19014
19055
|
get filterContext() {
|
|
19015
19056
|
return this._filterContext;
|
|
19016
19057
|
}
|
|
19058
|
+
/**
|
|
19059
|
+
* Forced filters are always merged into the final FilterContext.
|
|
19060
|
+
*
|
|
19061
|
+
* This means they override user defined filters, but attempt
|
|
19062
|
+
* to also keep the users intent (by merging) them.
|
|
19063
|
+
*/
|
|
19064
|
+
set forcedFilters(filters) {
|
|
19065
|
+
this.forcedFilters$.next(filters);
|
|
19066
|
+
}
|
|
19067
|
+
get forcedFilters() {
|
|
19068
|
+
return this.forcedFilters$.getValue();
|
|
19069
|
+
}
|
|
19017
19070
|
get attributes() {
|
|
19018
19071
|
return this._searchInputs.asObservable();
|
|
19019
19072
|
}
|
|
@@ -19070,18 +19123,28 @@ class ElderSearchContextDirective {
|
|
|
19070
19123
|
return states
|
|
19071
19124
|
.map(s => new Filter(s.queryKey, s.queryValue));
|
|
19072
19125
|
}
|
|
19126
|
+
applyFilters(userFilters, forcedFilters) {
|
|
19127
|
+
const context = this.filterContext;
|
|
19128
|
+
if (context) {
|
|
19129
|
+
context.updateFilters(userFilters);
|
|
19130
|
+
context.mergeFilters(forcedFilters);
|
|
19131
|
+
this.log.trace('Search-Model filters updated:', Array.from(context.filtersSnapshot));
|
|
19132
|
+
}
|
|
19133
|
+
}
|
|
19073
19134
|
}
|
|
19074
19135
|
ElderSearchContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19075
|
-
ElderSearchContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"] }, exportAs: ["elderSearchContext"], ngImport: i0 });
|
|
19136
|
+
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 });
|
|
19076
19137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
|
|
19077
19138
|
type: Directive,
|
|
19078
19139
|
args: [{
|
|
19079
19140
|
selector: '[elderSearchContext]',
|
|
19080
19141
|
exportAs: 'elderSearchContext'
|
|
19081
19142
|
}]
|
|
19082
|
-
}],
|
|
19143
|
+
}], propDecorators: { filterContext: [{
|
|
19083
19144
|
type: Input,
|
|
19084
19145
|
args: ['elderSearchContext']
|
|
19146
|
+
}], forcedFilters: [{
|
|
19147
|
+
type: Input
|
|
19085
19148
|
}] } });
|
|
19086
19149
|
|
|
19087
19150
|
/**
|