UNPKG

@looorent/ngx-simple-modal

Version:

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

118 lines 10.5 kB
import { Component, HostListener } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import * as i0 from "@angular/core"; class SimpleModalComponent { /** * Observer to return result from modal */ observer; /** * Drag handle */ handle; /** * Dialog result * @type {T1} */ result; /** * Dialog wrapper (modal placeholder) */ wrapper; /** * ref of options for this component */ options; /** * ready$ is when all animations and focusing have comleted */ _ready$ = new BehaviorSubject(false); /** * Callback to the holders close function */ closerCallback = () => Promise.resolve(); /** * Constructor */ constructor() { } /** * Maps your object passed in the creation to fields in your own Dialog classes * @param {T} data */ mapDataObject(data) { data = data || {}; const keys = Object.keys(data); for (let i = 0, length = keys.length; i < length; i++) { const key = keys[i]; if (data[key] && this[key] && typeof data[key] === 'object' && typeof this[key] === 'object') { Object.assign(this[key], data[key]); } else { this[key] = data[key]; } } } /** * Setup observer * @return {Observable<T1>} */ setupObserver() { return Observable.create(observer => { this.observer = observer; // called if observable is unsubscribed to return () => { this.close(); }; }); } /** * Defines what happens when close is called - default this * will just call the default remove modal process. If overridden * must include * @param callback */ onClosing(callback) { this.closerCallback = callback; } /** * Closes modal */ close() { return this.closerCallback(this).then(v => { if (this.observer) { this.observer.next(this.result); this.observer.complete(); } return v; }); } /** * keypress binding ngx way * @param evt */ onKeydownHandler(evt) { if (this.options && this.options.closeOnEscape) { this.close(); } } get ready$() { return this._ready$.asObservable(); } markAsReady() { this._ready$.next(true); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SimpleModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: SimpleModalComponent, selector: "ng-component", host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, ngImport: i0, template: '', isInline: true }); } export { SimpleModalComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: SimpleModalComponent, decorators: [{ type: Component, args: [{ template: '' }] }], ctorParameters: function () { return []; }, propDecorators: { onKeydownHandler: [{ type: HostListener, args: ['document:keydown.escape', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaW1wbGUtbW9kYWwvc2ltcGxlLW1vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBWSxNQUFNLE1BQU0sQ0FBQzs7QUFTN0QsTUFNc0Isb0JBQW9CO0lBQ3hDOztPQUVHO0lBQ0ssUUFBUSxDQUFlO0lBRS9COztPQUVHO0lBQ0gsTUFBTSxDQUF5QjtJQUUvQjs7O09BR0c7SUFDSCxNQUFNLENBQUs7SUFFWDs7T0FFRztJQUNILE9BQU8sQ0FBYTtJQUVwQjs7T0FFRztJQUNILE9BQU8sQ0FBcUI7SUFFNUI7O09BRUc7SUFDSCxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFOUM7O09BRUc7SUFDSyxjQUFjLEdBQWdDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUU5RTs7T0FFRztJQUNILGdCQUFlLENBQUM7SUFFaEI7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLElBQU87UUFDbkIsSUFBSSxHQUFHLElBQUksSUFBTyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUNFLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRO2dCQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQzdCO2dCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkI7U0FDRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhO1FBQ1gsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBRXpCLDBDQUEwQztZQUMxQyxPQUFPLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxRQUFxRTtRQUM3RSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUMxQjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBRUgsZ0JBQWdCLENBQUMsR0FBa0I7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7dUdBdkhtQixvQkFBb0I7MkZBQXBCLG9CQUFvQixvSUFObkIsRUFBRTs7U0FNSCxvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFOekMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7MEVBaUh6QixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNpbXBsZU1vZGFsT3B0aW9ucyB9IGZyb20gJy4vc2ltcGxlLW1vZGFsLW9wdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9uRGVzdHJveUxpa2Uge1xuICBuZ09uRGVzdHJveSgpOiB2b2lkO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBDb21wb25lbnQoeyB0ZW1wbGF0ZTogJycgfSlcbi8qKlxuICogQWJzdHJhY3QgbW9kYWxcbiAqIEB0ZW1wbGF0ZSBUIC0gbW9kYWwgZGF0YTtcbiAqIEB0ZW1wbGF0ZSBUMSAtIG1vZGFsIHJlc3VsdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2ltcGxlTW9kYWxDb21wb25lbnQ8VCwgVDE+IHtcbiAgLyoqXG4gICAqIE9ic2VydmVyIHRvIHJldHVybiByZXN1bHQgZnJvbSBtb2RhbFxuICAgKi9cbiAgcHJpdmF0ZSBvYnNlcnZlcjogT2JzZXJ2ZXI8VDE+O1xuXG4gIC8qKlxuICAgKiBEcmFnIGhhbmRsZVxuICAgKi9cbiAgaGFuZGxlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgcmVzdWx0XG4gICAqIEB0eXBlIHtUMX1cbiAgICovXG4gIHJlc3VsdDogVDE7XG5cbiAgLyoqXG4gICAqIERpYWxvZyB3cmFwcGVyIChtb2RhbCBwbGFjZWhvbGRlcilcbiAgICovXG4gIHdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIHJlZiBvZiBvcHRpb25zIGZvciB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgb3B0aW9uczogU2ltcGxlTW9kYWxPcHRpb25zO1xuXG4gIC8qKlxuICAgKiByZWFkeSQgaXMgd2hlbiBhbGwgYW5pbWF0aW9ucyBhbmQgZm9jdXNpbmcgaGF2ZSBjb21sZXRlZFxuICAgKi9cbiAgX3JlYWR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byB0aGUgaG9sZGVycyBjbG9zZSBmdW5jdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjbG9zZXJDYWxsYmFjazogKGNvbXBvbmVudCkgPT4gUHJvbWlzZTxhbnk+ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIE1hcHMgeW91ciBvYmplY3QgcGFzc2VkIGluIHRoZSBjcmVhdGlvbiB0byBmaWVsZHMgaW4geW91ciBvd24gRGlhbG9nIGNsYXNzZXNcbiAgICogQHBhcmFtIHtUfSBkYXRhXG4gICAqL1xuICBtYXBEYXRhT2JqZWN0KGRhdGE6IFQpOiB2b2lkIHtcbiAgICBkYXRhID0gZGF0YSB8fCA8VD57fTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFba2V5XSAmJlxuICAgICAgICB0aGlzW2tleV0gJiZcbiAgICAgICAgdHlwZW9mIGRhdGFba2V5XSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIHRoaXNba2V5XSA9PT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXNba2V5XSwgZGF0YVtrZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0dXAgb2JzZXJ2ZXJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUMT59XG4gICAqL1xuICBzZXR1cE9ic2VydmVyKCk6IE9ic2VydmFibGU8VDE+IHtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgdGhpcy5vYnNlcnZlciA9IG9ic2VydmVyO1xuXG4gICAgICAvLyBjYWxsZWQgaWYgb2JzZXJ2YWJsZSBpcyB1bnN1YnNjcmliZWQgdG9cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyB3aGF0IGhhcHBlbnMgd2hlbiBjbG9zZSBpcyBjYWxsZWQgLSBkZWZhdWx0IHRoaXNcbiAgICogd2lsbCBqdXN0IGNhbGwgdGhlIGRlZmF1bHQgcmVtb3ZlIG1vZGFsIHByb2Nlc3MuIElmIG92ZXJyaWRkZW5cbiAgICogbXVzdCBpbmNsdWRlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb25DbG9zaW5nKGNhbGxiYWNrOiAoY29tcG9uZW50OiBTaW1wbGVNb2RhbENvbXBvbmVudDxhbnksIGFueT4pID0+IFByb21pc2U8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VyQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgbW9kYWxcbiAgICovXG4gIGNsb3NlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VyQ2FsbGJhY2sodGhpcykudGhlbih2ID0+IHtcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIubmV4dCh0aGlzLnJlc3VsdCk7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGtleXByZXNzIGJpbmRpbmcgbmd4IHdheVxuICAgKiBAcGFyYW0gZXZ0XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bkhhbmRsZXIoZXZ0OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY2xvc2VPbkVzY2FwZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCByZWFkeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG1hcmtBc1JlYWR5KCkge1xuICAgIHRoaXMuX3JlYWR5JC5uZXh0KHRydWUpO1xuICB9XG59XG4iXX0=