@vismaux/ngx-nordic-cool
Version:
Common Nordic-Cool components for Angular.
112 lines • 15.3 kB
JavaScript
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==