Przeglądaj źródła

HUE-8038 [assist] Fix js error in the context popover when showing the popover is slow

Johan Ahlen 7 lat temu
rodzic
commit
2d65298319

+ 28 - 15
desktop/core/src/desktop/templates/ko_components/ko_context_popover.mako

@@ -1346,22 +1346,35 @@ from metadata.conf import has_navigator
         var rightX, leftX, leftDiff, rightDiff, topY, bottomY, topDiff, bottomDiff;
         var redrawHeaders = false;
 
-        window.setTimeout(function () {
-          var offset = $('.hue-popover').offset();
-          if (orientation === 'right') {
-            offset.left -= 5;
-          } else if (orientation === 'bottom') {
-            offset.top -= 5;
+        var initOriginalValues = function (attempt) {
+          if (attempt > 20) {
+            return;
           }
-          originalHeight = $('.hue-popover').height();
-          originalWidth = $('.hue-popover').width();
-          originalMidX = offset.left + originalWidth / 2;
-          originalMidY = offset.top + originalHeight / 2;
-          originalLeftX = offset.left;
-          originalRightX = offset.left + originalWidth;
-          originalTopY = offset.top;
-          originalBottomY = offset.top + originalHeight;
-        }, 0);
+          window.setTimeout(function () {
+            var offset = $('.hue-popover').offset();
+            if (!offset) {
+              // Popover isn't visible yet, wait a bit and try again
+              attempt++;
+              initOriginalValues(attempt);
+              return;
+            }
+            if (orientation === 'right') {
+              offset.left -= 5;
+            } else if (orientation === 'bottom') {
+              offset.top -= 5;
+            }
+            originalHeight = $('.hue-popover').height();
+            originalWidth = $('.hue-popover').width();
+            originalMidX = offset.left + originalWidth / 2;
+            originalMidY = offset.top + originalHeight / 2;
+            originalLeftX = offset.left;
+            originalRightX = offset.left + originalWidth;
+            originalTopY = offset.top;
+            originalBottomY = offset.top + originalHeight;
+          }, attempt * 20);
+        };
+
+        initOriginalValues(0);
 
         self.saveSize = function () {
           apiHelper.setInTotalStorage('assist', 'popover.size', {