UNPKG

@ziflow/ngx-simple-modal

Version:

A simple unopinionated framework to implement simple modal based behaviour in angular (v2+) projects.

1 lines 34.9 kB
{"version":3,"file":"ziflow-ngx-simple-modal.mjs","sources":["../../src/simple-modal/simple-modal-options.ts","../../src/simple-modal/simple-modal-wrapper.component.ts","../../src/simple-modal/simple-modal-holder.component.ts","../../src/simple-modal/simple-modal.service.ts","../../src/simple-modal/simple-modal-service.factory.ts","../../src/simple-modal/simple-modal.module.ts","../../src/simple-modal/simple-modal.component.ts","../../src/ziflow-ngx-simple-modal.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const DefaultSimpleModalOptionConfig = new InjectionToken<SimpleModalOptions>('default-simple-modal.config');\n\nexport interface SimpleModalOptions {\n closeOnEscape: boolean;\n closeOnClickOutside: boolean;\n bodyClass: string;\n wrapperDefaultClasses: string;\n wrapperClass: string;\n animationDuration: number;\n autoFocus: boolean;\n}\n\nexport type SimpleModalOptionsOverrides = Partial<SimpleModalOptions>;\n\nexport const defaultSimpleModalOptions: SimpleModalOptions = {\n closeOnEscape: false,\n closeOnClickOutside: false,\n bodyClass: 'modal-open',\n wrapperDefaultClasses: 'modal fade-anim',\n wrapperClass: 'in',\n animationDuration: 300,\n autoFocus: false\n};\n","import {\n Component,\n ComponentFactoryResolver,\n ElementRef, Injector,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { SimpleModalComponent } from './simple-modal.component';\n\n/**\n * The modal backdrop wrapping wrapper to the modal\n */\n@Component({\n selector: 'simple-modal-wrapper',\n template: `\n <div #wrapper [ngClass]=\"modalClasses\" [ngStyle]=\"{ display: 'block' }\" role=\"dialog\">\n <ng-template #viewContainer></ng-template>\n </div>\n `,\n})\nexport class SimpleModalWrapperComponent implements OnDestroy {\n /**\n * Target viewContainer to insert modal content component\n */\n @ViewChild('viewContainer', { read: ViewContainerRef, static: true }) viewContainer;\n\n /**\n * Link wrapper DOM element\n */\n @ViewChild('wrapper', { read: ElementRef, static: true })\n wrapper: ElementRef;\n\n /**\n * Wrapper modal and fade classes\n */\n modalClasses = 'modal fade-anim';\n\n /**\n * Dialog content componet\n * @type {SimpleModalComponent}\n */\n content: SimpleModalComponent<any, any>;\n\n /**\n * Click outside callback\n */\n clickOutsideCallback: (event: MouseEvent) => void;\n\n /**\n * Constructor\n * @param {ComponentFactoryResolver} resolver\n */\n constructor(private resolver: ComponentFactoryResolver) {}\n\n /**\n * Adds content modal component to wrapper\n * @param {Type<SimpleModalComponent>} component\n * @return {SimpleModalComponent}\n */\n addComponent<T, T1>(component: Type<SimpleModalComponent<T, T1>>) {\n const factory = this.resolver.resolveComponentFactory(component);\n const injector = Injector.create({ providers: [], parent: this.viewContainer.injector });\n const componentRef = factory.create(injector);\n this.viewContainer.insert(componentRef.hostView);\n this.content = <SimpleModalComponent<T, T1>>componentRef.instance;\n this.content.wrapper = this.wrapper;\n return this.content;\n }\n\n /**\n * Configures the function to call when you click on background of a modal but not the contents\n * @param callback\n */\n onClickOutsideModalContent(callback: () => void) {\n const containerEl = this.wrapper.nativeElement;\n\n this.clickOutsideCallback = (event: MouseEvent) => {\n if (event.target === containerEl) {\n callback();\n }\n };\n\n containerEl.addEventListener('mousedown', this.clickOutsideCallback, false);\n }\n\n ngOnDestroy() {\n if (this.clickOutsideCallback) {\n const containerEl = this.wrapper.nativeElement;\n containerEl.removeEventListener('mousedown', this.clickOutsideCallback, false);\n this.clickOutsideCallback = null;\n }\n }\n}\n","import {\n Component,\n ComponentFactoryResolver,\n ElementRef,\n Inject,\n Type,\n ViewContainerRef,\n ViewChild,\n} from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport {\n DefaultSimpleModalOptionConfig,\n SimpleModalOptions,\n SimpleModalOptionsOverrides,\n} from './simple-modal-options';\nimport { SimpleModalWrapperComponent } from './simple-modal-wrapper.component';\nimport { SimpleModalComponent } from './simple-modal.component';\n\n/**\n * View container manager which manages a list of modals currently active\n * inside the viewvontainer\n */\n@Component({\n selector: 'simple-modal-holder',\n template: '<ng-template #viewContainer></ng-template>',\n})\nexport class SimpleModalHolderComponent {\n /**\n * Target viewContainer to insert modals\n */\n @ViewChild('viewContainer', { read: ViewContainerRef, static: true }) viewContainer;\n\n /**\n * modal collection, maintained by addModal and removeModal\n * @type {Array<SimpleModalComponent> }\n */\n modals: Array<SimpleModalComponent<any, any>> = [];\n\n /**\n * if auto focus is on and no element focused, store it here to be restored back after close\n */\n previousActiveElement = null;\n\n /**\n * Constructor\n * @param {ComponentFactoryResolver} resolver\n */\n constructor(\n private resolver: ComponentFactoryResolver,\n @Inject(DefaultSimpleModalOptionConfig) private defaultSimpleModalOptions: SimpleModalOptions\n ) {}\n\n /**\n * Configures then adds modal to the modals array, and populates with data passed in\n * @param {Type<SimpleModalComponent>} component\n * @param {object?} data\n * @param {SimpleModalOptionsOverrides?} options\n * @return {Observable<*>}\n */\n addModal<T, T1>(\n component: Type<SimpleModalComponent<T, T1>>,\n data?: T,\n options?: SimpleModalOptionsOverrides\n ): Observable<T1> {\n // create component\n if (!this.viewContainer) {\n return of(null);\n }\n const factory = this.resolver.resolveComponentFactory(SimpleModalWrapperComponent);\n const componentRef = this.viewContainer.createComponent(factory);\n const modalWrapper: SimpleModalWrapperComponent = <SimpleModalWrapperComponent>(\n componentRef.instance\n );\n const _component: SimpleModalComponent<T, T1> = modalWrapper.addComponent(component);\n\n // assign options refs\n _component.options = options = Object.assign({}, this.defaultSimpleModalOptions, options);\n\n // set base classes for wrapper\n modalWrapper.modalClasses = options.wrapperDefaultClasses;\n\n // add to stack\n this.modals.push(_component);\n\n // wait a tick then setup the following while adding a modal\n this.wait().then(() => {\n this.toggleWrapperClass(modalWrapper.wrapper, options.wrapperClass);\n this.toggleBodyClass(options.bodyClass);\n this.wait(options.animationDuration).then(() => {\n this.autoFocusFirstElement(_component.wrapper, options.autoFocus);\n _component.markAsReady();\n });\n });\n\n // when closing modal remove it\n _component.onClosing(modal => this.removeModal(modal));\n\n // if clicking on background closes modal\n this.configureCloseOnClickOutside(modalWrapper);\n\n // map and return observable\n _component.mapDataObject(data);\n\n return _component.setupObserver();\n }\n\n /**\n * triggers components close function\n * to take effect\n * @param {SimpleModalComponent} component\n * @returns {Promise<void>}\n */\n removeModal(closingModal: SimpleModalComponent<any, any>): Promise<any> {\n const options = closingModal.options;\n this.toggleWrapperClass(closingModal.wrapper, options.wrapperClass);\n return this.wait(options.animationDuration).then(() => {\n this.removeModalFromArray(closingModal);\n this.toggleBodyClass(options.bodyClass);\n this.restorePreviousFocus();\n });\n }\n\n /**\n * Instructs all open modals to\n */\n removeAllModals(): Promise<any> {\n return Promise.all(this.modals.map(modal => this.removeModal(modal)));\n }\n\n /**\n * Bind a body class 'modal-open' to a condition of modals in pool > 0\n * @param bodyClass - string to add and remove from body in document\n */\n private toggleBodyClass(bodyClass: string) {\n if (!bodyClass) {\n return;\n }\n const body = document.getElementsByTagName('body')[0];\n const bodyClassItems = bodyClass.split(' ');\n if (!this.modals.length) {\n body.classList.remove(...bodyClassItems);\n } else {\n body.classList.add(...bodyClassItems);\n }\n }\n\n /**\n * if the option to close on background click is set, then hook up a callback\n * @param options\n * @param modalWrapper\n */\n private configureCloseOnClickOutside(modalWrapper: SimpleModalWrapperComponent) {\n modalWrapper.onClickOutsideModalContent(() => {\n if (modalWrapper.content.options.closeOnClickOutside) {\n modalWrapper.content.close();\n }\n });\n }\n\n /**\n * Auto focus o the first element if autofocus is on\n * @param options\n * @param modalWrapperEl\n */\n private autoFocusFirstElement(componentWrapper: ElementRef, autoFocus: boolean) {\n if (autoFocus) {\n const focusable = componentWrapper.nativeElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusable && focusable.length) {\n this.previousActiveElement = document.activeElement;\n focusable[0].focus();\n }\n }\n }\n\n /**\n * Restores the last focus is there was one\n */\n private restorePreviousFocus() {\n if (this.previousActiveElement) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n }\n\n /**\n * Configure the adding and removal of a wrapper class - predominantly animation focused\n * @param options\n * @param modalWrapperEl\n */\n private toggleWrapperClass(modalWrapperEl: ElementRef, wrapperClass: string) {\n const wrapperClassList = modalWrapperEl.nativeElement.classList;\n const wrapperClassItems = wrapperClass.split(' ');\n if (wrapperClassList.toString().indexOf(wrapperClass) !== -1) {\n wrapperClassList.remove(...wrapperClassItems);\n } else {\n wrapperClassList.add(...wrapperClassItems);\n }\n }\n\n /**\n * Helper function for a more readable timeout\n * @param ms\n */\n private wait(ms: number = 0) {\n return new Promise<void>((resolve, reject) => {\n setTimeout(() => resolve(), ms);\n });\n }\n\n /**\n * Instructs the holder to remove the modal and\n * removes this component from the collection\n * @param {SimpleModalComponent} component\n */\n private removeModalFromArray(component) {\n const index = this.modals.indexOf(component);\n if (index > -1) {\n this.viewContainer.remove(index);\n this.modals.splice(index, 1);\n }\n }\n}\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n EmbeddedViewRef,\n Injectable,\n Injector,\n Optional,\n Type,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { SimpleModalHolderComponent } from './simple-modal-holder.component';\nimport { SimpleModalComponent } from './simple-modal.component';\nimport { SimpleModalOptionsOverrides } from './simple-modal-options';\n\nexport class SimpleModalServiceConfig {\n container: HTMLElement | string = null;\n}\n\n@Injectable()\nexport class SimpleModalService {\n /**\n * Placeholder of modals\n * @type {SimpleModalHolderComponent}\n */\n private modalHolderComponent: SimpleModalHolderComponent;\n\n /**\n * HTML container for modals\n * type {HTMLElement | string}\n */\n private _container;\n\n /**\n * @param {ComponentFactoryResolver} resolver\n * @param {ApplicationRef} applicationRef\n * @param {Injector} injector\n * @param {SimpleModalServiceConfig} config\n */\n constructor(\n private resolver: ComponentFactoryResolver,\n private applicationRef: ApplicationRef,\n private injector: Injector,\n @Optional() config: SimpleModalServiceConfig\n ) {\n if (config) {\n this.container = config.container as any;\n }\n }\n\n /**\n * Adds modal\n * @param {Type<SimpleModalComponent<T, T1>>} component\n * @param {T?} data\n * @param {SimpleModalOptionsOverrides?} options\n * @return {Observable<T1>}\n */\n addModal<T, T1>(\n component: Type<SimpleModalComponent<T, T1>>,\n data?: T,\n options?: SimpleModalOptionsOverrides\n ): Observable<T1> {\n if (!this.modalHolderComponent) {\n this.modalHolderComponent = this.createSimpleModalHolder();\n }\n return this.modalHolderComponent.addModal<T, T1>(component, data, options);\n }\n\n /**\n * Hides and removes modal from DOM, resolves promise when fully removed\n * @param {SimpleModalComponent} component\n * @return {Promise<{}>}\n\n */\n removeModal(component: SimpleModalComponent<any, any>): Promise<{}> {\n if (!this.modalHolderComponent) {\n return Promise.resolve({});\n }\n return this.modalHolderComponent.removeModal(component);\n }\n\n /**\n * Closes all modals, resolves promise when they're fully removed\n * @return {Promise<{}>}\n */\n removeAll(): Promise<{}> {\n if (!this.modalHolderComponent) {\n return Promise.resolve({});\n }\n return this.modalHolderComponent.removeAllModals();\n }\n\n /**\n * Accessor for contain - will auto generate from string\n * if needed or default to the root element if nothing was set\n */\n\n private set container(c) {\n this._container = c;\n }\n\n private get container(): HTMLElement {\n if (typeof this._container === 'string') {\n this._container = document.getElementById(this._container);\n }\n\n if (!this._container && this.applicationRef['components'].length) {\n const componentRootViewContainer = this.applicationRef['components'][0];\n this.container = (componentRootViewContainer.hostView as EmbeddedViewRef<any>)\n .rootNodes[0] as HTMLElement;\n }\n\n // fallback\n if (!this._container || typeof this._container === 'string') {\n this._container = document.getElementsByTagName('body')[0];\n }\n\n return this._container;\n }\n\n /**\n * Creates and add to DOM modal holder component\n * @return {SimpleModalHolderComponent}\n */\n private createSimpleModalHolder(): SimpleModalHolderComponent {\n const componentFactory = this.resolver.resolveComponentFactory(SimpleModalHolderComponent);\n\n const componentRef = componentFactory.create(this.injector);\n const componentRootNode = (componentRef.hostView as EmbeddedViewRef<any>)\n .rootNodes[0] as HTMLElement;\n\n this.applicationRef.attachView(componentRef.hostView);\n\n componentRef.onDestroy(() => {\n this.applicationRef.detachView(componentRef.hostView);\n });\n\n this.container.appendChild(componentRootNode);\n\n return componentRef.instance;\n }\n}\n","import { ApplicationRef, ComponentFactoryResolver, Injector } from '@angular/core';\n\nimport { SimpleModalService, SimpleModalServiceConfig } from './simple-modal.service';\n\n/**\n * Modal service factory. Creates modal service with options\n * @param { ComponentFactoryResolver } resolver\n * @param { ApplicationRef } applicationRef\n * @param { Injector } injector\n * @param { SimpleModalServiceConfig } options\n * @return { SimpleModalService }\n */\nexport function SimpleModalServiceFactory(resolver: ComponentFactoryResolver,\n applicationRef: ApplicationRef,\n injector: Injector,\n options: SimpleModalServiceConfig) {\n return new SimpleModalService(resolver, applicationRef, injector, options);\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ApplicationRef,\n ComponentFactoryResolver,\n Injector,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\n\nimport { SimpleModalHolderComponent } from './simple-modal-holder.component';\nimport { SimpleModalWrapperComponent } from './simple-modal-wrapper.component';\nimport { SimpleModalService, SimpleModalServiceConfig } from './simple-modal.service';\nimport { SimpleModalServiceFactory } from './simple-modal-service.factory';\nimport {\n defaultSimpleModalOptions,\n DefaultSimpleModalOptionConfig,\n SimpleModalOptions,\n} from './simple-modal-options';\n\n@NgModule({\n declarations: [SimpleModalHolderComponent, SimpleModalWrapperComponent],\n providers: [\n SimpleModalService,\n {\n provide: DefaultSimpleModalOptionConfig,\n useValue: defaultSimpleModalOptions,\n },\n ],\n imports: [CommonModule],\n})\nexport class SimpleModalModule {\n static forRoot(\n config: SimpleModalServiceConfig,\n defaultModalOptions?: SimpleModalOptions\n ): ModuleWithProviders<SimpleModalModule> {\n return {\n ngModule: SimpleModalModule,\n providers: [\n { provide: SimpleModalServiceConfig, useValue: config },\n {\n provide: SimpleModalService,\n useFactory: SimpleModalServiceFactory,\n deps: [ComponentFactoryResolver, ApplicationRef, Injector, SimpleModalServiceConfig],\n },\n {\n provide: DefaultSimpleModalOptionConfig,\n useValue: defaultModalOptions || defaultSimpleModalOptions,\n },\n ],\n };\n }\n\n constructor() {}\n}\n","import { Component, ElementRef, HostListener, OnDestroy } from '@angular/core';\nimport { Observable, Observer, Subject, BehaviorSubject } from 'rxjs';\n\nimport { SimpleModalOptions } from './simple-modal-options';\n\nexport interface OnDestroyLike {\n ngOnDestroy(): void;\n [key: string]: any;\n}\n\n/**\n * Abstract modal\n * @template T - modal data;\n * @template T1 - modal result\n */\n@Component({\n template: '',\n})\nexport abstract class SimpleModalComponent<T, T1> {\n /**\n * Observer to return result from modal\n */\n private observer: Observer<T1>;\n\n /**\n * Dialog result\n * @type {T1}\n */\n result: T1;\n\n /**\n * Dialog wrapper (modal placeholder)\n */\n wrapper: ElementRef;\n\n /**\n * ref of options for this component\n */\n options: SimpleModalOptions;\n\n /**\n * ready$ is when all animations and focusing have comleted\n */\n _ready$ = new BehaviorSubject<boolean>(false);\n\n /**\n * Callback to the holders close function\n */\n private closerCallback: (component) => Promise<any> = () => Promise.resolve();\n\n /**\n * Constructor\n */\n constructor() {}\n\n /**\n * Maps your object passed in the creation to fields in your own Dialog classes\n * @param {T} data\n */\n mapDataObject(data: T): void {\n data = data || <T>{};\n const keys = Object.keys(data);\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n if (\n data[key] &&\n this[key] &&\n typeof data[key] === 'object' &&\n typeof this[key] === 'object'\n ) {\n Object.assign(this[key], data[key]);\n } else {\n this[key] = data[key];\n }\n }\n }\n\n /**\n * Setup observer\n * @return {Observable<T1>}\n */\n setupObserver(): Observable<T1> {\n return Observable.create(observer => {\n this.observer = observer;\n\n // called if observable is unsubscribed to\n return () => {\n this.close();\n };\n });\n }\n\n /**\n * Defines what happens when close is called - default this\n * will just call the default remove modal process. If overriden\n * must include\n * @param callback\n */\n onClosing(callback: (component: SimpleModalComponent<any, any>) => Promise<any>): void {\n this.closerCallback = callback;\n }\n\n /**\n * Closes modal\n */\n close(): Promise<any> {\n return this.closerCallback(this).then(v => {\n if (this.observer) {\n this.observer.next(this.result);\n this.observer.complete();\n }\n return v;\n });\n }\n\n /**\n * keypress binding ngx way\n * @param evt\n */\n @HostListener('document:keydown.escape', ['$event'])\n onKeydownHandler(evt: KeyboardEvent) {\n if (this.options && this.options.closeOnEscape) {\n this.close();\n }\n }\n\n get ready$() {\n return this._ready$.asObservable();\n }\n\n markAsReady() {\n this._ready$.next(true);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}