1ff70886a1
Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/88 Co-authored-by: Zoë Bijl <moiety@noreply.codeberg.org> Co-committed-by: Zoë Bijl <moiety@noreply.codeberg.org>
110 lines
3.0 KiB
TypeScript
110 lines
3.0 KiB
TypeScript
import { Record as ImmutableRecord } from "immutable";
|
|
|
|
import { loadingBarReducer } from "react-redux-loading-bar";
|
|
import { combineReducers } from "redux-immutable";
|
|
|
|
import accounts from "./accounts";
|
|
import accounts_counters from "./accounts_counters";
|
|
import accounts_map from "./accounts_map";
|
|
import alerts from "./alerts";
|
|
import announcements from "./announcements";
|
|
import blocks from "./blocks";
|
|
import boosts from "./boosts";
|
|
import compose from "./compose";
|
|
import contexts from "./contexts";
|
|
import conversations from "./conversations";
|
|
import custom_emojis from "./custom_emojis";
|
|
import domain_lists from "./domain_lists";
|
|
import { dropdownMenuReducer } from "./dropdown_menu";
|
|
import filters from "./filters";
|
|
import followed_tags from "./followed_tags";
|
|
import height_cache from "./height_cache";
|
|
import history from "./history";
|
|
import listAdder from "./list_adder";
|
|
import listEditor from "./list_editor";
|
|
import lists from "./lists";
|
|
import markers from "./markers";
|
|
import media_attachments from "./media_attachments";
|
|
import meta from "./meta";
|
|
import { modalReducer } from "./modal";
|
|
import mutes from "./mutes";
|
|
import notifications from "./notifications";
|
|
import picture_in_picture from "./picture_in_picture";
|
|
import polls from "./polls";
|
|
import push_notifications from "./push_notifications";
|
|
import relationships from "./relationships";
|
|
import search from "./search";
|
|
import server from "./server";
|
|
import settings from "./settings";
|
|
import status_lists from "./status_lists";
|
|
import statuses from "./statuses";
|
|
import suggestions from "./suggestions";
|
|
import tags from "./tags";
|
|
import timelines from "./timelines";
|
|
import trends from "./trends";
|
|
import user_lists from "./user_lists";
|
|
|
|
const reducers = {
|
|
announcements,
|
|
dropdownMenu: dropdownMenuReducer,
|
|
timelines,
|
|
meta,
|
|
alerts,
|
|
loadingBar: loadingBarReducer,
|
|
modal: modalReducer,
|
|
user_lists,
|
|
domain_lists,
|
|
status_lists,
|
|
accounts,
|
|
accounts_counters,
|
|
accounts_map,
|
|
statuses,
|
|
relationships,
|
|
settings,
|
|
push_notifications,
|
|
mutes,
|
|
blocks,
|
|
boosts,
|
|
server,
|
|
contexts,
|
|
compose,
|
|
search,
|
|
media_attachments,
|
|
notifications,
|
|
height_cache,
|
|
custom_emojis,
|
|
lists,
|
|
listEditor,
|
|
listAdder,
|
|
filters,
|
|
conversations,
|
|
suggestions,
|
|
polls,
|
|
trends,
|
|
markers,
|
|
picture_in_picture,
|
|
history,
|
|
tags,
|
|
followed_tags,
|
|
};
|
|
|
|
// 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 };
|