UNPKG

ngx-modialog-11

Version:
92 lines 11.3 kB
import { Subject } from 'rxjs'; import { PromiseCompleter } from '../framework/utils'; import { DialogBailOutError } from './errors'; /** * API to an open modal window. */ export class DialogRef { constructor(overlay, context) { this.overlay = overlay; this.context = context; this._resultDeferred = new PromiseCompleter(); this._onDestroy = new Subject(); this.onDestroy = this._onDestroy.asObservable(); } /** * A Promise that is resolved on a close event and rejected on a dismiss event. */ get result() { return this._resultDeferred.promise; } /** * Set a close/dismiss guard * @param guard */ setCloseGuard(guard) { this.closeGuard = guard; } /** * Close the modal with a return value, i.e: result. */ close(result = null) { const _close = () => { this.destroy(); this._resultDeferred.resolve(result); }; this._fireHook('beforeClose') .then(value => value !== true && _close()) .catch(_close); } /** * Close the modal without a return value, i.e: cancelled. * This call is automatically invoked when a user either: * - Presses an exit keyboard key (if configured). * - Clicks outside of the modal window (if configured). * Usually, dismiss represent a Cancel button or a X button. */ dismiss() { const _dismiss = () => { this.destroy(); this._resultDeferred.promise.catch(() => { }); this._resultDeferred.reject(); }; this._fireHook('beforeDismiss') .then(value => value !== true && _dismiss()) .catch(_dismiss); } /** * Gracefully close the overlay/dialog with a rejected result. * Does not trigger canDestroy on the overlay. */ bailOut() { if (this.destroyed !== true) { this.destroyed = true; this._onDestroy.next(null); this._onDestroy.complete(); this._resultDeferred.reject(new DialogBailOutError()); } } destroy() { if (this.destroyed !== true) { this.destroyed = true; if (typeof this.overlayRef.instance.canDestroy === 'function') { this.overlayRef.instance.canDestroy() .catch(() => { }) .then(() => this._destroy()); } else { this._destroy(); } } } _destroy() { this._onDestroy.next(null); this._onDestroy.complete(); this.overlayRef.destroy(); } _fireHook(name) { const guard = this.closeGuard, fn = guard && typeof guard[name] === 'function' && guard[name]; return Promise.resolve(fn ? fn.call(guard) : false); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tb2RpYWxvZy0xMS9zcmMvbGliL21vZGVscy9kaWFsb2ctcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTlDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUF5QnBCLFlBQW1CLE9BQWdCLEVBQVMsT0FBVztRQUFwQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBSTtRQUovQyxvQkFBZSxHQUEwQixJQUFJLGdCQUFnQixFQUFPLENBQUM7UUFDckUsZUFBVSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBSXRELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsS0FBaUI7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFNBQWMsSUFBSTtRQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBVSxhQUFhLENBQUM7YUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQzthQUN6QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU87UUFDTCxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBVSxlQUFlLENBQUM7YUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQzthQUMzQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFFdEIsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtxQkFDbEMsS0FBSyxDQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztxQkFDaEIsSUFBSSxDQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBRSxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNqQjtTQUNGO0lBQ0gsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLFNBQVMsQ0FBSSxJQUFxQztRQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUN2QixFQUFFLEdBQWEsS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0UsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFByb21pc2VDb21wbGV0ZXIgfSBmcm9tICcuLi9mcmFtZXdvcmsvdXRpbHMnO1xyXG5pbXBvcnQgeyBPdmVybGF5LCBNb2RhbE92ZXJsYXkgfSBmcm9tICcuLi9vdmVybGF5L2luZGV4JztcclxuaW1wb3J0IHsgQ2xvc2VHdWFyZCB9IGZyb20gJy4vdG9rZW5zJztcclxuaW1wb3J0IHsgRGlhbG9nQmFpbE91dEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xyXG5cclxuLyoqXHJcbiAqIEFQSSB0byBhbiBvcGVuIG1vZGFsIHdpbmRvdy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dSZWY8VD4ge1xyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgb3ZlcmxheSBjb21wb25lbnQgcmVmLlxyXG4gICAqL1xyXG4gIG92ZXJsYXlSZWY6IENvbXBvbmVudFJlZjxNb2RhbE92ZXJsYXk+O1xyXG5cclxuICAvKipcclxuICAgKiBTdGF0ZXMgaWYgdGhlIG1vZGFsIGlzIGluc2lkZSBhIHNwZWNpZmljIGVsZW1lbnQuXHJcbiAgICovXHJcbiAgcHVibGljIGluRWxlbWVudDogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIGRlc3Ryb3llZDogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZWQgYmVmb3JlIGRpYWxvZyBpcyBkZXN0cm95ZWQuXHJcbiAgICogTm8gbmVlZCB0byB1bnN1YnNjcmliZSwgZG9uZSBhdXRvbWF0aWNhbGx5LlxyXG4gICAqIE5vdGU6IEFsd2F5cyBjYWxsZWQuXHJcbiAgICogV2hlbiBjYWxsZWQsIG92ZXJsYXlSZWYgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGRlc3Ryb3llZC5cclxuICAgKi9cclxuICBwdWJsaWMgb25EZXN0cm95OiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICBwcml2YXRlIF9yZXN1bHREZWZlcnJlZDogUHJvbWlzZUNvbXBsZXRlcjxhbnk+ID0gbmV3IFByb21pc2VDb21wbGV0ZXI8YW55PigpO1xyXG4gIHByaXZhdGUgX29uRGVzdHJveTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjbG9zZUd1YXJkOiBDbG9zZUd1YXJkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSwgcHVibGljIGNvbnRleHQ/OiBUKSB7XHJcbiAgICB0aGlzLm9uRGVzdHJveSA9IHRoaXMuX29uRGVzdHJveS5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uIGEgY2xvc2UgZXZlbnQgYW5kIHJlamVjdGVkIG9uIGEgZGlzbWlzcyBldmVudC5cclxuICAgKi9cclxuICBnZXQgcmVzdWx0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0RGVmZXJyZWQucHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGNsb3NlL2Rpc21pc3MgZ3VhcmRcclxuICAgKiBAcGFyYW0gZ3VhcmRcclxuICAgKi9cclxuICBzZXRDbG9zZUd1YXJkKGd1YXJkOiBDbG9zZUd1YXJkKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlR3VhcmQgPSBndWFyZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICBDbG9zZSB0aGUgbW9kYWwgd2l0aCBhIHJldHVybiB2YWx1ZSwgaS5lOiByZXN1bHQuXHJcbiAgICovXHJcbiAgY2xvc2UocmVzdWx0OiBhbnkgPSBudWxsKSB7XHJcbiAgICBjb25zdCBfY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLl9yZXN1bHREZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZmlyZUhvb2s8Ym9vbGVhbj4oJ2JlZm9yZUNsb3NlJylcclxuICAgICAgLnRoZW4odmFsdWUgPT4gdmFsdWUgIT09IHRydWUgJiYgX2Nsb3NlKCkpXHJcbiAgICAgIC5jYXRjaChfY2xvc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogIENsb3NlIHRoZSBtb2RhbCB3aXRob3V0IGEgcmV0dXJuIHZhbHVlLCBpLmU6IGNhbmNlbGxlZC5cclxuICAgKiAgVGhpcyBjYWxsIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCB3aGVuIGEgdXNlciBlaXRoZXI6XHJcbiAgICogIC0gUHJlc3NlcyBhbiBleGl0IGtleWJvYXJkIGtleSAoaWYgY29uZmlndXJlZCkuXHJcbiAgICogIC0gQ2xpY2tzIG91dHNpZGUgb2YgdGhlIG1vZGFsIHdpbmRvdyAoaWYgY29uZmlndXJlZCkuXHJcbiAgICogIFVzdWFsbHksIGRpc21pc3MgcmVwcmVzZW50IGEgQ2FuY2VsIGJ1dHRvbiBvciBhIFggYnV0dG9uLlxyXG4gICAqL1xyXG4gIGRpc21pc3MoKSB7XHJcbiAgICBjb25zdCBfZGlzbWlzcyA9ICgpID0+IHtcclxuICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuX3Jlc3VsdERlZmVycmVkLnByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgICB0aGlzLl9yZXN1bHREZWZlcnJlZC5yZWplY3QoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLl9maXJlSG9vazxib29sZWFuPignYmVmb3JlRGlzbWlzcycpXHJcbiAgICAgIC50aGVuKHZhbHVlID0+IHZhbHVlICE9PSB0cnVlICYmIF9kaXNtaXNzKCkpXHJcbiAgICAgIC5jYXRjaChfZGlzbWlzcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHcmFjZWZ1bGx5IGNsb3NlIHRoZSBvdmVybGF5L2RpYWxvZyB3aXRoIGEgcmVqZWN0ZWQgcmVzdWx0LlxyXG4gICAqIERvZXMgbm90IHRyaWdnZXIgY2FuRGVzdHJveSBvbiB0aGUgb3ZlcmxheS5cclxuICAgKi9cclxuICBiYWlsT3V0KCkge1xyXG4gICAgaWYgKHRoaXMuZGVzdHJveWVkICE9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fb25EZXN0cm95Lm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLl9yZXN1bHREZWZlcnJlZC5yZWplY3QobmV3IERpYWxvZ0JhaWxPdXRFcnJvcigpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQgIT09IHRydWUpIHtcclxuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm92ZXJsYXlSZWYuaW5zdGFuY2UuY2FuRGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5pbnN0YW5jZS5jYW5EZXN0cm95KClcclxuICAgICAgICAgIC5jYXRjaCggKCkgPT4ge30pXHJcbiAgICAgICAgICAudGhlbiAoICgpID0+IHRoaXMuX2Rlc3Ryb3koKSApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlyZUhvb2s8Rz4obmFtZTogJ2JlZm9yZUNsb3NlJyB8ICdiZWZvcmVEaXNtaXNzJyk6IFByb21pc2U8Rz4ge1xyXG4gICAgY29uc3QgZ3VhcmQgPSB0aGlzLmNsb3NlR3VhcmQsXHJcbiAgICAgICAgICBmbjogRnVuY3Rpb24gPSBndWFyZCAmJiB0eXBlb2YgZ3VhcmRbbmFtZV0gPT09ICdmdW5jdGlvbicgJiYgZ3VhcmRbbmFtZV07XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmbiA/IGZuLmNhbGwoZ3VhcmQpIDogZmFsc2UpO1xyXG4gIH1cclxufVxyXG4iXX0=