import { Record as ImmutableRecord } from "immutable";
import { loadingBarReducer } from "react-redux-loading-bar";
import { combineReducers } from "redux-immutable";
import account_notes from "./account_notes";
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 bookmarkFolders from "./bookmark_folders";
import bookmarkFolderEditor from "./bookmark_folder_editor";
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 local_settings from "./local_settings";
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 pinnedAccountsEditor from "./pinned_accounts_editor";
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,
bookmarkFolders,
bookmarkFolderEditor,
dropdownMenu: dropdownMenuReducer,
timelines,
meta,
alerts,
loadingBar: loadingBarReducer,
modal: modalReducer,
user_lists,
domain_lists,
status_lists,
accounts,
accounts_counters,
accounts_map,
statuses,
relationships,
settings,
local_settings,
push_notifications,
mutes,
blocks,
server,
boosts,
contexts,
compose,
search,
media_attachments,
notifications,
height_cache,
custom_emojis,
lists,
listEditor,
listAdder,
filters,
conversations,
suggestions,
pinnedAccountsEditor,
polls,
trends,
markers,
account_notes,
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 };