index.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { Record as ImmutableRecord } from 'immutable';
  2. import { loadingBarReducer } from 'react-redux-loading-bar';
  3. import { combineReducers } from 'redux-immutable';
  4. import { accountsReducer } from './accounts';
  5. import accounts_map from './accounts_map';
  6. import alerts from './alerts';
  7. import announcements from './announcements';
  8. import blocks from './blocks';
  9. import boosts from './boosts';
  10. import compose from './compose';
  11. import contexts from './contexts';
  12. import conversations from './conversations';
  13. import custom_emojis from './custom_emojis';
  14. import domain_lists from './domain_lists';
  15. import { dropdownMenuReducer } from './dropdown_menu';
  16. import filters from './filters';
  17. import followed_tags from './followed_tags';
  18. import height_cache from './height_cache';
  19. import history from './history';
  20. import listAdder from './list_adder';
  21. import listEditor from './list_editor';
  22. import lists from './lists';
  23. import markers from './markers';
  24. import media_attachments from './media_attachments';
  25. import meta from './meta';
  26. import { modalReducer } from './modal';
  27. import mutes from './mutes';
  28. import notifications from './notifications';
  29. import picture_in_picture from './picture_in_picture';
  30. import polls from './polls';
  31. import push_notifications from './push_notifications';
  32. import { relationshipsReducer } from './relationships';
  33. import search from './search';
  34. import server from './server';
  35. import settings from './settings';
  36. import status_lists from './status_lists';
  37. import statuses from './statuses';
  38. import suggestions from './suggestions';
  39. import tags from './tags';
  40. import timelines from './timelines';
  41. import trends from './trends';
  42. import user_lists from './user_lists';
  43. const reducers = {
  44. announcements,
  45. dropdownMenu: dropdownMenuReducer,
  46. timelines,
  47. meta,
  48. alerts,
  49. loadingBar: loadingBarReducer,
  50. modal: modalReducer,
  51. user_lists,
  52. domain_lists,
  53. status_lists,
  54. accounts: accountsReducer,
  55. accounts_map,
  56. statuses,
  57. relationships: relationshipsReducer,
  58. settings,
  59. push_notifications,
  60. mutes,
  61. blocks,
  62. boosts,
  63. server,
  64. contexts,
  65. compose,
  66. search,
  67. media_attachments,
  68. notifications,
  69. height_cache,
  70. custom_emojis,
  71. lists,
  72. listEditor,
  73. listAdder,
  74. filters,
  75. conversations,
  76. suggestions,
  77. polls,
  78. trends,
  79. markers,
  80. picture_in_picture,
  81. history,
  82. tags,
  83. followed_tags,
  84. };
  85. // We want the root state to be an ImmutableRecord, which is an object with a defined list of keys,
  86. // so it is properly typed and keys can be accessed using `state.<key>` syntax.
  87. // This will allow an easy conversion to a plain object once we no longer call `get` or `getIn` on the root state
  88. // By default with `combineReducers` it is a Collection, so we provide our own implementation to get a Record
  89. const initialRootState = Object.fromEntries(
  90. Object.entries(reducers).map(([name, reducer]) => [
  91. name,
  92. reducer(undefined, {
  93. // empty action
  94. }),
  95. ]),
  96. );
  97. const RootStateRecord = ImmutableRecord(initialRootState, 'RootState');
  98. const rootReducer = combineReducers(reducers, RootStateRecord);
  99. export { rootReducer };