import { useCallback } from 'react'; import { DraggingPosition, TreeItem } from '../types'; import { useTreeEnvironment } from './ControlledTreeEnvironment'; import { useCanDropAt } from './useCanDropAt'; export const useGetViableDragPositions = () => { const environment = useTreeEnvironment(); const canDropAt = useCanDropAt(); return useCallback( (treeId: string, draggingItems: TreeItem[]) => { const linearItems = environment.linearItems[treeId]; return linearItems .map(({ item }) => ({ targetType: 'item', targetItem: item, treeId, })) .filter(position => canDropAt(position, draggingItems)); }, [canDropAt, environment.linearItems] ); };