@euro-ombudsman/ngx-modal-dialog
Version:
Dynamic modal dialog for Angular 20
1 lines • 25.1 kB
Source Map (JSON)
{"version":3,"file":"euro-ombudsman-ngx-modal-dialog.mjs","sources":["../../src/modal-dialog.component.ts","../../src/modal-dialog-instance.service.ts","../../src/modal-dialog.service.ts","../../src/simple-modal.component.ts","../../src/modal-dialog.module.ts","../../src/public-api.ts","../../src/euro-ombudsman-ngx-modal-dialog.ts"],"sourcesContent":["import {\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n HostListener,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {\n IModalDialog,\n IModalDialogButton,\n IModalDialogOptions,\n IModalDialogSettings,\n ModalDialogOnAction\n} from './modal-dialog.interface';\nimport { from, Observable, Subject } from 'rxjs';\n\n/**\n * Modal dialog component\n */\n@Component({\n selector: 'modal-dialog',\n styles: [`\n @-moz-keyframes shake {\n from, to { transform: translate3d(0, 0, 0); }\n 10%, 30%, 50%, 70%, 90% { transform: translate3d(-2rem, 0, 0); }\n 20%, 40%, 60%, 80% { transform: translate3d(2rem, 0, 0); }\n }\n @-webkit-keyframes shake {\n from, to { transform: translate3d(0, 0, 0); }\n 10%, 30%, 50%, 70%, 90% { transform: translate3d(-2rem, 0, 0); }\n 20%, 40%, 60%, 80% { transform: translate3d(2rem, 0, 0); }\n }\n @keyframes shake {\n from, to { transform: translate3d(0, 0, 0); }\n 10%, 30%, 50%, 70%, 90% { transform: translate3d(-2rem, 0, 0); }\n 20%, 40%, 60%, 80% { transform: translate3d(2rem, 0, 0); }\n }\n\n .ngx-modal {\n display: flex;\n }\n .ngx-modal-shake {\n backface-visibility: hidden;\n -webkit-animation-duration: 0.5s;\n -moz-animation-duration: 0.5s;\n animation-duration: 0.5s;\n -webkit-animation-fill-mode: both;\n -moz-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-iteration-count: infinite;\n -moz-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n -webkit-animation-name: shake;\n -moz-animation-name: shake;\n animation-name: shake;\n }\n `],\n template: `\n <div *ngIf=\"settings.overlayClass && showOverlay\" [ngClass]=\"[settings.overlayClass, animateOverlayClass]\"></div> \n <div [ngClass]=\"[settings.modalClass, animateModalClass]\" #dialog>\n <div [ngClass]=\"settings.modalDialogClass\">\n <div [ngClass]=\"[ showAlert ? settings.alertClass : '', settings.contentClass]\">\n <div [ngClass]=\"settings.headerClass\">\n <h4 [ngClass]=\"settings.headerTitleClass\">{{title}}</h4>\n <button (click)=\"close()\" *ngIf=\"!actionButtons || !actionButtons.length\" type=\"button\"\n [title]=\"settings.closeButtonTitle\"\n [ngClass]=\"settings.closeButtonClass\">\n </button>\n </div>\n <div [ngClass]=\"settings.bodyClass\">\n <i #modalDialogBody></i>\n </div>\n <div [ngClass]=\"settings.footerClass\" *ngIf=\"actionButtons && actionButtons.length\">\n <button *ngFor=\"let button of actionButtons\" (click)=\"doAction(button.onAction)\"\n [ngClass]=\"button.buttonClass || settings.buttonClass\">{{button.text}}\n </button>\n </div>\n </div>\n </div>\n </div>\n `,\n standalone: false\n})\nexport class ModalDialogComponent implements IModalDialog, OnDestroy, OnInit {\n @ViewChild('modalDialogBody', { read: ViewContainerRef, static: true }) public dynamicComponentTarget: ViewContainerRef;\n @ViewChild('dialog') private dialogElement: ElementRef;\n public reference: ComponentRef<IModalDialog>;\n\n /** Modal dialog style settings */\n public settings: IModalDialogSettings = {\n overlayClass: 'modal-backdrop fade',\n overlayAnimationTriggerClass: 'show',\n modalClass: 'modal ngx-modal fade',\n modalAnimationTriggerClass: 'show',\n modalDialogClass: 'modal-dialog modal-dialog-centered',\n contentClass: 'modal-content',\n headerClass: 'modal-header',\n headerTitleClass: 'modal-title',\n closeButtonClass: 'close glyphicon glyphicon-remove',\n closeButtonTitle: 'CLOSE',\n bodyClass: 'modal-body',\n footerClass: 'modal-footer',\n alertClass: 'ngx-modal-shake',\n alertDuration: 250,\n notifyWithAlert: true,\n buttonClass: 'btn btn-primary'\n };\n public actionButtons: IModalDialogButton[];\n public title: string;\n public onClose: () => Promise<any> | Observable<any> | boolean;\n\n public showAlert: boolean = false;\n public animateOverlayClass = '';\n public animateModalClass = '';\n\n public showOverlay = false;\n\n private _inProgress = false;\n private _alertTimeout: number;\n private _childInstance: any;\n private _closeDialog$: Subject<void>;\n\n /**\n * CTOR\n * @param _element\n * @param componentFactoryResolver\n */\n constructor(protected _element: ElementRef,\n private componentFactoryResolver: ComponentFactoryResolver) {\n }\n\n @HostListener('click', ['$event'])\n onClick(event: any): void {\n if (event.target !== this.dialogElement.nativeElement) {\n return;\n }\n this.close();\n }\n\n /**\n * Initialize dialog with reference to instance and options\n * @param reference\n * @param options\n */\n dialogInit(reference: ComponentRef<IModalDialog>, options: Partial<IModalDialogOptions<any>> = {}) {\n this.reference = reference;\n\n // inject component\n if (options.childComponent) {\n let factory = this.componentFactoryResolver.resolveComponentFactory(options.childComponent);\n let componentRef = this.dynamicComponentTarget.createComponent(factory) as ComponentRef<IModalDialog>;\n this._childInstance = componentRef.instance as IModalDialog;\n\n this._closeDialog$ = new Subject<void>();\n this._closeDialog$.subscribe(() => {\n this._finalizeAndDestroy();\n });\n\n options.closeDialogSubject = this._closeDialog$;\n\n this._childInstance['dialogInit'](componentRef, options);\n document.activeElement != null ?\n (document.activeElement as HTMLElement).blur() :\n (document.body as HTMLElement).blur();\n }\n // set options\n this._setOptions(options);\n }\n\n ngOnInit() {\n // a trick to defer css animations\n setTimeout(() => {\n this.animateOverlayClass = this.settings.overlayAnimationTriggerClass;\n this.animateModalClass = this.settings.modalAnimationTriggerClass;\n }, 0);\n }\n\n /**\n * Cleanup on destroy\n */\n ngOnDestroy() {\n // run animations\n this.animateOverlayClass = '';\n this.animateModalClass = '';\n\n // cleanup listeners\n if (this._alertTimeout) {\n clearTimeout(this._alertTimeout);\n this._alertTimeout = null;\n }\n\n if (this._closeDialog$) {\n this._closeDialog$.unsubscribe();\n }\n }\n\n /**\n * Run action defined on action button\n * @param action\n */\n doAction(action?: ModalDialogOnAction) {\n // disable multi clicks\n if (this._inProgress) {\n return;\n }\n this._inProgress = true;\n this._closeIfSuccessful(action);\n }\n\n /**\n * Method to run on close\n * if action buttons are defined, it will not close\n */\n close() {\n if (this._inProgress) {\n return;\n }\n if (this.actionButtons && this.actionButtons.length) {\n return;\n }\n this._inProgress = true;\n\n if (this.onClose) {\n this._closeIfSuccessful(this.onClose);\n return;\n }\n this._finalizeAndDestroy();\n }\n\n /**\n * Pass options from dialog setup to component\n * @param {IModalDialogOptions} options?\n */\n private _setOptions(options: Partial<IModalDialogOptions<any>>) {\n\n if (options.onClose && options.actionButtons && options.actionButtons.length) {\n throw new Error(`OnClose callback and ActionButtons are not allowed to be defined on the same dialog.`);\n }\n // set references\n this.title = (options && options.title) || '';\n this.onClose = (options && options.onClose) || null;\n this.actionButtons = (this._childInstance && this._childInstance['actionButtons']) ||\n (options && options.actionButtons) || null;\n if (options && options.settings) {\n Object.assign(this.settings, options.settings);\n }\n }\n\n /**\n * Close if successful\n * @param callback\n */\n private _closeIfSuccessful(callback: ModalDialogOnAction) {\n if (!callback) {\n return this._finalizeAndDestroy();\n }\n\n let response = callback();\n if (typeof response === 'boolean') {\n if (response) {\n return this._finalizeAndDestroy();\n }\n return this._triggerAlert();\n }\n if (this.isPromise(response)) {\n response = from(response);\n }\n if (this.isObservable(response)) {\n response.subscribe(() => {\n this._finalizeAndDestroy();\n }, () => {\n this._triggerAlert();\n });\n } else {\n this._inProgress = false;\n }\n }\n\n private _finalizeAndDestroy() {\n this._inProgress = false;\n this.reference.destroy();\n }\n\n private _triggerAlert() {\n if (this.settings.notifyWithAlert) {\n this.showAlert = true;\n this._alertTimeout = window.setTimeout(() => {\n this.showAlert = false;\n this._inProgress = false;\n clearTimeout(this._alertTimeout);\n this._alertTimeout = null;\n }, this.settings.alertDuration);\n }\n }\n\n private isPromise<T>(value: any | Promise<T>): value is Promise<T> {\n return value && typeof (<any>value).subscribe !== 'function' && typeof (value as any).then === 'function';\n }\n\n private isObservable<T>(value: any | Observable<T>): value is Observable<T> {\n return value && typeof (<any>value).subscribe === 'function';\n }\n}\n","import { ComponentRef, Injectable } from '@angular/core';\nimport { ModalDialogComponent } from './modal-dialog.component';\n\n@Injectable()\nexport class ModalDialogInstanceService {\n /**\n * Used to make sure there is exactly one instance of Modal Dialog\n */\n private componentRefs: ComponentRef<ModalDialogComponent>[] = [];\n\n /**\n * Closes existing modal dialog\n */\n closeAnyExistingModalDialog() {\n while (this.componentRefs.length) {\n this.componentRefs[this.componentRefs.length - 1].destroy();\n }\n }\n\n /**\n * Save component ref for future comparison\n * @param componentRef\n */\n saveExistingModalDialog(componentRef: ComponentRef<ModalDialogComponent>) {\n // remove overlay from top element\n this.setOverlayForTopDialog(false);\n // add new component\n this.componentRefs = [...this.componentRefs, componentRef];\n componentRef.instance.showOverlay = true;\n\n componentRef.onDestroy(() => {\n this.componentRefs.pop();\n this.setOverlayForTopDialog(true);\n });\n }\n\n setOverlayForTopDialog(value: boolean) {\n if (this.componentRefs.length) {\n this.componentRefs[this.componentRefs.length - 1].instance.showOverlay = value;\n }\n }\n}\n","import { ComponentFactoryResolver, ViewContainerRef, Inject, Injectable } from '@angular/core';\nimport { ModalDialogComponent } from './modal-dialog.component';\nimport { IModalDialogOptions } from './modal-dialog.interface';\nimport { ModalDialogInstanceService } from './modal-dialog-instance.service';\n\n@Injectable()\nexport class ModalDialogService {\n /**\n * CTOR\n * @param componentFactoryResolver\n * @param modalDialogInstanceService\n */\n constructor(@Inject(ComponentFactoryResolver) private componentFactoryResolver: ComponentFactoryResolver,\n @Inject(ModalDialogInstanceService) private modalDialogInstanceService: ModalDialogInstanceService) {\n }\n\n /**\n * Open dialog in given target element with given options\n * @param {ViewContainerRef} target\n * @param {IModalDialogOptions} options?\n */\n openDialog(target: ViewContainerRef, options: Partial<IModalDialogOptions<any>> = {}) {\n if (!options.placeOnTop) {\n this.modalDialogInstanceService.closeAnyExistingModalDialog();\n }\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(ModalDialogComponent);\n const componentRef = target.createComponent(factory);\n componentRef.instance.dialogInit(componentRef, options);\n\n this.modalDialogInstanceService.saveExistingModalDialog(componentRef);\n }\n}\n","import { Component, ComponentRef } from '@angular/core';\nimport { IModalDialog, IModalDialogOptions } from './modal-dialog.interface';\n\nexport interface ISimpleModalDataOptions {\n text: string;\n}\n\n@Component({\n selector: 'simple-modal-dialog',\n template: ``,\n styles: [':host { display: block; }'],\n host: {\n '[innerHTML]': 'text'\n },\n standalone: false\n})\nexport class SimpleModalComponent implements IModalDialog {\n text: string;\n\n /**\n * Initialize dialog with simple HTML content\n * @param {ComponentRef<IModalDialog>} reference\n * @param {Partial<IModalDialogOptions>} options\n */\n dialogInit(reference: ComponentRef<IModalDialog>, options: Partial<IModalDialogOptions<ISimpleModalDataOptions>>) {\n if (!options.data) {\n throw new Error(`Data information for simple modal dialog is missing`);\n }\n this.text = options.data.text;\n }\n}\n","// components and directives\nimport { ModalDialogComponent } from './modal-dialog.component';\nimport { ModalDialogService } from './modal-dialog.service';\nimport { SimpleModalComponent } from './simple-modal.component';\nimport { ModalDialogInstanceService } from './modal-dialog-instance.service';\n// modules\nimport { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders, InjectionToken, SkipSelf, Optional } from '@angular/core';\n\n/**\n * Guard to make sure we have single initialization of forRoot\n * @type {InjectionToken<ModalDialogModule>}\n */\nexport const MODAL_DIALOG_FORROOT_GUARD = new InjectionToken<ModalDialogModule>('MODAL_DIALOG_FORROOT_GUARD');\n\n@NgModule({\n imports: [CommonModule],\n declarations: [ModalDialogComponent, SimpleModalComponent],\n exports: [ModalDialogComponent, SimpleModalComponent],\n providers: [ModalDialogService, ModalDialogInstanceService]\n})\nexport class ModalDialogModule {\n\n public static forRoot(): ModuleWithProviders<ModalDialogModule> {\n return {\n ngModule: ModalDialogModule,\n providers: [\n {\n provide: MODAL_DIALOG_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n deps: [ModalDialogModule, new Optional(), new SkipSelf()]\n },\n ModalDialogInstanceService\n ]\n };\n }\n}\n\n/**\n * @param dialogModule\n * @returns {string}\n */\nexport function provideForRootGuard(dialogModule: ModalDialogModule): string {\n if (dialogModule) {\n throw new Error(\n `ModalDialogModule.forRoot() called twice.`);\n }\n return 'guarded';\n}\n","/*\n * Public API Surface of ngx-modal-dialog\n */\n\nexport * from './modal-dialog.module';\nexport * from './modal-dialog.service';\nexport * from './modal-dialog-instance.service';\nexport * from './modal-dialog.component';\nexport * from './modal-dialog.interface';\nexport * from './simple-modal.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}