~cytrogen/masto-fe

ref: 96ba9cbc15c562529b2eba4892226dfe6455a349 masto-fe/app/javascript/flavours/glitch/reducers/index.ts -rw-r--r-- 3.4 KiB
96ba9cbc — Cytrogen Merge PR #64: Bookmark folders 14 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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 };