import React, { useState } from 'react'; import { closestCenter, closestCorners, CollisionDetection as CollisionDetectionType, DndContext, DragOverlay, KeyboardSensor, Modifiers, MouseSensor, rectIntersection, TouchSensor, Translate, UniqueIdentifier, useDraggable, useSensor, useSensors, } from '@dnd-kit/core'; import { Draggable } from '../../SACalendar/dndComponents/Draggable'; import { Droppable } from '../../SACalendar/dndComponents/Droppable'; import { GridContainer } from '../../SACalendar/dndComponents/GridContainer'; import { Wrapper } from '../../SACalendar/dndComponents/Wrapper'; export default { title: 'Core/Droppable/useDroppable', }; interface Props { collisionDetection?: CollisionDetectionType; containers?: string[]; modifiers?: Modifiers; value?: string; } const defaultCoordinates = { x: 0, y: 0, }; export function DroppableStory({ containers = ['A'], collisionDetection, modifiers, }: Props) { const [{ translate }, setTranslate] = useState<{ initialTranslate: Translate; translate: Translate; }>({ initialTranslate: defaultCoordinates, translate: defaultCoordinates }); const [isDragging, setIsDragging] = useState(false); const [parent, setParent] = useState(null); const [initialWindowScroll, setInitialWindowScroll] = useState( defaultCoordinates ); const item = ; const activationConstraint = { delay: 250, tolerance: 5, }; const mouseSensor = useSensor(MouseSensor, { activationConstraint, }); const touchSensor = useSensor(TouchSensor, { activationConstraint, }); const keyboardSensor = useSensor(KeyboardSensor, {}); const sensors = useSensors(mouseSensor, touchSensor, keyboardSensor); return ( { setInitialWindowScroll({ x: window.scrollX, y: window.scrollY, }); setIsDragging(true); }} onDragEnd={({ over }) => { setParent(over ? over.id : null); setIsDragging(false); setTranslate(({ translate }) => { return { translate, initialTranslate: translate, }; }); setInitialWindowScroll(defaultCoordinates); }} onDragMove={({ delta }) => { setTranslate(({ initialTranslate }) => ({ initialTranslate, translate: { x: initialTranslate.x + delta.x - initialWindowScroll.x, y: initialTranslate.y + delta.y - initialWindowScroll.y, }, })); }} onDragCancel={() => { setIsDragging(false); setTranslate(({ initialTranslate }) => ({ translate: initialTranslate, initialTranslate, })); setInitialWindowScroll(defaultCoordinates); }} sensors={sensors} > {parent === null ? item : null} {containers.map((id) => ( {parent === id ? item : null} ))} {isDragging ? : null} ); } interface DraggableProps { handle?: boolean; } export function DraggableItem({ handle }: DraggableProps) { const { isDragging, setNodeRef, listeners } = useDraggable({ id: 'draggable-item', }); return ( ); } export const BasicSetup = () => ; export const App = () => ; export const CollisionDetectionAlgorithms = () => { const [{ algorithm }, setCollisionDetectionAlgorithm] = useState({ algorithm: rectIntersection, }); return ( <>

Collision detection algorithm

); };