import React, { useState } from "react"; import { FolderTreeNode } from "../../api/folders"; import { useNoteStore } from "../../stores/notesStore"; import { folderApi } from "../../api/folders"; interface FolderContextMenuProps { x: number; y: number; folder: FolderTreeNode; onClose: () => void; } export const FolderContextMenu: React.FC = ({ x, y, folder, onClose, }) => { const { loadFolderTree } = useNoteStore(); const [isRenaming, setIsRenaming] = useState(false); const [newName, setNewName] = useState(folder.name); const handleDelete = async () => { if (!confirm(`Delete "${folder.name}" and all its contents?`)) { return; } try { await folderApi.delete(folder.id); await loadFolderTree(); onClose(); } catch (error) { console.error("Failed to delete folder:", error); } }; const handleRename = async () => { if (newName.trim() && newName !== folder.name) { try { await folderApi.update(folder.id, { name: newName.trim() }); await loadFolderTree(); } catch (error) { console.error("Failed to rename folder:", error); } } setIsRenaming(false); onClose(); }; const handleCreateSubfolder = async () => { try { await folderApi.create({ name: "New Folder", parent_id: folder.id, }); await loadFolderTree(); onClose(); } catch (error) { console.error("Failed to create subfolder:", error); } }; if (isRenaming) { return (
e.stopPropagation()} > setNewName(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") handleRename(); if (e.key === "Escape") { setIsRenaming(false); onClose(); } }} onBlur={handleRename} autoFocus className="w-full px-2 py-1 bg-ctp-surface1 border border-ctp-surface2 rounded text-sm text-ctp-text focus:outline-none focus:border-ctp-mauve" />
); } return (
e.stopPropagation()} >
); };