import {CustomMenu, CustomMenuItem} from '@common/menus/custom-menu'; import {MenuPositions} from '../../menu-positions'; import React, { ComponentPropsWithoutRef, forwardRef, useRef, useState, } from 'react'; import {MenuItemConfig} from '@common/core/settings/settings'; import clsx from 'clsx'; import {useDroppable} from '@common/ui/interactions/dnd/use-droppable'; import {FileEntry} from '@common/uploads/file-entry'; import {FolderTree} from './folder-tree'; import {useDeleteEntries} from '../../files/queries/use-delete-entries'; import {useActiveWorkspaceId} from '@common/workspace/active-workspace-id-context'; export function SidebarMenu() { const {workspaceId} = useActiveWorkspaceId(); return (
{item => { if (item.action === '/drive/trash') { return ; } return ; }}
); } interface MenuItemProps extends ComponentPropsWithoutRef<'a'> { item: MenuItemConfig; className?: string; } export const MenuItem = forwardRef( ({item, className, ...domProps}, ref) => { return ( clsx( className, 'h-40 w-full my-4 px-24 rounded', isActive ? 'text-primary font-bold bg-primary/selected cursor-default' : 'hover:bg-hover' ) } item={item} ref={ref} {...domProps} /> ); } ); interface TrashMenuItemProps { item: MenuItemConfig; } function TrashMenuItem({item}: TrashMenuItemProps) { const deleteEntries = useDeleteEntries(); const [isDragOver, setIsDragOver] = useState(false); const ref = useRef(null); const {droppableProps} = useDroppable({ id: 'trash', types: ['fileEntry'], ref, onDragEnter: () => { setIsDragOver(true); }, onDragLeave: () => { setIsDragOver(false); }, onDrop: draggable => { const entryIds = (draggable.getData() as FileEntry[]).map(e => e.id); deleteEntries.mutate({entryIds, deleteForever: false}); }, }); return ( ); }