Files
leadchat/app/javascript/dashboard/store/modules/conversations/actions.js
2019-10-16 14:36:17 +05:30

185 lines
4.6 KiB
JavaScript

import Vue from 'vue';
import * as types from '../../mutation-types';
import ChatList from '../../../api/inbox';
import ConversationApi from '../../../api/inbox/conversation';
import messageApi from '../../../api/inbox/message';
// actions
const actions = {
fetchAllConversations({ commit }, fetchParams) {
commit(types.default.SET_LIST_LOADING_STATUS);
ChatList.fetchAllConversations(fetchParams, response => {
commit(types.default.SET_ALL_CONVERSATION, {
chats: response.data.data.payload,
});
commit(types.default.SET_CONV_TAB_META, {
meta: response.data.data.meta,
});
commit(types.default.CLEAR_LIST_LOADING_STATUS);
});
},
emptyAllConversations({ commit }) {
commit(types.default.EMPTY_ALL_CONVERSATION);
},
clearSelectedState({ commit }) {
commit(types.default.CLEAR_CURRENT_CHAT_WINDOW);
},
fetchPreviousMessages({ commit }, data) {
const donePromise = new Promise(resolve => {
messageApi
.fetchPreviousMessages(data)
.then(response => {
commit(types.default.SET_PREVIOUS_CONVERSATIONS, {
id: data.id,
data: response.data.payload,
});
if (response.data.payload.length < 20) {
commit(types.default.SET_ALL_MESSAGES_LOADED);
}
resolve();
})
.catch(error => {
console.log(error);
});
});
return donePromise;
},
setActiveChat(store, data) {
const { commit } = store;
const localDispatch = store.dispatch;
let donePromise = null;
commit(types.default.CURRENT_CHAT_WINDOW, data);
commit(types.default.CLEAR_ALL_MESSAGES_LOADED);
if (data.dataFetched === undefined) {
donePromise = new Promise(resolve => {
localDispatch('fetchPreviousMessages', {
id: data.id,
before: data.messages[0].id,
})
.then(() => {
Vue.set(data, 'dataFetched', true);
resolve();
})
.catch(error => {
console.log(error);
});
});
} else {
donePromise = new Promise(resolve => {
commit(types.default.SET_CHAT_META, { id: data.id });
resolve();
});
}
return donePromise;
},
assignAgent({ commit }, data) {
return new Promise(resolve => {
ConversationApi.assignAgent(data).then(response => {
commit(types.default.ASSIGN_AGENT, response.data);
resolve(response.data);
});
});
},
toggleStatus({ commit }, data) {
return new Promise(resolve => {
ConversationApi.toggleStatus(data).then(response => {
commit(
types.default.RESOLVE_CONVERSATION,
response.data.payload.current_status
);
resolve(response.data);
});
});
},
sendMessage({ commit }, data) {
return new Promise(resolve => {
messageApi
.sendMessage(data)
.then(response => {
commit(types.default.SEND_MESSAGE, response);
resolve();
})
.catch();
});
},
addPrivateNote({ commit }, data) {
return new Promise(resolve => {
messageApi
.addPrivateNote(data)
.then(response => {
commit(types.default.SEND_MESSAGE, response);
resolve();
})
.catch();
});
},
addMessage({ commit }, message) {
commit(types.default.ADD_MESSAGE, message);
},
addConversation({ commit }, conversation) {
commit(types.default.ADD_CONVERSATION, conversation);
},
toggleTyping({ commit }, data) {
return new Promise(resolve => {
ConversationApi.fbTyping(data)
.then(() => {
commit(types.default.FB_TYPING, data);
resolve();
})
.catch();
});
},
markSeen({ commit }, data) {
return new Promise(resolve => {
ConversationApi.markSeen(data)
.then(response => {
commit(types.default.MARK_SEEN, response);
resolve();
})
.catch();
});
},
markMessagesRead({ commit }, data) {
setTimeout(() => {
commit(types.default.MARK_MESSAGE_READ, data);
}, 4000);
return new Promise(resolve => {
ConversationApi.markMessageRead(data)
.then(() => {
resolve();
})
.catch();
});
},
setChatFilter({ commit }, data) {
commit(types.default.CHANGE_CHAT_STATUS_FILTER, data);
},
updateAssignee({ commit }, data) {
commit(types.default.UPDATE_ASSIGNEE, data);
},
setActiveInbox({ commit }, inboxId) {
commit(types.default.SET_ACTIVE_INBOX, inboxId);
},
};
export default actions;