feat(消息输入与记录): 增强引用消息功能与状态管理
在消息输入组件中添加引用消息的逻辑,确保引用内容能够正确显示。同时,在消息记录组件中实现引用功能的处理,优化了状态管理,提升了用户体验。
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useState } from "react";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Layout, Input, Button, Modal } from "antd";
|
||||
import {
|
||||
SendOutlined,
|
||||
@@ -35,6 +35,17 @@ const MessageEnter: React.FC<MessageEnterProps> = ({ contract }) => {
|
||||
const updateTransmitModal = useWeChatStore(
|
||||
state => state.updateTransmitModal,
|
||||
);
|
||||
|
||||
const quoteMessageContent = useWeChatStore(
|
||||
state => state.quoteMessageContent,
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (quoteMessageContent) {
|
||||
setInputValue(quoteMessageContent);
|
||||
}
|
||||
}, [quoteMessageContent]);
|
||||
|
||||
const handleSend = async () => {
|
||||
if (!inputValue.trim()) return;
|
||||
console.log("发送消息", contract);
|
||||
|
||||
@@ -111,6 +111,9 @@ const ClickMenu: React.FC<ClickMenuProps> = ({
|
||||
|
||||
return timeDiffInSeconds <= 108;
|
||||
};
|
||||
const isText = (): boolean => {
|
||||
return messageData.msgType === 1;
|
||||
};
|
||||
const menuItems = [
|
||||
{
|
||||
key: "transmit",
|
||||
@@ -127,11 +130,16 @@ const ClickMenu: React.FC<ClickMenuProps> = ({
|
||||
icon: <CheckSquareOutlined />,
|
||||
label: "多条转发",
|
||||
},
|
||||
{
|
||||
key: "quote",
|
||||
icon: <LinkOutlined />,
|
||||
label: "引用",
|
||||
},
|
||||
|
||||
...(isText()
|
||||
? [
|
||||
{
|
||||
key: "quote",
|
||||
icon: <LinkOutlined />,
|
||||
label: "引用",
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(isShowRecall()
|
||||
? [
|
||||
{
|
||||
|
||||
@@ -54,6 +54,11 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
|
||||
state => state.updateTransmitModal,
|
||||
);
|
||||
|
||||
const currentContract = useWeChatStore(state => state.currentContract);
|
||||
const updateQuoteMessageContent = useWeChatStore(
|
||||
state => state.updateQuoteMessageContent,
|
||||
);
|
||||
|
||||
// 判断是否为表情包URL的工具函数
|
||||
const isEmojiUrl = (content: string): boolean => {
|
||||
return (
|
||||
@@ -680,6 +685,20 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
|
||||
seq: +new Date(),
|
||||
});
|
||||
};
|
||||
const handQuote = (messageData: ChatRecord) => {
|
||||
//判断如果是用户
|
||||
const isWechatUser = !!currentContract?.chatroomId;
|
||||
const nickname = currentContract.nickname;
|
||||
if (isWechatUser) {
|
||||
} else {
|
||||
console.log(isWechatUser, nickname);
|
||||
//当前用户的昵称
|
||||
}
|
||||
|
||||
updateQuoteMessageContent(JSON.stringify(messageData));
|
||||
//更新值
|
||||
console.log("handQuote 引入逻辑", messageData);
|
||||
};
|
||||
|
||||
const handCommad = (action: string) => {
|
||||
switch (action) {
|
||||
@@ -693,6 +712,7 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
|
||||
break;
|
||||
case "quote":
|
||||
// 引用逻辑
|
||||
handQuote(contextMenu.messageData);
|
||||
break;
|
||||
case "recall":
|
||||
// 撤回逻辑
|
||||
|
||||
@@ -10,6 +10,8 @@ import {
|
||||
* 包含聊天消息、联系人管理、朋友圈等功能的状态和方法
|
||||
*/
|
||||
export interface WeChatState {
|
||||
quoteMessageContent: string;
|
||||
updateQuoteMessageContent: (value: string) => void;
|
||||
// ==================== Transmit Module =========Start===========
|
||||
/** 选中的聊天记录列表 */
|
||||
selectedChatRecords: ChatRecord[];
|
||||
|
||||
@@ -27,6 +27,10 @@ import {
|
||||
export const useWeChatStore = create<WeChatState>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
quoteMessageContent: "",
|
||||
updateQuoteMessageContent: (message: string) => {
|
||||
set({ quoteMessageContent: message });
|
||||
},
|
||||
// ==================== Transmit Module =========Start===========
|
||||
/** 选中的聊天记录列表 */
|
||||
selectedChatRecords: [],
|
||||
@@ -61,13 +65,17 @@ export const useWeChatStore = create<WeChatState>()(
|
||||
// ==================== 聊天消息管理方法 ====================
|
||||
/** 添加新消息到当前聊天 */
|
||||
addMessage: message => {
|
||||
const { wechatAccountId, wechatChatroomId, wechatFriendId } = message;
|
||||
const { wechatChatroomId, wechatFriendId } = message;
|
||||
const currentContract = get().currentContract;
|
||||
if (currentContract) {
|
||||
console.log(
|
||||
currentContract.id === wechatFriendId ||
|
||||
currentContract.id === wechatChatroomId,
|
||||
);
|
||||
|
||||
if (
|
||||
currentContract.wechatAccountId === wechatAccountId &&
|
||||
(currentContract.id === wechatFriendId ||
|
||||
currentContract.id === wechatChatroomId)
|
||||
currentContract.id === wechatFriendId ||
|
||||
currentContract.id === wechatChatroomId
|
||||
) {
|
||||
set(state => ({
|
||||
currentMessages: [...state.currentMessages, message],
|
||||
|
||||
@@ -38,7 +38,7 @@ const messageHandlers: Record<string, MessageHandler> = {
|
||||
// 发送消息响应
|
||||
CmdSendMessageResp: message => {
|
||||
console.log("发送消息响应", message);
|
||||
// addMessage(message.friendMessage || message.chatroomMessage);
|
||||
addMessage(message.friendMessage || message.chatroomMessage);
|
||||
// 在这里添加具体的处理逻辑
|
||||
},
|
||||
CmdSendMessageResult: message => {
|
||||
|
||||
Reference in New Issue
Block a user