78 lines
1.8 KiB
TypeScript
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
|
|
};
|
|
})
|
|
);
|