import React from 'react' import { useAtomValue, useSetAtom } from 'jotai' import Image from 'next/image' import { ModelManagementService } from '@janhq/core' import { executeSerial } from '../../../../electron/core/plugin-manager/execution/extension-manager' import { getActiveConvoIdAtom, setActiveConvoIdAtom, updateConversationErrorAtom, updateConversationWaitingForResponseAtom, } from '@helpers/atoms/Conversation.atom' import { setMainViewStateAtom, MainViewState, } from '@helpers/atoms/MainView.atom' import useInitModel from '@hooks/useInitModel' import { displayDate } from '@utils/datetime' import { twMerge } from 'tailwind-merge' type Props = { conversation: Conversation avatarUrl?: string name: string summary?: string updatedAt?: string } const HistoryItem: React.FC = ({ conversation, avatarUrl, name, summary, updatedAt, }) => { const setMainViewState = useSetAtom(setMainViewStateAtom) 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( ModelManagementService.GetModelById, conversation.modelId ) 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-background/80' : 'bg-background/20' const description = conversation?.lastMessage ?? 'No new message' return (
  • {/* title */} {updatedAt && displayDate(new Date(updatedAt).getTime())} {summary ?? name} {/* description */} {description}
  • ) } export default HistoryItem