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";
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 {
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));
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,
publicFavoritesMiddleware,
collectionsContentAddress,
subprocessMiddleware,
- treePickerSearchMiddleware,
+ workflowProcessessPanelMiddleware
];
const reduceMiddlewaresFn: (a: Middleware[], b: MiddlewareListReducer) => Middleware[] = (a, b) => b(a, services);
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) =>
properties: propertiesReducer,
resources: resourcesReducer,
router: routerReducer,
+ selectedResource: selectedResourceReducer,
snackbar: snackbarReducer,
treePicker: treePickerReducer,
treePickerSearch: treePickerSearchReducer,