]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9446 Redirect to previous page after server start/migration
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Tue, 3 Oct 2017 13:46:17 +0000 (15:46 +0200)
committerGrégoire Aubert <gregoire.aubert@sonarsource.com>
Wed, 4 Oct 2017 10:02:16 +0000 (12:02 +0200)
server/sonar-web/src/main/js/app/components/MigrationContainer.js
server/sonar-web/src/main/js/apps/maintenance/components/MaintenanceAppContainer.tsx
server/sonar-web/src/main/js/apps/maintenance/components/SetupAppContainer.tsx
server/sonar-web/src/main/js/apps/maintenance/init.js
server/sonar-web/src/main/js/apps/maintenance/main-view.js

index ef24c09e9913dcaccc823ab0fa980670de5c422e..04055272af31d010314846eff2df5bdd274d1998 100644 (file)
@@ -27,20 +27,23 @@ class MigrationContainer extends React.PureComponent {
   /*::
   props: {
     children?: React.Element<*>,
-    router: { push: (path: string) => void }
+    router: { push: ({ pathname: string, query?: { return_to: string } }) => void }
   };
   */
 
-  state = {
-    loading: true
-  };
+  state = { loading: true };
 
   componentDidMount() {
     getSystemStatus().then(r => {
       if (r.status === 'UP') {
         this.setState({ loading: false });
       } else {
-        this.props.router.push('/maintenance');
+        this.props.router.push({
+          pathname: '/maintenance',
+          query: {
+            return_to: window.location.pathname + window.location.search + window.location.hash
+          }
+        });
       }
     });
   }
index 923d805efd78831a54413458d675f532d08caa73..58f06438b417fca2fd6c45cab04659da06b174a5 100644 (file)
 import * as React from 'react';
 import init from '../init';
 
-export default class MaintenanceAppContainer extends React.PureComponent {
+interface Props {
+  location: { query: { return_to: string } };
+}
+
+export default class MaintenanceAppContainer extends React.PureComponent<Props> {
   componentDidMount() {
-    init(this.refs.container, false);
+    init(this.refs.container, false, this.props.location.query['return_to']);
   }
 
   render() {
index 398ebb69fd648418602fe9641e8ac9147500750e..eeb57f47fe4257715723bbf29ecc7b0aa99025f6 100644 (file)
 import * as React from 'react';
 import init from '../init';
 
-export default class SetupAppContainer extends React.PureComponent {
+interface Props {
+  location: { query: { return_to: string } };
+}
+
+export default class SetupAppContainer extends React.PureComponent<Props> {
   componentDidMount() {
-    init(this.refs.container, true);
+    init(this.refs.container, true, this.props.location.query['return_to']);
   }
 
   render() {
index 3d86d8fc881cbe47870460cd20e2ab231483681c..e71347b423b00bd9815592fea0cc635381132f14 100644 (file)
@@ -32,6 +32,6 @@ App.on('start', options => {
   mainView.render().refresh();
 });
 
-export default function(el, setup) {
-  App.start({ el, setup });
+export default function(el, setup, returnTo) {
+  App.start({ el, setup, returnTo });
 }
index 68b234721bf89835988367e62de80cd61372af4e..26ed8f944baa5f21eb185602fd1d205e17ca9085 100644 (file)
@@ -51,10 +51,10 @@ export default Marionette.ItemView.extend({
         this.stopPolling();
       }
       if (this.model.get('status') === 'UP' && this.wasStarting) {
-        this.goHome();
+        this.loadPreviousPage();
       }
       if (this.model.get('state') === 'MIGRATION_SUCCEEDED') {
-        this.goHome();
+        this.loadPreviousPage();
       }
     });
   },
@@ -80,9 +80,9 @@ export default Marionette.ItemView.extend({
     );
   },
 
-  goHome() {
+  loadPreviousPage() {
     setInterval(() => {
-      window.location = window.baseUrl + '/';
+      window.location = window.baseUrl + (this.options.returnTo || '/');
     }, 2500);
   },