import { useCallback, useEffect, useRef, useState } from "react";
import FloatingMenu, { FloatMenuItemConfig } from "@/component/floatingMenu";
import { Image, Toast } from "antd-mobile";
import MessageCom from "./component/message";
import VoiceRecord from "./component/voice";
import XPopup from "@/component/xpopup";
import type { Message } from "./types";
import { mockTranslateAudio } from "@/utils/voice";
import dogSvg from "@/assets/translate/dog.svg";
import catSvg from "@/assets/translate/cat.svg";
import pigSvg from "@/assets/translate/pig.svg";
import { MoreTwo } from "@icon-park/react";
interface DefinedProps {}
const menuItems: FloatMenuItemConfig[] = [
{ icon: , type: "dog" },
{ icon: , type: "cat" },
{ icon: , type: "pig" },
{
icon: (
),
type: "add",
},
];
function Index(props: DefinedProps) {
// const data: Message[] = [
// {
// id: 1,
// audioUrl: "",
// duration: 0,
// translatedText: "",
// isTranslating: true,
// isPlaying: false,
// timestamp: 0,
// },
// ];
const [currentPlayingId, setCurrentPlayingId] = useState(null); //当前播放id
const [messages, setMessages] = useState([]);
const [isRecording, setIsRecording] = useState(false); //是否录音中
const [currentLanguage, setCurrentLanguage] = useState();
const [visible, setVisible] = useState(false);
useEffect(() => {
setCurrentLanguage(menuItems[0]);
}, []);
//完成录音
const onRecordingComplete = useCallback(
(audioUrl: string, actualDuration: number) => {
const newMessage: Message = {
id: Date.now(),
type: "dog",
audioUrl,
name: "生无可恋喵",
duration: actualDuration,
timestamp: Date.now(),
isTranslating: true,
};
setMessages((prev) => [...prev, newMessage]);
setTimeout(() => {
onTranslateAudio(newMessage.id);
}, 1000);
Toast.show("语音已发送");
},
[messages]
);
//翻译
const onTranslateAudio = useCallback(
async (messageId: number) => {
try {
const translatedText = await mockTranslateAudio();
setMessages((prev) =>
prev.map((msg) =>
msg.id === messageId
? { ...msg, translatedText, isTranslating: false }
: msg
)
);
} catch (error) {
console.error("翻译失败:", error);
Toast.show("翻译失败,请重试");
setMessages((prev) =>
prev.map((msg) =>
msg.id === messageId
? {
...msg,
isTranslating: false,
translatedText: "翻译失败,请重试",
}
: msg
)
);
}
},
[messages]
);
const onSetIsRecording = (flag: boolean) => {
setIsRecording(flag);
};
const onLanguage = (item: FloatMenuItemConfig) => {
if (item.type === "add") {
setVisible(true);
} else {
setCurrentLanguage(item);
}
};
return (
{
setVisible(false);
}}
>
宠物语种
);
}
export default Index;