This commit is contained in:
Junhui Chen 2025-08-09 10:28:23 +08:00
parent 85d9b823de
commit 0482f23d97
2 changed files with 58 additions and 29 deletions

View File

@ -1,4 +1,5 @@
import ReturnArrow from "@/assets/icons/svg/returnArrow.svg";
import AskHello from "@/components/ask/hello";
import { ThemedText } from "@/components/ThemedText";
import { fetchApi } from "@/lib/server-api-util";
import { Message } from "@/types/ask";
@ -271,7 +272,7 @@ export default function AskScreen() {
}
]}
>
{/* <AskHello setUserMessages={setUserMessages} setConversationId={setConversationId} setIsHello={setIsHello} /> */}
<AskHello setUserMessages={setUserMessages} setConversationId={setConversationId} setIsHello={setIsHello} />
</Animated.View>
{/* 聊天页面 */}

View File

@ -1,7 +1,7 @@
import { ThemedText } from "@/components/ThemedText";
import { webSocketManager } from "@/lib/websocket-util";
import { Message } from "@/types/ask";
import { Dispatch, SetStateAction } from "react";
import { Dispatch, SetStateAction, useCallback, useRef } from "react";
import { useTranslation } from "react-i18next";
import { Dimensions, Image, StyleSheet, TouchableOpacity, View } from 'react-native';
import { createNewConversation } from "./utils";
@ -16,36 +16,63 @@ export default function AskHello({ setUserMessages, setConversationId, setIsHell
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
const handleCase = async (text: string) => {
setIsHello(false);
setUserMessages([
{
id: Math.random().toString(36).substring(2, 9),
content: text,
role: 'user',
timestamp: new Date().toISOString()
},
{
id: Math.random().toString(36).substring(2, 9),
content: "keepSearchIng",
role: 'assistant',
timestamp: new Date().toISOString()
}
]);
//
const inFlightRef = useRef(false);
const handleCase = useCallback(async (text: string) => {
if (inFlightRef.current) return;
inFlightRef.current = true;
try {
// UI
setIsHello(false);
setUserMessages([
{
id: Math.random().toString(36).substring(2, 9),
content: text,
role: 'user',
timestamp: new Date().toISOString()
},
{
id: Math.random().toString(36).substring(2, 9),
content: "keepSearchIng",
role: 'assistant',
timestamp: new Date().toISOString()
}
]);
const sessionId = await createNewConversation(text);
if (!sessionId) {
console.error("Failed to create a new conversation.");
//
setUserMessages(prev => prev.filter(item => item.content !== 'keepSearchIng'));
return;
}
const sessionId = await createNewConversation(text);
if (sessionId) {
setConversationId(sessionId);
webSocketManager.send({
type: 'Chat',
session_id: sessionId,
message: text
});
} else {
console.error("Failed to create a new conversation.");
try {
if (webSocketManager && typeof (webSocketManager as any).send === 'function') {
(webSocketManager as any).send({
type: 'Chat',
session_id: sessionId,
message: text
});
} else {
throw new Error('WebSocket manager is not ready');
}
} catch (wsErr) {
console.error('WebSocket send failed:', wsErr);
//
setUserMessages(prev => prev.filter(item => item.content !== 'keepSearchIng'));
}
} catch (err) {
console.error('handleCase failed:', err);
//
setUserMessages(prev => prev.filter(item => item.content !== 'keepSearchIng'));
} finally {
inFlightRef.current = false;
}
}
}, [setConversationId, setIsHello, setUserMessages]);
return (
<View className="flex-1 bg-white w-full">
{/* <ScrollView
@ -106,7 +133,6 @@ const styles = StyleSheet.create({
flexDirection: 'row',
flexWrap: 'wrap',
justifyContent: 'center',
gap: 8,
width: '100%',
marginTop: 16
},
@ -115,6 +141,8 @@ const styles = StyleSheet.create({
borderColor: "#AC7E35",
borderRadius: 10,
paddingHorizontal: 8,
marginHorizontal: 4,
marginVertical: 4,
width: 'auto',
fontSize: 14,
color: "#4C320C"