UNPKG

@botonic/react

Version:

Build Chatbots using React

60 lines 2.88 kB
import { WebchatAction } from './actions'; export const messagesReducer = (state, action) => { switch (action.type) { case WebchatAction.ADD_MESSAGE: return addMessageReducer(state, action); case WebchatAction.ADD_MESSAGE_COMPONENT: return addMessageComponent(state, action); case WebchatAction.UPDATE_MESSAGE: return updateMessageReducer(state, action); case WebchatAction.UPDATE_REPLIES: return Object.assign(Object.assign({}, state), { replies: action.payload }); case WebchatAction.CLEAR_MESSAGES: return Object.assign(Object.assign({}, state), { messagesJSON: [], messagesComponents: [] }); case WebchatAction.UPDATE_LAST_MESSAGE_DATE: return Object.assign(Object.assign({}, state), { lastMessageUpdate: action.payload }); default: throw new Error(); } }; function addMessageComponent(state, action) { var _a; const messageComponent = action.payload; const isUnreadMessage = !state.isWebchatOpen && ((_a = messageComponent.props) === null || _a === void 0 ? void 0 : _a.ack) !== 1; const unreadMessages = isUnreadMessage ? state.unreadMessages + 1 : state.unreadMessages; return Object.assign(Object.assign({}, state), { messagesComponents: [...(state.messagesComponents || []), messageComponent], unreadMessages }); } function updateMessageReducer(state, action) { const msgIndex = state.messagesJSON.map(m => m.id).indexOf(action.payload.id); if (msgIndex > -1) { const msgComponent = state.messagesComponents[msgIndex]; let updatedMessageComponents = {}; if (msgComponent) { const updatedMsgComponent = Object.assign(Object.assign({}, msgComponent), { props: Object.assign(Object.assign({}, msgComponent.props), { ack: action.payload.ack }), }); updatedMessageComponents = { messagesComponents: [ ...state.messagesComponents.slice(0, msgIndex), Object.assign({}, updatedMsgComponent), ...state.messagesComponents.slice(msgIndex + 1), ], }; } return Object.assign(Object.assign(Object.assign({}, state), { messagesJSON: [ ...state.messagesJSON.slice(0, msgIndex), Object.assign({}, action.payload), ...state.messagesJSON.slice(msgIndex + 1), ] }), updatedMessageComponents); } return state; } function addMessageReducer(state, action) { if (state.messagesJSON && state.messagesJSON.find(m => m.id === action.payload.id)) return state; return Object.assign(Object.assign({}, state), { messagesJSON: [...(state.messagesJSON || []), action.payload] }); } //# sourceMappingURL=messages-reducer.js.map