/** * @file NodeTreeItem action buttons (lock, visibility, delete) */ import * as React from "react"; import { CloseIcon, LockIcon, UnlockIcon } from "../../elements/icons"; import styles from "./NodeTreeItem.module.css"; import type { NodeId } from "../../../types/core"; export type NodeTreeItemActionButtonsProps = { nodeId: NodeId; locked: boolean; visible: boolean; onToggleVisibility: ((nodeId: NodeId) => void) | undefined; onToggleLock: ((nodeId: NodeId) => void) | undefined; onDeleteNode: ((nodeId: NodeId) => void) | undefined; }; export const NodeTreeItemActionButtons: React.FC = React.memo( ({ nodeId, locked, visible, onToggleVisibility, onToggleLock, onDeleteNode }) => { const handleToggleVisibility = React.useCallback( (e: React.MouseEvent) => { e.stopPropagation(); if (!onToggleVisibility) { return; } onToggleVisibility(nodeId); }, [nodeId, onToggleVisibility], ); const handleToggleLock = React.useCallback( (e: React.MouseEvent) => { e.stopPropagation(); if (!onToggleLock) { return; } onToggleLock(nodeId); }, [nodeId, onToggleLock], ); const handleDeleteNode = React.useCallback( (e: React.MouseEvent) => { e.stopPropagation(); if (!onDeleteNode) { return; } onDeleteNode(nodeId); }, [nodeId, onDeleteNode], ); return ( <> ); }, ); NodeTreeItemActionButtons.displayName = "NodeTreeItemActionButtons";