@anexia/ngx-loading-tools
Version:
This library provides a toolset for common loading state management, by providing hackable Loading Strategies and a Http Interceptor.
33 lines • 5.26 kB
JavaScript
import { __decorate } from "tslib";
import { BehaviorSubject, of } from "rxjs";
import { Memoize } from "typescript-memoize";
import { distinctUntilChanged, shareReplay, switchMap } from "rxjs/operators";
export class DistinctLoadingHandler {
constructor(selector) {
this.selector = selector;
this._loadingStateSubject = new BehaviorSubject({});
}
start(request) {
this._updateState(this.selector(request), true);
}
stop(request) {
this._updateState(this.selector(request), false);
}
isLoading$(requestSelector) {
return this._loadingStateSubject.asObservable().pipe(switchMap(currentState => {
if (!currentState.hasOwnProperty(requestSelector)) {
return of(false);
}
return of(currentState[requestSelector]);
}), distinctUntilChanged(), shareReplay(1));
}
_updateState(requestId, value) {
const currentState = this._loadingStateSubject.getValue();
const newState = Object.assign(Object.assign({}, currentState), { [requestId]: value });
this._loadingStateSubject.next(newState);
}
}
__decorate([
Memoize((requestSelector) => requestSelector)
], DistinctLoadingHandler.prototype, "isLoading$", null);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdGluY3QtbG9hZGluZy1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxvYWRpbmctdG9vbHMvc3JjL2xpYi9zdHJhdGVnaWVzL2Rpc3RpbmN0LWxvYWRpbmctaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLNUUsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUEyQixRQUFpQztRQUFqQyxhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQUZwRCx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBMkIsRUFBRSxDQUFDLENBQUM7SUFHakYsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUF5QjtRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUF5QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUdNLFVBQVUsQ0FBQyxlQUF1QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2xELFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDakQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7WUFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUIsRUFBRSxLQUFjO1FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFFBQVEsbUNBQU8sWUFBWSxLQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxHQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFsQkM7SUFEQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQzt3REFZN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvYWRpbmdIYW5kbGVyU3RyYXRlZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2xvYWRpbmctaGFuZGxlci1zdHJhdGVneVwiO1xuaW1wb3J0IHtIdHRwUmVxdWVzdH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge01lbW9pemV9IGZyb20gXCJ0eXBlc2NyaXB0LW1lbW9pemVcIjtcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgUmVxdWVzdFNlbGVjdG9yU3RyYXRlZ3kgfSBmcm9tIFwiQGFuZXhpYS9uZ3gtaW50ZXJjZXB0b3ItdG9vbHNcIjtcblxuZXhwb3J0IHR5cGUgRGlzdGluY3RMb2FkaW5nU3RhdGVEaWN0ID0geyBbc2VsZWN0b3I6IHN0cmluZ106IGJvb2xlYW4gfVxuXG5leHBvcnQgY2xhc3MgRGlzdGluY3RMb2FkaW5nSGFuZGxlciBpbXBsZW1lbnRzIExvYWRpbmdIYW5kbGVyU3RyYXRlZ3kge1xuXG4gIHByaXZhdGUgX2xvYWRpbmdTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpc3RpbmN0TG9hZGluZ1N0YXRlRGljdD4oe30pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlbGVjdG9yOiBSZXF1ZXN0U2VsZWN0b3JTdHJhdGVneSkge1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh0aGlzLnNlbGVjdG9yKHJlcXVlc3QpLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh0aGlzLnNlbGVjdG9yKHJlcXVlc3QpLCBmYWxzZSk7XG4gIH1cblxuICBATWVtb2l6ZSgocmVxdWVzdFNlbGVjdG9yKSA9PiByZXF1ZXN0U2VsZWN0b3IpXG4gIHB1YmxpYyBpc0xvYWRpbmckKHJlcXVlc3RTZWxlY3Rvcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChjdXJyZW50U3RhdGUgPT4ge1xuICAgICAgICBpZiAoIWN1cnJlbnRTdGF0ZS5oYXNPd25Qcm9wZXJ0eShyZXF1ZXN0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoY3VycmVudFN0YXRlW3JlcXVlc3RTZWxlY3Rvcl0pO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU3RhdGUocmVxdWVzdElkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5fbG9hZGluZ1N0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IG5ld1N0YXRlID0gey4uLmN1cnJlbnRTdGF0ZSwgW3JlcXVlc3RJZF06IHZhbHVlfTtcbiAgICB0aGlzLl9sb2FkaW5nU3RhdGVTdWJqZWN0Lm5leHQobmV3U3RhdGUpO1xuICB9XG59XG4iXX0=