UNPKG

ng-block-ui

Version:
106 lines 15.7 kB
import { Directive, Input } from '@angular/core'; import { BlockUIContentComponent } from '../components/block-ui-content/block-ui-content.component'; import { BlockUIDefaultName } from '../constants/block-ui-default-name.constant'; import * as i0 from "@angular/core"; import * as i1 from "../services/block-ui.service"; import * as i2 from "../services/block-ui-instance.service"; export class BlockUIDirective { constructor(blockUIService, blockUIInstanceService, viewRef, templateRef, renderer, componentFactoryResolver) { this.blockUIService = blockUIService; this.blockUIInstanceService = blockUIInstanceService; this.viewRef = viewRef; this.templateRef = templateRef; this.renderer = renderer; this.componentFactoryResolver = componentFactoryResolver; } set blockUI(name) { this.blockTarget = name; } ; set blockUIMessage(message) { this.message = message; } ; set blockUITemplate(template) { this.template = template; } ; set blockUIDelayStart(delayStart) { this.delayStart = delayStart ? Number(delayStart) : null; } ; set blockUIDelayStop(delayStop) { this.delayStop = delayStop ? Number(delayStop) : null; } ; ngOnInit() { try { this.viewRef.createEmbeddedView(this.templateRef); const parentElement = this.getParentElement(); if (parentElement && !this.isComponentInTemplate(parentElement)) { this.renderer.addClass(parentElement, 'block-ui__element'); this.blockUIComponentRef = this.createComponent(); let blockUIContent = this.findContentNode(this.viewRef.element.nativeElement); if (blockUIContent) { const settings = this.blockUIInstanceService.getSettings(); parentElement.appendChild(blockUIContent); this.blockUIComponentRef.instance.className = 'block-ui-wrapper--element'; this.blockUIComponentRef.instance.name = this.blockTarget || BlockUIDefaultName; if (this.message) this.blockUIComponentRef.instance.defaultMessage = this.message; if (this.delayStart) this.blockUIComponentRef.instance.delayStart = this.delayStart; if (this.delayStop) this.blockUIComponentRef.instance.delayStop = this.delayStop; if (this.template || settings.template) this.blockUIComponentRef.instance.templateCmp = this.template || settings.template; } } } catch (error) { console.error('ng-block-ui:', error); } } isComponentInTemplate(element) { // Needed because of https://github.com/microsoft/TypeScript/issues/26235 const targetElement = element || {}; let { children } = targetElement; children = Array.from(children || []).reverse(); return children.some((el) => el && el.localName === 'block-ui'); } getParentElement() { const embeddedView = this.viewRef.get(0); return embeddedView.rootNodes[0]; } // Needed for IE (#17) findContentNode(element) { const nextSibling = element.nextSibling || {}; const previousSibling = element.previousSibling || {}; return [ nextSibling, nextSibling.nextSibling, previousSibling, previousSibling.previousSibling ].find((e) => e && e.localName === 'block-ui-content'); } createComponent() { const resolvedBlockUIComponent = this.componentFactoryResolver.resolveComponentFactory(BlockUIContentComponent); return this.viewRef.createComponent(resolvedBlockUIComponent); } ngOnDestroy() { if (this.blockTarget) { this.blockUIService.reset(this.blockTarget); } } } BlockUIDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BlockUIDirective, deps: [{ token: i1.BlockUIService }, { token: i2.BlockUIInstanceService }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive }); BlockUIDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: BlockUIDirective, selector: "[blockUI]", inputs: { blockUI: "blockUI", blockUIMessage: "blockUIMessage", blockUITemplate: "blockUITemplate", blockUIDelayStart: "blockUIDelayStart", blockUIDelayStop: "blockUIDelayStop" }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BlockUIDirective, decorators: [{ type: Directive, args: [{ selector: '[blockUI]' }] }], ctorParameters: function () { return [{ type: i1.BlockUIService }, { type: i2.BlockUIInstanceService }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { blockUI: [{ type: Input }], blockUIMessage: [{ type: Input }], blockUITemplate: [{ type: Input }], blockUIDelayStart: [{ type: Input }], blockUIDelayStop: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stdWkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2RpcmVjdGl2ZXMvYmxvY2stdWkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQVNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRXBHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7O0FBSWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUF1QjNCLFlBQ1UsY0FBOEIsRUFDOUIsc0JBQThDLEVBQzlDLE9BQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLFFBQW1CLEVBQ25CLHdCQUFrRDtRQUxsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO0lBQ3hELENBQUM7SUF0QkwsSUFDSSxPQUFPLENBQUMsSUFBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDcEQsSUFDSSxjQUFjLENBQUMsT0FBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDN0QsSUFDSSxlQUFlLENBQUMsUUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDakUsSUFDSSxpQkFBaUIsQ0FBQyxVQUFlO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMs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QyxDQUFDLENBQUM7SUFFbkMsQ0FBQztJQUVELHNCQUFzQjtJQUNkLGVBQWUsQ0FBQyxPQUFZO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO1FBRXRELE9BQU87WUFDTCxXQUFXO1lBQ1gsV0FBVyxDQUFDLFdBQVc7WUFDdkIsZUFBZTtZQUNmLGVBQWUsQ0FBQyxlQUFlO1NBQ2hDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEgsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7OzZHQWpHVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtrUUFVOUIsT0FBTztzQkFEVixLQUFLO2dCQUdGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBR0YsZUFBZTtzQkFEbEIsS0FBSztnQkFHRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBS0YsZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIENvbXBvbmVudFJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgUmVuZGVyZXIyLFxuICBFbWJlZGRlZFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCbG9ja1VJQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYmxvY2stdWktY29udGVudC9ibG9jay11aS1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbG9ja1VJSW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmxvY2stdWktaW5zdGFuY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCbG9ja1VJRGVmYXVsdE5hbWUgfSBmcm9tICcuLi9jb25zdGFudHMvYmxvY2stdWktZGVmYXVsdC1uYW1lLmNvbnN0YW50JztcbmltcG9ydCB7IEJsb2NrVUlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmxvY2stdWkuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tibG9ja1VJXScgfSlcbmV4cG9ydCBjbGFzcyBCbG9ja1VJRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGJsb2NrVUlDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxCbG9ja1VJQ29udGVudENvbXBvbmVudD47XG4gIGJsb2NrVGFyZ2V0OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IGFueTtcbiAgdGVtcGxhdGU6IGFueTtcbiAgZGVsYXlTdGFydDogYW55O1xuICBkZWxheVN0b3A6IGFueTtcblxuICBASW5wdXQoKVxuICBzZXQgYmxvY2tVSShuYW1lOiBhbnkpIHsgdGhpcy5ibG9ja1RhcmdldCA9IG5hbWU7IH07XG4gIEBJbnB1dCgpXG4gIHNldCBibG9ja1VJTWVzc2FnZShtZXNzYWdlOiBhbnkpIHsgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsgfTtcbiAgQElucHV0KClcbiAgc2V0IGJsb2NrVUlUZW1wbGF0ZSh0ZW1wbGF0ZTogYW55KSB7IHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsgfTtcbiAgQElucHV0KClcbiAgc2V0IGJsb2NrVUlEZWxheVN0YXJ0KGRlbGF5U3RhcnQ6IGFueSkge1xuICAgIHRoaXMuZGVsYXlTdGFydCA9IGRlbGF5U3RhcnQgPyBOdW1iZXIoZGVsYXlTdGFydCkgOiBudWxsO1xuICB9O1xuICBASW5wdXQoKVxuICBzZXQgYmxvY2tVSURlbGF5U3RvcChkZWxheVN0b3A6IGFueSkge1xuICAgIHRoaXMuZGVsYXlTdG9wID0gZGVsYXlTdG9wID8gTnVtYmVyKGRlbGF5U3RvcCkgOiBudWxsO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYmxvY2tVSVNlcnZpY2U6IEJsb2NrVUlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmxvY2tVSUluc3RhbmNlU2VydmljZTogQmxvY2tVSUluc3RhbmNlU2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpO1xuXG4gICAgICBpZiAocGFyZW50RWxlbWVudCAmJiAhdGhpcy5pc0NvbXBvbmVudEluVGVtcGxhdGUocGFyZW50RWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhwYXJlbnRFbGVtZW50LCAnYmxvY2stdWlfX2VsZW1lbnQnKTtcbiAgICAgICAgdGhpcy5ibG9ja1VJQ29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcbiAgICAgICAgbGV0IGJsb2NrVUlDb250ZW50ID0gdGhpcy5maW5kQ29udGVudE5vZGUodGhpcy52aWV3UmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGJsb2NrVUlDb250ZW50KSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmJsb2NrVUlJbnN0YW5jZVNlcnZpY2UuZ2V0U2V0dGluZ3MoKTtcblxuICAgICAgICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoYmxvY2tVSUNvbnRlbnQpO1xuICAgICAgICAgIHRoaXMuYmxvY2tVSUNvbXBvbmVudFJlZi5pbnN0YW5jZS5jbGFzc05hbWUgPSAnYmxvY2stdWktd3JhcHBlci0tZWxlbWVudCc7XG4gICAgICAgICAgdGhpcy5ibG9ja1VJQ29tcG9uZW50UmVmLmluc3RhbmNlLm5hbWUgPSB0aGlzLmJsb2NrVGFyZ2V0IHx8IEJsb2NrVUlEZWZhdWx0TmFtZTtcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlKSB0aGlzLmJsb2NrVUlDb21wb25lbnRSZWYuaW5zdGFuY2UuZGVmYXVsdE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2U7XG4gICAgICAgICAgaWYgKHRoaXMuZGVsYXlTdGFydCkgdGhpcy5ibG9ja1VJQ29tcG9uZW50UmVmLmluc3RhbmNlLmRlbGF5U3RhcnQgPSB0aGlzLmRlbGF5U3RhcnQ7XG4gICAgICAgICAgaWYgKHRoaXMuZGVsYXlTdG9wKSB0aGlzLmJsb2NrVUlDb21wb25lbnRSZWYuaW5zdGFuY2UuZGVsYXlTdG9wID0gdGhpcy5kZWxheVN0b3A7XG4gICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUgfHwgc2V0dGluZ3MudGVtcGxhdGUpXG4gICAgICAgICAgICB0aGlzLmJsb2NrVUlDb21wb25lbnRSZWYuaW5zdGFuY2UudGVtcGxhdGVDbXAgPSB0aGlzLnRlbXBsYXRlIHx8IHNldHRpbmdzLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ25nLWJsb2NrLXVpOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQ29tcG9uZW50SW5UZW1wbGF0ZShlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBOZWVkZWQgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI2MjM1XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVsZW1lbnQgfHwge307XG4gICAgbGV0IHsgY2hpbGRyZW4gfSA9IHRhcmdldEVsZW1lbnQ7XG4gICAgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGNoaWxkcmVuIHx8IFtdKS5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIGNoaWxkcmVuLnNvbWUoKGVsOiBhbnkpID0+IGVsICYmIGVsLmxvY2FsTmFtZSA9PT0gJ2Jsb2NrLXVpJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmVudEVsZW1lbnQoKTogRWxlbWVudCB7XG4gICAgY29uc3QgZW1iZWRkZWRWaWV3ID0gdGhpcy52aWV3UmVmLmdldCgwKSBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PjtcblxuICAgIHJldHVybiBlbWJlZGRlZFZpZXcucm9vdE5vZGVzWzBdO1xuXG4gIH1cblxuICAvLyBOZWVkZWQgZm9yIElFICgjMTcpXG4gIHByaXZhdGUgZmluZENvbnRlbnROb2RlKGVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IG5leHRTaWJsaW5nID0gZWxlbWVudC5uZXh0U2libGluZyB8fCB7fTtcbiAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50LnByZXZpb3VzU2libGluZyB8fCB7fTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXh0U2libGluZyxcbiAgICAgIG5leHRTaWJsaW5nLm5leHRTaWJsaW5nLFxuICAgICAgcHJldmlvdXNTaWJsaW5nLFxuICAgICAgcHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZ1xuICAgIF0uZmluZCgoZSkgPT4gZSAmJiBlLmxvY2FsTmFtZSA9PT0gJ2Jsb2NrLXVpLWNvbnRlbnQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KCkge1xuICAgIGNvbnN0IHJlc29sdmVkQmxvY2tVSUNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEJsb2NrVUlDb250ZW50Q29tcG9uZW50KTtcbiAgICByZXR1cm4gdGhpcy52aWV3UmVmLmNyZWF0ZUNvbXBvbmVudChyZXNvbHZlZEJsb2NrVUlDb21wb25lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuYmxvY2tUYXJnZXQpIHtcbiAgICAgIHRoaXMuYmxvY2tVSVNlcnZpY2UucmVzZXQodGhpcy5ibG9ja1RhcmdldCk7XG4gICAgfVxuICB9XG59XG4iXX0=