浏览代码

HUE-9249 [browser] Prevent onbeforeunload when downloading the query profile

Johan Ahlen 5 年之前
父节点
当前提交
1afc620638

+ 3 - 1
apps/jobbrowser/src/jobbrowser/templates/job_browser.mako

@@ -3245,8 +3245,10 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
           .appendTo($downloadForm);
 
         $('#downloadProgressModal').append($downloadForm);
+
+        huePubSub.publish('ignore.next.unload');
         $downloadForm.submit();
-      }
+      };
 
       self.fetchProfile = function (name, callback) {
         vm.apiHelper.cancelActiveRequest(lastFetchProfileRequest);

+ 15 - 1
desktop/core/src/desktop/js/apps/notebook/app.js

@@ -27,7 +27,10 @@ import hueUtils from 'utils/hueUtils';
 import I18n from 'utils/i18n';
 import sqlWorkerHandler from 'sql/sqlWorkerHandler';
 import { initNotebook2 } from 'apps/notebook2/app';
-import { ACTIVE_SNIPPET_CONNECTOR_CHANGED_EVENT } from 'apps/notebook2/events';
+import {
+  ACTIVE_SNIPPET_CONNECTOR_CHANGED_EVENT,
+  IGNORE_NEXT_UNLOAD_EVENT
+} from 'apps/notebook2/events';
 import { SHOW_LEFT_ASSIST_EVENT } from 'ko/components/assist/events';
 
 if (window.ENABLE_NOTEBOOK_2) {
@@ -614,8 +617,19 @@ if (window.ENABLE_NOTEBOOK_2) {
         redrawFixedHeaders(200);
       });
 
+      let ignoreNextUnload = false;
+
+      huePubSub.subscribe(IGNORE_NEXT_UNLOAD_EVENT, () => {
+        ignoreNextUnload = true;
+      });
+
       // Close the notebook snippets when leaving the page
       window.onbeforeunload = function(e) {
+        if (ignoreNextUnload) {
+          ignoreNextUnload = false;
+          return;
+        }
+
         if (!viewModel.selectedNotebook().avoidClosing) {
           viewModel.selectedNotebook().close();
         }

+ 13 - 2
desktop/core/src/desktop/js/apps/notebook2/app.js

@@ -32,7 +32,8 @@ import {
   REDRAW_FIXED_HEADERS_EVENT,
   SHOW_GRID_SEARCH_EVENT,
   SHOW_NORMAL_RESULT_EVENT,
-  REDRAW_CHART_EVENT
+  REDRAW_CHART_EVENT,
+  IGNORE_NEXT_UNLOAD_EVENT
 } from 'apps/notebook2/events';
 import { DIALECT } from 'apps/notebook2/snippet';
 import { SHOW_LEFT_ASSIST_EVENT } from 'ko/components/assist/events';
@@ -356,10 +357,20 @@ export const initNotebook2 = () => {
         huePubSub.publish(REDRAW_FIXED_HEADERS_EVENT);
       });
 
+      let ignoreNextUnload = false;
+
+      huePubSub.subscribe(IGNORE_NEXT_UNLOAD_EVENT, () => {
+        ignoreNextUnload = true;
+      });
+
       // Close the notebook snippets when leaving the page
       window.onbeforeunload = function(e) {
+        if (ignoreNextUnload) {
+          ignoreNextUnload = false;
+          return;
+        }
         if (!viewModel.selectedNotebook().avoidClosing) {
-          //viewModel.selectedNotebook().close(); // TODO
+          viewModel.selectedNotebook().close();
         }
       };
       $(window).data('beforeunload', window.onbeforeunload);

+ 1 - 0
desktop/core/src/desktop/js/apps/notebook2/events.js

@@ -5,3 +5,4 @@ export const HIDE_FIXED_HEADERS_EVENT = 'result.grid.hide.fixed.headers';
 export const REDRAW_FIXED_HEADERS_EVENT = 'result.grid.redraw.fixed.headers';
 export const SHOW_GRID_SEARCH_EVENT = 'result.grid.show.search';
 export const SHOW_NORMAL_RESULT_EVENT = 'result.grid.show.normal.results';
+export const IGNORE_NEXT_UNLOAD_EVENT = 'ignore.next.unload';