Merge branch '22647-postinst-ignores-gem-install-errors'
[arvados.git] / services / workbench2 / src / store / store.ts
index daa9812e729900fd23fcb2bd04966f6997e764ae..9b200d96b41111a78649e930f9be3e97f7f5697d 100644 (file)
@@ -19,15 +19,17 @@ import { snackbarReducer } from "./snackbar/snackbar-reducer";
 import { collectionPanelFilesReducer } from "./collection-panel/collection-panel-files/collection-panel-files-reducer";
 import { dataExplorerMiddleware } from "./data-explorer/data-explorer-middleware";
 import { FAVORITE_PANEL_ID } from "./favorite-panel/favorite-panel-action";
-import { PROJECT_PANEL_ID } from "./project-panel/project-panel-action";
-import { ProjectPanelMiddlewareService } from "./project-panel/project-panel-middleware-service";
+import { WORKFLOW_PROCESSES_PANEL_ID } from "./workflow-panel/workflow-panel-actions";
+import { PROJECT_PANEL_DATA_ID, PROJECT_PANEL_RUN_ID } from "./project-panel/project-panel-action-bind";
+import { ProjectPanelDataMiddlewareService } from "./project-panel/project-panel-data-middleware-service";
+import { ProjectPanelRunMiddlewareService } from "./project-panel/project-panel-run-middleware-service";
 import { FavoritePanelMiddlewareService } from "./favorite-panel/favorite-panel-middleware-service";
 import { AllProcessesPanelMiddlewareService } from "./all-processes-panel/all-processes-panel-middleware-service";
+import { WorkflowProcessesMiddlewareService } from "./workflow-panel/workflow-middleware-service";
 import { collectionPanelReducer } from "./collection-panel/collection-panel-reducer";
 import { dialogReducer } from "./dialog/dialog-reducer";
 import { ServiceRepository } from "services/services";
 import { treePickerReducer, treePickerSearchReducer } from "./tree-picker/tree-picker-reducer";
-import { treePickerSearchMiddleware } from "./tree-picker/tree-picker-middleware";
 import { resourcesReducer } from "store/resources/resources-reducer";
 import { propertiesReducer } from "./properties/properties-reducer";
 import { fileUploaderReducer } from "./file-uploader/file-uploader-reducer";
@@ -79,6 +81,9 @@ import { sidePanelReducer } from "./side-panel/side-panel-reducer";
 import { bannerReducer } from "./banner/banner-reducer";
 import { multiselectReducer } from "./multiselect/multiselect-reducer";
 import { composeWithDevTools } from "redux-devtools-extension";
+import { selectedResourceReducer } from "./selected-resource/selected-resource-reducer";
+import createSagaMiddleware from 'redux-saga';
+import { rootSaga } from "./redux-saga";
 
 declare global {
     interface Window {
@@ -93,9 +98,11 @@ export type RootStore = Store<RootState, Action> & { dispatch: Dispatch<any> };
 export function configureStore(history: History, services: ServiceRepository, config: Config): RootStore {
     const rootReducer = createRootReducer(services);
 
-    const projectPanelMiddleware = dataExplorerMiddleware(new ProjectPanelMiddlewareService(services, PROJECT_PANEL_ID));
+    const projectPanelDataMiddleware = dataExplorerMiddleware(new ProjectPanelDataMiddlewareService(services, PROJECT_PANEL_DATA_ID));
+    const projectPanelRunMiddleware = dataExplorerMiddleware(new ProjectPanelRunMiddlewareService(services, PROJECT_PANEL_RUN_ID));
     const favoritePanelMiddleware = dataExplorerMiddleware(new FavoritePanelMiddlewareService(services, FAVORITE_PANEL_ID));
     const allProcessessPanelMiddleware = dataExplorerMiddleware(new AllProcessesPanelMiddlewareService(services, ALL_PROCESSES_PANEL_ID));
+    const workflowProcessessPanelMiddleware = dataExplorerMiddleware(new WorkflowProcessesMiddlewareService(services, WORKFLOW_PROCESSES_PANEL_ID));
     const trashPanelMiddleware = dataExplorerMiddleware(new TrashPanelMiddlewareService(services, TRASH_PANEL_ID));
     const searchResultsPanelMiddleware = dataExplorerMiddleware(new SearchResultsMiddlewareService(services, SEARCH_RESULTS_PANEL_ID));
     const sharedWithMePanelMiddleware = dataExplorerMiddleware(new SharedWithMeMiddlewareService(services, SHARED_WITH_ME_PANEL_ID));
@@ -129,12 +136,18 @@ export function configureStore(history: History, services: ServiceRepository, co
         return next(action);
     };
 
+    const sagaMiddleware = createSagaMiddleware({
+        context: { services }
+    });
+
     let middlewares: Middleware[] = [
         routerMiddleware(history),
         thunkMiddleware.withExtraArgument(services),
+        sagaMiddleware,
         authMiddleware(services),
         tooltipsMiddleware(services),
-        projectPanelMiddleware,
+        projectPanelDataMiddleware,
+        projectPanelRunMiddleware,
         favoritePanelMiddleware,
         allProcessessPanelMiddleware,
         trashPanelMiddleware,
@@ -151,7 +164,7 @@ export function configureStore(history: History, services: ServiceRepository, co
         publicFavoritesMiddleware,
         collectionsContentAddress,
         subprocessMiddleware,
-        treePickerSearchMiddleware,
+        workflowProcessessPanelMiddleware
     ];
 
     const reduceMiddlewaresFn: (a: Middleware[], b: MiddlewareListReducer) => Middleware[] = (a, b) => b(a, services);
@@ -159,9 +172,15 @@ export function configureStore(history: History, services: ServiceRepository, co
     middlewares = pluginConfig.middlewares.reduce(reduceMiddlewaresFn, middlewares);
 
     const enhancer = composeWithDevTools({
-        /* options */
+        /* uncomment to turn on stack trace in redux-devtools
+        re-comment afterwards to prevent performance impact */
+                // trace: true,
     })(applyMiddleware(redirectToMiddleware, ...middlewares));
-    return createStore(rootReducer, enhancer);
+    const store = createStore(rootReducer, enhancer);
+
+    sagaMiddleware.run(rootSaga);
+
+    return store;
 }
 
 const createRootReducer = (services: ServiceRepository) =>
@@ -182,6 +201,7 @@ const createRootReducer = (services: ServiceRepository) =>
         properties: propertiesReducer,
         resources: resourcesReducer,
         router: routerReducer,
+        selectedResource: selectedResourceReducer,
         snackbar: snackbarReducer,
         treePicker: treePickerReducer,
         treePickerSearch: treePickerSearchReducer,