UNPKG

@vismaux/ngx-nordic-cool

Version:
112 lines 15.3 kB
import { ComponentPortal } from '@angular/cdk/portal'; import { Injectable, Injector, Optional, SkipSelf } from '@angular/core'; import { NcModalRef } from './modal-ref'; import { NcModalContainerComponent } from './modal-container/modal-container.component'; import { ResolveStart } from '@angular/router'; import { filter, takeUntil } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/overlay"; import * as i2 from "@angular/router"; import * as i3 from "./modal-ref"; export const DEFAULT_MODAL_OPTIONS = { size: 'md', role: 'dialog', closeOnEscape: true, closeOnOutsideClick: true, closeOnNavigation: true, }; export class NcModalService { constructor(overlay, injector, router, defaultOptions, parentModalService) { this.overlay = overlay; this.injector = injector; this.router = router; this.defaultOptions = defaultOptions; this.parentModalService = parentModalService; /** @ignore */ this.openModalsAtThisLevel = []; } get activeModals() { return this.parentModalService ? this.parentModalService.activeModals : this.openModalsAtThisLevel; } open(component, data, options) { options = this.applyDefaultOptions(options, this.defaultOptions); const overlayRef = this.createOverlay(); const container = this.attachContainer(overlayRef, options); return this.attachContent(component, data, container, overlayRef, options); } closeAll() { while (this.activeModals.length > 0) { this.activeModals.pop().close(); } } /** @ignore */ attachContainer(overlayRef, options) { const containerPortal = new ComponentPortal(NcModalContainerComponent, null, this.injector); const { instance } = overlayRef.attach(containerPortal); instance.options = options; return instance; } /** @ignore */ attachContent(component, data, container, overlayRef, options) { const modalRef = new NcModalRef(overlayRef, options); const injector = this.createInjector(modalRef); const componentPortal = new ComponentPortal(component, null, injector); const componentInstance = container.attachComponentPortal(componentPortal, data); modalRef.componentInstance = componentInstance; this.activeModals.push(modalRef); modalRef.afterClosed({ closeOnUnsubscribe: false }).subscribe(() => { const index = this.activeModals.indexOf(modalRef); if (index > -1) { this.activeModals.splice(index, 1); } }); if (options.closeOnNavigation && this.router) { this.router.events .pipe(filter((event) => event instanceof ResolveStart), takeUntil(modalRef.closed$)) .subscribe(() => modalRef.close()); } return modalRef; } /** @ignore */ createOverlay() { const positionStrategy = this.overlay.position().global(); const scrollStrategy = this.overlay.scrollStrategies.block(); return this.overlay.create({ positionStrategy, scrollStrategy, hasBackdrop: true, disposeOnNavigation: false, }); } /** @ignore */ createInjector(modalRef) { return Injector.create({ parent: this.injector, providers: [{ provide: NcModalRef, useValue: modalRef }], }); } /** @ignore */ applyDefaultOptions(options, defaultOptions) { return { ...DEFAULT_MODAL_OPTIONS, ...(defaultOptions ?? {}), ...(options ?? {}), }; } } NcModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcModalService, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: i2.Router, optional: true }, { token: i3.NcModalOptions, optional: true }, { token: NcModalService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable }); NcModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcModalService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: NcModalService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }, { type: i2.Router, decorators: [{ type: Optional }] }, { type: i3.NcModalOptions, decorators: [{ type: Optional }] }, { type: NcModalService, decorators: [{ type: Optional }, { type: SkipSelf }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub3JkaWMtY29vbC9zcmMvbGliL21vZGFsL21vZGFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBZ0MsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUVuRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBbUI7SUFDbkQsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsUUFBUTtJQUNkLGFBQWEsRUFBRSxJQUFJO0lBQ25CLG1CQUFtQixFQUFFLElBQUk7SUFDekIsaUJBQWlCLEVBQUUsSUFBSTtDQUN4QixDQUFDO0FBR0YsTUFBTSxPQUFPLGNBQWM7SUFVekIsWUFDVSxPQUFnQixFQUNoQixRQUFrQixFQUNOLE1BQWMsRUFDZCxjQUE4QixFQUNsQixrQkFBa0M7UUFKMUQsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ04sV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNsQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWdCO1FBZHBFLGNBQWM7UUFDTiwwQkFBcUIsR0FBc0IsRUFBRSxDQUFDO0lBY25ELENBQUM7SUFaSixJQUFJLFlBQVk7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Q3RDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhO1FBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDekIsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxXQUFXLEVBQUUsSUFBSTtZQUNqQixtQkFBbUIsRUFBRSxLQUFLO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sY0FBYyxDQUNwQixRQUF1QjtRQUV2QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3JCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDekQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixtQkFBbUIsQ0FDekIsT0FBdUIsRUFDdkIsY0FBOEI7UUFFOUIsT0FBTztZQUNMLEdBQUcscUJBQXFCO1lBQ3hCLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1NBQ25CLENBQUM7SUFDSixDQUFDOzsyR0E5SFUsY0FBYyxxSkFlNkIsY0FBYzsrR0FmekQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVOzswQkFjTixRQUFROzswQkFDUixRQUFROzhCQUMyQyxjQUFjOzBCQUFqRSxRQUFROzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXh0cmFjdElucHV0LCBOY01vZGFsT3B0aW9ucywgTmNNb2RhbFJlZiB9IGZyb20gJy4vbW9kYWwtcmVmJztcbmltcG9ydCB7IE5jTW9kYWxDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLWNvbnRhaW5lci9tb2RhbC1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE5jTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNvbHZlU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9EQUxfT1BUSU9OUzogTmNNb2RhbE9wdGlvbnMgPSB7XG4gIHNpemU6ICdtZCcsXG4gIHJvbGU6ICdkaWFsb2cnLFxuICBjbG9zZU9uRXNjYXBlOiB0cnVlLFxuICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICBjbG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOY01vZGFsU2VydmljZSB7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb3Blbk1vZGFsc0F0VGhpc0xldmVsOiBOY01vZGFsUmVmPGFueT5bXSA9IFtdO1xuXG4gIGdldCBhY3RpdmVNb2RhbHMoKTogTmNNb2RhbFJlZjxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE1vZGFsU2VydmljZVxuICAgICAgPyB0aGlzLnBhcmVudE1vZGFsU2VydmljZS5hY3RpdmVNb2RhbHNcbiAgICAgIDogdGhpcy5vcGVuTW9kYWxzQXRUaGlzTGV2ZWw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRlZmF1bHRPcHRpb25zOiBOY01vZGFsT3B0aW9ucyxcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHBhcmVudE1vZGFsU2VydmljZTogTmNNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIG9wZW48QyBleHRlbmRzIE5jTW9kYWxDb21wb25lbnQ8YW55LCBhbnk+PihcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sXG4gICAgZGF0YT86IEV4dHJhY3RJbnB1dDxDPixcbiAgICBvcHRpb25zPzogTmNNb2RhbE9wdGlvbnNcbiAgKSB7XG4gICAgb3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0T3B0aW9ucyhvcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmF0dGFjaENvbnRhaW5lcihvdmVybGF5UmVmLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2hDb250ZW50PEM+KFxuICAgICAgY29tcG9uZW50LFxuICAgICAgZGF0YSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG92ZXJsYXlSZWYsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmFjdGl2ZU1vZGFscy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFjdGl2ZU1vZGFscy5wb3AoKS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgYXR0YWNoQ29udGFpbmVyKFxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXG4gICAgb3B0aW9uczogTmNNb2RhbE9wdGlvbnNcbiAgKTogTmNNb2RhbENvbnRhaW5lckNvbXBvbmVudCB7XG4gICAgY29uc3QgY29udGFpbmVyUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChcbiAgICAgIE5jTW9kYWxDb250YWluZXJDb21wb25lbnQsXG4gICAgICBudWxsLFxuICAgICAgdGhpcy5pbmplY3RvclxuICAgICk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gb3ZlcmxheVJlZi5hdHRhY2goY29udGFpbmVyUG9ydGFsKTtcbiAgICBpbnN0YW5jZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGF0dGFjaENvbnRlbnQ8QyBleHRlbmRzIE5jTW9kYWxDb21wb25lbnQ8YW55LCBhbnk+PihcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sXG4gICAgZGF0YTogRXh0cmFjdElucHV0PEM+LFxuICAgIGNvbnRhaW5lcjogTmNNb2RhbENvbnRhaW5lckNvbXBvbmVudCxcbiAgICBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxuICAgIG9wdGlvbnM6IE5jTW9kYWxPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gbmV3IE5jTW9kYWxSZWY8Qz4ob3ZlcmxheVJlZiwgb3B0aW9ucyk7XG4gICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yKG1vZGFsUmVmKTtcbiAgICBjb25zdCBjb21wb25lbnRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudCwgbnVsbCwgaW5qZWN0b3IpO1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gY29udGFpbmVyLmF0dGFjaENvbXBvbmVudFBvcnRhbChcbiAgICAgIGNvbXBvbmVudFBvcnRhbCxcbiAgICAgIGRhdGFcbiAgICApO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50SW5zdGFuY2UgYXMgQztcbiAgICB0aGlzLmFjdGl2ZU1vZGFscy5wdXNoKG1vZGFsUmVmKTtcblxuICAgIG1vZGFsUmVmLmFmdGVyQ2xvc2VkKHsgY2xvc2VPblVuc3Vic2NyaWJlOiBmYWxzZSB9KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFjdGl2ZU1vZGFscy5pbmRleE9mKG1vZGFsUmVmKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5jbG9zZU9uTmF2aWdhdGlvbiAmJiB0aGlzLnJvdXRlcikge1xuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZVN0YXJ0KSxcbiAgICAgICAgICB0YWtlVW50aWwobW9kYWxSZWYuY2xvc2VkJClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IG1vZGFsUmVmLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RhbFJlZjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpOiBPdmVybGF5UmVmIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCk7XG4gICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpO1xuICAgIHJldHVybiB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICBzY3JvbGxTdHJhdGVneSxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGNyZWF0ZUluamVjdG9yPEMgZXh0ZW5kcyBOY01vZGFsQ29tcG9uZW50PihcbiAgICBtb2RhbFJlZjogTmNNb2RhbFJlZjxDPlxuICApOiBJbmplY3RvciB7XG4gICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5jTW9kYWxSZWYsIHVzZVZhbHVlOiBtb2RhbFJlZiB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0T3B0aW9ucyhcbiAgICBvcHRpb25zOiBOY01vZGFsT3B0aW9ucyxcbiAgICBkZWZhdWx0T3B0aW9uczogTmNNb2RhbE9wdGlvbnNcbiAgKTogTmNNb2RhbE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ERUZBVUxUX01PREFMX09QVElPTlMsXG4gICAgICAuLi4oZGVmYXVsdE9wdGlvbnMgPz8ge30pLFxuICAgICAgLi4uKG9wdGlvbnMgPz8ge30pLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==