You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
5.1 KiB
JavaScript
131 lines
5.1 KiB
JavaScript
import useAuthStore from '@/stores/AuthStore';
|
|
import useConversationStore from '@/stores/ConversationStore';
|
|
import { fetchConversationsList, fetchOrderConversationsList, postNewOrEditConversationItem } from '@/actions/ConversationActions';
|
|
import { isEmpty } from '@/utils/commons';
|
|
|
|
const CHAT_ITEM_RECORD = {
|
|
"sn": null,
|
|
"opi_sn": 0,
|
|
"coli_sn": null,
|
|
"whatsapp_phone_number": null,
|
|
"last_received_time": null,
|
|
"last_send_time": null,
|
|
"unread_msg_count": 0,
|
|
"whatsapp_name": null,
|
|
"coli_id": "",
|
|
"conversation_expiretime": null,
|
|
"tags": null,
|
|
"channels": {
|
|
"email": null,
|
|
"phone_number": null,
|
|
"whatsapp_phone_number": null
|
|
},
|
|
"nick_name": null,
|
|
"top_state": 0,
|
|
"conversation_memo": null,
|
|
"order_label_id": null,
|
|
"order_state_id": null,
|
|
"intour": 0,
|
|
"last_message": {},
|
|
"lasttime": ""
|
|
};
|
|
|
|
export function useConversationNewItem() {
|
|
const [currentConversation, setCurrentConversation, updateConversationItem] = useConversationStore((state) => [
|
|
state.currentConversation,
|
|
state.setCurrentConversation,
|
|
state.updateConversationItem,
|
|
]);
|
|
const updateCurrentConversation = useConversationStore((state) => state.updateCurrentConversation);
|
|
const conversationsList = useConversationStore((state) => state.conversationsList);
|
|
const addToConversationList = useConversationStore((state) => state.addToConversationList);
|
|
const userId = useAuthStore((state) => state.loginUser.userId);
|
|
/**
|
|
* 打开订单的会话, 不存在自动新增
|
|
*/
|
|
const openOrderContactConversation = async (whatsappID) => {
|
|
const { coli_sn, opi_sn } = currentConversation;
|
|
let findCurrentOrderChats = conversationsList.filter(
|
|
(item) => `${item.coli_sn}` === `${coli_sn}` && `${item.opi_sn}` === `${opi_sn}` && `${item.whatsapp_phone_number}` === `${whatsappID}`
|
|
);
|
|
let findCurrentIndex = isEmpty(findCurrentOrderChats) ? -1 : 0; // findCurrentOrderChats.length-1;
|
|
let findCurrent = findCurrentOrderChats[findCurrentIndex];
|
|
if (findCurrentIndex !== -1) {
|
|
addToConversationList(findCurrentOrderChats);
|
|
} else if (!isEmpty(whatsappID)) {
|
|
const data = await fetchOrderConversationsList({ opisn: opi_sn, colisn: coli_sn, whatsappid: whatsappID });
|
|
if (!isEmpty(data)) {
|
|
addToConversationList(data);
|
|
findCurrentIndex = data.findIndex((item) => `${item.coli_sn}` === `${coli_sn}` && `${item.opi_sn}` === `${opi_sn}` && `${item.whatsapp_phone_number}` === `${whatsappID}`);
|
|
findCurrentIndex = findCurrentIndex >= 0 ? findCurrentIndex : 0;
|
|
findCurrent = data[findCurrentIndex];
|
|
}
|
|
}
|
|
if (findCurrentIndex >= 0) {
|
|
setCurrentConversation(findCurrent);
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* 创建新会话/编辑会话
|
|
*/
|
|
const newConversation = async (body) => {
|
|
const { wa_id, remark, opi_sn: opisn, conversationid } = body;
|
|
const newChat = {
|
|
whatsapp_phone_number: wa_id,
|
|
remark: remark || '',
|
|
guest_email: body.email || '',
|
|
guest_phone: body.phone_number || '',
|
|
guest_name: body.name || '',
|
|
}
|
|
let buildChatItem = {};
|
|
const createdNew = await postNewOrEditConversationItem({ ...newChat, opisn: opisn || userId, conversationid });
|
|
// addToConversationList([{...createdNew, sn: createdNew.conversationid}]);
|
|
// const _list = await fetchConversationsList({ opisn });
|
|
// addToConversationList(_list, 'top');
|
|
if (!isEmpty(createdNew)) {
|
|
buildChatItem = {
|
|
// ...CHAT_ITEM_RECORD,
|
|
...createdNew,
|
|
sn: createdNew.conversationid,
|
|
channels: {
|
|
email: createdNew.guest_email,
|
|
phone_number: createdNew.guest_phone,
|
|
whatsapp_phone_number: createdNew.whatsapp_phone_number,
|
|
},
|
|
conversation_memo: createdNew.guest_name || createdNew.remark,
|
|
// lasttime: createdNew.session_creatime,
|
|
show_default: createdNew.remark || createdNew.guest_name || createdNew.guest_phone || createdNew.guest_email || createdNew.whatsapp_phone_number || '',
|
|
}
|
|
}
|
|
if (isEmpty(body.conversationid)) {
|
|
// const newChat = _list.find((item) => item.sn === createdNew.conversationid)
|
|
if (!isEmpty(createdNew)) {
|
|
buildChatItem = {
|
|
...CHAT_ITEM_RECORD,
|
|
...buildChatItem,
|
|
lasttime: createdNew.session_creatime,
|
|
}
|
|
setCurrentConversation(buildChatItem);
|
|
updateConversationItem(buildChatItem);
|
|
addToConversationList([buildChatItem], 'top');
|
|
return ;
|
|
}
|
|
// setCurrentConversation({
|
|
// ...newChat,
|
|
// show_default: newChat.conversation_memo || newChat.whatsapp_name || newChat?.channels?.whatsapp_phone_number || newChat?.channels?.phone_number || newChat?.channels?.email || '',
|
|
// })
|
|
return ;
|
|
}
|
|
if (currentConversation.sn === createdNew.conversationid) {
|
|
updateCurrentConversation(buildChatItem);
|
|
} else {
|
|
updateConversationItem(buildChatItem);
|
|
}
|
|
|
|
};
|
|
|
|
return { openOrderContactConversation, newConversation };
|
|
}
|