UNPKG

@universis/common

Version:

Universis - common directives and services

138 lines 16.5 kB
import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from '@angular/core'; import { DialogComponent, DIALOG_BUTTONS } from '../components/modal/dialog.component'; import { BsModalService } from 'ngx-bootstrap/modal'; import * as i0 from "@angular/core"; import * as i1 from "ngx-bootstrap/modal"; /** * * Displays a Modal window or a type of Notification (based on choice the color changes) * @export * @class ModalService */ export class ModalService { constructor(componentFactoryResolver, appRef, injector, modalService) { this.componentFactoryResolver = componentFactoryResolver; this.appRef = appRef; this.injector = injector; this.modalService = modalService; this.config = { ignoreBackdropClick: true, keyboard: false, initialState: null, class: 'modal-content-base' }; } showDialog(title, message, buttons = DIALOG_BUTTONS.Ok, extras) { const componentRef = this.componentFactoryResolver .resolveComponentFactory(DialogComponent) .create(this.injector); componentRef.instance.title = title; componentRef.instance.message = message; componentRef.instance.buttons = buttons; if (extras) { componentRef.instance.theme = extras.theme; } // attach component to the appRef so that it's inside the ng component tree this.appRef.attachView(componentRef.hostView); // get DOM element from component const modalElement = componentRef.hostView .rootNodes[0]; // append DOM element to the body document.body.appendChild(modalElement); return componentRef.instance.ngOnInit().then(() => { // show dialog return componentRef.instance.show().then(result => { // detach view this.appRef.detachView(componentRef.hostView); // destroy component ref componentRef.destroy(); // return Promise.resolve(result); }); }); } showWarningDialog(title, message, buttons = DIALOG_BUTTONS.OkCancel) { return this.showDialog('', `<div class="text-center"> <div class="icon-circle icon-circle-warning"> <i class="fa fa-exclamation"></i> </div> <div class="font-2xl font-weight-bold mt-2"> ${title} </div> <p class="mt-2"> ${message} </p> </div> `, buttons, { theme: 'modal-dialog-warning' }); } showSuccessDialog(title, message, buttons = DIALOG_BUTTONS.Ok) { return this.showDialog('', `<div class="text-center"> <div class="icon-circle icon-circle-success"> <i class="fa fa-check"></i> </div> <div class="font-2xl font-weight-bold mt-2"> ${title} </div> <p class="mt-2"> ${message} </p> </div> `, buttons, { theme: 'modal-dialog-success' }); } showErrorDialog(title, message, buttons = DIALOG_BUTTONS.Ok) { return this.showDialog('', `<div class="text-center"> <div class="icon-circle icon-circle-danger"> <i class="fa fa-times"></i> </div> <div class="font-2xl font-weight-bold mt-2"> ${title} </div> <p class="mt-2"> ${message} </p> </div> `, buttons, { theme: 'modal-dialog-danger' }); } showInfoDialog(title, message, buttons = DIALOG_BUTTONS.Ok) { return this.showDialog('', `<div class="text-center"> <div class="icon-circle icon-circle-info"> <i class="fa fa-info"></i> </div> <div class="font-2xl font-weight-bold mt-2"> ${title} </div> <p class="mt-2"> ${message} </p> </div> `, buttons, { theme: 'modal-dialog-info' }); } openModal(template, customClass) { let config; if (customClass) { config = JSON.parse(JSON.stringify(this.config)); config.class = customClass; } else { config = this.config; } return this.modalRef = this.modalService.show(template, config); } openModalComponent(template, options) { return this.modalRef = this.modalService.show(template, options); } } ModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ModalService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }, { token: i1.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable }); ModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ModalService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ModalService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }, { type: i1.BsModalService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFFLHdCQUF3QixFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFPckQ7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVN2QixZQUFvQix3QkFBa0QsRUFDbEQsTUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsWUFBNEI7UUFINUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQVZoRCxXQUFNLEdBQUc7WUFDUCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLG9CQUFvQjtTQUM1QixDQUFDO0lBS2tELENBQUM7SUFFckQsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsVUFBMEIsY0FBYyxDQUFDLEVBQUUsRUFBRSxNQUE4QjtRQUNwSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCO2FBQzdDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQzthQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFP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LFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFhLEVBQUUsT0FBYTtRQUN6QyxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLENBQUM7OzBHQXpJUSxZQUFZOzhHQUFaLFlBQVk7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25SZWYsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRW1iZWRkZWRWaWV3UmVmLCBJbmplY3RhYmxlLCBJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpYWxvZ0NvbXBvbmVudCwgRElBTE9HX0JVVFRPTlN9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9kYWwvZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwvYnMtbW9kYWwtcmVmLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0NvbXBvbmVudEV4dHJhcyB7XG4gIHRoZW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqXG4gKiBEaXNwbGF5cyBhIE1vZGFsIHdpbmRvdyBvciBhIHR5cGUgb2YgTm90aWZpY2F0aW9uIChiYXNlZCBvbiBjaG9pY2UgdGhlIGNvbG9yIGNoYW5nZXMpXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTW9kYWxTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICBtb2RhbFJlZjogYW55O1xuICBjb25maWcgPSB7XG4gICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgaW5pdGlhbFN0YXRlOiBudWxsLFxuICAgIGNsYXNzOiAnbW9kYWwtY29udGVudC1iYXNlJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkgeyB9XG5cbiAgc2hvd0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2ssIGV4dHJhcz86IERpYWxvZ0NvbXBvbmVudEV4dHJhcykge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShEaWFsb2dDb21wb25lbnQpXG4gICAgICAgIC5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnRpdGxlID0gdGl0bGU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5idXR0b25zID0gYnV0dG9ucztcbiAgICBpZiAoZXh0cmFzKSB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudGhlbWUgPSBleHRyYXMudGhlbWU7XG4gICAgfVxuICAgIC8vIGF0dGFjaCBjb21wb25lbnQgdG8gdGhlIGFwcFJlZiBzbyB0aGF0IGl0J3MgaW5zaWRlIHRoZSBuZyBjb21wb25lbnQgdHJlZVxuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAvLyBnZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcbiAgICBjb25zdCBtb2RhbEVsZW1lbnQgPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KVxuICAgICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIC8vIGFwcGVuZCBET00gZWxlbWVudCB0byB0aGUgYm9keVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWxFbGVtZW50KTtcbiAgICByZXR1cm4gY29tcG9uZW50UmVmLmluc3RhbmNlLm5nT25Jbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAvLyBzaG93IGRpYWxvZ1xuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zaG93KCkudGhlbiggcmVzdWx0ID0+IHtcbiAgICAgICAgLy8gZGV0YWNoIHZpZXdcbiAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAvLyBkZXN0cm95IGNvbXBvbmVudCByZWZcbiAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93V2FybmluZ0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2tDYW5jZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dEaWFsb2coXG4gICAgICAgICcnLFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLXdhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC0yeGwgZm9udC13ZWlnaHQtYm9sZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgJHt0aXRsZX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAke21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgLFxuICAgICAgICBidXR0b25zLCB7XG4gICAgICAgICAgdGhlbWU6ICdtb2RhbC1kaWFsb2ctd2FybmluZydcbiAgICAgICAgfSk7XG4gIH1cblxuICBzaG93U3VjY2Vzc0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2spIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RGlhbG9nKFxuICAgICAgICAnJyxcbiAgICAgICAgYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBpY29uLWNpcmNsZS1zdWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtMnhsIGZvbnQtd2VpZ2h0LWJvbGQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICR7dGl0bGV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgJHttZXNzYWdlfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYCxcbiAgICAgICAgYnV0dG9ucywge1xuICAgICAgICAgIHRoZW1lOiAnbW9kYWwtZGlhbG9nLXN1Y2Nlc3MnXG4gICAgICAgIH0pO1xuICB9XG5cbiAgc2hvd0Vycm9yRGlhbG9nKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYnV0dG9uczogRElBTE9HX0JVVFRPTlMgPSBESUFMT0dfQlVUVE9OUy5Paykge1xuICAgIHJldHVybiB0aGlzLnNob3dEaWFsb2coXG4gICAgICAgICcnLFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGljb24tY2lyY2xlLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LTJ4bCBmb250LXdlaWdodC1ib2xkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAke3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMlwiPlxuICAgICAgICAgICAgICAgICR7bWVzc2FnZX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGJ1dHRvbnMsIHtcbiAgICAgICAgICB0aGVtZTogJ21vZGFsLWRpYWxvZy1kYW5nZXInXG4gICAgICAgIH0pO1xuICB9XG5cbiAgICBzaG93SW5mb0RpYWxvZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IERJQUxPR19CVVRUT05TID0gRElBTE9HX0JVVFRPTlMuT2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0RpYWxvZyhcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBpY29uLWNpcmNsZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mb1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC0yeGwgZm9udC13ZWlnaHQtYm9sZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgJHt0aXRsZX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTJcIj5cbiAgICAgICAgICAgICAgICAke21lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgYnV0dG9ucywge1xuICAgICAgICAgICAgICAgIHRoZW1lOiAnbW9kYWwtZGlhbG9nLWluZm8nXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgb3Blbk1vZGFsKHRlbXBsYXRlOiBhbnksIGN1c3RvbUNsYXNzPzogc3RyaW5nKTogQnNNb2RhbFJlZiB7XG4gICAgbGV0IGNvbmZpZztcbiAgICBpZiAoY3VzdG9tQ2xhc3MpIHtcbiAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpKTtcbiAgICAgIGNvbmZpZy5jbGFzcyA9IGN1c3RvbUNsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCBjb25maWcpO1xuICB9XG5cbiAgb3Blbk1vZGFsQ29tcG9uZW50KHRlbXBsYXRlOiBhbnksIG9wdGlvbnM/OiBhbnkpOiBCc01vZGFsUmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCBvcHRpb25zKTtcbiAgICB9XG59XG4iXX0=