Use an Immutable Record as the root state (#25584)
This commit is contained in:
		
							parent
							
								
									9934949fc4
								
							
						
					
					
						commit
						78ba12f0bf
					
				
					 1 changed files with 19 additions and 1 deletions
				
			
		|  | @ -1,3 +1,5 @@ | |||
| import { Record as ImmutableRecord } from 'immutable'; | ||||
| 
 | ||||
| import { loadingBarReducer } from 'react-redux-loading-bar'; | ||||
| import { combineReducers } from 'redux-immutable'; | ||||
| 
 | ||||
|  | @ -88,6 +90,22 @@ const reducers = { | |||
|   followed_tags, | ||||
| }; | ||||
| 
 | ||||
| const rootReducer = combineReducers(reducers); | ||||
| // We want the root state to be an ImmutableRecord, which is an object with a defined list of keys,
 | ||||
| // so it is properly typed and keys can be accessed using `state.<key>` syntax.
 | ||||
| // This will allow an easy conversion to a plain object once we no longer call `get` or `getIn` on the root state
 | ||||
| 
 | ||||
| // By default with `combineReducers` it is a Collection, so we provide our own implementation to get a Record
 | ||||
| const initialRootState = Object.fromEntries( | ||||
|   Object.entries(reducers).map(([name, reducer]) => [ | ||||
|     name, | ||||
|     reducer(undefined, { | ||||
|       // empty action
 | ||||
|     }), | ||||
|   ]) | ||||
| ); | ||||
| 
 | ||||
| const RootStateRecord = ImmutableRecord(initialRootState, 'RootState'); | ||||
| 
 | ||||
| const rootReducer = combineReducers(reducers, RootStateRecord); | ||||
| 
 | ||||
| export { rootReducer }; | ||||
|  |  | |||
		Reference in a new issue