import React from "react"; import JanImage from "../JanImage"; import { useAtomValue, useSetAtom } from "jotai"; import Image from "next/image"; import { Conversation } from "@/_models/Conversation"; import { DataService } from "../../../shared/coreService"; import { executeSerial } from "../../../../electron/core/plugin-manager/execution/extension-manager"; import { conversationStatesAtom, getActiveConvoIdAtom, setActiveConvoIdAtom, updateConversationErrorAtom, updateConversationWaitingForResponseAtom, } from "@/_helpers/atoms/Conversation.atom"; import { setMainViewStateAtom, MainViewState, } from "@/_helpers/atoms/MainView.atom"; import useInitModel from "@/_hooks/useInitModel"; type Props = { conversation: Conversation; avatarUrl?: string; name: string; updatedAt?: string; }; const HistoryItem: React.FC = ({ conversation, avatarUrl, name, updatedAt, }) => { const setMainViewState = useSetAtom(setMainViewStateAtom); const conversationStates = useAtomValue(conversationStatesAtom); const activeConvoId = useAtomValue(getActiveConvoIdAtom); const setActiveConvoId = useSetAtom(setActiveConvoIdAtom); const updateConvWaiting = useSetAtom( updateConversationWaitingForResponseAtom ); const updateConvError = useSetAtom(updateConversationErrorAtom); const isSelected = activeConvoId === conversation.id; const { initModel } = useInitModel(); const onClick = async () => { const model = await executeSerial( DataService.GET_MODEL_BY_ID, conversation.model_id ); if (conversation.id) updateConvWaiting(conversation.id, true); initModel(model).then((res: any) => { if (conversation.id) updateConvWaiting(conversation.id, false); if (res?.error && conversation.id) { updateConvError(conversation.id, res.error); } }); if (activeConvoId !== conversation.id) { setMainViewState(MainViewState.Conversation); setActiveConvoId(conversation.id); } }; const backgroundColor = isSelected ? "bg-gray-100 dark:bg-gray-700" : "bg-white dark:bg-gray-500"; let rightImageUrl: string | undefined; if (conversationStates[conversation.id ?? ""]?.waitingForResponse === true) { rightImageUrl = "icons/loading.svg"; } return ( ); }; export default HistoryItem;