@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataContextBase } from './data-context-base';
|
|
2
2
|
import { PageRequest } from '../page';
|
|
3
|
-
import { Filter } from '../filter';
|
|
3
|
+
import { Filter } from '../filters/filter';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { IDataContextActivePage } from './data-context';
|
|
6
6
|
import { Sort } from '../sort';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Filter } from '../filter';
|
|
1
|
+
import { Filter } from '../filters/filter';
|
|
2
2
|
import { Sort } from '../sort';
|
|
3
3
|
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
|
|
4
4
|
import { DataContextStatus } from './data-context-status';
|
|
5
5
|
import { Observable, Subject } from 'rxjs';
|
|
6
|
-
import { FilterContext } from '../filter-context';
|
|
6
|
+
import { FilterContext } from '../filters/filter-context';
|
|
7
7
|
import { DataContextSnapshot, IDataContext } from './data-context';
|
|
8
8
|
import { SortContext } from '../sort-context';
|
|
9
9
|
import { IDataSource } from '../datasource/data-source';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataContextBase } from './data-context-base';
|
|
2
2
|
import { Sort } from '../sort';
|
|
3
|
-
import { Filter } from '../filter';
|
|
3
|
+
import { Filter } from '../filters/filter';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import { IDataContextContinuable } from './data-context';
|
|
6
6
|
import { IDataSource } from '../datasource/data-source';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DataContextStatus } from './data-context-status';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { Sort } from '../sort';
|
|
4
|
-
import { Filter } from '../filter';
|
|
5
|
-
import { FilterContext } from '../filter-context';
|
|
4
|
+
import { Filter } from '../filters/filter';
|
|
5
|
+
import { FilterContext } from '../filters/filter-context';
|
|
6
6
|
import { PageRequest } from '../page';
|
|
7
7
|
import { SortContext } from '../sort-context';
|
|
8
8
|
import { IDataSource } from '../datasource/data-source';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IDataSource } from './data-source';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { Filter } from '../filter';
|
|
3
|
+
import { Filter } from '../filters/filter';
|
|
4
4
|
import { Sort } from '../sort';
|
|
5
5
|
export declare class DataSourceAdapter<T> {
|
|
6
6
|
private readonly dataSource;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IContinuableDataSource, IDataSource, IListDataSource, IPagedDataSource } from './data-source';
|
|
2
2
|
import { Page } from '../page';
|
|
3
|
-
import { Filter } from '../filter';
|
|
3
|
+
import { Filter } from '../filters/filter';
|
|
4
4
|
import { ContinuableListing } from '../continuable-listing';
|
|
5
5
|
import { Sort } from '../sort';
|
|
6
6
|
import { Observable } from 'rxjs/internal/Observable';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { Sort } from '../sort';
|
|
3
|
-
import { Filter } from '../filter';
|
|
3
|
+
import { Filter } from '../filters/filter';
|
|
4
4
|
import { Page, Pageable } from '../page';
|
|
5
5
|
import { TokenChunkRequest } from '../token-chunk-request';
|
|
6
6
|
import { ContinuableListing } from '../continuable-listing';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IContinuableDataSource, IDataSource, IListDataSource, IPagedDataSource } from '../data-source';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { Filter } from '../../filter';
|
|
3
|
+
import { Filter } from '../../filters/filter';
|
|
4
4
|
import { Sort } from '../../sort';
|
|
5
5
|
import { Page, Pageable } from '../../page';
|
|
6
6
|
import { TokenChunkRequest } from '../../token-chunk-request';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { Sort } from '../../sort';
|
|
4
|
-
import { Filter } from '../../filter';
|
|
4
|
+
import { Filter } from '../../filters/filter';
|
|
5
5
|
import { Page, Pageable } from '../../page';
|
|
6
6
|
import { ContinuableListing } from '../../continuable-listing';
|
|
7
7
|
import { TokenChunkRequest } from '../../token-chunk-request';
|
|
@@ -6,7 +6,7 @@ export declare class FilterContext {
|
|
|
6
6
|
* Fields *
|
|
7
7
|
* *
|
|
8
8
|
**************************************************************************/
|
|
9
|
-
private readonly _filters
|
|
9
|
+
private readonly _filters$;
|
|
10
10
|
/***************************************************************************
|
|
11
11
|
* *
|
|
12
12
|
* Static Utilities *
|
|
@@ -52,6 +52,8 @@ export declare class FilterContext {
|
|
|
52
52
|
*/
|
|
53
53
|
replaceFilters(newFilters?: Filter[]): void;
|
|
54
54
|
clear(): void;
|
|
55
|
+
mergeFilters(filters: Filter[]): void;
|
|
56
|
+
mergeFilter(filter: Filter): void;
|
|
55
57
|
/***************************************************************************
|
|
56
58
|
* *
|
|
57
59
|
* Private methods *
|
|
@@ -22,13 +22,19 @@ export declare class Filter {
|
|
|
22
22
|
constructor(key: string, value: string | string[] | null);
|
|
23
23
|
/***************************************************************************
|
|
24
24
|
* *
|
|
25
|
-
*
|
|
25
|
+
* Public API *
|
|
26
26
|
* *
|
|
27
27
|
**************************************************************************/
|
|
28
|
+
static merge(current: Filter, forcedFilter: Filter): Filter;
|
|
29
|
+
/**
|
|
30
|
+
* Checks if this filter supports multiple values.
|
|
31
|
+
* @param filter
|
|
32
|
+
*/
|
|
33
|
+
static isMulti(filter: Filter): boolean;
|
|
28
34
|
/**
|
|
29
35
|
* Checks if this filter has a value.
|
|
30
|
-
* This is the case when the value is non
|
|
31
|
-
* in case
|
|
36
|
+
* This is the case when the value is non-null and
|
|
37
|
+
* in case it's an array, also non-empty.
|
|
32
38
|
*/
|
|
33
39
|
static hasValue(self: Filter): boolean;
|
|
34
40
|
/**
|
|
@@ -37,4 +43,10 @@ export declare class Filter {
|
|
|
37
43
|
* @param other
|
|
38
44
|
*/
|
|
39
45
|
static equals(self: Filter, other: Filter): boolean;
|
|
46
|
+
/***************************************************************************
|
|
47
|
+
* *
|
|
48
|
+
* Private methods *
|
|
49
|
+
* *
|
|
50
|
+
**************************************************************************/
|
|
51
|
+
private static addValuesToSet;
|
|
40
52
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Filter } from './filter';
|
|
1
|
+
import { Filter } from './filters/filter';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { FilterContext } from './filter-context';
|
|
3
|
+
import { FilterContext } from './filters/filter-context';
|
|
4
4
|
export declare class RequiredFilterContextChangedEvent {
|
|
5
5
|
readonly requiredFilters: Array<string[]>;
|
|
6
6
|
readonly currentFilters: Filter[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
2
|
import { IDataSource } from '../../../common/data/datasource/data-source';
|
|
3
|
-
import { Filter } from '../../../common/data/filter';
|
|
3
|
+
import { Filter } from '../../../common/data/filters/filter';
|
|
4
4
|
import { Sort } from '../../../common/data/sort';
|
|
5
5
|
import { CsvSpec } from '../../../common/csv/csv-spec';
|
|
6
6
|
import { CsvStreamExporterBuilderService } from '../elder-csv-stream-exporter-builder.service';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IDataSource } from '../../common/data/datasource/data-source';
|
|
2
|
-
import { Filter } from '../../common/data/filter';
|
|
2
|
+
import { Filter } from '../../common/data/filters/filter';
|
|
3
3
|
import { Sort } from '../../common/data/sort';
|
|
4
4
|
import { CsvSpec } from '../../common/csv/csv-spec';
|
|
5
5
|
import { TranslateService } from '@ngx-translate/core';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Sort } from '../../../common/data/sort';
|
|
2
|
-
import { Filter } from '../../../common/data/filter';
|
|
2
|
+
import { Filter } from '../../../common/data/filters/filter';
|
|
3
3
|
import { ElderDataViewInteractionMode } from '../elder-data-view-interaction-mode';
|
|
4
4
|
/**
|
|
5
5
|
* Options for supporting data view components.
|
|
@@ -1,38 +1,32 @@
|
|
|
1
|
-
import { AfterViewInit, OnDestroy
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
2
|
import { Observable } from 'rxjs/internal/Observable';
|
|
3
3
|
import { SearchInput } from './model/search-input';
|
|
4
|
-
import { Filter } from '../../../common/data/filter';
|
|
5
|
-
import { FilterContext } from '../../../common/data/filter-context';
|
|
4
|
+
import { Filter } from '../../../common/data/filters/filter';
|
|
5
|
+
import { FilterContext } from '../../../common/data/filters/filter-context';
|
|
6
6
|
import { SearchInputState } from './model/search-input-state';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
/**
|
|
9
9
|
* The search container manages a group of search-inputs
|
|
10
10
|
* and holds their values in a central search model.
|
|
11
11
|
*/
|
|
12
|
-
export declare class ElderSearchContextDirective implements
|
|
12
|
+
export declare class ElderSearchContextDirective implements AfterViewInit, OnDestroy {
|
|
13
13
|
/***************************************************************************
|
|
14
14
|
* *
|
|
15
15
|
* Fields *
|
|
16
16
|
* *
|
|
17
17
|
**************************************************************************/
|
|
18
|
+
private forcedFilters$;
|
|
18
19
|
private readonly log;
|
|
19
20
|
private readonly unsubscribe$;
|
|
20
21
|
private readonly _searchInputs;
|
|
21
22
|
private readonly _searchStates;
|
|
22
23
|
private readonly _filters;
|
|
23
24
|
private _filterContext;
|
|
24
|
-
/***************************************************************************
|
|
25
|
-
* *
|
|
26
|
-
* Constructor *
|
|
27
|
-
* *
|
|
28
|
-
**************************************************************************/
|
|
29
|
-
constructor();
|
|
30
25
|
/***************************************************************************
|
|
31
26
|
* *
|
|
32
27
|
* Life Cycle *
|
|
33
28
|
* *
|
|
34
29
|
**************************************************************************/
|
|
35
|
-
ngOnInit(): void;
|
|
36
30
|
ngAfterViewInit(): void;
|
|
37
31
|
ngOnDestroy(): void;
|
|
38
32
|
/***************************************************************************
|
|
@@ -42,6 +36,14 @@ export declare class ElderSearchContextDirective implements OnInit, AfterViewIni
|
|
|
42
36
|
**************************************************************************/
|
|
43
37
|
set filterContext(value: FilterContext);
|
|
44
38
|
get filterContext(): FilterContext;
|
|
39
|
+
/**
|
|
40
|
+
* Forced filters are always merged into the final FilterContext.
|
|
41
|
+
*
|
|
42
|
+
* This means they override user defined filters, but attempt
|
|
43
|
+
* to also keep the users intent (by merging) them.
|
|
44
|
+
*/
|
|
45
|
+
set forcedFilters(filters: Filter[]);
|
|
46
|
+
get forcedFilters(): Filter[];
|
|
45
47
|
get attributes(): Observable<SearchInput[]>;
|
|
46
48
|
get attributesSnapshot(): SearchInput[];
|
|
47
49
|
get states$(): Observable<SearchInputState[]>;
|
|
@@ -71,6 +73,7 @@ export declare class ElderSearchContextDirective implements OnInit, AfterViewIni
|
|
|
71
73
|
* *
|
|
72
74
|
**************************************************************************/
|
|
73
75
|
private convertToFilters;
|
|
76
|
+
private applyFilters;
|
|
74
77
|
static ɵfac: i0.ɵɵFactoryDeclaration<ElderSearchContextDirective, never>;
|
|
75
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ElderSearchContextDirective, "[elderSearchContext]", ["elderSearchContext"], { "filterContext": "elderSearchContext"; }, {}, never, never, false>;
|
|
78
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ElderSearchContextDirective, "[elderSearchContext]", ["elderSearchContext"], { "filterContext": "elderSearchContext"; "forcedFilters": "forcedFilters"; }, {}, never, never, false>;
|
|
76
79
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Page, Pageable } from '../../common/data/page';
|
|
2
|
-
import { Filter } from '../../common/data/filter';
|
|
2
|
+
import { Filter } from '../../common/data/filters/filter';
|
|
3
3
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -2,7 +2,7 @@ import { ElementRef, OnDestroy, OnInit } from '@angular/core';
|
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { ElderAutocompleteComponent } from './elder-autocomplete/elder-autocomplete.component';
|
|
4
4
|
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
5
|
-
import { Filter } from '../../../common/data/filter';
|
|
5
|
+
import { Filter } from '../../../common/data/filters/filter';
|
|
6
6
|
import { Sort } from '../../../common/data/sort';
|
|
7
7
|
import { TextResolverFn } from '../../select/elder-select-base';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
@@ -2,7 +2,7 @@ import { OnDestroy, OnInit } from '@angular/core';
|
|
|
2
2
|
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
3
3
|
import { ElderAutocompleteComponent } from './elder-autocomplete/elder-autocomplete.component';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { Filter } from '../../../common/data/filter';
|
|
5
|
+
import { Filter } from '../../../common/data/filters/filter';
|
|
6
6
|
import { IDataContext } from '../../../common/data/data-context/data-context';
|
|
7
7
|
import { Sort } from '../../../common/data/sort';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
@@ -2,7 +2,7 @@ import { ElementRef, EventEmitter, InjectionToken, NgZone, TemplateRef } from '@
|
|
|
2
2
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
3
|
import { IDataContext } from '../../common/data/data-context/data-context';
|
|
4
4
|
import { IDataSource } from '../../common/data/datasource/data-source';
|
|
5
|
-
import { Filter } from '../../common/data/filter';
|
|
5
|
+
import { Filter } from '../../common/data/filters/filter';
|
|
6
6
|
import { Sort } from '../../common/data/sort';
|
|
7
7
|
import { SelectionModelPopupDirective } from './popup/selection-model-popup.directive';
|
|
8
8
|
import { DataContextStatus } from '../../common/data/data-context/data-context-status';
|
|
@@ -3,7 +3,7 @@ import { MatDialog } from '@angular/material/dialog';
|
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { KeyGetterFn, SelectionModel } from '../../../common/selection/selection-model';
|
|
5
5
|
import { Sort } from '../../../common/data/sort';
|
|
6
|
-
import { Filter } from '../../../common/data/filter';
|
|
6
|
+
import { Filter } from '../../../common/data/filters/filter';
|
|
7
7
|
import { ElderDataViewOptionsProvider } from '../../data-view/base/elder-data-view-options-provider';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export declare function createSelectionModel(): SelectionModel<any>;
|
package/package.json
CHANGED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { Filter } from './filter';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { distinctUntilChanged } from 'rxjs/operators';
|
|
4
|
-
export class FilterContext {
|
|
5
|
-
constructor() {
|
|
6
|
-
/***************************************************************************
|
|
7
|
-
* *
|
|
8
|
-
* Fields *
|
|
9
|
-
* *
|
|
10
|
-
**************************************************************************/
|
|
11
|
-
this._filters = new BehaviorSubject([]);
|
|
12
|
-
}
|
|
13
|
-
/***************************************************************************
|
|
14
|
-
* *
|
|
15
|
-
* Static Utilities *
|
|
16
|
-
* *
|
|
17
|
-
**************************************************************************/
|
|
18
|
-
/**
|
|
19
|
-
* Update the given filters with new ones, merging the two.
|
|
20
|
-
* The updated filters take precedence.
|
|
21
|
-
* @param filters
|
|
22
|
-
* @param updatedFilters
|
|
23
|
-
*/
|
|
24
|
-
static updateFilters(filters, updatedFilters) {
|
|
25
|
-
const filterMap = new Map();
|
|
26
|
-
if (filters) {
|
|
27
|
-
filters.forEach(f => filterMap.set(f.key, f));
|
|
28
|
-
}
|
|
29
|
-
if (updatedFilters) {
|
|
30
|
-
updatedFilters.forEach(f => {
|
|
31
|
-
if (Filter.hasValue(f)) {
|
|
32
|
-
filterMap.set(f.key, f);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
if (filterMap.has(f.key)) {
|
|
36
|
-
filterMap.delete(f.key);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return Array.from(filterMap.values());
|
|
42
|
-
}
|
|
43
|
-
/***************************************************************************
|
|
44
|
-
* *
|
|
45
|
-
* Read API *
|
|
46
|
-
* *
|
|
47
|
-
**************************************************************************/
|
|
48
|
-
get filters() {
|
|
49
|
-
return this._filters.asObservable().pipe(distinctUntilChanged((a, b) => this.equals(a, b)));
|
|
50
|
-
}
|
|
51
|
-
get filtersSnapshot() {
|
|
52
|
-
return this._filters.getValue();
|
|
53
|
-
}
|
|
54
|
-
findFilterValue(key) {
|
|
55
|
-
const f = this.findFilter(key);
|
|
56
|
-
return f ? f.value : undefined;
|
|
57
|
-
}
|
|
58
|
-
findFilter(key) {
|
|
59
|
-
return this.filtersSnapshot
|
|
60
|
-
.filter(f => f.key === key)
|
|
61
|
-
.find(first => true);
|
|
62
|
-
}
|
|
63
|
-
/***************************************************************************
|
|
64
|
-
* *
|
|
65
|
-
* Public API *
|
|
66
|
-
* *
|
|
67
|
-
**************************************************************************/
|
|
68
|
-
removeFilter(key) {
|
|
69
|
-
const current = this.filtersSnapshot;
|
|
70
|
-
const newFilters = current.filter(f => f.key !== key);
|
|
71
|
-
if (current.length !== newFilters.length) {
|
|
72
|
-
this.replaceFilters(newFilters);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* This method updatees / adds the given filter, leaving
|
|
77
|
-
* existing ones untouched.
|
|
78
|
-
* @param updatedFilter
|
|
79
|
-
*/
|
|
80
|
-
updateFilter(updatedFilter) {
|
|
81
|
-
if (updatedFilter) {
|
|
82
|
-
this.updateFilters([updatedFilter]);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* This method updates / adds the given filters, leaving
|
|
87
|
-
* existing ones untouched.
|
|
88
|
-
* @param updatedFilters
|
|
89
|
-
*/
|
|
90
|
-
updateFilters(updatedFilters) {
|
|
91
|
-
if (updatedFilters && updatedFilters.length > 0) {
|
|
92
|
-
this.replaceFilters(FilterContext.updateFilters(this.filtersSnapshot, updatedFilters));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Replace all existing filters with the given new ones.
|
|
97
|
-
* @param newFilters
|
|
98
|
-
*/
|
|
99
|
-
replaceFilters(newFilters) {
|
|
100
|
-
this._filters.next(newFilters || []);
|
|
101
|
-
}
|
|
102
|
-
clear() {
|
|
103
|
-
this.replaceFilters([]);
|
|
104
|
-
}
|
|
105
|
-
/***************************************************************************
|
|
106
|
-
* *
|
|
107
|
-
* Private methods *
|
|
108
|
-
* *
|
|
109
|
-
**************************************************************************/
|
|
110
|
-
equals(aFilters, bFilters) {
|
|
111
|
-
if (aFilters.length !== bFilters.length) {
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
if (aFilters.length === 0 && bFilters.length === 0) {
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
// The both filter arrays have the same length, so we must compare them by value
|
|
118
|
-
const bIndex = new Map();
|
|
119
|
-
bFilters.forEach(f => bIndex.set(f.key, f));
|
|
120
|
-
for (const fa of aFilters) {
|
|
121
|
-
const bFilter = bIndex.get(fa.key);
|
|
122
|
-
if (!Filter.equals(bFilter, fa)) {
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9maWx0ZXItY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFFRTs7OztvRkFJNEU7UUFFM0QsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFXLEVBQUUsQ0FBQyxDQUFDO0lBeUloRSxDQUFDO0lBdklDOzs7O2dGQUk0RTtJQUU1RTs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBaUIsRUFBRSxjQUF3QjtRQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU1QyxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQztRQUVELElBQUksY0FBYyxFQUFFO1lBQ2xCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDdEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDTCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUN4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QUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUU7WUFDekIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmlsdGVyfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb250ZXh0IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdGF0aWMgVXRpbGl0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGdpdmVuIGZpbHRlcnMgd2l0aCBuZXcgb25lcywgbWVyZ2luZyB0aGUgdHdvLlxuICAgKiBUaGUgdXBkYXRlZCBmaWx0ZXJzIHRha2UgcHJlY2VkZW5jZS5cbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIHVwZGF0ZWRGaWx0ZXJzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVwZGF0ZUZpbHRlcnMoZmlsdGVyczogRmlsdGVyW10sIHVwZGF0ZWRGaWx0ZXJzOiBGaWx0ZXJbXSk6IEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgRmlsdGVyPigpO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIGZpbHRlcnMuZm9yRWFjaChmID0+IGZpbHRlck1hcC5zZXQoZi5rZXksIGYpKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlZEZpbHRlcnMpIHtcbiAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGlmIChGaWx0ZXIuaGFzVmFsdWUoZikpIHtcbiAgICAgICAgICBmaWx0ZXJNYXAuc2V0KGYua2V5LCBmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsdGVyTWFwLmhhcyhmLmtleSkpIHtcbiAgICAgICAgICAgIGZpbHRlck1hcC5kZWxldGUoZi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmlsdGVyTWFwLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBSZWFkIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgZmlsdGVycygpOiBPYnNlcnZhYmxlPEZpbHRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB0aGlzLmVxdWFscyhhLCBiKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJzU25hcHNob3QoKTogRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZmluZEZpbHRlclZhbHVlKGtleTogc3RyaW5nKTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGYgPSB0aGlzLmZpbmRGaWx0ZXIoa2V5KTtcbiAgICByZXR1cm4gZiA/IGYudmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEZpbHRlcihrZXk6IHN0cmluZyk6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyc1NuYXBzaG90XG4gICAgICAuZmlsdGVyKGYgPT4gZi5rZXkgPT09IGtleSlcbiAgICAgIC5maW5kKGZpcnN0ID0+IHRydWUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHJlbW92ZUZpbHRlcihrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmZpbHRlcnNTbmFwc2hvdDtcbiAgICBjb25zdCBuZXdGaWx0ZXJzID0gY3VycmVudC5maWx0ZXIoZiA9PiBmLmtleSAhPT0ga2V5KTtcbiAgICBpZiAoY3VycmVudC5sZW5ndGggIT09IG5ld0ZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWx0ZXJzKG5ld0ZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVlcyAvIGFkZHMgdGhlIGdpdmVuIGZpbHRlciwgbGVhdmluZ1xuICAgKiBleGlzdGluZyBvbmVzIHVudG91Y2hlZC5cbiAgICogQHBhcmFtIHVwZGF0ZWRGaWx0ZXJcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVGaWx0ZXIodXBkYXRlZEZpbHRlcj86IEZpbHRlcik6IHZvaWQge1xuICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoW3VwZGF0ZWRGaWx0ZXJdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgdXBkYXRlcyAvIGFkZHMgdGhlIGdpdmVuIGZpbHRlcnMsIGxlYXZpbmdcbiAgICogZXhpc3Rpbmcgb25lcyB1bnRvdWNoZWQuXG4gICAqIEBwYXJhbSB1cGRhdGVkRmlsdGVyc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUZpbHRlcnModXBkYXRlZEZpbHRlcnM/OiBGaWx0ZXJbXSk6IHZvaWQge1xuICAgIGlmICh1cGRhdGVkRmlsdGVycyAmJiB1cGRhdGVkRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWx0ZXJzKFxuICAgICAgICBGaWx0ZXJDb250ZXh0LnVwZGF0ZUZpbHRlcnModGhpcy5maWx0ZXJzU25hcHNob3QsIHVwZGF0ZWRGaWx0ZXJzKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhbGwgZXhpc3RpbmcgZmlsdGVycyB3aXRoIHRoZSBnaXZlbiBuZXcgb25lcy5cbiAgICogQHBhcmFtIG5ld0ZpbHRlcnNcbiAgICovXG4gIHB1YmxpYyByZXBsYWNlRmlsdGVycyhuZXdGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICB0aGlzLl9maWx0ZXJzLm5leHQobmV3RmlsdGVycyB8fCBbXSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBsYWNlRmlsdGVycyhbXSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGVxdWFscyhhRmlsdGVyczogRmlsdGVyW10sIGJGaWx0ZXJzOiBGaWx0ZXJbXSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKGFGaWx0ZXJzLmxlbmd0aCAhPT0gYkZpbHRlcnMubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmIChhRmlsdGVycy5sZW5ndGggPT09IDAgJiYgYkZpbHRlcnMubGVuZ3RoID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICAvLyBUaGUgYm90aCBmaWx0ZXIgYXJyYXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCBzbyB3ZSBtdXN0IGNvbXBhcmUgdGhlbSBieSB2YWx1ZVxuXG4gICAgY29uc3QgYkluZGV4ID0gbmV3IE1hcDxzdHJpbmcsIEZpbHRlcj4oKTtcbiAgICBiRmlsdGVycy5mb3JFYWNoKGYgPT4gYkluZGV4LnNldChmLmtleSwgZikpO1xuXG4gICAgZm9yIChjb25zdCBmYSBvZiBhRmlsdGVycykge1xuICAgICAgY29uc3QgYkZpbHRlciA9IGJJbmRleC5nZXQoZmEua2V5KTtcbiAgICAgIGlmICghRmlsdGVyLmVxdWFscyhiRmlsdGVyLCBmYSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { Objects } from '../objects';
|
|
2
|
-
import { CollectionUtil } from '../utils/collection-util';
|
|
3
|
-
export class Filter {
|
|
4
|
-
/***************************************************************************
|
|
5
|
-
* *
|
|
6
|
-
* Constructor *
|
|
7
|
-
* *
|
|
8
|
-
**************************************************************************/
|
|
9
|
-
constructor(key, value) {
|
|
10
|
-
if (!key) {
|
|
11
|
-
throw new Error('ArgumentNull: Filter.key can not be null!');
|
|
12
|
-
}
|
|
13
|
-
this.key = key;
|
|
14
|
-
this.value = value;
|
|
15
|
-
}
|
|
16
|
-
/***************************************************************************
|
|
17
|
-
* *
|
|
18
|
-
* Properties *
|
|
19
|
-
* *
|
|
20
|
-
**************************************************************************/
|
|
21
|
-
/**
|
|
22
|
-
* Checks if this filter has a value.
|
|
23
|
-
* This is the case when the value is non null and
|
|
24
|
-
* in case its an array, also non empty.
|
|
25
|
-
*/
|
|
26
|
-
static hasValue(self) {
|
|
27
|
-
if (!self) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
if (Objects.nonNull(self.value)) {
|
|
31
|
-
if (self.value instanceof Array) {
|
|
32
|
-
return self.value.length > 0;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Checks this filter has the same value as the other given filter.
|
|
42
|
-
* @param self
|
|
43
|
-
* @param other
|
|
44
|
-
*/
|
|
45
|
-
static equals(self, other) {
|
|
46
|
-
if (self === other) {
|
|
47
|
-
return true;
|
|
48
|
-
} // Same obj reference
|
|
49
|
-
if (!self) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
if (!other) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
if (self.key !== other.key) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
if (self.value === other.value) {
|
|
59
|
-
return true;
|
|
60
|
-
} // Same key and same value reference
|
|
61
|
-
// In case the filter has a multi value array, we need to compare those by value
|
|
62
|
-
if (self.value instanceof Array || other.value instanceof Array) {
|
|
63
|
-
const valueArr = self.value instanceof Array ? self.value : [self.value];
|
|
64
|
-
const otherArr = other instanceof Array ? other : [other];
|
|
65
|
-
return CollectionUtil.equalSetDeep(new Set(valueArr), new Set(otherArr));
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
return false; // Otherwise, they are not equal
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL2RhdGEvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE1BQU0sT0FBTyxNQUFNO0lBb0JqQjs7OztnRkFJNEU7SUFFNUUsWUFDSSxHQUFXLEVBQ1gsS0FBK0I7UUFFakMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztTQUFFO1FBRTNFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBRWpDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBRTVCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLEtBQUssRUFBRTtnQkFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNIO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFFOUMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7U0FBRSxDQUFDLHFCQUFxQjtRQUUxRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1NBQUU7UUFDN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFLENBQUMsb0NBQW9DO1FBRXJGLGdGQUFnRjtRQUVoRixJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksS0FBSyxFQUFFO1lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RSxNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDMUU7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDLENBQUMsZ0NBQWdDO1NBQy9DO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vb2JqZWN0cyc7XG5pbXBvcnQge0NvbGxlY3Rpb25VdGlsfSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9uLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyIHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogVGhlIGZpbHRlciBrZXkuXG4gICAqIFVuaXF1ZSBpbnNpZGUgYSBGaWx0ZXJDb250ZXh0IG9yIEZpbHRlciByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsdGVyIHZhbHVlIGFzIHN0cmluZy5cbiAgICogTXVsdGlwbGUgc3RyaW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpIHtcblxuICAgIGlmICgha2V5KSB7IHRocm93IG5ldyBFcnJvcignQXJndW1lbnROdWxsOiBGaWx0ZXIua2V5IGNhbiBub3QgYmUgbnVsbCEnKTsgfVxuXG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGZpbHRlciBoYXMgYSB2YWx1ZS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB2YWx1ZSBpcyBub24gbnVsbCBhbmRcbiAgICogaW4gY2FzZSBpdHMgYW4gYXJyYXksIGFsc28gbm9uIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBoYXNWYWx1ZShzZWxmOiBGaWx0ZXIpOiBib29sZWFuIHtcblxuICAgIGlmICghc2VsZikgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIGlmIChPYmplY3RzLm5vbk51bGwoc2VsZi52YWx1ZSkpIHtcbiAgICAgICBpZiAoc2VsZi52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICByZXR1cm4gc2VsZi52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhpcyBmaWx0ZXIgaGFzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBvdGhlciBnaXZlbiBmaWx0ZXIuXG4gICAqIEBwYXJhbSBzZWxmXG4gICAqIEBwYXJhbSBvdGhlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlcXVhbHMoc2VsZjogRmlsdGVyLCBvdGhlcjogRmlsdGVyKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoc2VsZiA9PT0gb3RoZXIpIHsgcmV0dXJuIHRydWU7IH0gLy8gU2FtZSBvYmogcmVmZXJlbmNlXG5cbiAgICBpZiAoIXNlbGYpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKCFvdGhlcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAoc2VsZi5rZXkgIT09IG90aGVyLmtleSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAoc2VsZi52YWx1ZSA9PT0gb3RoZXIudmFsdWUpIHsgcmV0dXJuIHRydWU7IH0gLy8gU2FtZSBrZXkgYW5kIHNhbWUgdmFsdWUgcmVmZXJlbmNlXG5cbiAgICAvLyBJbiBjYXNlIHRoZSBmaWx0ZXIgaGFzIGEgbXVsdGkgdmFsdWUgYXJyYXksIHdlIG5lZWQgdG8gY29tcGFyZSB0aG9zZSBieSB2YWx1ZVxuXG4gICAgaWYgKHNlbGYudmFsdWUgaW5zdGFuY2VvZiBBcnJheSB8fCBvdGhlci52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjb25zdCB2YWx1ZUFyciA9IHNlbGYudmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHNlbGYudmFsdWUgOiBbc2VsZi52YWx1ZV07XG4gICAgICBjb25zdCBvdGhlckFyciA9IG90aGVyIGluc3RhbmNlb2YgQXJyYXkgPyBvdGhlciA6IFtvdGhlcl07XG4gICAgICByZXR1cm4gQ29sbGVjdGlvblV0aWwuZXF1YWxTZXREZWVwKG5ldyBTZXQodmFsdWVBcnIpLCBuZXcgU2V0KG90aGVyQXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gT3RoZXJ3aXNlLCB0aGV5IGFyZSBub3QgZXF1YWxcbiAgICB9XG4gIH1cbn1cblxuIl19
|