import { Model } from '@janhq/core/lib/types' import { useAtomValue, useSetAtom } from 'jotai' import { twMerge } from 'tailwind-merge' import { MainViewState } from '@/constants/screens' import { useActiveModel } from '@/hooks/useActiveModel' import { useGetDownloadedModels } from '@/hooks/useGetDownloadedModels' import { useMainViewState } from '@/hooks/useMainViewState' import { displayDate } from '@/utils/datetime' import { getActiveConvoIdAtom, setActiveConvoIdAtom, } from '@/helpers/atoms/Conversation.atom' import { activeAssistantModelAtom } from '@/helpers/atoms/Model.atom' type Props = { conversation: Conversation name: string summary?: string updatedAt?: string } const HistoryItem: React.FC = ({ conversation, name, summary, updatedAt, }) => { const activeConvoId = useAtomValue(getActiveConvoIdAtom) const isSelected = activeConvoId === conversation._id const activeModel = useAtomValue(activeAssistantModelAtom) const { startModel } = useActiveModel() const { setMainViewState } = useMainViewState() const setActiveConvoId = useSetAtom(setActiveConvoIdAtom) const { downloadedModels } = useGetDownloadedModels() const onClick = async () => { if (conversation.modelId == null) { console.debug('modelId is undefined') return } const model = downloadedModels.find( (e: Model) => e._id === conversation.modelId ) if (model != null) { if (activeModel == null) { // if there's no active model, we simply load conversation's model startModel(model._id) } else if (activeModel._id !== model._id) { // display confirmation modal // TODO: temporarily disabled // setConfirmationModalProps({ // replacingModel: model, // }) } } if (activeConvoId !== conversation._id) { setMainViewState(MainViewState.Chat) 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