ngx-tencent-im
Version:
Instant messaging for Angular.
78 lines • 12.8 kB
JavaScript
import { createReducer, on } from '@ngrx/store';
import { checkoutConversationAction, pushCurrentMessageListAction, removeMessageAction, resetConversationAction, resetCurrentConversationAction, updateConversationListAction, updateCurrentConversationAction, updateMessageAction } from '../actions';
export const initialState = {
currentConversation: {},
currentMessageList: [],
nextReqMessageID: '',
isCompleted: false,
conversationList: []
};
const _conversationReducer = createReducer(initialState, on(updateCurrentConversationAction, (state, { conversation }) => {
return {
...state,
currentConversation: conversation,
currentMessageList: [],
nextReqMessageID: '',
isCompleted: false // 当前会话消息列表是否已经拉完了所有消息
};
}), on(updateMessageAction, (state, { nextReqMessageID, isCompleted, currentMessageList }) => {
return {
...state,
currentMessageList,
nextReqMessageID,
isCompleted // 当前会话消息列表是否已经拉完了所有消息
};
}), on(updateConversationListAction, (state, { conversationList }) => {
return {
...state,
conversationList
};
}), on(resetCurrentConversationAction, (state) => ({
...state,
currentConversation: {},
})), on(pushCurrentMessageListAction, (state, { message }) => {
// 还没当前会话,则跳过
if (!state.currentConversation.conversationID) {
return { ...state };
}
if (Array.isArray(message)) {
// 筛选出当前会话的消息
const result = message.filter(item => item.conversationID === state.currentConversation.conversationID);
const currentMessageList = [...state.currentMessageList, ...result];
return { ...state, currentMessageList };
}
else if (message.conversationID === state.currentConversation.conversationID) {
const currentMessageList = [...state.currentMessageList, message];
return { ...state, currentMessageList };
}
return { ...state };
}), on(removeMessageAction, (state, { message }) => {
const index = state.currentMessageList.findIndex(({ ID }) => ID === message.ID);
if (index >= 0) {
const currentMessageList = state.currentMessageList;
currentMessageList.splice(index, 1);
return { ...state, currentMessageList };
}
return { ...state };
}), on(resetConversationAction, (state) => {
return Object.assign(state, {
currentConversation: {},
currentMessageList: [],
nextReqMessageID: '',
isCompleted: false,
conversationList: []
});
}));
export function conversationReducer(state, action) {
return _conversationReducer(state, action);
}
export const conversationIDInitialState = {
conversationID: '',
};
const _conversationIDReducer = createReducer(conversationIDInitialState, on(checkoutConversationAction, (state, { conversationID }) => ({
conversationID
})));
export function conversationIDReducer(state, action) {
return _conversationIDReducer(state, action);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLnJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVuY2VudC1pbS9zcmMvc3RvcmUvcmVkdWNlci9jb252ZXJzYXRpb24ucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVUsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDRCQUE0QixFQUM1QixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNwQixNQUFNLFlBQVksQ0FBQztBQVVwQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQXNCO0lBQzdDLG1CQUFtQixFQUFFLEVBQWtCO0lBQ3ZDLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsZ0JBQWdCLEVBQUUsRUFBRTtJQUNwQixXQUFXLEVBQUUsS0FBSztJQUNsQixnQkFBZ0IsRUFBRSxFQUFFO0NBQ3JCLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FDeEMsWUFBWSxFQUNaLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7SUFDOUQsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLG1CQUFtQixFQUFFLFlBQVk7UUFDakMsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsc0JBQXNCO0tBQzFDLENBQUM7QUFDSixDQUFDLENBQUMsRUFDRixFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFO0lBQ3ZGLE9BQU87UUFDTCxHQUFHLEtBQUs7UUFDUixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLFdBQVcsQ0FBQyxzQkFBc0I7S0FDbkMsQ0FBQztBQUNKLENBQUMsQ0FBQyxFQUNGLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRTtJQUMvRCxPQUFPO1FBQ0wsR0FBRyxLQUFLO1FBQ1IsZ0JBQWdCO0tBQ2pCLENBQUM7QUFDSixDQUFDLENBQUMsRUFDRixFQUFFLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0MsR0FBRyxLQUFLO0lBQ1IsbUJBQW1CLEVBQUUsRUFBa0I7Q0FDeEMsQ0FBQyxDQUFDLEVBQ0gsRUFBRSxDQUFDLDRCQUE0QixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtJQUV0RCxhQUFhO0lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUU7UUFDN0MsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7S0FDckI7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUIsYUFBYTtRQUNiLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RyxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNwRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztLQUN6QztTQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxLQUFLLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFO1FBQzlFLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztLQUN6QztJQUNELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxFQUNGLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7SUFDN0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEYsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ2QsTUFBTSxrQkFBa0IsR0FBZSxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztLQUN6QztJQUNELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO0FBRXRCLENBQUMsQ0FBQyxFQUNGLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3BDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDMUIsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixrQkFBa0IsRUFBRSxFQUFFO1FBQ3RCLGdCQUFnQixFQUFFLEVBQUU7UUFDcEIsV0FBVyxFQUFFLEtBQUs7UUFDbEIsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBRUYsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQW9DLEVBQUUsTUFBYztJQUN0RixPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBS0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXdCO0lBQzdELGNBQWMsRUFBRSxFQUFFO0NBQ25CLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLGFBQWEsQ0FBQywwQkFBMEIsRUFDckUsRUFBRSxDQUFDLDBCQUEwQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0QsY0FBYztDQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFUCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBc0MsRUFBRSxNQUFjO0lBQzFGLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQWN0aW9uLCBjcmVhdGVSZWR1Y2VyLCBvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uLCBNZXNzYWdlIH0gZnJvbSAndGltLWpzLXNkayc7XHJcbmltcG9ydCB7XHJcbiAgY2hlY2tvdXRDb252ZXJzYXRpb25BY3Rpb24sXHJcbiAgcHVzaEN1cnJlbnRNZXNzYWdlTGlzdEFjdGlvbixcclxuICByZW1vdmVNZXNzYWdlQWN0aW9uLFxyXG4gIHJlc2V0Q29udmVyc2F0aW9uQWN0aW9uLFxyXG4gIHJlc2V0Q3VycmVudENvbnZlcnNhdGlvbkFjdGlvbixcclxuICB1cGRhdGVDb252ZXJzYXRpb25MaXN0QWN0aW9uLFxyXG4gIHVwZGF0ZUN1cnJlbnRDb252ZXJzYXRpb25BY3Rpb24sXHJcbiAgdXBkYXRlTWVzc2FnZUFjdGlvblxyXG59IGZyb20gJy4uL2FjdGlvbnMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25TdGF0ZSB7XHJcbiAgY3VycmVudENvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xyXG4gIGN1cnJlbnRNZXNzYWdlTGlzdDogQXJyYXk8TWVzc2FnZT47XHJcbiAgbmV4dFJlcU1lc3NhZ2VJRDogc3RyaW5nO1xyXG4gIGlzQ29tcGxldGVkOiBib29sZWFuOyAvLyDlvZPliY3kvJror53mtojmga/liJfooajmmK/lkKblt7Lnu4/mi4nlrozkuobmiYDmnInmtojmga9cclxuICBjb252ZXJzYXRpb25MaXN0OiBBcnJheTxDb252ZXJzYXRpb24+O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlOiBDb252ZXJzYXRpb25TdGF0ZSA9IHtcclxuICBjdXJyZW50Q29udmVyc2F0aW9uOiB7fSBhcyBDb252ZXJzYXRpb24sXHJcbiAgY3VycmVudE1lc3NhZ2VMaXN0OiBbXSxcclxuICBuZXh0UmVxTWVzc2FnZUlEOiAnJyxcclxuICBpc0NvbXBsZXRlZDogZmFsc2UsIC8vIOW9k+WJjeS8muivnea2iOaBr+WIl+ihqOaYr+WQpuW3sue7j+aLieWujOS6huaJgOaciea2iOaBr1xyXG4gIGNvbnZlcnNhdGlvbkxpc3Q6IFtdXHJcbn07XHJcblxyXG5jb25zdCBfY29udmVyc2F0aW9uUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoXHJcbiAgaW5pdGlhbFN0YXRlLFxyXG4gIG9uKHVwZGF0ZUN1cnJlbnRDb252ZXJzYXRpb25BY3Rpb24sIChzdGF0ZSwgeyBjb252ZXJzYXRpb24gfSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uc3RhdGUsXHJcbiAgICAgIGN1cnJlbnRDb252ZXJzYXRpb246IGNvbnZlcnNhdGlvbixcclxuICAgICAgY3VycmVudE1lc3NhZ2VMaXN0OiBbXSxcclxuICAgICAgbmV4dFJlcU1lc3NhZ2VJRDogJycsXHJcbiAgICAgIGlzQ29tcGxldGVkOiBmYWxzZSAvLyDlvZPliY3kvJror53mtojmga/liJfooajmmK/lkKblt7Lnu4/mi4nlrozkuobmiYDmnInmtojmga9cclxuICAgIH07XHJcbiAgfSksXHJcbiAgb24odXBkYXRlTWVzc2FnZUFjdGlvbiwgKHN0YXRlLCB7IG5leHRSZXFNZXNzYWdlSUQsIGlzQ29tcGxldGVkLCBjdXJyZW50TWVzc2FnZUxpc3QgfSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uc3RhdGUsXHJcbiAgICAgIGN1cnJlbnRNZXNzYWdlTGlzdCxcclxuICAgICAgbmV4dFJlcU1lc3NhZ2VJRCxcclxuICAgICAgaXNDb21wbGV0ZWQgLy8g5b2T5YmN5Lya6K+d5raI5oGv5YiX6KGo5piv5ZCm5bey57uP5ouJ5a6M5LqG5omA5pyJ5raI5oGvXHJcbiAgICB9O1xyXG4gIH0pLFxyXG4gIG9uKHVwZGF0ZUNvbnZlcnNhdGlvbkxpc3RBY3Rpb24sIChzdGF0ZSwgeyBjb252ZXJzYXRpb25MaXN0IH0pID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnN0YXRlLFxyXG4gICAgICBjb252ZXJzYXRpb25MaXN0XHJcbiAgICB9O1xyXG4gIH0pLFxyXG4gIG9uKHJlc2V0Q3VycmVudENvbnZlcnNhdGlvbkFjdGlvbiwgKHN0YXRlKSA9PiAoe1xyXG4gICAgLi4uc3RhdGUsXHJcbiAgICBjdXJyZW50Q29udmVyc2F0aW9uOiB7fSBhcyBDb252ZXJzYXRpb24sXHJcbiAgfSkpLFxyXG4gIG9uKHB1c2hDdXJyZW50TWVzc2FnZUxpc3RBY3Rpb24sIChzdGF0ZSwgeyBtZXNzYWdlIH0pID0+IHtcclxuXHJcbiAgICAvLyDov5jmsqHlvZPliY3kvJror53vvIzliJnot7Pov4dcclxuICAgIGlmICghc3RhdGUuY3VycmVudENvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JRCkge1xyXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZSkpIHtcclxuICAgICAgLy8g562b6YCJ5Ye65b2T5YmN5Lya6K+d55qE5raI5oGvXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1lc3NhZ2UuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jb252ZXJzYXRpb25JRCA9PT0gc3RhdGUuY3VycmVudENvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JRCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlTGlzdCA9IFsuLi5zdGF0ZS5jdXJyZW50TWVzc2FnZUxpc3QsIC4uLnJlc3VsdF07XHJcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBjdXJyZW50TWVzc2FnZUxpc3QgfTtcclxuICAgIH0gZWxzZSBpZiAobWVzc2FnZS5jb252ZXJzYXRpb25JRCA9PT0gc3RhdGUuY3VycmVudENvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JRCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50TWVzc2FnZUxpc3QgPSBbLi4uc3RhdGUuY3VycmVudE1lc3NhZ2VMaXN0LCBtZXNzYWdlXTtcclxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGN1cnJlbnRNZXNzYWdlTGlzdCB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUgfTtcclxuICB9KSxcclxuICBvbihyZW1vdmVNZXNzYWdlQWN0aW9uLCAoc3RhdGUsIHsgbWVzc2FnZSB9KSA9PiB7XHJcbiAgICBjb25zdCBpbmRleCA9IHN0YXRlLmN1cnJlbnRNZXNzYWdlTGlzdC5maW5kSW5kZXgoKHsgSUQgfSkgPT4gSUQgPT09IG1lc3NhZ2UuSUQpO1xyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VMaXN0OiBBcnJheTxhbnk+ID0gc3RhdGUuY3VycmVudE1lc3NhZ2VMaXN0O1xyXG4gICAgICBjdXJyZW50TWVzc2FnZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGN1cnJlbnRNZXNzYWdlTGlzdCB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4uc3RhdGUgfTtcclxuXHJcbiAgfSksXHJcbiAgb24ocmVzZXRDb252ZXJzYXRpb25BY3Rpb24sIChzdGF0ZSkgPT4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RhdGUsIHtcclxuICAgICAgY3VycmVudENvbnZlcnNhdGlvbjoge30sXHJcbiAgICAgIGN1cnJlbnRNZXNzYWdlTGlzdDogW10sXHJcbiAgICAgIG5leHRSZXFNZXNzYWdlSUQ6ICcnLFxyXG4gICAgICBpc0NvbXBsZXRlZDogZmFsc2UsIC8vIOW9k+WJjeS8muivnea2iOaBr+WIl+ihqOaYr+WQpuW3sue7j+aLieWujOS6huaJgOaciea2iOaBr1xyXG4gICAgICBjb252ZXJzYXRpb25MaXN0OiBbXVxyXG4gICAgfSk7XHJcbiAgfSksXHJcbik7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVyc2F0aW9uUmVkdWNlcihzdGF0ZTogQ29udmVyc2F0aW9uU3RhdGUgfCB1bmRlZmluZWQsIGFjdGlvbjogQWN0aW9uKSB7XHJcbiAgcmV0dXJuIF9jb252ZXJzYXRpb25SZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbklEU3RhdGUge1xyXG4gIGNvbnZlcnNhdGlvbklEOiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnNhdGlvbklESW5pdGlhbFN0YXRlOiBDb252ZXJzYXRpb25JRFN0YXRlID0ge1xyXG4gIGNvbnZlcnNhdGlvbklEOiAnJyxcclxufTtcclxuXHJcbmNvbnN0IF9jb252ZXJzYXRpb25JRFJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGNvbnZlcnNhdGlvbklESW5pdGlhbFN0YXRlLFxyXG4gIG9uKGNoZWNrb3V0Q29udmVyc2F0aW9uQWN0aW9uLCAoc3RhdGUsIHsgY29udmVyc2F0aW9uSUQgfSkgPT4gKHtcclxuICAgIGNvbnZlcnNhdGlvbklEXHJcbiAgfSkpKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJzYXRpb25JRFJlZHVjZXIoc3RhdGU6IENvbnZlcnNhdGlvbklEU3RhdGUgfCB1bmRlZmluZWQsIGFjdGlvbjogQWN0aW9uKSB7XHJcbiAgcmV0dXJuIF9jb252ZXJzYXRpb25JRFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XHJcbn1cclxuIl19