import { createReducer, on } from '@ngrx/store'; import { initialState, adapterBuddy2, adapterGroup2, adapterRoom, adapterRoomUser, adapterRoomUserShort } from './state'; import { buddy2Success, group2Success, roomSuccess, updateRoomForNewEventMessage } from './actions'; import { RoomUserDetailData, RoomUserData } from '@ucap-webmessenger/protocol-sync'; import * as AuthenticationStore from '@app/store/account/authentication'; export const reducer = createReducer( initialState, on(buddy2Success, (state, action) => { return { ...state, buddy2: adapterBuddy2.addAll(action.buddyList, { ...state.buddy2, syncDate: action.syncDate }) }; }), on(group2Success, (state, action) => { return { ...state, group2: adapterGroup2.addAll(action.groupList, { ...state.group2, syncDate: action.syncDate }) }; }), on(roomSuccess, (state, action) => { const roomUserList: RoomUserDetailData[] = []; const roomUserShortList: RoomUserData[] = []; for (const key in action.roomUserInfoMap) { if (action.roomUserInfoMap.hasOwnProperty(key)) { const element = action.roomUserInfoMap[key]; if (!!element.userInfoList && 0 < element.userInfoList.length) { roomUserList.push({ roomSeq: key, userInfos: element.userInfoList }); } if ( !!element.userInfoShortList && 0 < element.userInfoShortList.length ) { roomUserShortList.push({ roomSeq: key, userInfos: element.userInfoShortList }); } } } return { ...state, room: adapterRoom.addAll(action.roomList, { ...state.room, syncDate: action.syncDate }), roomUser: adapterRoomUser.addAll(roomUserList, { ...state.roomUser }), roomUserShort: adapterRoomUserShort.addAll(roomUserShortList, { ...state.roomUserShort }) }; }), on(updateRoomForNewEventMessage, (state, action) => { const roomInfo = { ...state.room.entities[action.roomSeq], finalEventDate: action.info.sendDate, finalEventMessage: action.info.sentMessage }; return { ...state, room: adapterRoom.updateOne( { id: action.roomSeq, changes: roomInfo }, { ...state.room } ) }; }), on(AuthenticationStore.logout, (state, action) => { return { ...initialState }; }) );