import React, { useContext, useEffect, createRef } from 'react' import PropTypes from 'prop-types' import classNames from 'classnames' import scrollIntoViewIfNeeded from 'scroll-into-view-if-needed' import { FileTreeMainContext } from '../../contexts/file-tree-main' import { useDraggable } from '../../contexts/file-tree-draggable' import FileTreeItemName from './file-tree-item-name' import FileTreeItemMenu from './file-tree-item-menu' function FileTreeItemInner({ id, name, isSelected, icons }) { const { hasWritePermissions, setContextMenuCoords } = useContext( FileTreeMainContext ) const hasMenu = hasWritePermissions && isSelected const { isDragging, dragRef } = useDraggable(id) const itemRef = createRef() useEffect(() => { const item = itemRef.current if (isSelected && item) { // we found scrolling doesn't happen unless a explicit delay is introduced setTimeout(() => { if (item) { scrollIntoViewIfNeeded(item, { scrollMode: 'if-needed' }) } }, 10) } }, [isSelected, itemRef]) function handleContextMenu(ev) { ev.preventDefault() setContextMenuCoords({ top: ev.pageY, left: ev.pageX }) } return (
{icons} {hasMenu ? : null}
) } FileTreeItemInner.propTypes = { id: PropTypes.string.isRequired, name: PropTypes.string.isRequired, isSelected: PropTypes.bool.isRequired, icons: PropTypes.node } export default FileTreeItemInner