import { useCallback, useLayoutEffect, memo, useState } from 'react' import { Thread } from '@janhq/core' import { Modal, ModalClose, Button, Input } from '@janhq/joi' import { useSetAtom } from 'jotai' import { PencilIcon } from 'lucide-react' import { useDebouncedCallback } from 'use-debounce' import useCortex from '@/hooks/useCortex' import { updateThreadTitleAtom } from '@/helpers/atoms/Thread.atom' type Props = { thread: Thread closeContextMenu?: () => void } const ModalEditTitleThread = ({ thread, closeContextMenu }: Props) => { const { updateThread } = useCortex() const updateThreadTitle = useSetAtom(updateThreadTitleAtom) const [title, setTitle] = useState(thread.title) useLayoutEffect(() => { if (thread.title) { setTitle(thread.title) } }, [thread.title]) const debounceUpdateThreadTitle = useDebouncedCallback( async (title: string) => { updateThread({ ...thread, title }) }, 500 ) const onUpdateTitle = useCallback(() => { updateThreadTitle(thread.id, title) debounceUpdateThreadTitle(title) }, [title, debounceUpdateThreadTitle, thread.id, updateThreadTitle]) return ( { if (open && closeContextMenu) { closeContextMenu() } }} trigger={
e.stopPropagation()} > Edit title
} content={
setTitle(e.target.value)} autoFocus />
e.stopPropagation()}>
} /> ) } export default memo(ModalEditTitleThread)