@ethlete/query 4.2.0 → 4.2.2

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 (68) hide show
  1. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +55 -0
  2. package/esm2022/lib/directives/infinity-query.directive.mjs +176 -0
  3. package/esm2022/lib/directives/query.directive.mjs +113 -0
  4. package/esm2022/lib/query-form/query-form.mjs +173 -0
  5. package/{esm2020 → esm2022}/lib/query-form/query-form.types.mjs +1 -1
  6. package/{fesm2020 → fesm2022}/ethlete-query.mjs +35 -19
  7. package/fesm2022/ethlete-query.mjs.map +1 -0
  8. package/lib/auth/bearer-auth-provider.d.ts +3 -3
  9. package/lib/directives/infinity-query-trigger.directive.d.ts +1 -1
  10. package/lib/directives/infinity-query.directive.d.ts +1 -1
  11. package/lib/directives/query.directive.d.ts +1 -1
  12. package/lib/query/query.utils.d.ts +12 -8
  13. package/lib/query-form/query-form.d.ts +11 -8
  14. package/lib/query-form/query-form.types.d.ts +4 -0
  15. package/package.json +8 -14
  16. package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +0 -54
  17. package/esm2020/lib/directives/infinity-query.directive.mjs +0 -175
  18. package/esm2020/lib/directives/query.directive.mjs +0 -112
  19. package/esm2020/lib/query-form/query-form.mjs +0 -157
  20. package/fesm2015/ethlete-query.mjs +0 -2273
  21. package/fesm2015/ethlete-query.mjs.map +0 -1
  22. package/fesm2020/ethlete-query.mjs.map +0 -1
  23. /package/{esm2020 → esm2022}/ethlete-query.mjs +0 -0
  24. /package/{esm2020 → esm2022}/index.mjs +0 -0
  25. /package/{esm2020 → esm2022}/lib/auth/auth-provider.types.mjs +0 -0
  26. /package/{esm2020 → esm2022}/lib/auth/auth-provider.utils.mjs +0 -0
  27. /package/{esm2020 → esm2022}/lib/auth/basic-auth-provider.mjs +0 -0
  28. /package/{esm2020 → esm2022}/lib/auth/bearer-auth-provider.mjs +0 -0
  29. /package/{esm2020 → esm2022}/lib/auth/custom-header-auth-provider.mjs +0 -0
  30. /package/{esm2020 → esm2022}/lib/auth/index.mjs +0 -0
  31. /package/{esm2020 → esm2022}/lib/directives/index.mjs +0 -0
  32. /package/{esm2020 → esm2022}/lib/entity/entity-store.mjs +0 -0
  33. /package/{esm2020 → esm2022}/lib/entity/entity.types.mjs +0 -0
  34. /package/{esm2020 → esm2022}/lib/entity/entity.utils.mjs +0 -0
  35. /package/{esm2020 → esm2022}/lib/entity/index.mjs +0 -0
  36. /package/{esm2020 → esm2022}/lib/gql/gql.mjs +0 -0
  37. /package/{esm2020 → esm2022}/lib/gql/index.mjs +0 -0
  38. /package/{esm2020 → esm2022}/lib/infinite-query/index.mjs +0 -0
  39. /package/{esm2020 → esm2022}/lib/infinite-query/infinity-query.mjs +0 -0
  40. /package/{esm2020 → esm2022}/lib/infinite-query/infinity-query.types.mjs +0 -0
  41. /package/{esm2020 → esm2022}/lib/infinite-query/infinity-query.utils.mjs +0 -0
  42. /package/{esm2020 → esm2022}/lib/logger/index.mjs +0 -0
  43. /package/{esm2020 → esm2022}/lib/logger/logger.mjs +0 -0
  44. /package/{esm2020 → esm2022}/lib/query/index.mjs +0 -0
  45. /package/{esm2020 → esm2022}/lib/query/query.mjs +0 -0
  46. /package/{esm2020 → esm2022}/lib/query/query.types.mjs +0 -0
  47. /package/{esm2020 → esm2022}/lib/query/query.utils.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/query-client/index.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/query-client/query-client.mjs +0 -0
  50. /package/{esm2020 → esm2022}/lib/query-client/query-client.types.mjs +0 -0
  51. /package/{esm2020 → esm2022}/lib/query-client/query-client.utils.mjs +0 -0
  52. /package/{esm2020 → esm2022}/lib/query-creator/index.mjs +0 -0
  53. /package/{esm2020 → esm2022}/lib/query-creator/query-creator.mjs +0 -0
  54. /package/{esm2020 → esm2022}/lib/query-creator/query-creator.types.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/query-form/index.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/query-form/query-form.utils.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/query-store/index.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/query-store/query-store.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/request/index.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/request/request.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/request/request.types.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/request/request.util.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/symfony/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/symfony/symfony.types.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/symfony/symfony.utils.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/utils/deep-freeze.util.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/utils/def.util.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
@@ -11,5 +11,5 @@ export declare class InfinityQueryTriggerDirective implements OnInit, OnDestroy
11
11
  ngOnDestroy(): void;
12
12
  private _setupIntersectionObserver;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<InfinityQueryTriggerDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryTriggerDirective, "[etInfinityQueryTrigger], et-infinity-query-trigger", never, { "scrollContainerSelector": "scrollContainerSelector"; }, {}, never, never, true, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryTriggerDirective, "[etInfinityQueryTrigger], et-infinity-query-trigger", never, { "scrollContainerSelector": { "alias": "scrollContainerSelector"; "required": false; }; }, {}, never, never, true, never>;
15
15
  }
@@ -47,6 +47,6 @@ export declare class InfinityQueryDirective<Q extends InfinityQueryConfig<AnyQue
47
47
  private _renderMainView;
48
48
  private _cleanup;
49
49
  static ɵfac: i0.ɵɵFactoryDeclaration<InfinityQueryDirective<any>, never>;
50
- static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryDirective<any>, "[etInfinityQuery]", ["etInfinityQuery"], { "infinityQuery": "etInfinityQuery"; }, {}, never, never, true, [{ directive: typeof i1.DelayableDirective; inputs: {}; outputs: {}; }]>;
50
+ static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryDirective<any>, "[etInfinityQuery]", ["etInfinityQuery"], { "infinityQuery": { "alias": "etInfinityQuery"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.DelayableDirective; inputs: {}; outputs: {}; }]>;
51
51
  }
52
52
  export {};
@@ -33,6 +33,6 @@ export declare class QueryDirective<Q extends AnyQuery | AnyQueryCollection | nu
33
33
  private _updateView;
34
34
  private _renderMainView;
35
35
  static ɵfac: i0.ɵɵFactoryDeclaration<QueryDirective<any>, never>;
36
- static ɵdir: i0.ɵɵDirectiveDeclaration<QueryDirective<any>, "[etQuery]", never, { "query": "etQuery"; "cache": "etQueryCache"; }, {}, never, never, true, never>;
36
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QueryDirective<any>, "[etQuery]", never, { "query": { "alias": "etQuery"; "required": false; }; "cache": { "alias": "etQueryCache"; "required": false; }; }, {}, never, never, true, never>;
37
37
  }
38
38
  export {};
@@ -5,21 +5,21 @@ import { QueryClient } from '../query-client';
5
5
  import { AnyQueryCreator, QueryArgsOf, QueryCreator, QueryDataOf, QueryResponseOf, QueryStoreIdOf, QueryStoreOf } from '../query-creator';
6
6
  import { QueryForm } from '../query-form';
7
7
  import { Method, RequestHeaders, RequestHeadersMethodMap } from '../request';
8
- import { AnyGqlQueryConfig, AnyQuery, AnyQueryCreatorCollection, AnyRestQueryConfig, BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryCollectionOf, QueryState, QueryStateResponseOf, QueryStateType, ResetPageOnErrorOperatorConfig, RouteType, Success } from './query.types';
8
+ import { AnyGqlQueryConfig, AnyQuery, AnyQueryCollectionData, AnyQueryCreatorCollection, AnyRestQueryConfig, BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryCollectionOf, QueryState, QueryStateResponseOf, QueryStateType, ResetPageOnErrorOperatorConfig, RouteType, Success } from './query.types';
9
9
  type OmitNull<T> = T extends null ? never : T;
10
- export declare function filterSuccess(): <T extends QueryState<unknown> | null, Response_1 extends QueryStateResponseOf<OmitNull<T>>>(source: Observable<T>) => Observable<Success<Response_1>>;
11
- export declare function ignoreAutoRefresh(): <T extends QueryState<unknown> | null>(source: Observable<T>) => Observable<T>;
12
- export declare function filterFailure(): <T extends QueryState<unknown> | null>(source: Observable<T>) => Observable<Failure>;
13
- export declare function filterQueryStates(allowedStates: QueryStateType[]): <T extends QueryState<unknown> | null>(source: Observable<T>) => Observable<T>;
10
+ export declare function filterSuccess(): <T extends QueryState | null, Response_1 extends QueryStateResponseOf<OmitNull<T>>>(source: Observable<T>) => Observable<Success<Response_1>>;
11
+ export declare function ignoreAutoRefresh(): <T extends QueryState | null>(source: Observable<T>) => Observable<T>;
12
+ export declare function filterFailure(): <T extends QueryState | null>(source: Observable<T>) => Observable<Failure>;
13
+ export declare function filterQueryStates(allowedStates: QueryStateType[]): <T extends QueryState | null>(source: Observable<T>) => Observable<T>;
14
14
  export declare function takeUntilResponse(config?: {
15
15
  excludeNull?: boolean;
16
- }): <T extends QueryState<unknown> | null>(source: Observable<T>) => Observable<T>;
16
+ }): <T extends QueryState | null>(source: Observable<T>) => Observable<T>;
17
17
  export declare function filterNull(): <T>(source: Observable<T>) => Observable<OmitNull<T>>;
18
18
  export declare function switchQueryState(): <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) => Observable<QueryState<Data> | null>;
19
19
  export declare function switchQueryCollectionState(): <T extends {
20
20
  type: string;
21
21
  query: import("@ethlete/query").Query<any, any, any, any, any, any>;
22
- } | null, Data extends QueryDataOf<OmitNull<T>["query"]>>(source: Observable<T>) => Observable<QueryState<Data> | null>;
22
+ } | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(source: Observable<T>) => Observable<QueryState<Data> | null>;
23
23
  export declare const resetPageOnError: <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) => (source: Observable<T>) => Observable<T | QueryState<any>>;
24
24
  export declare const isQueryStateLoading: (state: QueryState | null | undefined) => state is Loading;
25
25
  export declare const isQueryStateSuccess: (state: QueryState | null | undefined) => state is Success<unknown>;
@@ -64,7 +64,11 @@ export declare const computeQueryQueryParams: (config: {
64
64
  config: AnyRestQueryConfig | AnyGqlQueryConfig;
65
65
  client: QueryClient;
66
66
  args?: BaseArguments | undefined;
67
- }) => import("../request").QueryParams | undefined;
67
+ }) => import("../request").QueryParams | {
68
+ query: string;
69
+ variables?: string | undefined;
70
+ operationName?: string | undefined;
71
+ } | undefined;
68
72
  export declare const paginatedEntityValueUpdater: <T extends Paginated<unknown>, Args extends BaseArguments, Entity, J extends T extends Paginated<infer X> ? X : never>(findFn: (val: J, entity: Entity) => boolean) => ({ response, rawResponse, entity }: {
69
73
  rawResponse: T;
70
74
  response: T;
@@ -1,9 +1,8 @@
1
1
  import { FormGroup } from '@angular/forms';
2
- import { Observable } from 'rxjs';
3
- import { QueryFieldOptions, QueryFormGroup, QueryFormObserveOptions, QueryFormValue } from './query-form.types';
2
+ import { QueryFieldOptions, QueryFormGroup, QueryFormObserveOptions, QueryFormValue, QueryFormValueEvent } from './query-form.types';
4
3
  export declare class QueryField<T> {
5
4
  data: QueryFieldOptions<T>;
6
- changes$: Observable<T | null>;
5
+ changes$: import("rxjs").Observable<T | null>;
7
6
  get control(): import("@angular/forms").FormControl<T | null>;
8
7
  private _currentDebounceTimeout;
9
8
  constructor(data: QueryFieldOptions<T>);
@@ -18,15 +17,19 @@ export declare class QueryForm<T extends Record<string, QueryField<any>>> {
18
17
  private _activatedRoute;
19
18
  private _defaultValues;
20
19
  form: FormGroup<QueryFormGroup<T>>;
20
+ private get _formValue();
21
+ private readonly _changes$;
22
+ readonly changes$: import("rxjs").Observable<QueryFormValueEvent<T>>;
23
+ get controls(): 0 extends 1 & QueryFormGroup<T> ? {
24
+ [key: string]: import("@angular/forms").AbstractControl<any, any>;
25
+ } : QueryFormGroup<T>;
26
+ get value(): QueryFormValue<T>;
21
27
  constructor(_fields: T);
22
- observe(options?: QueryFormObserveOptions): Observable<{
23
- previousValue: QueryFormValue<T>;
24
- currentValue: QueryFormValue<T>;
25
- }>;
28
+ observe(options?: QueryFormObserveOptions): import("rxjs").Observable<null>;
26
29
  setFormValueFromUrlQueryParams(options?: {
27
30
  skipDebounce?: boolean;
28
31
  }): void;
29
- updateFormOnUrlQueryParamsChange(): Observable<import("@angular/router").Params>;
32
+ updateFormOnUrlQueryParamsChange(): import("rxjs").Observable<import("@angular/router").Params>;
30
33
  private _getDefaultValue;
31
34
  private _isDefaultValue;
32
35
  private _setupFormGroup;
@@ -65,3 +65,7 @@ export interface QueryFormObserveOptions {
65
65
  */
66
66
  syncViaUrlQueryParams?: boolean;
67
67
  }
68
+ export interface QueryFormValueEvent<T extends Record<string, QueryField<any>>> {
69
+ previousValue: QueryFormValue<T> | null;
70
+ currentValue: QueryFormValue<T>;
71
+ }
package/package.json CHANGED
@@ -1,19 +1,15 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "4.2.0",
3
+ "version": "4.2.2",
4
4
  "dependencies": {
5
5
  "tslib": "^2.5.0"
6
6
  },
7
7
  "peerDependencies": {
8
- "@angular/common": "^15.2.1",
9
- "@angular/core": "^15.2.1",
10
- "@ethlete/core": "1.10.0"
8
+ "@angular/common": "^15.2.1 || ^16.0.0",
9
+ "@angular/core": "^15.2.1 || ^16.0.0",
10
+ "@ethlete/core": "2.0.0"
11
11
  },
12
- "module": "fesm2015/ethlete-query.mjs",
13
- "es2020": "fesm2020/ethlete-query.mjs",
14
- "esm2020": "esm2020/ethlete-query.mjs",
15
- "fesm2020": "fesm2020/ethlete-query.mjs",
16
- "fesm2015": "fesm2015/ethlete-query.mjs",
12
+ "module": "fesm2022/ethlete-query.mjs",
17
13
  "typings": "index.d.ts",
18
14
  "exports": {
19
15
  "./package.json": {
@@ -21,11 +17,9 @@
21
17
  },
22
18
  ".": {
23
19
  "types": "./index.d.ts",
24
- "esm2020": "./esm2020/ethlete-query.mjs",
25
- "es2020": "./fesm2020/ethlete-query.mjs",
26
- "es2015": "./fesm2015/ethlete-query.mjs",
27
- "node": "./fesm2015/ethlete-query.mjs",
28
- "default": "./fesm2020/ethlete-query.mjs"
20
+ "esm2022": "./esm2022/ethlete-query.mjs",
21
+ "esm": "./esm2022/ethlete-query.mjs",
22
+ "default": "./fesm2022/ethlete-query.mjs"
29
23
  }
30
24
  },
31
25
  "sideEffects": false
@@ -1,54 +0,0 @@
1
- import { Directive, ElementRef, inject, Input } from '@angular/core';
2
- import { fromEvent, Subject, takeUntil } from 'rxjs';
3
- import { INFINITY_QUERY_TOKEN } from './infinity-query.directive';
4
- import * as i0 from "@angular/core";
5
- export class InfinityQueryTriggerDirective {
6
- constructor() {
7
- this._elementRef = inject((ElementRef));
8
- this._infinityQuery = inject(INFINITY_QUERY_TOKEN);
9
- this._destroy = new Subject();
10
- this._observer = null;
11
- this.click$ = fromEvent(this._elementRef.nativeElement, 'click');
12
- this.scrollContainerSelector = null;
13
- }
14
- ngOnInit() {
15
- const isInteractive = this._elementRef.nativeElement.hasAttribute('etInfinityQueryTrigger');
16
- if (isInteractive) {
17
- this.click$.pipe(takeUntil(this._destroy)).subscribe(() => this._infinityQuery.loadNextPage());
18
- }
19
- else {
20
- this._setupIntersectionObserver();
21
- }
22
- }
23
- ngOnDestroy() {
24
- this._destroy.next(true);
25
- this._destroy.unsubscribe();
26
- this._observer?.disconnect();
27
- }
28
- _setupIntersectionObserver() {
29
- this._observer = new IntersectionObserver((entries) => {
30
- const entry = entries[0];
31
- if (entry.isIntersecting && !this._infinityQuery.context.loading) {
32
- this._infinityQuery.loadNextPage();
33
- }
34
- }, {
35
- root: this.scrollContainerSelector ? document.querySelector(this.scrollContainerSelector) : null,
36
- rootMargin: '0px',
37
- threshold: [0.25, 0.5, 0.75, 1],
38
- });
39
- this._observer.observe(this._elementRef.nativeElement);
40
- }
41
- }
42
- InfinityQueryTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
43
- InfinityQueryTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 });
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
45
- type: Directive,
46
- args: [{
47
- // eslint-disable-next-line @angular-eslint/directive-selector
48
- selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',
49
- standalone: true,
50
- }]
51
- }], propDecorators: { scrollContainerSelector: [{
52
- type: Input
53
- }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0eS1xdWVyeS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBT2xFLE1BQU0sT0FBTyw2QkFBNkI7SUFMMUM7UUFNVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsY0FBUyxHQUFnQyxJQUFJLENBQUM7UUFFdEQsV0FBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUc1RCw0QkFBdUIsR0FBa0IsSUFBSSxDQUFDO0tBb0MvQztJQWxDQyxRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFNUYsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDaEc7YUFBTTtZQUNMLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksb0JBQW9CLENBQ3ZDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekIsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxFQUNEO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNoRyxVQUFVLEVBQUUsS0FBSztZQUNqQixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDaEMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDOzswSEE3Q1UsNkJBQTZCOzhHQUE3Qiw2QkFBNkI7MkZBQTdCLDZCQUE2QjtrQkFMekMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxxREFBcUQ7b0JBQy9ELFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFXQyx1QkFBdUI7c0JBRHRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5GSU5JVFlfUVVFUllfVE9LRU4gfSBmcm9tICcuL2luZmluaXR5LXF1ZXJ5LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tldEluZmluaXR5UXVlcnlUcmlnZ2VyXSwgZXQtaW5maW5pdHktcXVlcnktdHJpZ2dlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEluZmluaXR5UXVlcnlUcmlnZ2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgcHJpdmF0ZSBfaW5maW5pdHlRdWVyeSA9IGluamVjdChJTkZJTklUWV9RVUVSWV9UT0tFTik7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgX29ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gIGNsaWNrJCA9IGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpO1xuXG4gIEBJbnB1dCgpXG4gIHNjcm9sbENvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBpc0ludGVyYWN0aXZlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZXRJbmZpbml0eVF1ZXJ5VHJpZ2dlcicpO1xuXG4gICAgaWYgKGlzSW50ZXJhY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xpY2skLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faW5maW5pdHlRdWVyeS5sb2FkTmV4dFBhZ2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQodHJ1ZSk7XG4gICAgdGhpcy5fZGVzdHJveS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX29ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuXG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyAmJiAhdGhpcy5faW5maW5pdHlRdWVyeS5jb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5LmxvYWROZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByb290OiB0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yKSA6IG51bGwsXG4gICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgICB0aHJlc2hvbGQ6IFswLjI1LCAwLjUsIDAuNzUsIDFdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=
@@ -1,175 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { ChangeDetectorRef, Directive, ErrorHandler, inject, InjectionToken, Input, TemplateRef, ViewContainerRef, } from '@angular/core';
3
- import { DelayableDirective, DestroyService } from '@ethlete/core';
4
- import { BehaviorSubject, combineLatest, skip, Subject, takeUntil, tap, withLatestFrom } from 'rxjs';
5
- import { InfinityQuery } from '../infinite-query';
6
- import { isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess, switchQueryState, } from '../query';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@ethlete/core";
9
- export const INFINITY_QUERY_TOKEN = new InjectionToken('INFINITY_QUERY_TOKEN');
10
- export class InfinityQueryDirective {
11
- constructor() {
12
- this._queryConfigChanged$ = new Subject();
13
- this._viewContext = {
14
- $implicit: null,
15
- etInfinityQuery: null,
16
- loading: false,
17
- error: null,
18
- isFirstLoad: false,
19
- canLoadMore: false,
20
- currentPage: null,
21
- currentCalculatedPage: null,
22
- totalPages: null,
23
- itemsPerPage: null,
24
- currentQuery: null,
25
- };
26
- this._infinityQueryInstance = null;
27
- this._destroy$ = inject(DestroyService, { host: true }).destroy$;
28
- this._cdr = inject(ChangeDetectorRef);
29
- this._viewContainerRef = inject(ViewContainerRef);
30
- this._mainTemplateRef = inject((TemplateRef));
31
- this._errorHandler = inject(ErrorHandler);
32
- this._delayable = inject(DelayableDirective, { host: true });
33
- this._data$ = new BehaviorSubject([]);
34
- this._didReceiveFirstData$ = new BehaviorSubject(false);
35
- this._isMainViewCreated = false;
36
- }
37
- get infinityQuery() {
38
- return this._infinityQuery;
39
- }
40
- set infinityQuery(v) {
41
- this._cleanup();
42
- this._infinityQuery = v;
43
- this._infinityQueryInstance = this._setupInfinityQuery(v);
44
- this.loadNextPage();
45
- }
46
- get context() {
47
- return this._viewContext;
48
- }
49
- get instance() {
50
- return this._infinityQueryInstance;
51
- }
52
- get data$() {
53
- return this._data$.asObservable();
54
- }
55
- get data() {
56
- return this._data$.getValue();
57
- }
58
- static ngTemplateContextGuard(dir, ctx) {
59
- return true;
60
- }
61
- ngOnInit() {
62
- this._renderMainView();
63
- }
64
- _setupInfinityQuery(config) {
65
- const instance = new InfinityQuery(config);
66
- combineLatest([
67
- instance.currentQuery$.pipe(switchQueryState(), withLatestFrom(instance.currentQuery$)),
68
- this._delayable.isDelayed$,
69
- this._didReceiveFirstData$,
70
- ])
71
- .pipe(tap(([[state, currentQuery], isDelayed, didReceiveFirstData]) => {
72
- this._viewContext.currentPage = instance.currentPage;
73
- this._viewContext.totalPages = instance.totalPages;
74
- this._viewContext.itemsPerPage = instance.itemsPerPage;
75
- this._viewContext.canLoadMore =
76
- (instance.totalPages && instance.currentPage && instance.totalPages > instance.currentPage) || false;
77
- this._viewContext.currentCalculatedPage = instance.currentCalculatedPage;
78
- this._viewContext.currentQuery = currentQuery;
79
- if (isQueryStateLoading(state) || isDelayed || (!didReceiveFirstData && isQueryStateSuccess(state))) {
80
- this._viewContext.loading = true;
81
- this._viewContext.error = null;
82
- this._viewContext.isFirstLoad = this.context.etInfinityQuery === null;
83
- }
84
- else if (isQueryStateFailure(state)) {
85
- this._viewContext.loading = false;
86
- this._viewContext.error = state.error;
87
- this._viewContext.isFirstLoad = false;
88
- this._errorHandler.handleError(state.error);
89
- }
90
- else if (isQueryStateSuccess(state)) {
91
- this._viewContext.loading = false;
92
- this._viewContext.error = null;
93
- this._viewContext.isFirstLoad = false;
94
- }
95
- else {
96
- this._viewContext.loading = false;
97
- this._viewContext.error = null;
98
- this._viewContext.etInfinityQuery = null;
99
- this._viewContext.$implicit = null;
100
- this._viewContext.isFirstLoad = false;
101
- this._viewContext.canLoadMore = false;
102
- this._viewContext.currentPage = null;
103
- this._viewContext.itemsPerPage = null;
104
- this._viewContext.totalPages = null;
105
- this._viewContext.currentQuery = null;
106
- this._data$.next([]);
107
- }
108
- this._cdr.markForCheck();
109
- }), takeUntil(this._destroy$), takeUntil(this._queryConfigChanged$))
110
- .subscribe();
111
- instance.data$
112
- .pipe(skip(1), tap((data) => {
113
- this._viewContext.etInfinityQuery = this._viewContext.$implicit = data;
114
- this._data$.next(data);
115
- if (!this._didReceiveFirstData$.getValue()) {
116
- this._didReceiveFirstData$.next(true);
117
- }
118
- this._cdr.markForCheck();
119
- }), takeUntil(this._destroy$), takeUntil(this._queryConfigChanged$))
120
- .subscribe();
121
- return instance;
122
- }
123
- loadNextPage() {
124
- if (!this._infinityQueryInstance) {
125
- return;
126
- }
127
- if (this._viewContext.loading) {
128
- return;
129
- }
130
- this._infinityQueryInstance.nextPage();
131
- }
132
- reset(newConfig) {
133
- if (!this._infinityQueryInstance) {
134
- return;
135
- }
136
- this._infinityQueryInstance.reset(newConfig);
137
- }
138
- _renderMainView() {
139
- if (!this._isMainViewCreated) {
140
- this._isMainViewCreated = true;
141
- this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
142
- }
143
- }
144
- _cleanup() {
145
- this._queryConfigChanged$.next(true);
146
- this._viewContext.loading = false;
147
- this._viewContext.error = null;
148
- this._viewContext.etInfinityQuery = null;
149
- this._viewContext.$implicit = null;
150
- this._viewContext.isFirstLoad = false;
151
- this._viewContext.canLoadMore = false;
152
- this._viewContext.currentPage = null;
153
- this._viewContext.itemsPerPage = null;
154
- this._viewContext.totalPages = null;
155
- this._viewContext.currentQuery = null;
156
- this._data$.next([]);
157
- }
158
- }
159
- InfinityQueryDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
160
- InfinityQueryDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }, DestroyService], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 });
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: InfinityQueryDirective, decorators: [{
162
- type: Directive,
163
- args: [{
164
- // eslint-disable-next-line @angular-eslint/directive-selector
165
- selector: '[etInfinityQuery]',
166
- exportAs: 'etInfinityQuery',
167
- standalone: true,
168
- providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }, DestroyService],
169
- hostDirectives: [DelayableDirective],
170
- }]
171
- }], propDecorators: { infinityQuery: [{
172
- type: Input,
173
- args: ['etInfinityQuery']
174
- }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFFLGFBQWEsRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDOzs7QUFzQmxCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUE4QixzQkFBc0IsQ0FBQyxDQUFDO0FBVTVHLE1BQU0sT0FBTyxzQkFBc0I7SUFSbkM7UUFZbUIseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUM5QyxpQkFBWSxHQUE0QjtZQUN2RCxTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFFWCxXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixxQkFBcUIs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c2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVycm9ySGFuZGxlcixcbiAgaW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVsYXlhYmxlRGlyZWN0aXZlLCBEZXN0cm95U2VydmljZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBza2lwLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluZmluaXR5UXVlcnksIEluZmluaXR5UXVlcnlDb25maWcsIEluZmluaXR5UXVlcnlPZiB9IGZyb20gJy4uL2luZmluaXRlLXF1ZXJ5JztcbmltcG9ydCB7XG4gIEJhc2VBcmd1bWVudHMsXG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHN3aXRjaFF1ZXJ5U3RhdGUsXG59IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgQ29uc3RydWN0UXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5pbnRlcmZhY2UgSW5maW5pdHlRdWVyeUNvbnRleHQ8XG4gIFEgZXh0ZW5kcyBJbmZpbml0eVF1ZXJ5Q29uZmlnPEFueVF1ZXJ5Q3JlYXRvciwgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCwgYW55LCB1bmtub3duW10+LFxuPiB7XG4gICRpbXBsaWNpdDogUVsncmVzcG9uc2UnXVsnYXJyYXlUeXBlJ10gfCBudWxsO1xuICBldEluZmluaXR5UXVlcnk6IFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IFJlcXVlc3RFcnJvcjx1bmtub3duPiB8IG51bGw7XG5cbiAgaXNGaXJzdExvYWQ6IGJvb2xlYW47XG4gIGNhbkxvYWRNb3JlOiBib29sZWFuO1xuICBjdXJyZW50UGFnZTogbnVtYmVyIHwgbnVsbDtcbiAgY3VycmVudENhbGN1bGF0ZWRQYWdlOiBudW1iZXIgfCBudWxsO1xuICB0b3RhbFBhZ2VzOiBudW1iZXIgfCBudWxsO1xuICBpdGVtc1BlclBhZ2U6IG51bWJlciB8IG51bGw7XG5cbiAgY3VycmVudFF1ZXJ5OiBDb25zdHJ1Y3RRdWVyeTxRWydxdWVyeUNyZWF0b3InXT4gfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgSU5GSU5JVFlfUVVFUllfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48SW5maW5pdHlRdWVyeURpcmVjdGl2ZTxhbnk+PignSU5GSU5JVFlfUVVFUllfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW2V0SW5maW5pdHlRdWVyeV0nLFxuICBleHBvcnRBczogJ2V0SW5maW5pdHlRdWVyeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSU5GSU5JVFlfUVVFUllfVE9LRU4sIHVzZUV4aXN0aW5nOiBJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlIH0sIERlc3Ryb3lTZXJ2aWNlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtEZWxheWFibGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlPFxuICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbj4gaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlDb25maWdDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgZXRJbmZpbml0eVF1ZXJ5OiBudWxsLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuXG4gICAgaXNGaXJzdExvYWQ6IGZhbHNlLFxuICAgIGNhbkxvYWRNb3JlOiBmYWxzZSxcbiAgICBjdXJyZW50UGFnZTogbnVsbCxcbiAgICBjdXJyZW50Q2FsY3VsYXRlZFBhZ2U6IG51bGwsXG4gICAgdG90YWxQYWdlczogbnVsbCxcbiAgICBpdGVtc1BlclBhZ2U6IG51bGwsXG5cbiAgICBjdXJyZW50UXVlcnk6IG51bGwsXG4gIH07XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnlJbnN0YW5jZTogSW5maW5pdHlRdWVyeU9mPFE+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBpbmplY3QoRGVzdHJveVNlcnZpY2UsIHsgaG9zdDogdHJ1ZSB9KS5kZXN0cm95JDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFpblRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPEluZmluaXR5UXVlcnlDb250ZXh0PFE+Pik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vycm9ySGFuZGxlciA9IGluamVjdChFcnJvckhhbmRsZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWxheWFibGUgPSBpbmplY3QoRGVsYXlhYmxlRGlyZWN0aXZlLCB7IGhvc3Q6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddPihbXSk7XG5cbiAgcHJpdmF0ZSBfZGlkUmVjZWl2ZUZpcnN0RGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfaXNNYWluVmlld0NyZWF0ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2V0SW5maW5pdHlRdWVyeScpXG4gIGdldCBpbmZpbml0eVF1ZXJ5KCk6IFEge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0eVF1ZXJ5O1xuICB9XG4gIHNldCBpbmZpbml0eVF1ZXJ5KHY6IFEpIHtcbiAgICB0aGlzLl9jbGVhbnVwKCk7XG5cbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5ID0gdjtcbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UgPSB0aGlzLl9zZXR1cEluZmluaXR5UXVlcnkodik7XG4gICAgdGhpcy5sb2FkTmV4dFBhZ2UoKTtcbiAgfVxuICBwcml2YXRlIF9pbmZpbml0eVF1ZXJ5ITogUTtcblxuICBnZXQgY29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0NvbnRleHQ7XG4gIH1cblxuICBnZXQgaW5zdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZTtcbiAgfVxuXG4gIGdldCBkYXRhJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFxuICAgIFEgZXh0ZW5kcyBJbmZpbml0eVF1ZXJ5Q29uZmlnPEFueVF1ZXJ5Q3JlYXRvciwgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCwgYW55LCB1bmtub3duW10+LFxuICA+KGRpcjogSW5maW5pdHlRdWVyeURpcmVjdGl2ZTxRPiwgY3R4OiB1bmtub3duKTogY3R4IGlzIEluZmluaXR5UXVlcnlDb250ZXh0PFE+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlck1haW5WaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEluZmluaXR5UXVlcnkoY29uZmlnOiBRKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgSW5maW5pdHlRdWVyeShjb25maWcpIGFzIEluZmluaXR5UXVlcnlPZjxRPjtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgaW5zdGFuY2UuY3VycmVudFF1ZXJ5JC5waXBlKHN3aXRjaFF1ZXJ5U3RhdGUoKSwgd2l0aExhdGVzdEZyb20oaW5zdGFuY2UuY3VycmVudFF1ZXJ5JCkpLFxuICAgICAgdGhpcy5fZGVsYXlhYmxlLmlzRGVsYXllZCQsXG4gICAgICB0aGlzLl9kaWRSZWNlaXZlRmlyc3REYXRhJCxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW1tzdGF0ZSwgY3VycmVudFF1ZXJ5XSwgaXNEZWxheWVkLCBkaWRSZWNlaXZlRmlyc3REYXRhXSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRQYWdlID0gaW5zdGFuY2UuY3VycmVudFBhZ2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQudG90YWxQYWdlcyA9IGluc3RhbmNlLnRvdGFsUGFnZXM7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gaW5zdGFuY2UuaXRlbXNQZXJQYWdlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmNhbkxvYWRNb3JlID1cbiAgICAgICAgICAgIChpbnN0YW5jZS50b3RhbFBhZ2VzICYmIGluc3RhbmNlLmN1cnJlbnRQYWdlICYmIGluc3RhbmNlLnRvdGFsUGFnZXMgPiBpbnN0YW5jZS5jdXJyZW50UGFnZSkgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudENhbGN1bGF0ZWRQYWdlID0gaW5zdGFuY2UuY3VycmVudENhbGN1bGF0ZWRQYWdlO1xuXG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFF1ZXJ5ID0gY3VycmVudFF1ZXJ5O1xuXG4gICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcoc3RhdGUpIHx8IGlzRGVsYXllZCB8fCAoIWRpZFJlY2VpdmVGaXJzdERhdGEgJiYgaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gdGhpcy5jb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9PT0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihzdGF0ZS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRJbmZpbml0eVF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jYW5Mb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnRvdGFsUGFnZXMgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UXVlcnkgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLl9kYXRhJC5uZXh0KFtdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fcXVlcnlDb25maWdDaGFuZ2VkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpbnN0YW5jZS5kYXRhJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IGRhdGEgYXMgUVsncmVzcG9uc2UnXVsnYXJyYXlUeXBlJ10gfCBudWxsO1xuICAgICAgICAgIHRoaXMuX2RhdGEkLm5leHQoZGF0YSk7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX2RpZFJlY2VpdmVGaXJzdERhdGEkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZFJlY2VpdmVGaXJzdERhdGEkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3F1ZXJ5Q29uZmlnQ2hhbmdlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCkge1xuICAgIGlmICghdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UubmV4dFBhZ2UoKTtcbiAgfVxuXG4gIHJlc2V0KG5ld0NvbmZpZz86IE9taXQ8USwgJ3F1ZXJ5Q3JlYXRvcicgfCAncmVzcG9uc2UnPikge1xuICAgIGlmICghdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlLnJlc2V0KG5ld0NvbmZpZyBhcyBhbnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTWFpblZpZXcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc01haW5WaWV3Q3JlYXRlZCkge1xuICAgICAgdGhpcy5faXNNYWluVmlld0NyZWF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fbWFpblRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cCgpIHtcbiAgICB0aGlzLl9xdWVyeUNvbmZpZ0NoYW5nZWQkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuJGltcGxpY2l0ID0gbnVsbDtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UGFnZSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC50b3RhbFBhZ2VzID0gbnVsbDtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRRdWVyeSA9IG51bGw7XG5cbiAgICB0aGlzLl9kYXRhJC5uZXh0KFtdKTtcbiAgfVxufVxuIl19
@@ -1,112 +0,0 @@
1
- import { ChangeDetectorRef, Directive, ErrorHandler, Input, TemplateRef, ViewContainerRef, } from '@angular/core';
2
- import { tap } from 'rxjs';
3
- import { isQuery, isQueryStateFailure, isQueryStateLoading, isQueryStateSuccess, } from '../query';
4
- import * as i0 from "@angular/core";
5
- export class QueryDirective {
6
- get query() {
7
- return this._query;
8
- }
9
- set query(v) {
10
- this._query = v;
11
- this._subscribeToQuery();
12
- }
13
- get cache() {
14
- return this._cache;
15
- }
16
- set cache(v) {
17
- this._cache = v;
18
- }
19
- constructor(_mainTemplateRef, _viewContainerRef, _errorHandler, _cdr) {
20
- this._mainTemplateRef = _mainTemplateRef;
21
- this._viewContainerRef = _viewContainerRef;
22
- this._errorHandler = _errorHandler;
23
- this._cdr = _cdr;
24
- this._isMainViewCreated = false;
25
- this._subscription = null;
26
- this._viewContext = {
27
- $implicit: null,
28
- etQuery: null,
29
- loading: false,
30
- refreshing: false,
31
- error: null,
32
- progress: null,
33
- };
34
- this._cache = false;
35
- }
36
- static ngTemplateContextGuard(dir, ctx) {
37
- return true;
38
- }
39
- ngOnInit() {
40
- this._renderMainView();
41
- }
42
- ngOnDestroy() {
43
- this._subscription?.unsubscribe();
44
- }
45
- _subscribeToQuery() {
46
- this._subscription?.unsubscribe();
47
- this._subscription = null;
48
- if (!this.query) {
49
- this._viewContext.$implicit = null;
50
- this._viewContext.etQuery = null;
51
- this._viewContext.loading = false;
52
- this._viewContext.refreshing = false;
53
- this._viewContext.error = null;
54
- this._viewContext.progress = null;
55
- return;
56
- }
57
- const query = isQuery(this.query) ? this.query : this.query.query;
58
- const sub = query.state$.pipe(tap((state) => this._updateView(state))).subscribe();
59
- this._subscription = sub;
60
- }
61
- _updateView(state) {
62
- if (isQueryStateLoading(state)) {
63
- this._viewContext.loading = true;
64
- this._viewContext.progress = state.progress ?? null;
65
- this._viewContext.refreshing = state.meta.triggeredVia === 'auto' || state.meta.triggeredVia === 'poll';
66
- }
67
- else {
68
- this._viewContext.loading = false;
69
- this._viewContext.refreshing = false;
70
- this._viewContext.progress = null;
71
- }
72
- if (isQueryStateSuccess(state)) {
73
- this._viewContext.etQuery = state.response;
74
- this._viewContext.$implicit = state.response;
75
- }
76
- else if (!this.cache) {
77
- this._viewContext.etQuery = null;
78
- this._viewContext.$implicit = null;
79
- }
80
- if (isQueryStateFailure(state)) {
81
- this._viewContext.error = state.error;
82
- this._errorHandler.handleError(state.error);
83
- }
84
- else {
85
- this._viewContext.error = null;
86
- }
87
- this._cdr.markForCheck();
88
- }
89
- _renderMainView() {
90
- if (!this._isMainViewCreated) {
91
- this._isMainViewCreated = true;
92
- this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
93
- }
94
- }
95
- }
96
- QueryDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: QueryDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ErrorHandler }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
97
- QueryDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 });
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: QueryDirective, decorators: [{
99
- type: Directive,
100
- args: [{
101
- // eslint-disable-next-line @angular-eslint/directive-selector
102
- selector: '[etQuery]',
103
- standalone: true,
104
- }]
105
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i0.ErrorHandler }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { query: [{
106
- type: Input,
107
- args: ['etQuery']
108
- }], cache: [{
109
- type: Input,
110
- args: ['etQueryCache']
111
- }] } });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBS0wsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEdBQ3BCLE1BQU0sVUFBVSxDQUFDOztBQWtCbEIsTUFBTSxPQUFPLGNBQWM7SUFhekIsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFJO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBVTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBR0QsWUFDVSxnQkFBdUQsRUFDdkQsaUJBQW1DLEVBQ25DLGFBQTJCLEVBQzNCLElBQXVCO1FBSHZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUM7UUFDdkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXBDekIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGtC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SSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUNwQztRQUVELElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUV0QyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JGO0lBQ0gsQ0FBQzs7MkdBL0dVLGNBQWM7K0ZBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUwxQixTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs0TEFlSyxLQUFLO3NCQURSLEtBQUs7dUJBQUMsU0FBUztnQkFZWixLQUFLO3NCQURSLEtBQUs7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVycm9ySGFuZGxlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQW55UXVlcnksXG4gIEFueVF1ZXJ5Q29sbGVjdGlvbixcbiAgUXVlcnlPZixcbiAgUXVlcnlTdGF0ZSxcbiAgaXNRdWVyeSxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlU3VjY2Vzcyxcbn0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlEYXRhT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFJlcXVlc3RFcnJvciwgUmVxdWVzdFByb2dyZXNzIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5cbmludGVyZmFjZSBRdWVyeUNvbnRleHQ8USBleHRlbmRzIEFueVF1ZXJ5IHwgbnVsbD4ge1xuICAkaW1wbGljaXQ6IFF1ZXJ5RGF0YU9mPFE+IHwgbnVsbDtcbiAgZXRRdWVyeTogUXVlcnlEYXRhT2Y8UT4gfCBudWxsO1xuICBsb2FkaW5nOiBib29sZWFuO1xuICByZWZyZXNoaW5nOiBib29sZWFuO1xuICBwcm9ncmVzczogUmVxdWVzdFByb2dyZXNzIHwgbnVsbDtcbiAgZXJyb3I6IFJlcXVlc3RFcnJvcjx1bmtub3duPiB8IG51bGw7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tldFF1ZXJ5XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5RGlyZWN0aXZlPFEgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9pc01haW5WaWV3Q3JlYXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBRdWVyeUNvbnRleHQ8UXVlcnlPZjxRPj4gPSB7XG4gICAgJGltcGxpY2l0OiBudWxsLFxuICAgIGV0UXVlcnk6IG51bGwsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgcmVmcmVzaGluZzogZmFsc2UsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgcHJvZ3Jlc3M6IG51bGwsXG4gIH07XG5cbiAgQElucHV0KCdldFF1ZXJ5JylcbiAgZ2V0IHF1ZXJ5KCk6IFEge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeTtcbiAgfVxuICBzZXQgcXVlcnkodjogUSkge1xuICAgIHRoaXMuX3F1ZXJ5ID0gdjtcblxuICAgIHRoaXMuX3N1YnNjcmliZVRvUXVlcnkoKTtcbiAgfVxuICBwcml2YXRlIF9xdWVyeSE6IFE7XG5cbiAgQElucHV0KCdldFF1ZXJ5Q2FjaGUnKVxuICBnZXQgY2FjaGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlO1xuICB9XG4gIHNldCBjYWNoZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2FjaGUgPSB2O1xuICB9XG4gIHByaXZhdGUgX2NhY2hlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfbWFpblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxRdWVyeUNvbnRleHQ8UXVlcnlPZjxRPj4+LFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXIsXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFEgZXh0ZW5kcyBBbnlRdWVyeSB8IEFueVF1ZXJ5Q29sbGVjdGlvbiB8IG51bGw+KFxuICAgIGRpcjogUXVlcnlEaXJlY3RpdmU8UT4sXG4gICAgY3R4OiB1bmtub3duLFxuICApOiBjdHggaXMgUXVlcnlDb250ZXh0PFF1ZXJ5T2Y8UT4+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlck1haW5WaWV3KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb1F1ZXJ5KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBudWxsO1xuXG4gICAgaWYgKCF0aGlzLnF1ZXJ5KSB7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRRdWVyeSA9IG51bGw7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5yZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5wcm9ncmVzcyA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnkgPSBpc1F1ZXJ5KHRoaXMucXVlcnkpID8gdGhpcy5xdWVyeSA6IHRoaXMucXVlcnkucXVlcnk7XG5cbiAgICBjb25zdCBzdWIgPSBxdWVyeS5zdGF0ZSQucGlwZSh0YXAoKHN0YXRlKSA9PiB0aGlzLl91cGRhdGVWaWV3KHN0YXRlKSkpLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gc3ViO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmlldyhzdGF0ZTogUXVlcnlTdGF0ZSkge1xuICAgIGlmIChpc1F1ZXJ5U3RhdGVMb2FkaW5nKHN0YXRlKSkge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5wcm9ncmVzcyA9IHN0YXRlLnByb2dyZXNzID8/IG51bGw7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5yZWZyZXNoaW5nID0gc3RhdGUubWV0YS50cmlnZ2VyZWRWaWEgPT09ICdhdXRvJyB8fCBzdGF0ZS5tZXRhLnRyaWdnZXJlZFZpYSA9PT0gJ3BvbGwnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5yZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5wcm9ncmVzcyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSB7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5ldFF1ZXJ5ID0gc3RhdGUucmVzcG9uc2UgYXMgUXVlcnlEYXRhT2Y8UXVlcnlPZjxRPj47XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBzdGF0ZS5yZXNwb25zZSBhcyBRdWVyeURhdGFPZjxRdWVyeU9mPFE+PjtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNhY2hlKSB7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5ldFF1ZXJ5ID0gbnVsbDtcbiAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IHN0YXRlLmVycm9yO1xuXG4gICAgICB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Ioc3RhdGUuZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTWFpblZpZXcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc01haW5WaWV3Q3JlYXRlZCkge1xuICAgICAgdGhpcy5faXNNYWluVmlld0NyZWF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fbWFpblRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGV4dCk7XG4gICAgfVxuICB9XG59XG4iXX0=