diff --git a/src/actions/ConversationActions.js b/src/actions/ConversationActions.js
index 06618fa..3f849e8 100644
--- a/src/actions/ConversationActions.js
+++ b/src/actions/ConversationActions.js
@@ -153,6 +153,14 @@ export const fetchMessagesHistory = async (params) => {
return parseRenderMessageList(data);
}
+/**
+ * @param {object} params { opisn, phone_number_from, phone_number_mergeto }
+ */
+export const fetchConversationMerge = async (params) => {
+ const { errcode, result } = await fetchJSON(`${API_HOST}/merge_session`, params);
+ return errcode !== 0 ? {} : result;
+};
+
/**
* ------------------------------------------------------------------------------------------------
* 未分配
diff --git a/src/views/Conversations/History/MergeConversationTo.jsx b/src/views/Conversations/History/MergeConversationTo.jsx
new file mode 100644
index 0000000..c28941a
--- /dev/null
+++ b/src/views/Conversations/History/MergeConversationTo.jsx
@@ -0,0 +1,126 @@
+import { useEffect, useState } from 'react';
+import { Button, Form, Input, Radio, Modal } from 'antd';
+import { MergeCellsOutlined } from '@ant-design/icons';
+import { fetchConversationMerge } from '@/actions/ConversationActions';
+import useAuthStore from '@/stores/AuthStore';
+
+export const MergeToForm = ({ currentWAID, initialValues, onFormInstanceReady }) => {
+ const [form] = Form.useForm();
+
+ useEffect(() => {
+ onFormInstanceReady(form);
+ }, []);
+
+ const [mergeDir, setMergeDir] = useState(initialValues.direction);
+
+ useEffect(() => {
+ if (mergeDir === 'mergeto') {
+ form.setFieldValue('phone_number_from', currentWAID);
+ form.setFieldValue('phone_number_mergeto', '');
+ } else {
+ form.setFieldValue('phone_number_from', '');
+ form.setFieldValue('phone_number_mergeto', currentWAID);
+ }
+
+ return () => {};
+ }, [mergeDir]);
+
+ const onValuesChange = (changeValues, allValues) => {
+ if ('direction' in changeValues) {
+ setMergeDir(changeValues.direction);
+ }
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/* hidden */}
+
+
+
+
+ {() => (
+
+ {form.getFieldValue('phone_number_from')}
+ ➡
+ {form.getFieldValue('phone_number_mergeto')}
+
+ )}
+
+
+ );
+};
+
+const MergeConversationTo = ({ currentWAID, opi_sn, ...props }) => {
+ const userId = useAuthStore((state) => state.loginUser.userId);
+ const [open, setOpen] = useState(false);
+ const [formInstance, setFormInstance] = useState();
+ const [loading, setLoading] = useState(false);
+
+ const handleSubmit = async (values) => {
+ setLoading(true);
+ await fetchConversationMerge({ ...values, opi_sn });
+ setLoading(false);
+ setOpen(false);
+ };
+ return (
+ <>
+ {['404', '383', '227'].includes(userId) && } type='link' onClick={setOpen} />}
+ {
+ // onCancel();
+ setOpen(false);
+ formInstance?.resetFields();
+ }}
+ destroyOnClose
+ onOk={async () => {
+ try {
+ const values = await formInstance?.validateFields();
+ await handleSubmit(values);
+ formInstance?.resetFields();
+ } catch (error) {
+ console.log('Failed:', error);
+ }
+ }}>
+ {
+ setFormInstance(instance);
+ }}
+ />
+
+ >
+ );
+};
+
+export default MergeConversationTo;
diff --git a/src/views/Conversations/History/MessagesList.jsx b/src/views/Conversations/History/MessagesList.jsx
index 5c71a94..791cb85 100644
--- a/src/views/Conversations/History/MessagesList.jsx
+++ b/src/views/Conversations/History/MessagesList.jsx
@@ -6,6 +6,7 @@ import { MESSAGE_PAGE_SIZE, fetchMessagesHistory } from '@/actions/ConversationA
import useFormStore from '@/stores/FormStore';
import { isEmpty, stringToColour, groupBy, isNotEmpty } from '@/utils/commons';
import { useShallow } from 'zustand/react/shallow';
+import MergeConversationTo from './MergeConversationTo';
const BIG_PAGE_SIZE = MESSAGE_PAGE_SIZE * 100;
const MessagesList = ({ ...props }) => {
@@ -208,9 +209,12 @@ const MessagesList = ({ ...props }) => {
return (
<>
-
+
+
{selectedConversation.whatsapp_name} {selectedConversation.whatsapp_phone_number}
+ {selectedConversation.whatsapp_phone_number && }
+