import React from 'react' import { useAtomValue, useSetAtom } from 'jotai' import { ModelManagementService } from '@janhq/core' import { executeSerial } from '../../../../electron/core/plugin-manager/execution/extension-manager' import { getActiveConvoIdAtom, setActiveConvoIdAtom, updateConversationWaitingForResponseAtom, } from '@helpers/atoms/Conversation.atom' import { setMainViewStateAtom, MainViewState, } from '@helpers/atoms/MainView.atom' 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 isSelected = activeConvoId === conversation._id const onClick = async () => { const model = await executeSerial( ModelManagementService.GetModelById, conversation.modelId ) if (conversation._id) updateConvWaiting(conversation._id, true) 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