@@ -7,7 +7,7 @@ import {listenForHistoryChange} from 'redux-location-state';
77import { YdbEmbeddedAPI } from '../services/api' ;
88
99import { getUrlData } from './getUrlData' ;
10- import combinedRootReducer , { rootReducer } from './reducers' ;
10+ import { rootReducer } from './reducers' ;
1111import { api as storeApi } from './reducers/api' ;
1212import { syncUserSettingsFromLS } from './reducers/settings/settings' ;
1313import { UPDATE_REF } from './reducers/tooltip' ;
@@ -54,40 +54,67 @@ export const codeAssistBackend = window.code_assist_backend;
5454
5555const isSingleClusterMode = `${ metaBackend } ` === 'undefined' ;
5656
57- export interface ConfigureStoreOptions {
58- aRootReducer ?: Reducer ;
57+ interface BaseStoreOptions {
5958 singleClusterMode ?: boolean ;
6059 api ?: YdbEmbeddedAPI ;
61- additionalReducers ?: Record < string , Reducer > ;
6260}
6361
64- export function configureStore ( {
65- aRootReducer,
66- singleClusterMode = isSingleClusterMode ,
67- api = new YdbEmbeddedAPI ( { webVersion, withCredentials : ! customBackend } ) ,
68- additionalReducers = { } ,
69- } : ConfigureStoreOptions = { } ) {
62+ interface StoreOptionsWithCustomRootReducer extends BaseStoreOptions {
63+ /**
64+ * Custom root reducer that completely replaces the default rootReducer.
65+ * ⚠️ Cannot be used together with additionalReducers
66+ */
67+ aRootReducer : Reducer ;
68+ /**
69+ * @deprecated When using aRootReducer, additionalReducers cannot be used
70+ */
71+ additionalReducers ?: undefined ;
72+ }
73+
74+ interface StoreOptionsWithAdditionalReducers extends BaseStoreOptions {
75+ /**
76+ * @deprecated When using additionalReducers, aRootReducer cannot be used
77+ */
78+ aRootReducer ?: undefined ;
79+ /**
80+ * Additional reducers to be merged with the default rootReducer.
81+ * ⚠️ Cannot be used together with aRootReducer
82+ */
83+ additionalReducers : Record < string , Reducer > ;
84+ }
85+
86+ interface StoreOptionsDefault extends BaseStoreOptions {
87+ aRootReducer ?: undefined ;
88+ additionalReducers ?: undefined ;
89+ }
90+
91+ export type ConfigureStoreOptions =
92+ | StoreOptionsWithCustomRootReducer
93+ | StoreOptionsWithAdditionalReducers
94+ | StoreOptionsDefault ;
95+
96+ export function configureStore ( options : ConfigureStoreOptions = { } ) {
97+ const {
98+ aRootReducer,
99+ singleClusterMode = isSingleClusterMode ,
100+ api = new YdbEmbeddedAPI ( { webVersion, withCredentials : ! customBackend } ) ,
101+ additionalReducers = { } ,
102+ } = options ;
103+
70104 ( { backend, basename, clusterName} = getUrlData ( {
71105 singleClusterMode,
72106 customBackend,
73107 } ) ) ;
74108 const history = createBrowserHistory ( { basename} ) ;
75-
76- // Create the final reducer
77109 let finalReducer : Reducer ;
78110
79111 if ( aRootReducer ) {
80- // If custom root reducer is provided, use it
81112 finalReducer = aRootReducer ;
82- } else if ( Object . keys ( additionalReducers ) . length > 0 ) {
83- // If additional reducers are provided, combine them with the default ones
113+ } else {
84114 finalReducer = combineReducers ( {
85115 ...rootReducer ,
86116 ...additionalReducers ,
87117 } ) ;
88- } else {
89- // Otherwise use the default combined reducer
90- finalReducer = combinedRootReducer ;
91118 }
92119
93120 const store = _configureStore ( finalReducer , history , { singleClusterMode} , [
0 commit comments