soapbox/app/soapbox/reducers/index.ts

165 wiersze
4.3 KiB
TypeScript
Czysty Zwykły widok Historia

import { Record as ImmutableRecord } from 'immutable';
import { combineReducers } from 'redux-immutable';
2020-09-28 00:09:35 +00:00
import { AUTH_LOGGED_OUT } from 'soapbox/actions/auth';
2022-03-21 18:09:01 +00:00
import * as BuildConfig from 'soapbox/build_config';
import account_notes from './account_notes';
2020-03-27 20:59:38 +00:00
import accounts from './accounts';
import accounts_counters from './accounts_counters';
import accounts_meta from './accounts_meta';
import admin from './admin';
import admin_log from './admin_log';
import alerts from './alerts';
import aliases from './aliases';
import auth from './auth';
import backups from './backups';
2022-06-22 12:55:42 +00:00
import carousels from './carousels';
import chat_message_lists from './chat_message_lists';
import chat_messages from './chat_messages';
import chats from './chats';
2020-03-27 20:59:38 +00:00
import compose from './compose';
import contexts from './contexts';
import conversations from './conversations';
2020-03-27 20:59:38 +00:00
import custom_emojis from './custom_emojis';
import domain_lists from './domain_lists';
import dropdown_menu from './dropdown_menu';
2020-03-27 20:59:38 +00:00
import filters from './filters';
import group_editor from './group_editor';
import group_lists from './group_lists';
import group_relationships from './group_relationships';
import groups from './groups';
import history from './history';
2020-04-01 20:05:52 +00:00
import instance from './instance';
import listAdder from './list_adder';
import listEditor from './list_editor';
import lists from './lists';
import me from './me';
import meta from './meta';
import modals from './modals';
import mutes from './mutes';
import notifications from './notifications';
2022-05-02 20:55:52 +00:00
import onboarding from './onboarding';
import patron from './patron';
import pending_statuses from './pending_statuses';
import polls from './polls';
import profile_hover_card from './profile_hover_card';
import push_notifications from './push_notifications';
import relationships from './relationships';
import reports from './reports';
2022-04-27 14:11:21 +00:00
import rules from './rules';
2021-06-27 19:58:40 +00:00
import scheduled_statuses from './scheduled_statuses';
import search from './search';
import security from './security';
import settings from './settings';
import sidebar from './sidebar';
import soapbox from './soapbox';
2022-06-17 19:39:17 +00:00
import status_hover_card from './status-hover-card';
import status_lists from './status_lists';
import statuses from './statuses';
import suggestions from './suggestions';
import timelines from './timelines';
2022-03-21 18:09:01 +00:00
import trending_statuses from './trending_statuses';
import trends from './trends';
import user_lists from './user_lists';
2022-03-21 18:09:01 +00:00
import verification from './verification';
2020-03-27 20:59:38 +00:00
const reducers = {
2020-03-27 20:59:38 +00:00
dropdown_menu,
timelines,
meta,
alerts,
modals,
2020-03-27 20:59:38 +00:00
user_lists,
domain_lists,
status_lists,
account_notes,
2020-03-27 20:59:38 +00:00
accounts,
accounts_counters,
statuses,
relationships,
settings,
push_notifications,
mutes,
reports,
contexts,
compose,
search,
notifications,
custom_emojis,
lists,
listEditor,
listAdder,
filters,
conversations,
suggestions,
polls,
trends,
groups,
group_relationships,
group_lists,
group_editor,
sidebar,
2020-03-31 22:45:12 +00:00
patron,
soapbox,
2020-04-01 20:05:52 +00:00
instance,
me,
2020-04-05 21:54:51 +00:00
auth,
admin,
2020-08-25 02:26:42 +00:00
chats,
2020-08-26 01:33:49 +00:00
chat_messages,
chat_message_lists,
profile_hover_card,
2022-06-17 04:19:53 +00:00
status_hover_card,
2021-01-07 20:17:06 +00:00
backups,
2021-03-15 22:29:48 +00:00
admin_log,
security,
2021-06-27 19:58:40 +00:00
scheduled_statuses,
2021-10-09 21:56:03 +00:00
pending_statuses,
aliases,
accounts_meta,
2022-03-21 18:09:01 +00:00
trending_statuses,
verification,
2022-05-02 20:55:52 +00:00
onboarding,
2022-04-27 14:11:21 +00:00
rules,
history,
2022-06-22 12:55:42 +00:00
carousels,
};
// Build a default state from all reducers: it has the key and `undefined`
2022-03-17 02:15:38 +00:00
export const StateRecord = ImmutableRecord(
2022-03-15 13:48:18 +00:00
Object.keys(reducers).reduce((params: Record<string, any>, reducer) => {
params[reducer] = undefined;
return params;
}, {}),
);
const appReducer = combineReducers(reducers, StateRecord);
2020-09-28 00:09:35 +00:00
// Clear the state (mostly) when the user logs out
2022-03-15 13:48:18 +00:00
const logOut = (state: any = StateRecord()): ReturnType<typeof appReducer> => {
2022-03-21 18:09:01 +00:00
if (BuildConfig.NODE_ENV === 'production') {
location.href = '/login';
}
2022-03-15 13:48:18 +00:00
const whitelist: string[] = ['instance', 'soapbox', 'custom_emojis', 'auth'];
2020-09-28 00:09:35 +00:00
return StateRecord(
2022-03-15 13:48:18 +00:00
whitelist.reduce((acc: Record<string, any>, curr) => {
2020-09-28 00:09:35 +00:00
acc[curr] = state.get(curr);
return acc;
}, {}),
2022-03-15 13:48:18 +00:00
) as unknown as ReturnType<typeof appReducer>;
2020-09-28 00:09:35 +00:00
};
2022-03-15 13:48:18 +00:00
const rootReducer: typeof appReducer = (state, action) => {
switch (action.type) {
2022-05-11 21:06:35 +00:00
case AUTH_LOGGED_OUT:
return appReducer(logOut(state), action);
default:
return appReducer(state, action);
2020-09-28 00:09:35 +00:00
}
2020-03-27 20:59:38 +00:00
};
2020-09-28 00:09:35 +00:00
export default rootReducer;