20487: loadProject doesn't call openProjectPanel
authorPeter Amstutz <peter.amstutz@curii.com>
Tue, 9 May 2023 19:39:16 +0000 (15:39 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Tue, 9 May 2023 19:47:42 +0000 (15:47 -0400)
The bug was was that loading the registered workflow panel would call
loadProject() which would call openProjectPanel() which would dispatch
REQUEST_ITEMS for the project (which is 100% wasteful, because we're
not displaying the project contents).

However, the results from REQUEST_ITEMS (which excludes some fields in
the standard query) would replace the result that previously got the
complete workflow object.  As a result the "definition" field went
away, which cause the inputs/outputs panels to go blank.

This switches the navigation action to call "openProjectPanel", and
have that begin by calling "loadProject".  As a result, other places
that call loadProject no longer call openProjectPanel.

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

package.json
src/routes/route-change-handlers.ts
src/store/project-panel/project-panel-action.ts
src/store/store.ts
src/store/workbench/workbench-actions.ts
yarn.lock

index c17fc9174500db0ad7cbe43788d9c18d4c1574e4..0a10da786e5bc1621a0ea84721ffddaf8a634042 100644 (file)
@@ -68,6 +68,7 @@
     "react-virtualized-auto-sizer": "1.0.2",
     "react-window": "1.8.5",
     "redux": "4.0.3",
+    "redux-devtools-extension": "^2.13.9",
     "redux-form": "7.4.2",
     "redux-thunk": "2.3.0",
     "reselect": "4.0.0",
index cded6d65cd38dcce7e00fac722131399c324feec..eef52058529b69acd74f17416552561382487e03 100644 (file)
@@ -11,6 +11,7 @@ import { dialogActions } from 'store/dialog/dialog-actions';
 import { contextMenuActions } from 'store/context-menu/context-menu-actions';
 import { searchBarActions } from 'store/search-bar/search-bar-actions';
 import { pluginConfig } from 'plugins';
+import { openProjectPanel } from 'store/project-panel/project-panel-action';
 
 export const addRouteChangeHandlers = (history: History, store: RootStore) => {
     const handler = handleLocationChange(store);
@@ -60,7 +61,7 @@ const handleLocationChange = (store: RootStore) => ({ pathname }: Location) => {
     }
 
     if (projectMatch) {
-        store.dispatch(WorkbenchActions.loadProject(projectMatch.params.id));
+        store.dispatch(openProjectPanel(projectMatch.params.id));
     } else if (collectionMatch) {
         store.dispatch(WorkbenchActions.loadCollection(collectionMatch.params.id));
     } else if (favoriteMatch) {
index 3b30f4aab5e3577fdc5c3f3632b7fb0dd60f9f50..6b99e300692de38b762eea09eaa7774e9b7191d0 100644 (file)
@@ -7,6 +7,7 @@ import { bindDataExplorerActions } from "store/data-explorer/data-explorer-actio
 import { propertiesActions } from "store/properties/properties-actions";
 import { RootState } from 'store/store';
 import { getProperty } from "store/properties/properties";
+import { loadProject } from "store/workbench/workbench-actions";
 
 export const PROJECT_PANEL_ID = "projectPanel";
 export const PROJECT_PANEL_CURRENT_UUID = "projectPanelCurrentUuid";
@@ -14,7 +15,8 @@ export const IS_PROJECT_PANEL_TRASHED = 'isProjectPanelTrashed';
 export const projectPanelActions = bindDataExplorerActions(PROJECT_PANEL_ID);
 
 export const openProjectPanel = (projectUuid: string) =>
-    (dispatch: Dispatch) => {
+    async (dispatch: Dispatch) => {
+        await loadProject(projectUuid);
         dispatch(propertiesActions.SET_PROPERTY({ key: PROJECT_PANEL_CURRENT_UUID, value: projectUuid }));
         dispatch(projectPanelActions.RESET_EXPLORER_SEARCH_VALUE());
         dispatch(projectPanelActions.REQUEST_ITEMS());
index 1501fd4fb5be80db4e03d9f832e59116ec95b6f9..ec673d62239c49170ce2c0f8bbc06a270f15ca00 100644 (file)
@@ -77,17 +77,7 @@ import { MiddlewareListReducer } from 'common/plugintypes';
 import { tooltipsMiddleware } from './tooltips/tooltips-middleware';
 import { sidePanelReducer } from './side-panel/side-panel-reducer'
 import { bannerReducer } from './banner/banner-reducer';
-
-declare global {
-    interface Window {
-        __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;
-    }
-}
-
-const composeEnhancers =
-    (process.env.NODE_ENV === 'development' &&
-        window && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ||
-    compose;
+import { composeWithDevTools } from 'redux-devtools-extension';
 
 export type RootState = ReturnType<ReturnType<typeof createRootReducer>>;
 
@@ -187,7 +177,7 @@ export function configureStore(history: History, services: ServiceRepository, co
 
     middlewares = pluginConfig.middlewares.reduce(reduceMiddlewaresFn, middlewares);
 
-    const enhancer = composeEnhancers(applyMiddleware(redirectToMiddleware, ...middlewares));
+    const enhancer = composeWithDevTools({/* options */ })(applyMiddleware(redirectToMiddleware, ...middlewares));
     return createStore(rootReducer, enhancer);
 }
 
index 524337796efe37a6cfc472c9174eb3a7bd6012bd..a3c3a0969b2185224b340e7eabe2c9211a629568 100644 (file)
@@ -13,7 +13,6 @@ import {
 } from 'store/favorite-panel/favorite-panel-action';
 import {
     getProjectPanelCurrentUuid,
-    openProjectPanel,
     projectPanelActions,
     setIsProjectPanelTrashed,
 } from 'store/project-panel/project-panel-action';
@@ -866,7 +865,6 @@ const finishLoadingProject =
     (project: GroupContentsResource | string) =>
         async (dispatch: Dispatch<any>) => {
             const uuid = typeof project === 'string' ? project : project.uuid;
-            dispatch(openProjectPanel(uuid));
             dispatch(loadDetailsPanel(uuid));
             if (typeof project !== 'string') {
                 dispatch(updateResources([project]));
index 580aa8ed9243da6ecf6049fcdb91fb64d35b502a..e96e7751cd45de415b7a6bb7b7b5413d315c333f 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -3811,6 +3811,7 @@ __metadata:
     react-window: 1.8.5
     redux: 4.0.3
     redux-devtools: 3.4.1
+    redux-devtools-extension: ^2.13.9
     redux-form: 7.4.2
     redux-mock-store: 1.5.4
     redux-thunk: 2.3.0
@@ -15448,6 +15449,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"redux-devtools-extension@npm:^2.13.9":
+  version: 2.13.9
+  resolution: "redux-devtools-extension@npm:2.13.9"
+  peerDependencies:
+    redux: ^3.1.0 || ^4.0.0
+  checksum: 603d48fd6acf3922ef373b251ab3fdbb990035e90284191047b29d25b06ea18122bc4ef01e0704ccae495acb27ab5e47b560937e98213605dd88299470025db9
+  languageName: node
+  linkType: hard
+
 "redux-devtools-instrument@npm:^1.0.1":
   version: 1.10.0
   resolution: "redux-devtools-instrument@npm:1.10.0"