~cytrogen/masto-fe

eb1cb8224a898e2a3e37be7c4b4b205b0dcf724e — Renaud Chaput 2 years ago 2ba4773
[Glitch] Use an Immutable Record as the root state

Port 78ba12f0bf97aee817eb0ab0d2c582b187033c50 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
1 files changed, 19 insertions(+), 1 deletions(-)

M app/javascript/flavours/glitch/reducers/index.ts
M app/javascript/flavours/glitch/reducers/index.ts => app/javascript/flavours/glitch/reducers/index.ts +19 -1
@@ 1,3 1,5 @@
import { Record as ImmutableRecord } from 'immutable';

import { loadingBarReducer } from 'react-redux-loading-bar';
import { combineReducers } from 'redux-immutable';



@@ 92,6 94,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 };