UNPKG

ngx-bootstrap

Version:
133 lines 5.22 kB
import { Component, ElementRef, HostListener, Renderer2 } from '@angular/core'; import { CLASS_NAME, DISMISS_REASONS, ModalOptions, TRANSITION_DURATIONS } from './modal-options.class'; import { isBs3 } from 'ngx-bootstrap/utils'; export class ModalContainerComponent { constructor(options, _element, _renderer) { this._element = _element; this._renderer = _renderer; this.isShown = false; this.isAnimated = false; this.isModalHiding = false; this.clickStartedInContent = false; this.config = Object.assign({}, options); } ngOnInit() { if (this.isAnimated) { this._renderer.addClass(this._element.nativeElement, CLASS_NAME.FADE); } this._renderer.setStyle(this._element.nativeElement, 'display', 'block'); setTimeout(() => { this.isShown = true; this._renderer.addClass(this._element.nativeElement, isBs3() ? CLASS_NAME.IN : CLASS_NAME.SHOW); }, this.isAnimated ? TRANSITION_DURATIONS.BACKDROP : 0); if (document && document.body) { if (this.bsModalService && this.bsModalService.getModalsCount() === 1) { this.bsModalService.checkScrollbar(); this.bsModalService.setScrollbar(); } this._renderer.addClass(document.body, CLASS_NAME.OPEN); } if (this._element.nativeElement) { this._element.nativeElement.focus(); } } onClickStarted(event) { this.clickStartedInContent = event.target !== this._element.nativeElement; } onClickStop(event) { var _a; const clickedInBackdrop = event.target === this._element.nativeElement && !this.clickStartedInContent; if (this.config.ignoreBackdropClick || this.config.backdrop === 'static' || !clickedInBackdrop) { this.clickStartedInContent = false; return; } (_a = this.bsModalService) === null || _a === void 0 ? void 0 : _a.setDismissReason(DISMISS_REASONS.BACKRDOP); this.hide(); } onPopState() { var _a; (_a = this.bsModalService) === null || _a === void 0 ? void 0 : _a.setDismissReason(DISMISS_REASONS.BACK); this.hide(); } onEsc(event) { var _a, _b; if (!this.isShown) { return; } if (event.keyCode === 27 || event.key === 'Escape') { event.preventDefault(); } if (this.config.keyboard && this.level === ((_a = this.bsModalService) === null || _a === void 0 ? void 0 : _a.getModalsCount())) { (_b = this.bsModalService) === null || _b === void 0 ? void 0 : _b.setDismissReason(DISMISS_REASONS.ESC); this.hide(); } } ngOnDestroy() { if (this.isShown) { this._hide(); } } hide() { if (this.isModalHiding || !this.isShown) { return; } if (this.config.closeInterceptor) { this.config.closeInterceptor().then(() => this._hide(), () => undefined); return; } this._hide(); } _hide() { this.isModalHiding = true; this._renderer.removeClass(this._element.nativeElement, isBs3() ? CLASS_NAME.IN : CLASS_NAME.SHOW); setTimeout(() => { var _a, _b; this.isShown = false; if (document && document.body && ((_a = this.bsModalService) === null || _a === void 0 ? void 0 : _a.getModalsCount()) === 1) { this._renderer.removeClass(document.body, CLASS_NAME.OPEN); } (_b = this.bsModalService) === null || _b === void 0 ? void 0 : _b.hide(this.config.id); this.isModalHiding = false; }, this.isAnimated ? TRANSITION_DURATIONS.MODAL : 0); } } ModalContainerComponent.decorators = [ { type: Component, args: [{ selector: 'modal-container', template: ` <div [class]="'modal-dialog' + (config.class ? ' ' + config.class : '')" role="document" focusTrap> <div class="modal-content"> <ng-content></ng-content> </div> </div> `, // eslint-disable-next-line @angular-eslint/no-host-metadata-property host: { class: 'modal', role: 'dialog', tabindex: '-1', '[attr.aria-modal]': 'true', '[attr.aria-labelledby]': 'config.ariaLabelledBy', '[attr.aria-describedby]': 'config.ariaDescribedby' } },] } ]; ModalContainerComponent.ctorParameters = () => [ { type: ModalOptions }, { type: ElementRef }, { type: Renderer2 } ]; ModalContainerComponent.propDecorators = { onClickStarted: [{ type: HostListener, args: ['mousedown', ['$event'],] }], onClickStop: [{ type: HostListener, args: ['click', ['$event'],] }], onPopState: [{ type: HostListener, args: ['window:popstate',] }], onEsc: [{ type: HostListener, args: ['window:keydown.esc', ['$event'],] }] }; //# sourceMappingURL=modal-container.component.js.map