From 08ef9329269864ad733c142519d239022fb2aeb2 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Fri, 29 Mar 2019 15:38:39 -0700 Subject: [PATCH] Use instead of to avoid double digest issue (#2346) --- platform/commonUI/dialog/bundle.js | 3 ++- platform/commonUI/dialog/src/OverlayService.js | 17 ++++++++++------- .../commonUI/dialog/test/OverlayServiceSpec.js | 11 ++++++++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/platform/commonUI/dialog/bundle.js b/platform/commonUI/dialog/bundle.js index b3b46b2231..da8c89e334 100644 --- a/platform/commonUI/dialog/bundle.js +++ b/platform/commonUI/dialog/bundle.js @@ -65,7 +65,8 @@ define([ "depends": [ "$document", "$compile", - "$rootScope" + "$rootScope", + "$timeout" ] } ], diff --git a/platform/commonUI/dialog/src/OverlayService.js b/platform/commonUI/dialog/src/OverlayService.js index 75b952734e..05ead9f6c6 100644 --- a/platform/commonUI/dialog/src/OverlayService.js +++ b/platform/commonUI/dialog/src/OverlayService.js @@ -44,8 +44,9 @@ define( * @memberof platform/commonUI/dialog * @constructor */ - function OverlayService($document, $compile, $rootScope) { + function OverlayService($document, $compile, $rootScope, $timeout) { this.$compile = $compile; + this.$timeout = $timeout; // Don't include $document and $rootScope directly; // avoids https://docs.angularjs.org/error/ng/cpws @@ -93,12 +94,14 @@ define( scope.key = key; scope.typeClass = typeClass || 't-dialog'; - // Create the overlay element and add it to the document's body - element = this.$compile(TEMPLATE)(scope); - - // Append so that most recent dialog is last in DOM. This means the most recent dialog will be on top when - // multiple overlays with the same z-index are active. - this.findBody().append(element); + this.$timeout(() => { + // Create the overlay element and add it to the document's body + element = this.$compile(TEMPLATE)(scope); + + // Append so that most recent dialog is last in DOM. This means the most recent dialog will be on top when + // multiple overlays with the same z-index are active. + this.findBody().append(element); + }); return { dismiss: dismiss diff --git a/platform/commonUI/dialog/test/OverlayServiceSpec.js b/platform/commonUI/dialog/test/OverlayServiceSpec.js index c699fb2a10..fec30e44c4 100644 --- a/platform/commonUI/dialog/test/OverlayServiceSpec.js +++ b/platform/commonUI/dialog/test/OverlayServiceSpec.js @@ -35,16 +35,20 @@ define( mockTemplate, mockElement, mockScope, + mockTimeout, overlayService; beforeEach(function () { mockDocument = jasmine.createSpyObj("$document", ["find"]); mockCompile = jasmine.createSpy("$compile"); mockRootScope = jasmine.createSpyObj("$rootScope", ["$new"]); - mockBody = jasmine.createSpyObj("body", ["prepend"]); + mockBody = jasmine.createSpyObj("body", ["append"]); mockTemplate = jasmine.createSpy("template"); mockElement = jasmine.createSpyObj("element", ["remove"]); mockScope = jasmine.createSpyObj("scope", ["$destroy"]); + mockTimeout = function (callback) { + callback(); + } mockDocument.find.and.returnValue(mockBody); mockCompile.and.returnValue(mockTemplate); @@ -54,7 +58,8 @@ define( overlayService = new OverlayService( mockDocument, mockCompile, - mockRootScope + mockRootScope, + mockTimeout ); }); @@ -67,7 +72,7 @@ define( it("adds the templated element to the body", function () { overlayService.createOverlay("test", {}); - expect(mockBody.prepend).toHaveBeenCalledWith(mockElement); + expect(mockBody.append).toHaveBeenCalledWith(mockElement); }); it("places the provided model/key in its template's scope", function () {