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 ReturnArrow from "@/assets/icons/svg/returnArrow.svg";
import AskHello from "@/components/ask/hello";
import { ThemedText } from "@/components/ThemedText"; import { ThemedText } from "@/components/ThemedText";
import { fetchApi } from "@/lib/server-api-util"; import { fetchApi } from "@/lib/server-api-util";
import { Message } from "@/types/ask"; 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> </Animated.View>
{/* 聊天页面 */} {/* 聊天页面 */}

View File

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