ngx-load
Version:
A simple angular library for adding loaders.
74 lines • 8.45 kB
JavaScript
import { Directive, Inject, Input } from '@angular/core';
import { ComponentPortal } from "@angular/cdk/portal";
import { CONFIGURATION_TOKEN } from "../core/loader.configuration";
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/overlay";
export class OverlayLoaderDirective {
constructor(elementRef, overlay, configuration) {
this.elementRef = elementRef;
this.overlay = overlay;
this.configuration = configuration;
this.overlayRef = this.createOverlay();
}
set loadOverlayLoader(value) {
this.unsubscribeCurrentSubscription();
this.subscribe(value);
}
;
ngOnInit() {
}
ngOnDestroy() {
this.detachLoader();
this.unsubscribeCurrentSubscription();
}
unsubscribeCurrentSubscription() {
if (this.currentSubscription) {
this.detachLoader();
this.currentSubscription.unsubscribe();
}
}
subscribe(value) {
this.attachLoader();
this.currentSubscription = value.subscribe({
next: () => this.detachLoader(),
complete: () => this.detachLoader(),
error: () => this.detachLoader()
});
}
createOverlay() {
return this.overlay.create({
scrollStrategy: this.overlay.scrollStrategies.reposition(),
positionStrategy: this.overlay.position()
.flexibleConnectedTo(this.elementRef)
.withPush(false)
.withPositions([
{
originX: "center",
originY: "center",
overlayX: "center",
overlayY: "center"
}
])
});
}
attachLoader() {
this.overlayRef.attach(new ComponentPortal(this.configuration.loaderComponent));
}
detachLoader() {
this.overlayRef.detach();
}
}
OverlayLoaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: OverlayLoaderDirective, deps: [{ token: i0.ElementRef }, { token: i1.Overlay }, { token: CONFIGURATION_TOKEN }], target: i0.ɵɵFactoryTarget.Directive });
OverlayLoaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0", type: OverlayLoaderDirective, selector: "[loadOverlayLoader]", inputs: { loadOverlayLoader: "loadOverlayLoader" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: OverlayLoaderDirective, decorators: [{
type: Directive,
args: [{
selector: '[loadOverlayLoader]'
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Overlay }, { type: undefined, decorators: [{
type: Inject,
args: [CONFIGURATION_TOKEN]
}] }]; }, propDecorators: { loadOverlayLoader: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1sb2FkZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbG9hZC9zcmMvbGliL292ZXJsYXkvb3ZlcmxheS1sb2FkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBS3hGLE1BQU0sT0FBTyxzQkFBc0I7SUFVakMsWUFDVSxVQUFzQixFQUN0QixPQUFnQixFQUNhLGFBQWtDO1FBRi9ELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNhLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQVp6RSxlQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBY2pDLENBQUM7SUFYRCxJQUNJLGlCQUFpQixDQUFDLEtBQXNCO1FBQzFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUFBLENBQUM7SUFTRixRQUFRO0lBQ1IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUVPLDhCQUE4QjtRQUNwQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7WUFDbkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQ3hDO1lBQ0UsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7U0FDakMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDMUQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7aUJBQ3RDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ3BDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQ2YsYUFBYSxDQUNaO2dCQUNFO29CQUNFLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFFBQVEsRUFBRSxRQUFRO2lCQUNuQjthQUNGLENBQ0Y7U0FDSixDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMxQixDQUFDOzttSEFwRVUsc0JBQXNCLG1FQWF2QixtQkFBbUI7dUdBYmxCLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDOzswQkFjSSxNQUFNOzJCQUFDLG1CQUFtQjs0Q0FSekIsaUJBQWlCO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDT05GSUdVUkFUSU9OX1RPS0VOLCBMb2FkZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL2NvcmUvbG9hZGVyLmNvbmZpZ3VyYXRpb25cIjtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2xvYWRPdmVybGF5TG9hZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgT3ZlcmxheUxvYWRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgb3ZlcmxheVJlZiA9IHRoaXMuY3JlYXRlT3ZlcmxheSgpXG4gIGN1cnJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkT3ZlcmxheUxvYWRlcih2YWx1ZTogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgdGhpcy51bnN1YnNjcmliZUN1cnJlbnRTdWJzY3JpcHRpb24oKVxuICAgIHRoaXMuc3Vic2NyaWJlKHZhbHVlKVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgQEluamVjdChDT05GSUdVUkFUSU9OX1RPS0VOKSBwcml2YXRlIGNvbmZpZ3VyYXRpb246IExvYWRlckNvbmZpZ3VyYXRpb25cbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGV0YWNoTG9hZGVyKClcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ3VycmVudFN1YnNjcmlwdGlvbigpXG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlQ3VycmVudFN1YnNjcmlwdGlvbigpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRldGFjaExvYWRlcigpXG4gICAgICB0aGlzLmN1cnJlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlKHZhbHVlOiBPYnNlcnZhYmxlPGFueT4pIHtcbiAgICB0aGlzLmF0dGFjaExvYWRlcigpXG4gICAgdGhpcy5jdXJyZW50U3Vic2NyaXB0aW9uID0gdmFsdWUuc3Vic2NyaWJlKFxuICAgICAge1xuICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmRldGFjaExvYWRlcigpLFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5kZXRhY2hMb2FkZXIoKSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMuZGV0YWNoTG9hZGVyKClcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpXG4gICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcbiAgICAgICAgLndpdGhQdXNoKGZhbHNlKVxuICAgICAgICAud2l0aFBvc2l0aW9ucyhcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG92ZXJsYXlYOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvdmVybGF5WTogXCJjZW50ZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGF0dGFjaExvYWRlcigpIHtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwodGhpcy5jb25maWd1cmF0aW9uLmxvYWRlckNvbXBvbmVudCkpXG4gIH1cblxuICBwcml2YXRlIGRldGFjaExvYWRlcigpIHtcbiAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKClcbiAgfVxuXG59XG5cbiJdfQ==