import React from 'react' import { useAtomValue, useSetAtom } from 'jotai' import { getActiveConvoIdAtom, setActiveConvoIdAtom, } from '@helpers/atoms/Conversation.atom' import { setMainViewStateAtom, MainViewState, } from '@helpers/atoms/MainView.atom' import { displayDate } from '@utils/datetime' import { twMerge } from 'tailwind-merge' import { activeModelAtom } from '@helpers/atoms/Model.atom' import useStartStopModel from '@hooks/useStartStopModel' import { downloadedModelAtom } from '@helpers/atoms/DownloadedModel.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(activeModelAtom) const { startModel } = useStartStopModel() const setMainViewState = useSetAtom(setMainViewStateAtom) const setActiveConvoId = useSetAtom(setActiveConvoIdAtom) const models = useAtomValue(downloadedModelAtom) const onClick = async () => { if (conversation.modelId == null) { console.debug('modelId is undefined') return } const model = models.find((e) => 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.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