import * as React from 'react'; import { useState } from 'react'; import { _ } from '@joplin/lib/locale'; import { formatMsToRelativeTime } from '@joplin/utils/time'; export interface Conversation { id: string; title: string; updated_time: number; } interface Props { conversations: Conversation[]; currentConversationId?: string|null; id: string; popupRef: React.Ref; onSearchChange: (search: string)=> void; onOpen: (conversationId: string)=> void; onRename: (conversation: Conversation, title: string)=> void; onDelete: (conversationId: string)=> void; onClose: ()=> void; } const ChatHistory: React.FC = props => { const [search, setSearch] = useState(''); const [editingId, setEditingId] = useState(null); const [draftTitle, setDraftTitle] = useState(''); const startEditing = (conversation: Conversation) => { setEditingId(conversation.id); setDraftTitle(conversation.title); }; const stopEditing = () => setEditingId(null); const onTitleKeyDown = (event: React.KeyboardEvent, conversation: Conversation) => { if (event.nativeEvent.isComposing) return; if (event.key === 'Escape') { event.stopPropagation(); stopEditing(); return; } if (event.key !== 'Enter') return; event.preventDefault(); props.onRename(conversation, draftTitle); stopEditing(); }; const onPopupKeyDown = (event: React.KeyboardEvent) => { if (event.nativeEvent.isComposing || event.key !== 'Escape') return; event.stopPropagation(); props.onClose(); }; return