"use client"; import * as React from "react"; import { cn } from "@/lib/utils"; import { RemotePropertyCfgSheet, } from "@/components/Chat/ChatCfgPropertySelect"; import PdfSelect from "@/components/Chat/PdfSelect"; import { genRandomChatList, useAppDispatch, useAutoScroll, LANGUAGE_OPTIONS, useAppSelector, GRAPH_OPTIONS, isRagGraph, isEditModeOn, } from "@/common"; import { setRtmConnected, addChatItem, setSelectedGraphId, setLanguage, } from "@/store/reducers/global"; import MessageList from "@/components/Chat/MessageList"; import { Button } from "@/components/ui/button"; import { Send } from "lucide-react"; import { rtmManager } from "@/manager/rtm"; import { type IRTMTextItem, EMessageDataType, EMessageType, ERTMTextType } from "@/types"; import { RemoteGraphSelect } from "@/components/Chat/ChatCfgGraphSelect"; import { RemoteModuleCfgSheet } from "@/components/Chat/ChatCfgModuleSelect"; export default function ChatCard(props: { className?: string }) { const { className } = props; const [modal2Open, setModal2Open] = React.useState(false); const [inputValue, setInputValue] = React.useState(""); const rtmConnected = useAppSelector((state) => state.global.rtmConnected); const dispatch = useAppDispatch(); const graphName = useAppSelector((state) => state.global.selectedGraphId); const agentConnected = useAppSelector((state) => state.global.agentConnected); const options = useAppSelector((state) => state.global.options); const disableInputMemo = React.useMemo(() => { return ( !options.channel || !options.userId || !options.appId || !options.token || !rtmConnected || !agentConnected ); }, [ options.channel, options.userId, options.appId, options.token, rtmConnected, agentConnected, ]); // const chatItems = genRandomChatList(10) const chatRef = React.useRef(null); useAutoScroll(chatRef); const onTextChanged = (text: IRTMTextItem) => { console.log("[rtm] onTextChanged", text); if (text.type == ERTMTextType.TRANSCRIBE) { // const isAgent = Number(text.uid) != Number(options.userId) dispatch( addChatItem({ userId: options.userId, text: text.text, type: text.stream_id === "0" ? EMessageType.AGENT : EMessageType.USER, data_type: EMessageDataType.TEXT, isFinal: text.is_final, time: text.ts, }) ); } if (text.type == ERTMTextType.INPUT_TEXT) { dispatch( addChatItem({ userId: options.userId, text: text.text, type: EMessageType.USER, data_type: EMessageDataType.TEXT, isFinal: true, time: text.ts, }) ); } }; const handleInputChange = (e: React.ChangeEvent) => { setInputValue(e.target.value); }; const handleInputSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!inputValue || disableInputMemo) { return; } rtmManager.sendText(inputValue); setInputValue(""); }; return ( <> {/* Chat Card */}
{/* Scrollable messages container */}
{/* Input area */}
); }