import React, { useRef, useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { CheckIcon, XMarkIcon } from '@heroicons/react/24/outline'; import TaskPriorityIcon from '../TaskPriorityIcon'; import { Task } from '../../../entities/Task'; interface TaskDetailsHeaderProps { task: Task; onToggleCompletion: () => void; onTitleUpdate: (newTitle: string) => Promise; onEdit: () => void; onDelete: () => void; } const TaskDetailsHeader: React.FC = ({ task, onToggleCompletion, onTitleUpdate, onEdit, onDelete, }) => { const { t } = useTranslation(); const [isEditingTitle, setIsEditingTitle] = useState(false); const [editedTitle, setEditedTitle] = useState(task.name); const [actionsMenuOpen, setActionsMenuOpen] = useState(false); const titleInputRef = useRef(null); const actionsMenuRef = useRef(null); useEffect(() => { setEditedTitle(task.name); }, [task.name]); useEffect(() => { if (isEditingTitle && titleInputRef.current) { titleInputRef.current.focus(); titleInputRef.current.select(); } }, [isEditingTitle]); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if ( actionsMenuOpen && actionsMenuRef.current && !actionsMenuRef.current.contains(e.target as Node) ) { setActionsMenuOpen(false); } }; if (actionsMenuOpen) { document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); } }, [actionsMenuOpen]); const handleStartTitleEdit = () => { setIsEditingTitle(true); }; const handleSaveTitle = async () => { if (editedTitle.trim() && editedTitle !== task.name) { await onTitleUpdate(editedTitle.trim()); } setIsEditingTitle(false); }; const handleCancelTitleEdit = () => { setEditedTitle(task.name); setIsEditingTitle(false); }; const handleTitleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { handleSaveTitle(); } else if (e.key === 'Escape') { handleCancelTitleEdit(); } }; return (
{isEditingTitle ? (
setEditedTitle(e.target.value)} onKeyDown={handleTitleKeyDown} onBlur={handleSaveTitle} className="text-2xl font-normal text-gray-900 dark:text-gray-100 bg-white dark:bg-gray-800 border-2 border-blue-500 dark:border-blue-400 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 w-full" placeholder={t( 'task.titlePlaceholder', 'Enter task title' )} />
) : (

{task.name}

)}
{actionsMenuOpen && (
)}
); }; export default TaskDetailsHeader;