modal-ref.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. /**
  6. * A reference to the currently opened (active) modal.
  7. *
  8. * Instances of this class can be injected into your component passed as modal content.
  9. * So you can `.close()` or `.dismiss()` the modal window from your component.
  10. */
  11. var /**
  12. * A reference to the currently opened (active) modal.
  13. *
  14. * Instances of this class can be injected into your component passed as modal content.
  15. * So you can `.close()` or `.dismiss()` the modal window from your component.
  16. */
  17. NgbActiveModal = /** @class */ (function () {
  18. function NgbActiveModal() {
  19. }
  20. /**
  21. * Closes the modal with an optional `result` value.
  22. *
  23. * The `NgbMobalRef.result` promise will be resolved with the provided value.
  24. */
  25. /**
  26. * Closes the modal with an optional `result` value.
  27. *
  28. * The `NgbMobalRef.result` promise will be resolved with the provided value.
  29. * @param {?=} result
  30. * @return {?}
  31. */
  32. NgbActiveModal.prototype.close = /**
  33. * Closes the modal with an optional `result` value.
  34. *
  35. * The `NgbMobalRef.result` promise will be resolved with the provided value.
  36. * @param {?=} result
  37. * @return {?}
  38. */
  39. function (result) { };
  40. /**
  41. * Dismisses the modal with an optional `reason` value.
  42. *
  43. * The `NgbModalRef.result` promise will be rejected with the provided value.
  44. */
  45. /**
  46. * Dismisses the modal with an optional `reason` value.
  47. *
  48. * The `NgbModalRef.result` promise will be rejected with the provided value.
  49. * @param {?=} reason
  50. * @return {?}
  51. */
  52. NgbActiveModal.prototype.dismiss = /**
  53. * Dismisses the modal with an optional `reason` value.
  54. *
  55. * The `NgbModalRef.result` promise will be rejected with the provided value.
  56. * @param {?=} reason
  57. * @return {?}
  58. */
  59. function (reason) { };
  60. return NgbActiveModal;
  61. }());
  62. /**
  63. * A reference to the currently opened (active) modal.
  64. *
  65. * Instances of this class can be injected into your component passed as modal content.
  66. * So you can `.close()` or `.dismiss()` the modal window from your component.
  67. */
  68. export { NgbActiveModal };
  69. /**
  70. * A reference to the newly opened modal returned by the `NgbModal.open()` method.
  71. */
  72. var /**
  73. * A reference to the newly opened modal returned by the `NgbModal.open()` method.
  74. */
  75. NgbModalRef = /** @class */ (function () {
  76. function NgbModalRef(_windowCmptRef, _contentRef, _backdropCmptRef, _beforeDismiss) {
  77. var _this = this;
  78. this._windowCmptRef = _windowCmptRef;
  79. this._contentRef = _contentRef;
  80. this._backdropCmptRef = _backdropCmptRef;
  81. this._beforeDismiss = _beforeDismiss;
  82. _windowCmptRef.instance.dismissEvent.subscribe((/**
  83. * @param {?} reason
  84. * @return {?}
  85. */
  86. function (reason) { _this.dismiss(reason); }));
  87. this.result = new Promise((/**
  88. * @param {?} resolve
  89. * @param {?} reject
  90. * @return {?}
  91. */
  92. function (resolve, reject) {
  93. _this._resolve = resolve;
  94. _this._reject = reject;
  95. }));
  96. this.result.then(null, (/**
  97. * @return {?}
  98. */
  99. function () { }));
  100. }
  101. Object.defineProperty(NgbModalRef.prototype, "componentInstance", {
  102. /**
  103. * The instance of a component used for the modal content.
  104. *
  105. * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.
  106. */
  107. get: /**
  108. * The instance of a component used for the modal content.
  109. *
  110. * When a `TemplateRef` is used as the content or when the modal is closed, will return `undefined`.
  111. * @return {?}
  112. */
  113. function () {
  114. if (this._contentRef && this._contentRef.componentRef) {
  115. return this._contentRef.componentRef.instance;
  116. }
  117. },
  118. enumerable: true,
  119. configurable: true
  120. });
  121. /**
  122. * Closes the modal with an optional `result` value.
  123. *
  124. * The `NgbMobalRef.result` promise will be resolved with the provided value.
  125. */
  126. /**
  127. * Closes the modal with an optional `result` value.
  128. *
  129. * The `NgbMobalRef.result` promise will be resolved with the provided value.
  130. * @param {?=} result
  131. * @return {?}
  132. */
  133. NgbModalRef.prototype.close = /**
  134. * Closes the modal with an optional `result` value.
  135. *
  136. * The `NgbMobalRef.result` promise will be resolved with the provided value.
  137. * @param {?=} result
  138. * @return {?}
  139. */
  140. function (result) {
  141. if (this._windowCmptRef) {
  142. this._resolve(result);
  143. this._removeModalElements();
  144. }
  145. };
  146. /**
  147. * @private
  148. * @param {?=} reason
  149. * @return {?}
  150. */
  151. NgbModalRef.prototype._dismiss = /**
  152. * @private
  153. * @param {?=} reason
  154. * @return {?}
  155. */
  156. function (reason) {
  157. this._reject(reason);
  158. this._removeModalElements();
  159. };
  160. /**
  161. * Dismisses the modal with an optional `reason` value.
  162. *
  163. * The `NgbModalRef.result` promise will be rejected with the provided value.
  164. */
  165. /**
  166. * Dismisses the modal with an optional `reason` value.
  167. *
  168. * The `NgbModalRef.result` promise will be rejected with the provided value.
  169. * @param {?=} reason
  170. * @return {?}
  171. */
  172. NgbModalRef.prototype.dismiss = /**
  173. * Dismisses the modal with an optional `reason` value.
  174. *
  175. * The `NgbModalRef.result` promise will be rejected with the provided value.
  176. * @param {?=} reason
  177. * @return {?}
  178. */
  179. function (reason) {
  180. var _this = this;
  181. if (this._windowCmptRef) {
  182. if (!this._beforeDismiss) {
  183. this._dismiss(reason);
  184. }
  185. else {
  186. /** @type {?} */
  187. var dismiss = this._beforeDismiss();
  188. if (dismiss && dismiss.then) {
  189. dismiss.then((/**
  190. * @param {?} result
  191. * @return {?}
  192. */
  193. function (result) {
  194. if (result !== false) {
  195. _this._dismiss(reason);
  196. }
  197. }), (/**
  198. * @return {?}
  199. */
  200. function () { }));
  201. }
  202. else if (dismiss !== false) {
  203. this._dismiss(reason);
  204. }
  205. }
  206. }
  207. };
  208. /**
  209. * @private
  210. * @return {?}
  211. */
  212. NgbModalRef.prototype._removeModalElements = /**
  213. * @private
  214. * @return {?}
  215. */
  216. function () {
  217. /** @type {?} */
  218. var windowNativeEl = this._windowCmptRef.location.nativeElement;
  219. windowNativeEl.parentNode.removeChild(windowNativeEl);
  220. this._windowCmptRef.destroy();
  221. if (this._backdropCmptRef) {
  222. /** @type {?} */
  223. var backdropNativeEl = this._backdropCmptRef.location.nativeElement;
  224. backdropNativeEl.parentNode.removeChild(backdropNativeEl);
  225. this._backdropCmptRef.destroy();
  226. }
  227. if (this._contentRef && this._contentRef.viewRef) {
  228. this._contentRef.viewRef.destroy();
  229. }
  230. this._windowCmptRef = null;
  231. this._backdropCmptRef = null;
  232. this._contentRef = null;
  233. };
  234. return NgbModalRef;
  235. }());
  236. /**
  237. * A reference to the newly opened modal returned by the `NgbModal.open()` method.
  238. */
  239. export { NgbModalRef };
  240. if (false) {
  241. /**
  242. * @type {?}
  243. * @private
  244. */
  245. NgbModalRef.prototype._resolve;
  246. /**
  247. * @type {?}
  248. * @private
  249. */
  250. NgbModalRef.prototype._reject;
  251. /**
  252. * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.
  253. * @type {?}
  254. */
  255. NgbModalRef.prototype.result;
  256. /**
  257. * @type {?}
  258. * @private
  259. */
  260. NgbModalRef.prototype._windowCmptRef;
  261. /**
  262. * @type {?}
  263. * @private
  264. */
  265. NgbModalRef.prototype._contentRef;
  266. /**
  267. * @type {?}
  268. * @private
  269. */
  270. NgbModalRef.prototype._backdropCmptRef;
  271. /**
  272. * @type {?}
  273. * @private
  274. */
  275. NgbModalRef.prototype._beforeDismiss;
  276. }
  277. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWFBOzs7Ozs7O0lBQUE7SUFjQSxDQUFDO0lBYkM7Ozs7T0FJRzs7Ozs7Ozs7SUFDSCw4QkFBSzs7Ozs7OztJQUFMLFVBQU0sTUFBWSxJQUFTLENBQUM7SUFFNUI7Ozs7T0FJRzs7Ozs7Ozs7SUFDSCxnQ0FBTzs7Ozs7OztJQUFQLFVBQVEsTUFBWSxJQUFTLENBQUM7SUFDaEMscUJBQUM7QUFBRCxDQUFDLEFBZEQsSUFjQzs7Ozs7Ozs7Ozs7QUFLRDs7OztJQW9CRSxxQkFDWSxjQUE0QyxFQUFVLFdBQXVCLEVBQzdFLGdCQUFpRCxFQUFVLGNBQXlCO1FBRmhHLGlCQVVDO1FBVFcsbUJBQWMsR0FBZCxjQUFjLENBQThCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDN0UscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQztRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFXO1FBQzlGLGNBQWMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLE1BQVcsSUFBTyxLQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU87Ozs7O1FBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUN4QyxLQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixLQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7OztRQUFFLGNBQU8sQ0FBQyxFQUFDLENBQUM7SUFDbkMsQ0FBQztJQXJCRCxzQkFBSSwwQ0FBaUI7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b3JlJztcblxuaW1wb3J0IHtOZ2JNb2RhbEJhY2tkcm9wfSBmcm9tICcuL21vZGFsLWJhY2tkcm9wJztcbmltcG9ydCB7TmdiTW9kYWxXaW5kb3d9IGZyb20gJy4vbW9kYWwtd2luZG93JztcblxuaW1wb3J0IHtDb250ZW50UmVmfSBmcm9tICcuLi91dGlsL3BvcHVwJztcblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IG9wZW5lZCAoYWN0aXZlKSBtb2RhbC5cbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgaW5qZWN0ZWQgaW50byB5b3VyIGNvbXBvbmVudCBwYXNzZWQgYXMgbW9kYWwgY29udGVudC5cbiAqIFNvIHlvdSBjYW4gYC5jbG9zZSgpYCBvciBgLmRpc21pc3MoKWAgdGhlIG1vZGFsIHdpbmRvdyBmcm9tIHlvdXIgY29tcG9uZW50LlxuICovXG5leHBvcnQgY2xhc3MgTmdiQWN0aXZlTW9kYWwge1xuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtb2RhbCB3aXRoIGFuIG9wdGlvbmFsIGByZXN1bHRgIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgYE5nYk1vYmFsUmVmLnJlc3VsdGAgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlLlxuICAgKi9cbiAgY2xvc2UocmVzdWx0PzogYW55KTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzZXMgdGhlIG1vZGFsIHdpdGggYW4gb3B0aW9uYWwgYHJlYXNvbmAgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBgTmdiTW9kYWxSZWYucmVzdWx0YCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqL1xuICBkaXNtaXNzKHJlYXNvbj86IGFueSk6IHZvaWQge31cbn1cblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgbmV3bHkgb3BlbmVkIG1vZGFsIHJldHVybmVkIGJ5IHRoZSBgTmdiTW9kYWwub3BlbigpYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZ2JNb2RhbFJlZiB7XG4gIHByaXZhdGUgX3Jlc29sdmU6IChyZXN1bHQ/OiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3JlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIG9mIGEgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBtb2RhbCBjb250ZW50LlxuICAgKlxuICAgKiBXaGVuIGEgYFRlbXBsYXRlUmVmYCBpcyB1c2VkIGFzIHRoZSBjb250ZW50IG9yIHdoZW4gdGhlIG1vZGFsIGlzIGNsb3NlZCwgd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gICAqL1xuICBnZXQgY29tcG9uZW50SW5zdGFuY2UoKTogYW55IHtcbiAgICBpZiAodGhpcy5fY29udGVudFJlZiAmJiB0aGlzLl9jb250ZW50UmVmLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRSZWYuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG1vZGFsIGlzIGNsb3NlZCBhbmQgcmVqZWN0ZWQgd2hlbiB0aGUgbW9kYWwgaXMgZGlzbWlzc2VkLlxuICAgKi9cbiAgcmVzdWx0OiBQcm9taXNlPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF93aW5kb3dDbXB0UmVmOiBDb21wb25lbnRSZWY8TmdiTW9kYWxXaW5kb3c+LCBwcml2YXRlIF9jb250ZW50UmVmOiBDb250ZW50UmVmLFxuICAgICAgcHJpdmF0ZSBfYmFja2Ryb3BDbXB0UmVmPzogQ29tcG9uZW50UmVmPE5nYk1vZGFsQmFja2Ryb3A+LCBwcml2YXRlIF9iZWZvcmVEaXNtaXNzPzogRnVuY3Rpb24pIHtcbiAgICBfd2luZG93Q21wdFJlZi5pbnN0YW5jZS5kaXNtaXNzRXZlbnQuc3Vic2NyaWJlKChyZWFzb246IGFueSkgPT4geyB0aGlzLmRpc21pc3MocmVhc29uKTsgfSk7XG5cbiAgICB0aGlzLnJlc3VsdCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHRoaXMucmVzdWx0LnRoZW4obnVsbCwgKCkgPT4ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbW9kYWwgd2l0aCBhbiBvcHRpb25hbCBgcmVzdWx0YCB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGBOZ2JNb2JhbFJlZi5yZXN1bHRgIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAgICovXG4gIGNsb3NlKHJlc3VsdD86IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93aW5kb3dDbXB0UmVmKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlKHJlc3VsdCk7XG4gICAgICB0aGlzLl9yZW1vdmVNb2RhbEVsZW1lbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGlzbWlzcyhyZWFzb24/OiBhbnkpIHtcbiAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgICB0aGlzLl9yZW1vdmVNb2RhbEVsZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBtb2RhbCB3aXRoIGFuIG9wdGlvbmFsIGByZWFzb25gIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgYE5nYk1vZGFsUmVmLnJlc3VsdGAgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlLlxuICAgKi9cbiAgZGlzbWlzcyhyZWFzb24/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd2luZG93Q21wdFJlZikge1xuICAgICAgaWYgKCF0aGlzLl9iZWZvcmVEaXNtaXNzKSB7XG4gICAgICAgIHRoaXMuX2Rpc21pc3MocmVhc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpc21pc3MgPSB0aGlzLl9iZWZvcmVEaXNtaXNzKCk7XG4gICAgICAgIGlmIChkaXNtaXNzICYmIGRpc21pc3MudGhlbikge1xuICAgICAgICAgIGRpc21pc3MudGhlbihcbiAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzbWlzcyhyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKCkgPT4ge30pO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc21pc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5fZGlzbWlzcyhyZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlTW9kYWxFbGVtZW50cygpIHtcbiAgICBjb25zdCB3aW5kb3dOYXRpdmVFbCA9IHRoaXMuX3dpbmRvd0NtcHRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB3aW5kb3dOYXRpdmVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdpbmRvd05hdGl2ZUVsKTtcbiAgICB0aGlzLl93aW5kb3dDbXB0UmVmLmRlc3Ryb3koKTtcblxuICAgIGlmICh0aGlzLl9iYWNrZHJvcENtcHRSZWYpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wTmF0aXZlRWwgPSB0aGlzLl9iYWNrZHJvcENtcHRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgIGJhY2tkcm9wTmF0aXZlRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiYWNrZHJvcE5hdGl2ZUVsKTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wQ21wdFJlZi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRlbnRSZWYgJiYgdGhpcy5fY29udGVudFJlZi52aWV3UmVmKSB7XG4gICAgICB0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3dpbmRvd0NtcHRSZWYgPSBudWxsO1xuICAgIHRoaXMuX2JhY2tkcm9wQ21wdFJlZiA9IG51bGw7XG4gICAgdGhpcy5fY29udGVudFJlZiA9IG51bGw7XG4gIH1cbn1cbiJdfQ==