// @flow import React from 'react'; import type { DraggableId } from '../../types'; import type { PublicOwnProps, PrivateOwnProps } from './draggable-types'; import ConnectedDraggable from './connected-draggable'; import useRequiredContext from '../use-required-context'; import DroppableContext, { type DroppableContextValue, } from '../context/droppable-context'; // We can use this to render a draggable with more control // It is used by a Droppable to render a clone export function PrivateDraggable(props: PrivateOwnProps) { const droppableContext: DroppableContextValue = useRequiredContext( DroppableContext, ); // The droppable can render a clone of the draggable item. // In that case we unmount the existing dragging item const isUsingCloneFor: ?DraggableId = droppableContext.isUsingCloneFor; if (isUsingCloneFor === props.draggableId && !props.isClone) { return null; } return ; } // What we give to consumers export function PublicDraggable(props: PublicOwnProps) { // default values for props const isEnabled: boolean = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true; const canDragInteractiveElements: boolean = Boolean( props.disableInteractiveElementBlocking, ); const shouldRespectForcePress: boolean = Boolean( props.shouldRespectForcePress, ); return ( ); }