import React, { useState, useRef, useEffect } from 'react'; import styles from './MindMapItem.module.css'; interface MindMapItemProps { id: string; name: string; updatedAt: string; onSelect: () => void; onDelete: () => void; onRename: (newName: string) => void; onShare: () => void; isActive: boolean; } const MindMapItem: React.FC = ({ id, name, updatedAt, onSelect, onDelete, onRename, onShare, isActive, }) => { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isEditing, setIsEditing] = useState(false); const [editedName, setEditedName] = useState(name); const menuRef = useRef(null); const inputRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setIsMenuOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); useEffect(() => { if (isEditing && inputRef.current) { inputRef.current.focus(); inputRef.current.select(); } }, [isEditing]); const handleMenuClick = (e: React.MouseEvent) => { e.stopPropagation(); setIsMenuOpen(!isMenuOpen); }; const handleRename = () => { setIsEditing(true); setIsMenuOpen(false); }; const handleRenameSubmit = (e: React.FormEvent) => { e.preventDefault(); if (editedName.trim()) { onRename(editedName.trim()); } setIsEditing(false); }; const handleDelete = () => { setIsMenuOpen(false); onDelete(); }; const handleShare = () => { setIsMenuOpen(false); onShare(); }; return (
{name} {new Date(updatedAt).toLocaleDateString()}
{isEditing ? (
setEditedName(e.target.value)} onBlur={handleRenameSubmit} className={styles.renameInput} placeholder="Rename mind map" style={{ marginBottom: 8 }} />
) : null}
); }; export default MindMapItem;