ngx-modialog-7
Version:
Modal / Dialog for Angular
261 lines • 15.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/models/dialog-ref.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Subject } from 'rxjs';
import { PromiseCompleter } from '../framework/utils';
import { DialogBailOutError } from '../models/errors';
/**
* API to an open modal window.
* @template T
*/
var /**
* API to an open modal window.
* @template T
*/
DialogRef = /** @class */ (function () {
function DialogRef(overlay, context) {
this.overlay = overlay;
this.context = context;
this._resultDeferred = new PromiseCompleter();
this._onDestroy = new Subject();
this.onDestroy = this._onDestroy.asObservable();
}
Object.defineProperty(DialogRef.prototype, "result", {
/**
* A Promise that is resolved on a close event and rejected on a dismiss event.
*/
get: /**
* A Promise that is resolved on a close event and rejected on a dismiss event.
* @return {?}
*/
function () {
return this._resultDeferred.promise;
},
enumerable: true,
configurable: true
});
/**
* Set a close/dismiss guard
* @param guard
*/
/**
* Set a close/dismiss guard
* @param {?} guard
* @return {?}
*/
DialogRef.prototype.setCloseGuard = /**
* Set a close/dismiss guard
* @param {?} guard
* @return {?}
*/
function (guard) {
this.closeGuard = guard;
};
/**
* Close the modal with a return value, i.e: result.
*/
/**
* Close the modal with a return value, i.e: result.
* @param {?=} result
* @return {?}
*/
DialogRef.prototype.close = /**
* Close the modal with a return value, i.e: result.
* @param {?=} result
* @return {?}
*/
function (result) {
var _this = this;
if (result === void 0) { result = null; }
/** @type {?} */
var _close = (/**
* @return {?}
*/
function () {
_this.destroy();
_this._resultDeferred.resolve(result);
});
this._fireHook('beforeClose')
.then((/**
* @param {?} value
* @return {?}
*/
function (value) { return 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.
*/
/**
* 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.
* @return {?}
*/
DialogRef.prototype.dismiss = /**
* 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.
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var _dismiss = (/**
* @return {?}
*/
function () {
_this.destroy();
_this._resultDeferred.promise.catch((/**
* @return {?}
*/
function () { }));
_this._resultDeferred.reject();
});
this._fireHook('beforeDismiss')
.then((/**
* @param {?} value
* @return {?}
*/
function (value) { return value !== true && _dismiss(); }))
.catch(_dismiss);
};
/**
* Gracefully close the overlay/dialog with a rejected result.
* Does not trigger canDestroy on the overlay.
*/
/**
* Gracefully close the overlay/dialog with a rejected result.
* Does not trigger canDestroy on the overlay.
* @return {?}
*/
DialogRef.prototype.bailOut = /**
* Gracefully close the overlay/dialog with a rejected result.
* Does not trigger canDestroy on the overlay.
* @return {?}
*/
function () {
if (this.destroyed !== true) {
this.destroyed = true;
this._onDestroy.next(null);
this._onDestroy.complete();
this._resultDeferred.reject(new DialogBailOutError());
}
};
/**
* @return {?}
*/
DialogRef.prototype.destroy = /**
* @return {?}
*/
function () {
var _this = this;
if (this.destroyed !== true) {
this.destroyed = true;
if (typeof this.overlayRef.instance.canDestroy === 'function') {
this.overlayRef.instance.canDestroy()
.catch((/**
* @return {?}
*/
function () { }))
.then((/**
* @return {?}
*/
function () { return _this._destroy(); }));
}
else {
this._destroy();
}
}
};
/**
* @private
* @return {?}
*/
DialogRef.prototype._destroy = /**
* @private
* @return {?}
*/
function () {
this._onDestroy.next(null);
this._onDestroy.complete();
this.overlayRef.destroy();
};
/**
* @private
* @template G
* @param {?} name
* @return {?}
*/
DialogRef.prototype._fireHook = /**
* @private
* @template G
* @param {?} name
* @return {?}
*/
function (name) {
/** @type {?} */
var guard = this.closeGuard;
/** @type {?} */
var fn = guard && typeof guard[name] === 'function' && guard[name];
return Promise.resolve(fn ? fn.call(guard) : false);
};
return DialogRef;
}());
/**
* API to an open modal window.
* @template T
*/
export { DialogRef };
if (false) {
/**
* Reference to the overlay component ref.
* @type {?}
*/
DialogRef.prototype.overlayRef;
/**
* States if the modal is inside a specific element.
* @type {?}
*/
DialogRef.prototype.inElement;
/** @type {?} */
DialogRef.prototype.destroyed;
/**
* Fired before dialog is destroyed.
* No need to unsubscribe, done automatically.
* Note: Always called.
* When called, overlayRef might or might not be destroyed.
* @type {?}
*/
DialogRef.prototype.onDestroy;
/**
* @type {?}
* @private
*/
DialogRef.prototype._resultDeferred;
/**
* @type {?}
* @private
*/
DialogRef.prototype._onDestroy;
/**
* @type {?}
* @private
*/
DialogRef.prototype.closeGuard;
/** @type {?} */
DialogRef.prototype.overlay;
/** @type {?} */
DialogRef.prototype.context;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlZi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tb2RpYWxvZy03LyIsInNvdXJjZXMiOlsibGliL21vZGVscy9kaWFsb2ctcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUd0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFLdEQ7Ozs7O0lBeUJFLG1CQUFtQixPQUFnQixFQUFTLE9BQVc7UUFBcEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFTLFlBQU8sR0FBUCxPQUFPLENBQUk7UUFKL0Msb0JBQWUsR0FBMEIsSUFBSSxnQkFBZ0IsRUFBTyxDQUFDO1FBQ3JFLGVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUl0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUtELHNCQUFJLDZCQUFNO1FBSFY7O1dBRUc7Ozs7O1FBQ0g7WUFDRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3RDLENBQUM7OztPQUFBO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSCxpQ0FBYTs7Ozs7SUFBYixVQUFjLEtBQWlCO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ0gseUJBQUs7Ozs7O0lBQUwsVUFBTSxNQUFrQjtRQUF4QixpQkFRQztRQVJLLHVCQUFBLEVBQUEsYUFBa0I7O1lBQ2hCLE1BQU07OztRQUFHO1lBQ2IsS0FBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsS0FBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FB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Ozs7SUFDN0UsK0JBQXdEOzs7OztJQUN4RCwrQkFBK0I7O0lBRW5CLDRCQUF1Qjs7SUFBRSw0QkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUHJvbWlzZUNvbXBsZXRlciB9IGZyb20gJy4uL2ZyYW1ld29yay91dGlscyc7XG5pbXBvcnQgeyBPdmVybGF5LCBNb2RhbE92ZXJsYXkgfSBmcm9tICcuLi9vdmVybGF5L2luZGV4JztcbmltcG9ydCB7IENsb3NlR3VhcmQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW5zJztcbmltcG9ydCB7IERpYWxvZ0JhaWxPdXRFcnJvciB9IGZyb20gJy4uL21vZGVscy9lcnJvcnMnO1xuXG4vKipcbiAqIEFQSSB0byBhbiBvcGVuIG1vZGFsIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpYWxvZ1JlZjxUPiB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgY29tcG9uZW50IHJlZi5cbiAgICovXG4gIG92ZXJsYXlSZWY6IENvbXBvbmVudFJlZjxNb2RhbE92ZXJsYXk+O1xuXG4gIC8qKlxuICAgKiBTdGF0ZXMgaWYgdGhlIG1vZGFsIGlzIGluc2lkZSBhIHNwZWNpZmljIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgaW5FbGVtZW50OiBib29sZWFuO1xuXG4gIHB1YmxpYyBkZXN0cm95ZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpcmVkIGJlZm9yZSBkaWFsb2cgaXMgZGVzdHJveWVkLlxuICAgKiBObyBuZWVkIHRvIHVuc3Vic2NyaWJlLCBkb25lIGF1dG9tYXRpY2FsbHkuXG4gICAqIE5vdGU6IEFsd2F5cyBjYWxsZWQuXG4gICAqIFdoZW4gY2FsbGVkLCBvdmVybGF5UmVmIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBkZXN0cm95ZWQuXG4gICAqL1xuICBwdWJsaWMgb25EZXN0cm95OiBPYnNlcnZhYmxlPHZvaWQ+O1xuXG4gIHByaXZhdGUgX3Jlc3VsdERlZmVycmVkOiBQcm9taXNlQ29tcGxldGVyPGFueT4gPSBuZXcgUHJvbWlzZUNvbXBsZXRlcjxhbnk+KCk7XG4gIHByaXZhdGUgX29uRGVzdHJveTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgY2xvc2VHdWFyZDogQ2xvc2VHdWFyZDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSwgcHVibGljIGNvbnRleHQ/OiBUKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kgPSB0aGlzLl9vbkRlc3Ryb3kuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQSBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb24gYSBjbG9zZSBldmVudCBhbmQgcmVqZWN0ZWQgb24gYSBkaXNtaXNzIGV2ZW50LlxuICAgKi9cbiAgZ2V0IHJlc3VsdCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXN1bHREZWZlcnJlZC5wcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGNsb3NlL2Rpc21pc3MgZ3VhcmRcbiAgICogQHBhcmFtIGd1YXJkXG4gICAqL1xuICBzZXRDbG9zZUd1YXJkKGd1YXJkOiBDbG9zZUd1YXJkKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUd1YXJkID0gZ3VhcmQ7XG4gIH1cblxuICAvKipcbiAgICogIENsb3NlIHRoZSBtb2RhbCB3aXRoIGEgcmV0dXJuIHZhbHVlLCBpLmU6IHJlc3VsdC5cbiAgICovXG4gIGNsb3NlKHJlc3VsdDogYW55ID0gbnVsbCkge1xuICAgIGNvbnN0IF9jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fcmVzdWx0RGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xuICAgIH07XG4gICAgdGhpcy5fZmlyZUhvb2s8Ym9vbGVhbj4oJ2JlZm9yZUNsb3NlJylcbiAgICAgIC50aGVuKHZhbHVlID0+IHZhbHVlICE9PSB0cnVlICYmIF9jbG9zZSgpKVxuICAgICAgLmNhdGNoKF9jbG9zZSk7XG4gIH1cblxuICAvKipcbiAgICogIENsb3NlIHRoZSBtb2RhbCB3aXRob3V0IGEgcmV0dXJuIHZhbHVlLCBpLmU6IGNhbmNlbGxlZC5cbiAgICogIFRoaXMgY2FsbCBpcyBhdXRvbWF0aWNhbGx5IGludm9rZWQgd2hlbiBhIHVzZXIgZWl0aGVyOlxuICAgKiAgLSBQcmVzc2VzIGFuIGV4aXQga2V5Ym9hcmQga2V5IChpZiBjb25maWd1cmVkKS5cbiAgICogIC0gQ2xpY2tzIG91dHNpZGUgb2YgdGhlIG1vZGFsIHdpbmRvdyAoaWYgY29uZmlndXJlZCkuXG4gICAqICBVc3VhbGx5LCBkaXNtaXNzIHJlcHJlc2VudCBhIENhbmNlbCBidXR0b24gb3IgYSBYIGJ1dHRvbi5cbiAgICovXG4gIGRpc21pc3MoKSB7XG4gICAgY29uc3QgX2Rpc21pc3MgPSAoKSA9PiB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX3Jlc3VsdERlZmVycmVkLnByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgdGhpcy5fcmVzdWx0RGVmZXJyZWQucmVqZWN0KCk7XG4gICAgfTtcbiAgICB0aGlzLl9maXJlSG9vazxib29sZWFuPignYmVmb3JlRGlzbWlzcycpXG4gICAgICAudGhlbih2YWx1ZSA9PiB2YWx1ZSAhPT0gdHJ1ZSAmJiBfZGlzbWlzcygpKVxuICAgICAgLmNhdGNoKF9kaXNtaXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFjZWZ1bGx5IGNsb3NlIHRoZSBvdmVybGF5L2RpYWxvZyB3aXRoIGEgcmVqZWN0ZWQgcmVzdWx0LlxuICAgKiBEb2VzIG5vdCB0cmlnZ2VyIGNhbkRlc3Ryb3kgb24gdGhlIG92ZXJsYXkuXG4gICAqL1xuICBiYWlsT3V0KCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fb25EZXN0cm95Lm5leHQobnVsbCk7XG4gICAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuX3Jlc3VsdERlZmVycmVkLnJlamVjdChuZXcgRGlhbG9nQmFpbE91dEVycm9yKCkpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vdmVybGF5UmVmLmluc3RhbmNlLmNhbkRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmluc3RhbmNlLmNhbkRlc3Ryb3koKVxuICAgICAgICAgIC5jYXRjaCggKCkgPT4ge30pXG4gICAgICAgICAgLnRoZW4gKCAoKSA9PiB0aGlzLl9kZXN0cm95KCkgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KG51bGwpO1xuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub3ZlcmxheVJlZi5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIF9maXJlSG9vazxHPihuYW1lOiAnYmVmb3JlQ2xvc2UnIHwgJ2JlZm9yZURpc21pc3MnKTogUHJvbWlzZTxHPiB7XG4gICAgY29uc3QgZ3VhcmQgPSB0aGlzLmNsb3NlR3VhcmQsXG4gICAgICAgICAgZm46IEZ1bmN0aW9uID0gZ3VhcmQgJiYgdHlwZW9mIGd1YXJkW25hbWVdID09PSAnZnVuY3Rpb24nICYmIGd1YXJkW25hbWVdO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmbiA/IGZuLmNhbGwoZ3VhcmQpIDogZmFsc2UpO1xuICB9XG59XG4iXX0=