@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.
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +55 -0
- package/esm2022/lib/directives/infinity-query.directive.mjs +176 -0
- package/esm2022/lib/directives/query.directive.mjs +113 -0
- package/esm2022/lib/query-form/query-form.mjs +173 -0
- package/{esm2020 → esm2022}/lib/query-form/query-form.types.mjs +1 -1
- package/{fesm2020 → fesm2022}/ethlete-query.mjs +35 -19
- package/fesm2022/ethlete-query.mjs.map +1 -0
- package/lib/auth/bearer-auth-provider.d.ts +3 -3
- package/lib/directives/infinity-query-trigger.directive.d.ts +1 -1
- package/lib/directives/infinity-query.directive.d.ts +1 -1
- package/lib/directives/query.directive.d.ts +1 -1
- package/lib/query/query.utils.d.ts +12 -8
- package/lib/query-form/query-form.d.ts +11 -8
- package/lib/query-form/query-form.types.d.ts +4 -0
- package/package.json +8 -14
- package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +0 -54
- package/esm2020/lib/directives/infinity-query.directive.mjs +0 -175
- package/esm2020/lib/directives/query.directive.mjs +0 -112
- package/esm2020/lib/query-form/query-form.mjs +0 -157
- package/fesm2015/ethlete-query.mjs +0 -2273
- package/fesm2015/ethlete-query.mjs.map +0 -1
- package/fesm2020/ethlete-query.mjs.map +0 -1
- /package/{esm2020 → esm2022}/ethlete-query.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/auth/auth-provider.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/auth/auth-provider.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/auth/basic-auth-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/auth/bearer-auth-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/auth/custom-header-auth-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/entity/entity-store.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/entity/entity.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/entity/entity.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/entity/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/gql/gql.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/gql/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/infinite-query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/infinite-query/infinity-query.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/infinite-query/infinity-query.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/infinite-query/infinity-query.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/logger/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/logger/logger.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query/query.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query/query.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query/query.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-client/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-client/query-client.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-client/query-client.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-client/query-client.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-creator/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-creator/query-creator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-creator/query-creator.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-form/query-form.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-store/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/query-store/query-store.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/request/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/request/request.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/request/request.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/request/request.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/symfony/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/symfony/symfony.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/symfony/symfony.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/deep-freeze.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/def.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
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
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
|
|
43
|
+
}
|
|
44
|
+
export { InfinityQueryTriggerDirective };
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
|
|
46
|
+
type: Directive,
|
|
47
|
+
args: [{
|
|
48
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
49
|
+
selector: '[etInfinityQueryTrigger], et-infinity-query-trigger',
|
|
50
|
+
standalone: true,
|
|
51
|
+
}]
|
|
52
|
+
}], propDecorators: { scrollContainerSelector: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}] } });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0eS1xdWVyeS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRWxFLE1BS2EsNkJBQTZCO0lBTDFDO1FBTVUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztRQUM5QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTlDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ2xDLGNBQVMsR0FBZ0MsSUFBSSxDQUFDO1FBRXRELFdBQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFHNUQsNEJBQXVCLEdBQWtCLElBQUksQ0FBQztLQW9DL0M7SUFsQ0MsUUFBUTtRQUNOLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTVGLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ2hHO2FBQU07WUFDTCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLG9CQUFvQixDQUN2QyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpCLElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNwQztRQUNILENBQUMsRUFDRDtZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDaEcsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQzs4R0E3Q1UsNkJBQTZCO2tHQUE3Qiw2QkFBNkI7O1NBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUx6QyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLHFEQUFxRDtvQkFDL0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQVdDLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTkZJTklUWV9RVUVSWV9UT0tFTiB9IGZyb20gJy4vaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW2V0SW5maW5pdHlRdWVyeVRyaWdnZXJdLCBldC1pbmZpbml0eS1xdWVyeS10cmlnZ2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICBwcml2YXRlIF9pbmZpbml0eVF1ZXJ5ID0gaW5qZWN0KElORklOSVRZX1FVRVJZX1RPS0VOKTtcblxuICBwcml2YXRlIF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBfb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY2xpY2skID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJyk7XG5cbiAgQElucHV0KClcbiAgc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdldEluZmluaXR5UXVlcnlUcmlnZ2VyJyk7XG5cbiAgICBpZiAoaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgdGhpcy5jbGljayQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9pbmZpbml0eVF1ZXJ5LmxvYWROZXh0UGFnZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9kZXN0cm95LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG5cbiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLl9pbmZpbml0eVF1ZXJ5LmNvbnRleHQubG9hZGluZykge1xuICAgICAgICAgIHRoaXMuX2luZmluaXR5UXVlcnkubG9hZE5leHRQYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJvb3Q6IHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpIDogbnVsbCxcbiAgICAgICAgcm9vdE1hcmdpbjogJzBweCcsXG4gICAgICAgIHRocmVzaG9sZDogWzAuMjUsIDAuNSwgMC43NSwgMV0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { ChangeDetectorRef, Directive, ErrorHandler, inject, InjectionToken, Input, TemplateRef, ViewContainerRef, } from '@angular/core';
|
|
3
|
+
import { createDestroy, DelayableDirective } 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
|
+
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$ = createDestroy();
|
|
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
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
159
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
|
|
160
|
+
}
|
|
161
|
+
export { InfinityQueryDirective };
|
|
162
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: InfinityQueryDirective, decorators: [{
|
|
163
|
+
type: Directive,
|
|
164
|
+
args: [{
|
|
165
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
166
|
+
selector: '[etInfinityQuery]',
|
|
167
|
+
exportAs: 'etInfinityQuery',
|
|
168
|
+
standalone: true,
|
|
169
|
+
providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }],
|
|
170
|
+
hostDirectives: [DelayableDirective],
|
|
171
|
+
}]
|
|
172
|
+
}], propDecorators: { infinityQuery: [{
|
|
173
|
+
type: Input,
|
|
174
|
+
args: ['etInfinityQuery']
|
|
175
|
+
}] } });
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFFLGFBQWEsRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDOzs7QUFzQmxCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUE4QixzQkFBc0IsQ0FBQyxDQUFDO0FBRTVHLE1BUWEsc0JBQXNCO0lBUm5DO1FBWW1CLHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDOUMsaUJBQVksR0FBNEI7WUFDdkQsU0FBUyxFQUFFLElBQUk7WUFDZixlQUFlLEVBQUUsSUFBSTtZQUNyQixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxJQUFJO1lBRVgsV0FBVyxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIscUJBQXFCLEVBQUUs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QUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRW5DLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXRDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7OEdBbE1VLHNCQUFzQjtrR0FBdEIsc0JBQXNCLGlJQUh0QixDQUFDLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxDQUFDOztTQUd4RSxzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFSbEMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLHdCQUF3QixFQUFFLENBQUM7b0JBQ25GLGNBQWMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNyQzs4QkFvQ0ssYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFcnJvckhhbmRsZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIERlbGF5YWJsZURpcmVjdGl2ZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBza2lwLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluZmluaXR5UXVlcnksIEluZmluaXR5UXVlcnlDb25maWcsIEluZmluaXR5UXVlcnlPZiB9IGZyb20gJy4uL2luZmluaXRlLXF1ZXJ5JztcbmltcG9ydCB7XG4gIEJhc2VBcmd1bWVudHMsXG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHN3aXRjaFF1ZXJ5U3RhdGUsXG59IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgQ29uc3RydWN0UXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5pbnRlcmZhY2UgSW5maW5pdHlRdWVyeUNvbnRleHQ8XG4gIFEgZXh0ZW5kcyBJbmZpbml0eVF1ZXJ5Q29uZmlnPEFueVF1ZXJ5Q3JlYXRvciwgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCwgYW55LCB1bmtub3duW10+LFxuPiB7XG4gICRpbXBsaWNpdDogUVsncmVzcG9uc2UnXVsnYXJyYXlUeXBlJ10gfCBudWxsO1xuICBldEluZmluaXR5UXVlcnk6IFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IFJlcXVlc3RFcnJvcjx1bmtub3duPiB8IG51bGw7XG5cbiAgaXNGaXJzdExvYWQ6IGJvb2xlYW47XG4gIGNhbkxvYWRNb3JlOiBib29sZWFuO1xuICBjdXJyZW50UGFnZTogbnVtYmVyIHwgbnVsbDtcbiAgY3VycmVudENhbGN1bGF0ZWRQYWdlOiBudW1iZXIgfCBudWxsO1xuICB0b3RhbFBhZ2VzOiBudW1iZXIgfCBudWxsO1xuICBpdGVtc1BlclBhZ2U6IG51bWJlciB8IG51bGw7XG5cbiAgY3VycmVudFF1ZXJ5OiBDb25zdHJ1Y3RRdWVyeTxRWydxdWVyeUNyZWF0b3InXT4gfCBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgSU5GSU5JVFlfUVVFUllfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48SW5maW5pdHlRdWVyeURpcmVjdGl2ZTxhbnk+PignSU5GSU5JVFlfUVVFUllfVE9LRU4nKTtcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW2V0SW5maW5pdHlRdWVyeV0nLFxuICBleHBvcnRBczogJ2V0SW5maW5pdHlRdWVyeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSU5GSU5JVFlfUVVFUllfVE9LRU4sIHVzZUV4aXN0aW5nOiBJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlIH1dLFxuICBob3N0RGlyZWN0aXZlczogW0RlbGF5YWJsZURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIEluZmluaXR5UXVlcnlEaXJlY3RpdmU8XG4gIFEgZXh0ZW5kcyBJbmZpbml0eVF1ZXJ5Q29uZmlnPEFueVF1ZXJ5Q3JlYXRvciwgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCwgYW55LCB1bmtub3duW10+LFxuPiBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyeUNvbmZpZ0NoYW5nZWQkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRleHQ6IEluZmluaXR5UXVlcnlDb250ZXh0PFE+ID0ge1xuICAgICRpbXBsaWNpdDogbnVsbCxcbiAgICBldEluZmluaXR5UXVlcnk6IG51bGwsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgZXJyb3I6IG51bGwsXG5cbiAgICBpc0ZpcnN0TG9hZDogZmFsc2UsXG4gICAgY2FuTG9hZE1vcmU6IGZhbHNlLFxuICAgIGN1cnJlbnRQYWdlOiBudWxsLFxuICAgIGN1cnJlbnRDYWxjdWxhdGVkUGFnZTogbnVsbCxcbiAgICB0b3RhbFBhZ2VzOiBudWxsLFxuICAgIGl0ZW1zUGVyUGFnZTogbnVsbCxcblxuICAgIGN1cnJlbnRRdWVyeTogbnVsbCxcbiAgfTtcbiAgcHJpdmF0ZSBfaW5maW5pdHlRdWVyeUluc3RhbmNlOiBJbmZpbml0eVF1ZXJ5T2Y8UT4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFpblRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPEluZmluaXR5UXVlcnlDb250ZXh0PFE+Pik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vycm9ySGFuZGxlciA9IGluamVjdChFcnJvckhhbmRsZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWxheWFibGUgPSBpbmplY3QoRGVsYXlhYmxlRGlyZWN0aXZlLCB7IGhvc3Q6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddPihbXSk7XG5cbiAgcHJpdmF0ZSBfZGlkUmVjZWl2ZUZpcnN0RGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfaXNNYWluVmlld0NyZWF0ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2V0SW5maW5pdHlRdWVyeScpXG4gIGdldCBpbmZpbml0eVF1ZXJ5KCk6IFEge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0eVF1ZXJ5O1xuICB9XG4gIHNldCBpbmZpbml0eVF1ZXJ5KHY6IFEpIHtcbiAgICB0aGlzLl9jbGVhbnVwKCk7XG5cbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5ID0gdjtcbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UgPSB0aGlzLl9zZXR1cEluZmluaXR5UXVlcnkodik7XG4gICAgdGhpcy5sb2FkTmV4dFBhZ2UoKTtcbiAgfVxuICBwcml2YXRlIF9pbmZpbml0eVF1ZXJ5ITogUTtcblxuICBnZXQgY29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0NvbnRleHQ7XG4gIH1cblxuICBnZXQgaW5zdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZTtcbiAgfVxuXG4gIGdldCBkYXRhJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFxuICAgIFEgZXh0ZW5kcyBJbmZpbml0eVF1ZXJ5Q29uZmlnPEFueVF1ZXJ5Q3JlYXRvciwgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCwgYW55LCB1bmtub3duW10+LFxuICA+KGRpcjogSW5maW5pdHlRdWVyeURpcmVjdGl2ZTxRPiwgY3R4OiB1bmtub3duKTogY3R4IGlzIEluZmluaXR5UXVlcnlDb250ZXh0PFE+IHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlck1haW5WaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEluZmluaXR5UXVlcnkoY29uZmlnOiBRKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgSW5maW5pdHlRdWVyeShjb25maWcpIGFzIEluZmluaXR5UXVlcnlPZjxRPjtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgaW5zdGFuY2UuY3VycmVudFF1ZXJ5JC5waXBlKHN3aXRjaFF1ZXJ5U3RhdGUoKSwgd2l0aExhdGVzdEZyb20oaW5zdGFuY2UuY3VycmVudFF1ZXJ5JCkpLFxuICAgICAgdGhpcy5fZGVsYXlhYmxlLmlzRGVsYXllZCQsXG4gICAgICB0aGlzLl9kaWRSZWNlaXZlRmlyc3REYXRhJCxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW1tzdGF0ZSwgY3VycmVudFF1ZXJ5XSwgaXNEZWxheWVkLCBkaWRSZWNlaXZlRmlyc3REYXRhXSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRQYWdlID0gaW5zdGFuY2UuY3VycmVudFBhZ2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQudG90YWxQYWdlcyA9IGluc3RhbmNlLnRvdGFsUGFnZXM7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gaW5zdGFuY2UuaXRlbXNQZXJQYWdlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmNhbkxvYWRNb3JlID1cbiAgICAgICAgICAgIChpbnN0YW5jZS50b3RhbFBhZ2VzICYmIGluc3RhbmNlLmN1cnJlbnRQYWdlICYmIGluc3RhbmNlLnRvdGFsUGFnZXMgPiBpbnN0YW5jZS5jdXJyZW50UGFnZSkgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudENhbGN1bGF0ZWRQYWdlID0gaW5zdGFuY2UuY3VycmVudENhbGN1bGF0ZWRQYWdlO1xuXG4gICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFF1ZXJ5ID0gY3VycmVudFF1ZXJ5O1xuXG4gICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcoc3RhdGUpIHx8IGlzRGVsYXllZCB8fCAoIWRpZFJlY2VpdmVGaXJzdERhdGEgJiYgaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gdGhpcy5jb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9PT0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IHN0YXRlLmVycm9yO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihzdGF0ZS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXNGaXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRJbmZpbml0eVF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jYW5Mb2FkTW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnRvdGFsUGFnZXMgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UXVlcnkgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLl9kYXRhJC5uZXh0KFtdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fcXVlcnlDb25maWdDaGFuZ2VkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpbnN0YW5jZS5kYXRhJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IGRhdGEgYXMgUVsncmVzcG9uc2UnXVsnYXJyYXlUeXBlJ10gfCBudWxsO1xuICAgICAgICAgIHRoaXMuX2RhdGEkLm5leHQoZGF0YSk7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX2RpZFJlY2VpdmVGaXJzdERhdGEkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZFJlY2VpdmVGaXJzdERhdGEkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3F1ZXJ5Q29uZmlnQ2hhbmdlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCkge1xuICAgIGlmICghdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2UubmV4dFBhZ2UoKTtcbiAgfVxuXG4gIHJlc2V0KG5ld0NvbmZpZz86IE9taXQ8USwgJ3F1ZXJ5Q3JlYXRvcicgfCAncmVzcG9uc2UnPikge1xuICAgIGlmICghdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlLnJlc2V0KG5ld0NvbmZpZyBhcyBhbnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTWFpblZpZXcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc01haW5WaWV3Q3JlYXRlZCkge1xuICAgICAgdGhpcy5faXNNYWluVmlld0NyZWF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fbWFpblRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cCgpIHtcbiAgICB0aGlzLl9xdWVyeUNvbmZpZ0NoYW5nZWQkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuJGltcGxpY2l0ID0gbnVsbDtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UGFnZSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuaXRlbXNQZXJQYWdlID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC50b3RhbFBhZ2VzID0gbnVsbDtcblxuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRRdWVyeSA9IG51bGw7XG5cbiAgICB0aGlzLl9kYXRhJC5uZXh0KFtdKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
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
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: QueryDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ErrorHandler }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
96
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
|
|
97
|
+
}
|
|
98
|
+
export { QueryDirective };
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: QueryDirective, decorators: [{
|
|
100
|
+
type: Directive,
|
|
101
|
+
args: [{
|
|
102
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
103
|
+
selector: '[etQuery]',
|
|
104
|
+
standalone: true,
|
|
105
|
+
}]
|
|
106
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i0.ErrorHandler }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { query: [{
|
|
107
|
+
type: Input,
|
|
108
|
+
args: ['etQuery']
|
|
109
|
+
}], cache: [{
|
|
110
|
+
type: Input,
|
|
111
|
+
args: ['etQueryCache']
|
|
112
|
+
}] } });
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWdCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBS0wsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsbUJBQW1CLEdBQ3BCLE1BQU0sVUFBVSxDQUFDOztBQWFsQixNQUthLGNBQWM7SUFhekIsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFJO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBVTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBR0QsWUFDVSxnQkFBdUQsRUFDdkQsaUJBQW1DLEVBQ25DLGFBQTJCLEVBQzNCLElBQXVCO1FBSHZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUM7UUFDdkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXBDekIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLGtCQUFhLEdBQXdCLElBQUksQ0FBQztRQUVqQyxpQkFBWSxHQUE2QjtZQUN4RCxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQW9CTSxXQUFNLEdBQUcsS0FBSyxDQUFDO0lBT3BCLENBQUM7SUFFSixNQUFNLENBQUMsc0JBQXNCLENBQzNCLEdBQXNCLEVBQ3RCLEdBQVk7UUFFWixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVsRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRW5GLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBaUI7UUFDbkMsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7WUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQztTQUN6RzthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDbkM7UUFFRCxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFtQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFtQyxDQUFDO1NBQ3pFO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUNwQztRQUVELElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUV0QyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JGO0lBQ0gsQ0FBQzs4R0EvR1UsY0FBYztrR0FBZCxjQUFjOztTQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFMMUIsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxXQUFXO29CQUNyQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7NExBZUssS0FBSztzQkFEUixLQUFLO3VCQUFDLFNBQVM7Z0JBWVosS0FBSztzQkFEUixLQUFLO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFcnJvckhhbmRsZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFueVF1ZXJ5LFxuICBBbnlRdWVyeUNvbGxlY3Rpb24sXG4gIFF1ZXJ5T2YsXG4gIFF1ZXJ5U3RhdGUsXG4gIGlzUXVlcnksXG4gIGlzUXVlcnlTdGF0ZUZhaWx1cmUsXG4gIGlzUXVlcnlTdGF0ZUxvYWRpbmcsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG59IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5RGF0YU9mIH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IsIFJlcXVlc3RQcm9ncmVzcyB9IGZyb20gJy4uL3JlcXVlc3QnO1xuXG5pbnRlcmZhY2UgUXVlcnlDb250ZXh0PFEgZXh0ZW5kcyBBbnlRdWVyeSB8IG51bGw+IHtcbiAgJGltcGxpY2l0OiBRdWVyeURhdGFPZjxRPiB8IG51bGw7XG4gIGV0UXVlcnk6IFF1ZXJ5RGF0YU9mPFE+IHwgbnVsbDtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgcmVmcmVzaGluZzogYm9vbGVhbjtcbiAgcHJvZ3Jlc3M6IFJlcXVlc3RQcm9ncmVzcyB8IG51bGw7XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I8dW5rbm93bj4gfCBudWxsO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbZXRRdWVyeV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeURpcmVjdGl2ZTxRIGV4dGVuZHMgQW55UXVlcnkgfCBBbnlRdWVyeUNvbGxlY3Rpb24gfCBudWxsPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfaXNNYWluVmlld0NyZWF0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGV4dDogUXVlcnlDb250ZXh0PFF1ZXJ5T2Y8UT4+ID0ge1xuICAgICRpbXBsaWNpdDogbnVsbCxcbiAgICBldFF1ZXJ5OiBudWxsLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIHJlZnJlc2hpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuICAgIHByb2dyZXNzOiBudWxsLFxuICB9O1xuXG4gIEBJbnB1dCgnZXRRdWVyeScpXG4gIGdldCBxdWVyeSgpOiBRIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gIH1cbiAgc2V0IHF1ZXJ5KHY6IFEpIHtcbiAgICB0aGlzLl9xdWVyeSA9IHY7XG5cbiAgICB0aGlzLl9zdWJzY3JpYmVUb1F1ZXJ5KCk7XG4gIH1cbiAgcHJpdmF0ZSBfcXVlcnkhOiBRO1xuXG4gIEBJbnB1dCgnZXRRdWVyeUNhY2hlJylcbiAgZ2V0IGNhY2hlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZTtcbiAgfVxuICBzZXQgY2FjaGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuX2NhY2hlID0gdjtcbiAgfVxuICBwcml2YXRlIF9jYWNoZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX21haW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8UXVlcnlDb250ZXh0PFF1ZXJ5T2Y8UT4+PixcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgX2Vycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyLFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxRIGV4dGVuZHMgQW55UXVlcnkgfCBBbnlRdWVyeUNvbGxlY3Rpb24gfCBudWxsPihcbiAgICBkaXI6IFF1ZXJ5RGlyZWN0aXZlPFE+LFxuICAgIGN0eDogdW5rbm93bixcbiAgKTogY3R4IGlzIFF1ZXJ5Q29udGV4dDxRdWVyeU9mPFE+PiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJNYWluVmlldygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9RdWVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgIGlmICghdGhpcy5xdWVyeSkge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuJGltcGxpY2l0ID0gbnVsbDtcbiAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0UXVlcnkgPSBudWxsO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQucmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQucHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0gaXNRdWVyeSh0aGlzLnF1ZXJ5KSA/IHRoaXMucXVlcnkgOiB0aGlzLnF1ZXJ5LnF1ZXJ5O1xuXG4gICAgY29uc3Qgc3ViID0gcXVlcnkuc3RhdGUkLnBpcGUodGFwKChzdGF0ZSkgPT4gdGhpcy5fdXBkYXRlVmlldyhzdGF0ZSkpKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IHN1YjtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZpZXcoc3RhdGU6IFF1ZXJ5U3RhdGUpIHtcbiAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyhzdGF0ZSkpIHtcbiAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQucHJvZ3Jlc3MgPSBzdGF0ZS5wcm9ncmVzcyA/PyBudWxsO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQucmVmcmVzaGluZyA9IHN0YXRlLm1ldGEudHJpZ2dlcmVkVmlhID09PSAnYXV0bycgfHwgc3RhdGUubWV0YS50cmlnZ2VyZWRWaWEgPT09ICdwb2xsJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQucmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQucHJvZ3Jlc3MgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSkge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRRdWVyeSA9IHN0YXRlLnJlc3BvbnNlIGFzIFF1ZXJ5RGF0YU9mPFF1ZXJ5T2Y8UT4+O1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuJGltcGxpY2l0ID0gc3RhdGUucmVzcG9uc2UgYXMgUXVlcnlEYXRhT2Y8UXVlcnlPZjxRPj47XG4gICAgfSBlbHNlIGlmICghdGhpcy5jYWNoZSkge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXRRdWVyeSA9IG51bGw7XG4gICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc1F1ZXJ5U3RhdGVGYWlsdXJlKHN0YXRlKSkge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBzdGF0ZS5lcnJvcjtcblxuICAgICAgdGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKHN0YXRlLmVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlck1haW5WaWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNNYWluVmlld0NyZWF0ZWQpIHtcbiAgICAgIHRoaXMuX2lzTWFpblZpZXdDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX21haW5UZW1wbGF0ZVJlZiwgdGhpcy5fdmlld0NvbnRleHQpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { inject, isDevMode } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
+
import { clone, equal } from '@ethlete/core';
|
|
5
|
+
import { BehaviorSubject, combineLatest, concat, debounceTime, distinctUntilChanged, map, pairwise, shareReplay, startWith, take, tap, } from 'rxjs';
|
|
6
|
+
export class QueryField {
|
|
7
|
+
get control() {
|
|
8
|
+
return this.data.control;
|
|
9
|
+
}
|
|
10
|
+
constructor(data) {
|
|
11
|
+
this.data = data;
|
|
12
|
+
this.changes$ = this._setupChangesObservable();
|
|
13
|
+
this._currentDebounceTimeout = null;
|
|
14
|
+
}
|
|
15
|
+
setValue(value, options) {
|
|
16
|
+
if (this._currentDebounceTimeout !== null) {
|
|
17
|
+
clearTimeout(this._currentDebounceTimeout);
|
|
18
|
+
}
|
|
19
|
+
if (this.data.debounce && !options?.skipDebounce) {
|
|
20
|
+
this._currentDebounceTimeout = window.setTimeout(() => {
|
|
21
|
+
this.control.setValue(value);
|
|
22
|
+
}, this.data.debounce);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.control.setValue(value);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
_setupChangesObservable() {
|
|
29
|
+
const obs = this.control.valueChanges.pipe(startWith(this.control.value));
|
|
30
|
+
if (!this.data.debounce) {
|
|
31
|
+
return obs;
|
|
32
|
+
}
|
|
33
|
+
// The initial value should get emitted immediately
|
|
34
|
+
// concat switches to the debounced observable after the first observable is completed
|
|
35
|
+
return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounceTime(this.data.debounce)));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
+
export class QueryForm {
|
|
40
|
+
get _formValue() {
|
|
41
|
+
return this.form.getRawValue();
|
|
42
|
+
}
|
|
43
|
+
get controls() {
|
|
44
|
+
return this.form.controls;
|
|
45
|
+
}
|
|
46
|
+
get value() {
|
|
47
|
+
return this._changes$.value.currentValue;
|
|
48
|
+
}
|
|
49
|
+
constructor(_fields) {
|
|
50
|
+
this._fields = _fields;
|
|
51
|
+
this._router = inject(Router, { optional: true });
|
|
52
|
+
this._activatedRoute = inject(ActivatedRoute, { optional: true });
|
|
53
|
+
this._defaultValues = this._extractDefaultValues();
|
|
54
|
+
this.form = this._setupFormGroup();
|
|
55
|
+
this._changes$ = new BehaviorSubject({
|
|
56
|
+
previousValue: null,
|
|
57
|
+
currentValue: this.form.getRawValue(),
|
|
58
|
+
});
|
|
59
|
+
this.changes$ = this._changes$.asObservable();
|
|
60
|
+
}
|
|
61
|
+
observe(options) {
|
|
62
|
+
return combineLatest(Object.values(this._fields).map((field) => field.changes$)).pipe(map(() => this._formValue), distinctUntilChanged((a, b) => equal(a, b)), tap((values) => {
|
|
63
|
+
if (options?.syncViaUrlQueryParams !== false) {
|
|
64
|
+
this._syncViaUrlQueryParams(values);
|
|
65
|
+
}
|
|
66
|
+
}), pairwise(), startWith([null, this._formValue]), map(([previousValue, currentValue]) => ({ previousValue, currentValue })), tap(({ previousValue, currentValue }) => {
|
|
67
|
+
let didResetValues = false;
|
|
68
|
+
for (const formFieldKey in this._fields) {
|
|
69
|
+
const resets = this._fields[formFieldKey].data.isResetBy;
|
|
70
|
+
if (!resets)
|
|
71
|
+
continue;
|
|
72
|
+
const resetConditionKeys = Array.isArray(resets) ? resets : [resets];
|
|
73
|
+
for (const resetConditionKey of resetConditionKeys) {
|
|
74
|
+
if (!(resetConditionKey in this._fields)) {
|
|
75
|
+
if (isDevMode()) {
|
|
76
|
+
console.warn(`The field "${resetConditionKey}" is not defined in the QueryForm. Is it a typo?`, this);
|
|
77
|
+
}
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (previousValue &&
|
|
81
|
+
currentValue &&
|
|
82
|
+
!equal(previousValue[resetConditionKey], currentValue[resetConditionKey])) {
|
|
83
|
+
const defaultValueForKeyToReset = this._defaultValues[formFieldKey];
|
|
84
|
+
const currentValueForKeyToReset = currentValue[formFieldKey];
|
|
85
|
+
if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);
|
|
89
|
+
didResetValues = true;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (!didResetValues) {
|
|
95
|
+
this._changes$.next({
|
|
96
|
+
previousValue,
|
|
97
|
+
currentValue,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}), shareReplay({ bufferSize: 1, refCount: true }), map(() => null));
|
|
101
|
+
}
|
|
102
|
+
setFormValueFromUrlQueryParams(options) {
|
|
103
|
+
if (!this._activatedRoute) {
|
|
104
|
+
throw new Error('Cannot set form value from url query params without ActivatedRoute');
|
|
105
|
+
}
|
|
106
|
+
const queryParams = this._activatedRoute.snapshot.queryParams;
|
|
107
|
+
for (const [key, field] of Object.entries(this._fields)) {
|
|
108
|
+
const value = queryParams[key];
|
|
109
|
+
// We only check using == because the value types can be different (e.g. "1" and 1)
|
|
110
|
+
if (value === undefined || value == field.control.value) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const deserializedValue = field.data.queryParamToValueTransformFn?.(value) ?? value;
|
|
114
|
+
field.setValue(deserializedValue, { skipDebounce: options?.skipDebounce ?? true });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
updateFormOnUrlQueryParamsChange() {
|
|
118
|
+
if (!this._activatedRoute) {
|
|
119
|
+
throw new Error('Cannot update form on url query params change without ActivatedRoute');
|
|
120
|
+
}
|
|
121
|
+
return this._activatedRoute.queryParams.pipe(tap(() => this.setFormValueFromUrlQueryParams()));
|
|
122
|
+
}
|
|
123
|
+
_getDefaultValue(key) {
|
|
124
|
+
return this._defaultValues[key] ?? null;
|
|
125
|
+
}
|
|
126
|
+
_isDefaultValue(key, value) {
|
|
127
|
+
const normalizedValue = Array.isArray(value) ? JSON.stringify(value) : value;
|
|
128
|
+
return this._getDefaultValue(key) === normalizedValue;
|
|
129
|
+
}
|
|
130
|
+
_setupFormGroup() {
|
|
131
|
+
const group = new FormGroup({});
|
|
132
|
+
for (const [key, field] of Object.entries(this._fields)) {
|
|
133
|
+
group.addControl(key, field.control);
|
|
134
|
+
}
|
|
135
|
+
return group;
|
|
136
|
+
}
|
|
137
|
+
_extractDefaultValues() {
|
|
138
|
+
const defaultValues = {};
|
|
139
|
+
for (const [key, field] of Object.entries(this._fields)) {
|
|
140
|
+
const value = field.control.value;
|
|
141
|
+
if (value === null || value === undefined) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (Array.isArray(value)) {
|
|
145
|
+
defaultValues[key] = JSON.stringify(value);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
defaultValues[key] = value;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return defaultValues;
|
|
152
|
+
}
|
|
153
|
+
_syncViaUrlQueryParams(values) {
|
|
154
|
+
if (!this._router || !this._activatedRoute) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const queryParams = { ...clone(this._activatedRoute.snapshot.queryParams) };
|
|
158
|
+
for (const [key, value] of Object.entries(values)) {
|
|
159
|
+
if (this._isDefaultValue(key, value) || this._fields[key].data.appendToUrl === false) {
|
|
160
|
+
delete queryParams[key];
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
queryParams[key] = this._fields[key].data.valueToQueryParamTransformFn
|
|
164
|
+
? this._fields[key].data.valueToQueryParamTransformFn?.(value)
|
|
165
|
+
: value;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
this._router.navigate([], {
|
|
169
|
+
queryParams,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFTZCxNQUFNLE9BQU8sVUFBVTtJQUdyQixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFJRCxZQUFtQixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtRQVI3QyxhQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFNbEMsNEJBQXVCLEdBQWtCLElBQUksQ0FBQztJQUVOLENBQUM7SUFFakQsUUFBUSxDQUFDLEtBQWUsRUFBRSxPQUFvQztRQUM1RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLEVBQUU7WUFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7WUFDaEQs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RUFBRTtnQkFDcEYsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QjtvQkFDcEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsS0FBSyxDQUFDO29CQUM5RCxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ1g7U0FDRjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUN4QixXQUFXO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY2xvbmUsIGVxdWFsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGNvbmNhdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBwYWlyd2lzZSxcbiAgc2hhcmVSZXBsYXksXG4gIHN0YXJ0V2l0aCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFF1ZXJ5RmllbGRPcHRpb25zLFxuICBRdWVyeUZvcm1Hcm91cCxcbiAgUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybVZhbHVlLFxuICBRdWVyeUZvcm1WYWx1ZUV2ZW50LFxufSBmcm9tICcuL3F1ZXJ5LWZvcm0udHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlGaWVsZDxUPiB7XG4gIGNoYW5nZXMkID0gdGhpcy5fc2V0dXBDaGFuZ2VzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIHByaXZhdGUgX2N1cnJlbnREZWJvdW5jZVRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxUPikge31cblxuICBzZXRWYWx1ZSh2YWx1ZTogVCB8IG51bGwsIG9wdGlvbnM/OiB7IHNraXBEZWJvdW5jZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50RGVib3VuY2VUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY3VycmVudERlYm91bmNlVGltZW91dCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5kZWJvdW5jZSAmJiAhb3B0aW9ucz8uc2tpcERlYm91bmNlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50RGVib3VuY2VUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgfSwgdGhpcy5kYXRhLmRlYm91bmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENoYW5nZXNPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IG9icyA9IHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5jb250cm9sLnZhbHVlKSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5kZWJvdW5jZSkge1xuICAgICAgcmV0dXJuIG9icztcbiAgICB9XG5cbiAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBzaG91bGQgZ2V0IGVtaXR0ZWQgaW1tZWRpYXRlbHlcbiAgICAvLyBjb25jYXQgc3dpdGNoZXMgdG8gdGhlIGRlYm91bmNlZCBvYnNlcnZhYmxlIGFmdGVyIHRoZSBmaXJzdCBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZFxuICAgIHJldHVybiBjb25jYXQob2JzLnBpcGUodGFrZSgxKSksIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kYXRhLmRlYm91bmNlKSkpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgUXVlcnlGb3JtPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBRdWVyeUZpZWxkPGFueT4+PiB7XG4gIHByaXZhdGUgX3JvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzID0gdGhpcy5fZXh0cmFjdERlZmF1bHRWYWx1ZXMoKTtcblxuICBmb3JtID0gdGhpcy5fc2V0dXBGb3JtR3JvdXAoKTtcblxuICBwcml2YXRlIGdldCBfZm9ybVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZUV2ZW50PFQ+Pih7XG4gICAgcHJldmlvdXNWYWx1ZTogbnVsbCxcbiAgICBjdXJyZW50VmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+LFxuICB9KTtcblxuICByZWFkb25seSBjaGFuZ2VzJCA9IHRoaXMuX2NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCBjb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VzJC52YWx1ZS5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWVsZHM6IFQpIHt9XG5cbiAgb2JzZXJ2ZShvcHRpb25zPzogUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChPYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY2hhbmdlcyQpKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHRoaXMuX2Zvcm1WYWx1ZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICAgdGFwKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnN5bmNWaWFVcmxRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXModmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgc3RhcnRXaXRoKFtudWxsLCB0aGlzLl9mb3JtVmFsdWVdIGFzIGNvbnN0KSxcbiAgICAgIG1hcCgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+ICh7IHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSB9KSksXG4gICAgICB0YXAoKHsgcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlIH0pID0+IHtcbiAgICAgICAgbGV0IGRpZFJlc2V0VmFsdWVzID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBmb3JtRmllbGRLZXkgaW4gdGhpcy5fZmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgcmVzZXRzID0gdGhpcy5fZmllbGRzW2Zvcm1GaWVsZEtleV0uZGF0YS5pc1Jlc2V0Qnk7XG5cbiAgICAgICAgICBpZiAoIXJlc2V0cykgY29udGludWU7XG5cbiAgICAgICAgICBjb25zdCByZXNldENvbmRpdGlvbktleXMgPSBBcnJheS5pc0FycmF5KHJlc2V0cykgPyByZXNldHMgOiBbcmVzZXRzXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgcmVzZXRDb25kaXRpb25LZXkgb2YgcmVzZXRDb25kaXRpb25LZXlzKSB7XG4gICAgICAgICAgICBpZiAoIShyZXNldENvbmRpdGlvbktleSBpbiB0aGlzLl9maWVsZHMpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIGZpZWxkIFwiJHtyZXNldENvbmRpdGlvbktleX1cIiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgUXVlcnlGb3JtLiBJcyBpdCBhIHR5cG8/YCwgdGhpcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlICYmXG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgICAgICAhZXF1YWwocHJldmlvdXNWYWx1ZVtyZXNldENvbmRpdGlvbktleV0sIGN1cnJlbnRWYWx1ZVtyZXNldENvbmRpdGlvbktleV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCA9IHRoaXMuX2RlZmF1bHRWYWx1ZXNbZm9ybUZpZWxkS2V5XTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCA9IGN1cnJlbnRWYWx1ZVtmb3JtRmllbGRLZXldO1xuXG4gICAgICAgICAgICAgIGlmIChlcXVhbChkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0LCBjdXJyZW50VmFsdWVGb3JLZXlUb1Jlc2V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2Zvcm1GaWVsZEtleV0uc2V0VmFsdWUoZGVmYXVsdFZhbHVlRm9yS2V5VG9SZXNldCk7XG5cbiAgICAgICAgICAgICAgZGlkUmVzZXRWYWx1ZXMgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkUmVzZXRWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VzJC5uZXh0KHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICAgIG1hcCgoKSA9PiBudWxsKSxcbiAgICApO1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKG9wdGlvbnM/OiB7IHNraXBEZWJvdW5jZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5fYWN0aXZhdGVkUm91dGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBmb3JtIHZhbHVlIGZyb20gdXJsIHF1ZXJ5IHBhcmFtcyB3aXRob3V0IEFjdGl2YXRlZFJvdXRlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlQYXJhbXNba2V5XTtcblxuICAgICAgLy8gV2Ugb25seSBjaGVjayB1c2luZyA9PSBiZWNhdXNlIHRoZSB2YWx1ZSB0eXBlcyBjYW4gYmUgZGlmZmVyZW50IChlLmcuIFwiMVwiIGFuZCAxKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gZmllbGQuY29udHJvbC52YWx1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVzZXJpYWxpemVkVmFsdWUgPSBmaWVsZC5kYXRhLnF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4/Lih2YWx1ZSkgPz8gdmFsdWU7XG5cbiAgICAgIGZpZWxkLnNldFZhbHVlKGRlc2VyaWFsaXplZFZhbHVlLCB7IHNraXBEZWJvdW5jZTogb3B0aW9ucz8uc2tpcERlYm91bmNlID8/IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRm9ybU9uVXJsUXVlcnlQYXJhbXNDaGFuZ2UoKSB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXBkYXRlIGZvcm0gb24gdXJsIHF1ZXJ5IHBhcmFtcyBjaGFuZ2Ugd2l0aG91dCBBY3RpdmF0ZWRSb3V0ZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5waXBlKHRhcCgoKSA9PiB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcygpKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlc1trZXldID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9pc0RlZmF1bHRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSBub3JtYWxpemVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe30gYXMgUXVlcnlGb3JtR3JvdXA8VD4pO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZpZWxkLmNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIHByaXZhdGUgX2V4dHJhY3REZWZhdWx0VmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jVmlhVXJsUXVlcnlQYXJhbXModmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICAgIGlmICghdGhpcy5fcm91dGVyIHx8ICF0aGlzLl9hY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5jbG9uZSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgIGlmICh0aGlzLl9pc0RlZmF1bHRWYWx1ZShrZXksIHZhbHVlKSB8fCB0aGlzLl9maWVsZHNba2V5XS5kYXRhLmFwcGVuZFRvVXJsID09PSBmYWxzZSkge1xuICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSB0aGlzLl9maWVsZHNba2V5XS5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm5cbiAgICAgICAgICA/IHRoaXMuX2ZpZWxkc1trZXldLmRhdGEudmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1Gbj8uKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUXVlcnlGaWVsZCB9IGZyb20gJy4vcXVlcnktZm9ybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZE9wdGlvbnM8VCA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIERlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZGVib3VuY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgZm9yIHRoZSBmaWVsZC5cbiAgICovXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sPFQgfCBudWxsPjtcblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBmaWVsZCdzIHZhbHVlIHRvIHRoZSB1cmwuXG4gICAqXG4gICAqIFRoZSBmaWVsZCB3b250IGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICogLSBJdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiAtIEl0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgKiAtIEl0IGlzIGBudWxsYFxuICAgKiAtIEl0IGlzIGB1bmRlZmluZWRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVuZFRvVXJsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpZWxkJ3MgdmFsdWUgdG8gdGhlIGRlZmF1bHQgdmFsdWUgaWYgb25lIG9yIG1vcmUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZHMgYXJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEdpdmVuIHRoaXMgZmllbGQgaXMgYSBgcGFnZWAgZmllbGQsIHRoZSBmaWVsZCB3aWxsIGJlIHJlc2V0IGlmIHRoZSBgbGltaXRgLCBgcXVlcnlgIG9yIGBzZWFyY2hgIGZpZWxkcyBhcmUgY2hhbmdlZC5cbiAgICogWydsaW1pdCcsICdxdWVyeScsICdzZWFyY2gnXVxuICAgKi9cbiAgaXNSZXNldEJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSB0aGUgdmFsdWUgZ290dGVuIGZyb20gdGhlIHVybCBxdWVyeSBwYXJhbXMgdG8gYSB2YWx1ZSByZXF1aXJlZCBieSB0aGUgZmllbGQuXG4gICAqIEUuZy4gZm9yIGEgbnVtYmVyIGZpZWxkLCB0aGUgdmFsdWUgZnJvbSB0aGUgdXJsIHF1ZXJ5IHBhcmFtcyBpcyBhIHN0cmluZywgYnV0IHRoZSBmaWVsZCByZXF1aXJlcyBhIG51bWJlci5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBjb21tb24gdHJhbnNmb3JtYXRpb25zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkOlxuICAgKiAtIGB0cmFuc2Zvcm1Ub1N0cmluZ2BcbiAgICogLSBgdHJhbnNmb3JtVG9TdHJpbmdBcnJheWBcbiAgICogLSBgdHJhbnNmb3JtVG9OdW1iZXJgXG4gICAqIC0gYHRyYW5zZm9ybVRvTnVtYmVyQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvQm9vbGVhbmBcbiAgICogLSBgdHJhbnNmb3JtVG9Cb29sZWFuQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvRGF0ZWAgKGV4cGVjdHMgYSBzdHJpbmcgaW4gdGhlIGRlZmF1bHQganMgZm9ybWF0KVxuICAgKiAtIGB0cmFuc2Zvcm1Ub0RhdGVBcnJheWAgKGV4cGVjdHMgc3RyaW5ncyBpbiB0aGUgZGVmYXVsdCBqcyBmb3JtYXQpXG4gICAqIC0gYHRyYW5zZm9ybVRvU29ydGAgKGV4cGVjdHMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCBgZmllbGQ6ZGlyZWN0aW9uYClcbiAgICovXG4gIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4/OiAodmFsOiB1bmtub3duKSA9PiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB0byBhIHZhbHVlIHRoYXQgY2FuIGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgcXVlcnkgcGFyYW1zLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbW1vbiB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFscmVhZHkgaW1wbGVtZW50ZWQ6XG4gICAqIC0gYHRyYW5zZm9ybVRvU29ydFF1ZXJ5UGFyYW1gIChyZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGBmaWVsZGAgYW5kIGBkaXJlY3Rpb25gIHByb3BlcnRpZXMpXG4gICAqL1xuICB2YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuPzogKHZhbDogVCB8IG51bGwpID0+IHVua25vd247XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1Hcm91cDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1WYWx1ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUXVlcnlGaWVsZCB9IGZyb20gJy4vcXVlcnktZm9ybSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGaWVsZE9wdGlvbnM8VCA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIERlYm91bmNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZGVib3VuY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgZm9yIHRoZSBmaWVsZC5cbiAgICovXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sPFQgfCBudWxsPjtcblxuICAvKipcbiAgICogQXBwZW5kIHRoZSBmaWVsZCdzIHZhbHVlIHRvIHRoZSB1cmwuXG4gICAqXG4gICAqIFRoZSBmaWVsZCB3b250IGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICogLSBJdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgKiAtIEl0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgKiAtIEl0IGlzIGBudWxsYFxuICAgKiAtIEl0IGlzIGB1bmRlZmluZWRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVuZFRvVXJsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpZWxkJ3MgdmFsdWUgdG8gdGhlIGRlZmF1bHQgdmFsdWUgaWYgb25lIG9yIG1vcmUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZHMgYXJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEdpdmVuIHRoaXMgZmllbGQgaXMgYSBgcGFnZWAgZmllbGQsIHRoZSBmaWVsZCB3aWxsIGJlIHJlc2V0IGlmIHRoZSBgbGltaXRgLCBgcXVlcnlgIG9yIGBzZWFyY2hgIGZpZWxkcyBhcmUgY2hhbmdlZC5cbiAgICogWydsaW1pdCcsICdxdWVyeScsICdzZWFyY2gnXVxuICAgKi9cbiAgaXNSZXNldEJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0cmFuc2Zvcm1zIHRoZSB0aGUgdmFsdWUgZ290dGVuIGZyb20gdGhlIHVybCBxdWVyeSBwYXJhbXMgdG8gYSB2YWx1ZSByZXF1aXJlZCBieSB0aGUgZmllbGQuXG4gICAqIEUuZy4gZm9yIGEgbnVtYmVyIGZpZWxkLCB0aGUgdmFsdWUgZnJvbSB0aGUgdXJsIHF1ZXJ5IHBhcmFtcyBpcyBhIHN0cmluZywgYnV0IHRoZSBmaWVsZCByZXF1aXJlcyBhIG51bWJlci5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBjb21tb24gdHJhbnNmb3JtYXRpb25zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkOlxuICAgKiAtIGB0cmFuc2Zvcm1Ub1N0cmluZ2BcbiAgICogLSBgdHJhbnNmb3JtVG9TdHJpbmdBcnJheWBcbiAgICogLSBgdHJhbnNmb3JtVG9OdW1iZXJgXG4gICAqIC0gYHRyYW5zZm9ybVRvTnVtYmVyQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvQm9vbGVhbmBcbiAgICogLSBgdHJhbnNmb3JtVG9Cb29sZWFuQXJyYXlgXG4gICAqIC0gYHRyYW5zZm9ybVRvRGF0ZWAgKGV4cGVjdHMgYSBzdHJpbmcgaW4gdGhlIGRlZmF1bHQganMgZm9ybWF0KVxuICAgKiAtIGB0cmFuc2Zvcm1Ub0RhdGVBcnJheWAgKGV4cGVjdHMgc3RyaW5ncyBpbiB0aGUgZGVmYXVsdCBqcyBmb3JtYXQpXG4gICAqIC0gYHRyYW5zZm9ybVRvU29ydGAgKGV4cGVjdHMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCBgZmllbGQ6ZGlyZWN0aW9uYClcbiAgICovXG4gIHF1ZXJ5UGFyYW1Ub1ZhbHVlVHJhbnNmb3JtRm4/OiAodmFsOiB1bmtub3duKSA9PiBUIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHRyYW5zZm9ybXMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB0byBhIHZhbHVlIHRoYXQgY2FuIGJlIGFwcGVuZGVkIHRvIHRoZSB1cmwgcXVlcnkgcGFyYW1zLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbW1vbiB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFscmVhZHkgaW1wbGVtZW50ZWQ6XG4gICAqIC0gYHRyYW5zZm9ybVRvU29ydFF1ZXJ5UGFyYW1gIChyZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGBmaWVsZGAgYW5kIGBkaXJlY3Rpb25gIHByb3BlcnRpZXMpXG4gICAqL1xuICB2YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuPzogKHZhbDogVCB8IG51bGwpID0+IHVua25vd247XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1Hcm91cDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBRdWVyeUZvcm1WYWx1ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4gPSB7XG4gIFtQcm9wZXJ0eSBpbiBrZXlvZiBUXTogVFtQcm9wZXJ0eV1bJ2NvbnRyb2wnXVsndmFsdWUnXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZm9ybSB2YWx1ZSBzaG91bGQgYmUgc3luY2VkIHRvIHRoZSB1cmwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgc3luY1ZpYVVybFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlGb3JtVmFsdWVFdmVudDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUXVlcnlGaWVsZDxhbnk+Pj4ge1xuICBwcmV2aW91c1ZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPiB8IG51bGw7XG4gIGN1cnJlbnRWYWx1ZTogUXVlcnlGb3JtVmFsdWU8VD47XG59XG4iXX0=
|