ngx-modialog-11
Version:
Modal / Dialog for Angular
92 lines • 11.3 kB
JavaScript
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=