|
|
|
@ -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 }; |
|
|
|
|