78 lines
1.8 KiB
TypeScript

import { createReducer, on } from '@ngrx/store';
import { initialState, adapterUserInfo, adapterUserInfoShort } from './state';
import {
infoSuccess,
updateSuccess,
updateRoomUserLastReadSeq,
updateTimeRoomIntervalSuccess
} from './actions';
import * as AuthenticationStore from '@app/store/account/authentication';
import * as ChatStore from '@app/store/messenger/chat';
import { UserInfo } from '@ucap-webmessenger/protocol-room';
export const reducer = createReducer(
initialState,
on(infoSuccess, (state, action) => {
return {
...state,
roomInfo: action.roomInfo,
userInfoList: adapterUserInfo.addAll(action.userInfoList, {
...state.userInfoList
}),
userInfoShortList: adapterUserInfoShort.addAll(action.userInfoShortList, {
...state.userInfoShortList
})
};
}),
on(updateSuccess, (state, action) => {
return {
...state,
roomInfo: {
...state.roomInfo,
roomName: action.res.roomName,
receiveAlarm: action.res.receiveAlarm
}
};
}),
on(updateTimeRoomIntervalSuccess, (state, action) => {
return {
...state,
roomInfo: {
...state.roomInfo,
timeRoomInterval: action.res.timerInterval
}
};
}),
on(updateRoomUserLastReadSeq, (state, action) => {
const userSeq = action.SENDER_SEQ;
const userInfo: UserInfo = {
...state.userInfoList.entities[userSeq],
lastReadEventSeq: action.lastReadSeq
};
return {
...state,
userInfoList: adapterUserInfo.updateOne(
{ id: userSeq, changes: userInfo },
{ ...state.userInfoList }
)
};
}),
on(AuthenticationStore.logout, (state, action) => {
return {
...initialState
};
}),
on(ChatStore.clearSelectedRoom, (state, action) => {
return {
...initialState
};
})
);