From e7d3830919d8408feb2d691890c76fe580bb4f77 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Fri, 18 Mar 2022 13:03:00 +0100
Subject: [PATCH] New history

---
 .../src/js/components/AppController.js        | 36 ++++++++++++++-----
 openbis_ng_ui/src/js/index.js                 | 18 ++++------
 2 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/openbis_ng_ui/src/js/components/AppController.js b/openbis_ng_ui/src/js/components/AppController.js
index 8887610ca00..dd7f0383478 100644
--- a/openbis_ng_ui/src/js/components/AppController.js
+++ b/openbis_ng_ui/src/js/components/AppController.js
@@ -1,15 +1,29 @@
 import _ from 'lodash'
 import React from 'react'
+import { createBrowserHistory } from 'history'
 import openbis from '@src/js/services/openbis.js'
 import objectType from '@src/js/common/consts/objectType.js'
 import objectOperation from '@src/js/common/consts/objectOperation.js'
 import routes from '@src/js/common/consts/routes.js'
 import cookie from '@src/js/common/cookie.js'
-import history from '@src/js/store/history.js'
+import url from '@src/js/common/url.js'
 
 export class AppController {
   constructor() {
     this.AppContext = React.createContext()
+
+    const history = createBrowserHistory({
+      basename: url.getApplicationPath() + '#'
+    })
+
+    history.listen(location => {
+      let route = routes.parse(location.pathname)
+      if (route.path !== this.getRoute()) {
+        this.routeChange(route.path, location.state)
+      }
+    })
+
+    this.history = history
   }
 
   init(context) {
@@ -137,11 +151,11 @@ export class AppController {
   }
 
   async routeChange(path) {
-    const route = routes.parse(path)
+    const newRoute = routes.parse(path)
 
-    if (route.type && route.id) {
-      const object = { type: route.type, id: route.id }
-      const openTabs = this.getOpenTabs(route.page)
+    if (newRoute.type && newRoute.id) {
+      const object = { type: newRoute.type, id: newRoute.id }
+      const openTabs = this.getOpenTabs(newRoute.page)
 
       if (openTabs) {
         let found = false
@@ -157,17 +171,21 @@ export class AppController {
         })
 
         if (!found) {
-          await this.addOpenTab(route.page, id, { id, object })
+          await this.addOpenTab(newRoute.page, id, { id, object })
         }
       }
     }
 
-    await this.context.setState({ route: path })
-    await this.setCurrentRoute(route.page, path)
+    await this.context.setState({ route: newRoute.path })
+    await this.setCurrentRoute(newRoute.page, newRoute.path)
+
+    if (newRoute.path !== this.history.location.pathname) {
+      this.history.push(newRoute.path)
+    }
   }
 
   async routeReplace(route, state) {
-    history.replace(route, state)
+    this.history.replace(route, state)
   }
 
   async objectNew(page, type) {
diff --git a/openbis_ng_ui/src/js/index.js b/openbis_ng_ui/src/js/index.js
index 44c78566e89..2679802f417 100644
--- a/openbis_ng_ui/src/js/index.js
+++ b/openbis_ng_ui/src/js/index.js
@@ -1,8 +1,6 @@
 import 'regenerator-runtime/runtime'
 import React from 'react'
 import ReactDOM from 'react-dom'
-import { Provider } from 'react-redux'
-import store from '@src/js/store/store.js'
 import ErrorBoundary from '@src/js/components/common/error/ErrorBoundary.jsx'
 import DatePickerProvider from '@src/js/components/common/date/DatePickerProvider.jsx'
 import ThemeProvider from '@src/js/components/common/theme/ThemeProvider.jsx'
@@ -11,15 +9,13 @@ const render = () => {
   let App = require('./components/App.jsx').default
 
   ReactDOM.render(
-    <Provider store={store}>
-      <ThemeProvider>
-        <ErrorBoundary>
-          <DatePickerProvider>
-            <App />
-          </DatePickerProvider>
-        </ErrorBoundary>
-      </ThemeProvider>
-    </Provider>,
+    <ThemeProvider>
+      <ErrorBoundary>
+        <DatePickerProvider>
+          <App />
+        </DatePickerProvider>
+      </ErrorBoundary>
+    </ThemeProvider>,
     document.getElementById('app')
   )
 }
-- 
GitLab