-export interface RootState {
- auth: AuthState;
- projects: ProjectState;
- collectionCreation: CollectionCreatorState;
- router: RouterState;
- dataExplorer: DataExplorerState;
- sidePanel: SidePanelState;
- collectionPanel: CollectionPanelState;
- detailsPanel: DetailsPanelState;
- contextMenu: ContextMenuState;
- favorites: FavoritesState;
- snackbar: SnackbarState;
- collectionPanelFiles: CollectionPanelFilesState;
- dialog: DialogState;
+export type RootState = ReturnType<ReturnType<typeof createRootReducer>>;
+
+export type RootStore = Store<RootState, Action> & { dispatch: Dispatch<any> };
+
+export function configureStore(history: History, services: ServiceRepository): RootStore {
+ const rootReducer = createRootReducer(services);
+
+ const projectPanelMiddleware = dataExplorerMiddleware(
+ new ProjectPanelMiddlewareService(services, PROJECT_PANEL_ID)
+ );
+ const favoritePanelMiddleware = dataExplorerMiddleware(
+ new FavoritePanelMiddlewareService(services, FAVORITE_PANEL_ID)
+ );
+
+ const middlewares: Middleware[] = [
+ routerMiddleware(history),
+ thunkMiddleware.withExtraArgument(services),
+ projectPanelMiddleware,
+ favoritePanelMiddleware
+ ];
+ const enhancer = composeEnhancers(applyMiddleware(...middlewares));
+ return createStore(rootReducer, enhancer);