|
|
|
@ -32,6 +32,11 @@ const OrderSignEmoji = ({ item }) => (
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const RegionCodeEmoji = ({ regionCode }) => {
|
|
|
|
|
const countryCode = String.fromCodePoint(...[...regionCode.toUpperCase()].map((x) => 0x1f1a5 + x.charCodeAt()))
|
|
|
|
|
return <span title={regionCode}>{countryCode}</span>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const NewTagForm = ({onSubmit,...props}) => {
|
|
|
|
|
const [form] = Form.useForm();
|
|
|
|
|
const [subLoding, setSubLoding] = useState(false);
|
|
|
|
@ -205,11 +210,17 @@ const ChatListItem = (({item, refreshConversationList,setListUpdateFlag,onSwitch
|
|
|
|
|
{
|
|
|
|
|
label: (
|
|
|
|
|
<>
|
|
|
|
|
<Popover content={<NewTagForm onSubmit={(tagLabel) => {
|
|
|
|
|
handleConversationItemTags(item, '', tagLabel);
|
|
|
|
|
setContextMenuOpen(false);
|
|
|
|
|
}}
|
|
|
|
|
/>} placement='bottom' trigger={['click']}>
|
|
|
|
|
<Popover
|
|
|
|
|
content={
|
|
|
|
|
<NewTagForm
|
|
|
|
|
onSubmit={(tagLabel) => {
|
|
|
|
|
handleConversationItemTags(item, '', tagLabel)
|
|
|
|
|
setContextMenuOpen(false)
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
placement='bottom'
|
|
|
|
|
trigger={['click']}>
|
|
|
|
|
<Button type='dashed' size='small' className='m-1'>
|
|
|
|
|
+新标签
|
|
|
|
|
</Button>
|
|
|
|
@ -231,36 +242,36 @@ const ChatListItem = (({item, refreshConversationList,setListUpdateFlag,onSwitch
|
|
|
|
|
openKeys: openTags,
|
|
|
|
|
onOpenChange: (openKeys) => {
|
|
|
|
|
if (!isEmpty(openKeys) && contextMenuOpen) {
|
|
|
|
|
setOpenTags(openKeys);
|
|
|
|
|
setOpenTags(openKeys)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onClick: ({ key, domEvent }) => {
|
|
|
|
|
domEvent.stopPropagation();
|
|
|
|
|
domEvent.stopPropagation()
|
|
|
|
|
if (key.startsWith('tag_')) {
|
|
|
|
|
const tagKey = key.replace('tag_', '');
|
|
|
|
|
return handleConversationItemTags(item, tagKey);
|
|
|
|
|
const tagKey = key.replace('tag_', '')
|
|
|
|
|
return handleConversationItemTags(item, tagKey)
|
|
|
|
|
}
|
|
|
|
|
switch (key) {
|
|
|
|
|
case 'top':
|
|
|
|
|
setContextMenuOpen(false);
|
|
|
|
|
return handleConversationItemTop(item);
|
|
|
|
|
setContextMenuOpen(false)
|
|
|
|
|
return handleConversationItemTop(item)
|
|
|
|
|
case 'unread':
|
|
|
|
|
setContextMenuOpen(false);
|
|
|
|
|
return handleConversationItemUnread(item);
|
|
|
|
|
setContextMenuOpen(false)
|
|
|
|
|
return handleConversationItemUnread(item)
|
|
|
|
|
case 'close':
|
|
|
|
|
setContextMenuOpen(false);
|
|
|
|
|
return handleConversationItemClose(item);
|
|
|
|
|
setContextMenuOpen(false)
|
|
|
|
|
return handleConversationItemClose(item)
|
|
|
|
|
case 'edit0':
|
|
|
|
|
setOpenTags([]);
|
|
|
|
|
setEditingChat({...item, is_new: false});
|
|
|
|
|
return setNewChatModalVisible(true);
|
|
|
|
|
setOpenTags([])
|
|
|
|
|
setEditingChat({ ...item, is_new: false })
|
|
|
|
|
return setNewChatModalVisible(true)
|
|
|
|
|
case 'new_tags':
|
|
|
|
|
return;
|
|
|
|
|
return
|
|
|
|
|
default:
|
|
|
|
|
// setContextMenuOpen(false);
|
|
|
|
|
console.log('unknown key', key);
|
|
|
|
|
console.log('unknown key', key)
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}}>
|
|
|
|
@ -279,9 +290,14 @@ const ChatListItem = (({item, refreshConversationList,setListUpdateFlag,onSwitch
|
|
|
|
|
id={item.sn}
|
|
|
|
|
letterItem={{ id: item.whatsapp_name || item.whatsapp_phone_number, letter: (item.whatsapp_name || item.whatsapp_phone_number).slice(0, 5) }}
|
|
|
|
|
alt={item.whatsapp_name}
|
|
|
|
|
title={(item.top_state === 1 ? '🔝' : '')
|
|
|
|
|
+ (item.conversation_memo || item.whatsapp_name || item.whatsapp_phone_number)}
|
|
|
|
|
// item.conversation_memo ||
|
|
|
|
|
title={
|
|
|
|
|
<>
|
|
|
|
|
{/* <RegionCodeEmoji regionCode={item?.last_message?.regionCode || ''} /> */}
|
|
|
|
|
{(item.top_state === 1 ? '🔝' : '')
|
|
|
|
|
+ (item.conversation_memo || item.whatsapp_name || item.whatsapp_phone_number)}
|
|
|
|
|
</>
|
|
|
|
|
// item.conversation_memo ||
|
|
|
|
|
}
|
|
|
|
|
// subtitle={item.coli_id}
|
|
|
|
|
subtitle={
|
|
|
|
|
<div>
|
|
|
|
@ -290,7 +306,9 @@ const ChatListItem = (({item, refreshConversationList,setListUpdateFlag,onSwitch
|
|
|
|
|
{/* <SentIcon /> */}
|
|
|
|
|
{/* <span>{item.coli_id}</span> */}
|
|
|
|
|
{/* <span><ReadIcon />最后一条消息</span> */}
|
|
|
|
|
<span><RenderLastMsg {...item?.last_message } /></span>
|
|
|
|
|
<span>
|
|
|
|
|
<RenderLastMsg {...item?.last_message} />
|
|
|
|
|
</span>
|
|
|
|
|
<div className='text-sm'>
|
|
|
|
|
<OrderSignEmoji item={item} />
|
|
|
|
|
{(item?.tags || [])?.map((tag) => (
|
|
|
|
@ -309,12 +327,16 @@ const ChatListItem = (({item, refreshConversationList,setListUpdateFlag,onSwitch
|
|
|
|
|
// String(item.sn) === String(tabSelectedConversation?.sn) ? ' bg-neutral-200' : '',
|
|
|
|
|
// ].join(' ')}
|
|
|
|
|
// statusText={<WhatsAppOutlined key={'channel'} className='text-whatsapp' />}
|
|
|
|
|
statusText={<ChannelLogo channel={flush([
|
|
|
|
|
item?.channels?.phone_number ? 'phone' : null,
|
|
|
|
|
item?.channels?.email ? 'email' : null,
|
|
|
|
|
item?.channels?.whatsapp_phone_number ? 'waba' : null,
|
|
|
|
|
item?.last_message?.type === 'email' ? 'email' : null,
|
|
|
|
|
])} />}
|
|
|
|
|
statusText={
|
|
|
|
|
<ChannelLogo
|
|
|
|
|
channel={flush([
|
|
|
|
|
item?.channels?.phone_number ? 'phone' : null,
|
|
|
|
|
item?.channels?.email ? 'email' : null,
|
|
|
|
|
item?.channels?.whatsapp_phone_number ? 'waba' : null,
|
|
|
|
|
item?.last_message?.type === 'email' ? 'email' : null,
|
|
|
|
|
])}
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
statusColor={'#fff'}
|
|
|
|
|
onClick={() => onSwitchConversation(item)}
|
|
|
|
|
customStatusComponents={[
|
|
|
|
@ -325,6 +347,6 @@ const ChatListItem = (({item, refreshConversationList,setListUpdateFlag,onSwitch
|
|
|
|
|
</div>
|
|
|
|
|
</Dropdown>
|
|
|
|
|
</>
|
|
|
|
|
);
|
|
|
|
|
)
|
|
|
|
|
});
|
|
|
|
|
export default ChatListItem;
|
|
|
|
|