File size: 2,323 Bytes
e454383 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import { useState, useEffect } from "react";
import { useChatStore } from "@/stores/chatStore";
import { getTranscripts } from "@/lib/api";
import { useScrollToBottom } from "@/hooks/useScrollToBottom";
import { CHAT_UPDATED_EVENT, chatEventEmitter } from "@/lib/chatEventEmitter";
import type { Transcript } from "@/lib/types";
export function useChatPage() {
const [selectedTranscripts, setSelectedTranscripts] = useState<Transcript[]>(
[]
);
const [selectedTranscript, setSelectedTranscript] =
useState<Transcript | null>(null);
const [isLoading, setIsLoading] = useState<boolean>(false);
const [evaluatingMessageIndex, setEvaluatingMessageIndex] = useState<
number | null
>(null);
const [hasScrolledToBottom, setHasScrolledToBottom] = useState(false);
const [isTranscriptsOpen, setIsTranscriptsOpen] = useState<boolean>(false);
const { selectedChat, selectedChatId } = useChatStore();
const { scrollRef, scrollToBottom } = useScrollToBottom();
const handleTranscriptClick = async (transcript: Transcript) => {
if (!transcript) return;
setSelectedTranscript(transcript);
if (transcript.filename !== selectedTranscript?.filename) {
try {
const data = await getTranscripts(transcript.filename);
setSelectedTranscripts(data);
setIsTranscriptsOpen(true);
} catch (error) {
console.error("Error loading transcripts:", error);
}
}
};
const handleEvaluate = (messageIndex: number) => {
setEvaluatingMessageIndex(messageIndex);
};
useEffect(() => {
if (!hasScrolledToBottom) {
scrollToBottom();
setHasScrolledToBottom(true);
}
const handleChatUpdate = () => {
if (!hasScrolledToBottom) {
scrollToBottom();
setHasScrolledToBottom(true);
}
};
chatEventEmitter.on(CHAT_UPDATED_EVENT, handleChatUpdate);
return () => {
chatEventEmitter.off(CHAT_UPDATED_EVENT, handleChatUpdate);
};
}, [scrollToBottom, hasScrolledToBottom]);
return {
selectedTranscripts,
selectedTranscript,
isLoading,
evaluatingMessageIndex,
setEvaluatingMessageIndex,
selectedChat,
selectedChatId,
scrollRef,
scrollToBottom,
handleTranscriptClick,
handleEvaluate,
isTranscriptsOpen,
setIsTranscriptsOpen,
};
}
|