|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
import React, { createContext, useContext, useState, useEffect, useRef } from 'react';
|
|
|
|
|
import { RealTimeAPI } from '@/lib/realTimeAPI';
|
|
|
|
|
import { whatsappMsgMapped, sentMsgTypeMapped } from '@/lib/msgUtils';
|
|
|
|
|
import { receivedMsgTypeMapped, sentMsgTypeMapped } from '@/lib/msgUtils';
|
|
|
|
|
import { groupBy, isEmpty } from '@/utils/utils';
|
|
|
|
|
|
|
|
|
|
export const ConversationContext = createContext();
|
|
|
|
@ -21,6 +21,7 @@ export async function fetchJSON(url, data) {
|
|
|
|
|
const API_HOST = 'http://202.103.68.144:8888';
|
|
|
|
|
|
|
|
|
|
export const useConversations = ({loginUser, realtimeAPI}) => {
|
|
|
|
|
const { userId } = loginUser;
|
|
|
|
|
|
|
|
|
|
const [errors, setErrors] = useState([]);
|
|
|
|
|
const [messages, setMessages] = useState([]); // active conversation
|
|
|
|
@ -89,29 +90,29 @@ export const useConversations = ({loginUser, realtimeAPI}) => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const [customerOrderProfile, setCustomerProfile] = useState({});
|
|
|
|
|
const getCustomerProfile = async (customerId) => {
|
|
|
|
|
console.log(customerId, 'getCustomerProfile');
|
|
|
|
|
const data = await fetchJSON(`http://127.0.0.1:4523/m2/3888351-0-default/144062941`);
|
|
|
|
|
setCustomerProfile(data);
|
|
|
|
|
const getCustomerProfile = async (colisn) => {
|
|
|
|
|
const data = await fetchJSON(`${API_HOST}/getorderinfo`, { colisn });
|
|
|
|
|
setCustomerProfile(data.result?.[0] || {});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const switchConversation = (cc) => {
|
|
|
|
|
setCurrentID(cc.id);
|
|
|
|
|
setCurrentConversation(cc);
|
|
|
|
|
const _all = [];
|
|
|
|
|
// const _all = all.map((ele) => whatsappMsgMapped['whatsapp.inbound_message.received'].contentToRender(ele)); // debug: 0
|
|
|
|
|
// const _all = all.map((ele) => receivedMsgTypeMapped['whatsapp.inbound_message.received'].contentToRender(ele)); // debug: 0
|
|
|
|
|
// todo: update msg status
|
|
|
|
|
// const _all = all2.map((ele) => whatsappMsgMapped['whatsapp.message.updated'].contentToRender(ele)); // debug: 0
|
|
|
|
|
// const _all = all2.map((ele) => receivedMsgTypeMapped['whatsapp.message.updated'].contentToRender(ele)); // debug: 0
|
|
|
|
|
setMessages([..._all, ...(activeConversations[cc.id] || [])]);
|
|
|
|
|
// Get customer profile when switching conversation
|
|
|
|
|
// getCustomerProfile(cc.id);
|
|
|
|
|
// getCustomerProfile(??);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
return () => {
|
|
|
|
|
getCustomerProfile(currentID);
|
|
|
|
|
};
|
|
|
|
|
}, [currentID]);
|
|
|
|
|
// Get customer profile when switching conversation
|
|
|
|
|
// useEffect(() => {
|
|
|
|
|
// return () => {
|
|
|
|
|
// getCustomerProfile(currentID);
|
|
|
|
|
// };
|
|
|
|
|
// }, [currentID]);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* *****************************************************************************************************
|
|
|
|
@ -157,9 +158,8 @@ export const useConversations = ({loginUser, realtimeAPI}) => {
|
|
|
|
|
setMessages((prevMessages) => {
|
|
|
|
|
return prevMessages.map(ele => {
|
|
|
|
|
if (ele.id === message.id) {
|
|
|
|
|
return {...ele, id: message.id, status: message.status}; // todo: renderId 需要返回
|
|
|
|
|
return {...ele, id: message.id, status: message.status, dateString: message.dateString};
|
|
|
|
|
}
|
|
|
|
|
// return {...ele, status: 'failed', dateString: '❌'}; // debug: 0
|
|
|
|
|
return ele;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
@ -175,18 +175,17 @@ export const useConversations = ({loginUser, realtimeAPI}) => {
|
|
|
|
|
if (!result) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
let resultType = result.type;
|
|
|
|
|
if (errcode !== 0) {
|
|
|
|
|
// addError('Error Connecting to Server');
|
|
|
|
|
resultType = result.action;
|
|
|
|
|
}
|
|
|
|
|
if (typeof result.type === 'string' && result.type === 'error') {
|
|
|
|
|
// addError('Error Connecting to Server');
|
|
|
|
|
}
|
|
|
|
|
console.log(result.type, 'result.type');
|
|
|
|
|
const msgObj = whatsappMsgMapped[result.type].getMsg(result);
|
|
|
|
|
const msgRender = whatsappMsgMapped[result.type].contentToRender(msgObj);
|
|
|
|
|
const msgUpdate = whatsappMsgMapped[result.type].contentToUpdate(msgObj);
|
|
|
|
|
console.log(resultType, 'result.type');
|
|
|
|
|
const msgObj = receivedMsgTypeMapped[resultType].getMsg(result);
|
|
|
|
|
const msgRender = receivedMsgTypeMapped[resultType].contentToRender(msgObj);
|
|
|
|
|
const msgUpdate = receivedMsgTypeMapped[resultType].contentToUpdate(msgObj);
|
|
|
|
|
console.log('msgRender msgUpdate', msgRender, msgUpdate);
|
|
|
|
|
if (result.type === 'whatsapp.message.updated') {
|
|
|
|
|
if ( ['whatsapp.message.updated', 'message'].includes(resultType)) {
|
|
|
|
|
updateMessage(msgUpdate);
|
|
|
|
|
// return false;
|
|
|
|
|
}
|
|
|
|
@ -198,7 +197,7 @@ export const useConversations = ({loginUser, realtimeAPI}) => {
|
|
|
|
|
|
|
|
|
|
const sendMessage = (msgObj) => {
|
|
|
|
|
const contentToSend = sentMsgTypeMapped[msgObj.type].contentToSend(msgObj);
|
|
|
|
|
realtimeAPI.sendMessage(contentToSend);
|
|
|
|
|
realtimeAPI.sendMessage({ ...contentToSend, opi_sn: userId });
|
|
|
|
|
const contentToRender = sentMsgTypeMapped[msgObj.type].contentToRender(msgObj);
|
|
|
|
|
console.log(contentToRender, 'contentToRender sendMessage------------------');
|
|
|
|
|
addMessage(contentToRender);
|
|
|
|
@ -214,7 +213,7 @@ export const useConversations = ({loginUser, realtimeAPI}) => {
|
|
|
|
|
switchConversation,
|
|
|
|
|
templates: templatesList, // setTemplates, getTemplates,
|
|
|
|
|
// templates, // debug: 0
|
|
|
|
|
customerOrderProfile,
|
|
|
|
|
customerOrderProfile, getCustomerProfile
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|