+export interface RootState {
+ auth: AuthState;
+ projects: ProjectState;
+ collections: CollectionsState;
+ router: RouterState;
+ dataExplorer: DataExplorerState;
+ sidePanel: SidePanelState;
+ collectionPanel: CollectionPanelState;
+ detailsPanel: DetailsPanelState;
+ contextMenu: ContextMenuState;
+ favorites: FavoritesState;
+ snackbar: SnackbarState;
+ collectionPanelFiles: CollectionPanelFilesState;
+ dialog: DialogState;
+ treePicker: TreePicker;
+}
+
+export type RootStore = Store<RootState, Action> & { dispatch: Dispatch<any> };
+
+export function configureStore(history: History, services: ServiceRepository): RootStore {
+ const rootReducer = combineReducers({
+ auth: authReducer(services),
+ projects: projectsReducer,
+ collections: collectionsReducer,
+ router: routerReducer,
+ dataExplorer: dataExplorerReducer,
+ sidePanel: sidePanelReducer,
+ collectionPanel: collectionPanelReducer,
+ detailsPanel: detailsPanelReducer,
+ contextMenu: contextMenuReducer,
+ form: formReducer,
+ favorites: favoritesReducer,
+ snackbar: snackbarReducer,
+ collectionPanelFiles: collectionPanelFilesReducer,
+ dialog: dialogReducer,
+ treePicker: treePickerReducer,
+ });
+
+ const projectPanelMiddleware = dataExplorerMiddleware(
+ new ProjectPanelMiddlewareService(services, PROJECT_PANEL_ID)
+ );
+ const favoritePanelMiddleware = dataExplorerMiddleware(
+ new FavoritePanelMiddlewareService(services, FAVORITE_PANEL_ID)
+ );
+