[Feature] Website live chat (#187)
Co-authored-by: Nithin David Thomas <webofnithin@gmail.com> Co-authored-by: Sojan Jose <sojan@pepalo.com>
This commit is contained in:
60
app/javascript/widget/store/modules/conversation.js
Executable file
60
app/javascript/widget/store/modules/conversation.js
Executable file
@@ -0,0 +1,60 @@
|
||||
/* eslint-disable no-param-reassign */
|
||||
import Vue from 'vue';
|
||||
import { sendMessageAPI, getConversationAPI } from 'widget/api/conversation';
|
||||
|
||||
export const DEFAULT_CONVERSATION = 'default';
|
||||
const state = {
|
||||
conversations: {},
|
||||
};
|
||||
|
||||
const getters = {
|
||||
getConversation: _state => _state.conversations,
|
||||
};
|
||||
|
||||
const actions = {
|
||||
sendMessage: async (_, params) => {
|
||||
const { content } = params;
|
||||
await sendMessageAPI(content);
|
||||
},
|
||||
|
||||
fetchOldConversations: async ({ commit }) => {
|
||||
try {
|
||||
const { data } = await getConversationAPI();
|
||||
commit('initMessagesInConversation', data);
|
||||
} catch (error) {
|
||||
// Handle error
|
||||
}
|
||||
},
|
||||
|
||||
addMessage({ commit }, data) {
|
||||
commit('pushMessageToConversations', data);
|
||||
},
|
||||
};
|
||||
|
||||
const mutations = {
|
||||
initInboxInConversations($state, lastConversation) {
|
||||
Vue.set($state.conversations, lastConversation, {});
|
||||
},
|
||||
|
||||
pushMessageToConversations($state, message) {
|
||||
const { id } = message;
|
||||
const messagesInbox = $state.conversations;
|
||||
Vue.set(messagesInbox, id, message);
|
||||
},
|
||||
|
||||
initMessagesInConversation(_state, payload) {
|
||||
if (!payload.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
payload.map(message => Vue.set(_state.conversations, message.id, message));
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
getters,
|
||||
actions,
|
||||
mutations,
|
||||
};
|
||||
Reference in New Issue
Block a user