import { CHATS_FETCH_SUCCESS, CHAT_FETCH_SUCCESS, CHAT_READ_SUCCESS, CHAT_READ_REQUEST, } from 'soapbox/actions/chats'; import { STREAMING_CHAT_UPDATE } from 'soapbox/actions/streaming'; import { normalizeChat } from 'soapbox/actions/importer/normalizer'; import { Map as ImmutableMap, fromJS } from 'immutable'; const importChat = (state, chat) => state.set(chat.id, fromJS(normalizeChat(chat))); const importChats = (state, chats) => state.withMutations(mutable => chats.forEach(chat => importChat(mutable, chat))); const initialState = ImmutableMap(); export default function chats(state = initialState, action) { switch(action.type) { case CHATS_FETCH_SUCCESS: return importChats(state, action.chats); case STREAMING_CHAT_UPDATE: return importChats(state, [action.chat]); case CHAT_FETCH_SUCCESS: return importChats(state, [action.chat]); case CHAT_READ_REQUEST: return state.setIn([action.chatId, 'unread'], 0); case CHAT_READ_SUCCESS: return importChats(state, [action.chat]); default: return state; } }