@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.
Files changed (62) hide show
  1. package/esm2020/lib/common/data/data-context/data-context-active-page.mjs +1 -1
  2. package/esm2020/lib/common/data/data-context/data-context-base.mjs +2 -2
  3. package/esm2020/lib/common/data/data-context/data-context-continuable-base.mjs +1 -1
  4. package/esm2020/lib/common/data/data-context/data-context.mjs +1 -1
  5. package/esm2020/lib/common/data/datasource/data-source-adapter.mjs +1 -1
  6. package/esm2020/lib/common/data/datasource/data-source-processor.mjs +1 -1
  7. package/esm2020/lib/common/data/datasource/data-source.mjs +1 -1
  8. package/esm2020/lib/common/data/datasource/fetcher/delegate-data-source.mjs +1 -1
  9. package/esm2020/lib/common/data/datasource/local/local-list-data-source.mjs +1 -1
  10. package/esm2020/lib/common/data/datasource/local/local-paged-data-source.mjs +1 -1
  11. package/esm2020/lib/common/data/datasource/rest/rest-client.mjs +2 -2
  12. package/esm2020/lib/common/data/filters/filter-context.mjs +141 -0
  13. package/esm2020/lib/common/data/filters/filter.mjs +109 -0
  14. package/esm2020/lib/common/data/http-params-builder.mjs +2 -2
  15. package/esm2020/lib/common/data/public_api.mjs +3 -3
  16. package/esm2020/lib/common/data/required-filter-evaluator.mjs +1 -1
  17. package/esm2020/lib/common/data/token-chunk-request.mjs +1 -1
  18. package/esm2020/lib/common/utils/filter-util.mjs +1 -1
  19. package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +1 -1
  20. package/esm2020/lib/components/csv/elder-csv-stream-exporter.mjs +1 -1
  21. package/esm2020/lib/components/data-view/base/elder-data-view-options.mjs +1 -1
  22. package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +33 -19
  23. package/esm2020/lib/components/http-support/elder-http-client.service.mjs +1 -1
  24. package/esm2020/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +2 -2
  25. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +2 -2
  26. package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +2 -2
  27. package/esm2020/lib/components/select/elder-select-base.mjs +2 -2
  28. package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +1 -1
  29. package/fesm2015/elderbyte-ngx-starter.mjs +90 -27
  30. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  31. package/fesm2020/elderbyte-ngx-starter.mjs +90 -27
  32. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  33. package/lib/common/data/data-context/data-context-active-page.d.ts +1 -1
  34. package/lib/common/data/data-context/data-context-base.d.ts +2 -2
  35. package/lib/common/data/data-context/data-context-continuable-base.d.ts +1 -1
  36. package/lib/common/data/data-context/data-context.d.ts +2 -2
  37. package/lib/common/data/datasource/data-source-adapter.d.ts +1 -1
  38. package/lib/common/data/datasource/data-source-processor.d.ts +1 -1
  39. package/lib/common/data/datasource/data-source.d.ts +1 -1
  40. package/lib/common/data/datasource/fetcher/delegate-data-source.d.ts +1 -1
  41. package/lib/common/data/datasource/local/local-list-data-source.d.ts +1 -1
  42. package/lib/common/data/datasource/local/local-paged-data-source.d.ts +1 -1
  43. package/lib/common/data/datasource/rest/rest-client.d.ts +1 -1
  44. package/lib/common/data/{filter-context.d.ts → filters/filter-context.d.ts} +3 -1
  45. package/lib/common/data/{filter.d.ts → filters/filter.d.ts} +15 -3
  46. package/lib/common/data/http-params-builder.d.ts +1 -1
  47. package/lib/common/data/public_api.d.ts +2 -2
  48. package/lib/common/data/required-filter-evaluator.d.ts +2 -2
  49. package/lib/common/data/token-chunk-request.d.ts +1 -1
  50. package/lib/common/utils/filter-util.d.ts +1 -1
  51. package/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.d.ts +1 -1
  52. package/lib/components/csv/elder-csv-stream-exporter.d.ts +1 -1
  53. package/lib/components/data-view/base/elder-data-view-options.d.ts +1 -1
  54. package/lib/components/forms/search/elder-search-context.directive.d.ts +15 -12
  55. package/lib/components/http-support/elder-http-client.service.d.ts +1 -1
  56. package/lib/components/input/autocomplete/elder-autocomplete-many.directive.d.ts +1 -1
  57. package/lib/components/input/autocomplete/elder-autocomplete.directive.d.ts +1 -1
  58. package/lib/components/select/elder-select-base.d.ts +1 -1
  59. package/lib/components/select/popup/selection-model-popup.directive.d.ts +1 -1
  60. package/package.json +1 -1
  61. package/esm2020/lib/common/data/filter-context.mjs +0 -129
  62. 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,4 +1,4 @@
1
- import { Filter } from '../../filter';
1
+ import { Filter } from '../../filters/filter';
2
2
  import { Sort } from '../../sort';
3
3
  import { Observable } from 'rxjs';
4
4
  import { IListDataSource } from '../data-source';
@@ -1,5 +1,5 @@
1
1
  import { Page, Pageable } from '../../page';
2
- import { Filter } from '../../filter';
2
+ import { Filter } from '../../filters/filter';
3
3
  import { Observable } from 'rxjs';
4
4
  import { Sort } from '../../sort';
5
5
  import { IPagedDataSource } from '../data-source';
@@ -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
- * Properties *
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 null and
31
- * in case its an array, also non empty.
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,5 +1,5 @@
1
1
  import { HttpParams } from '@angular/common/http';
2
- import { Filter } from './filter';
2
+ import { Filter } from './filters/filter';
3
3
  import { Sort } from './sort';
4
4
  import { Pageable } from './page';
5
5
  import { TokenChunkRequest } from './token-chunk-request';
@@ -1,5 +1,5 @@
1
- export * from './filter';
2
- export * from './filter-context';
1
+ export * from './filters/filter';
2
+ export * from './filters/filter-context';
3
3
  export * from './sort';
4
4
  export * from './page';
5
5
  export * from './entity-set-patch';
@@ -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,5 +1,5 @@
1
1
  import { Sort } from './sort';
2
- import { Filter } from './filter';
2
+ import { Filter } from './filters/filter';
3
3
  export declare class TokenChunkRequest {
4
4
  readonly nextContinuationToken: string | null | undefined;
5
5
  readonly filters: Filter[];
@@ -1,4 +1,4 @@
1
- import { Filter } from '../data/filter';
1
+ import { Filter } from '../data/filters/filter';
2
2
  export declare class FilterUtil {
3
3
  private static readonly logger;
4
4
  static filterData<T>(data: T[], filters: Filter[]): T[];
@@ -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, OnInit } from '@angular/core';
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 OnInit, AfterViewInit, OnDestroy {
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@elderbyte/ngx-starter",
3
- "version": "14.6.0",
3
+ "version": "14.7.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0",
@@ -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