UNPKG

carbon-react

Version:

A library of reusable React components for easily building user interfaces.

2 lines (1 loc) 800 B
import{jsx as t}from"react/jsx-runtime";import r,{createContext as a,useEffect as e}from"react";import{isDraggable as o,isDropTarget as n}from"./data.js";import{monitorForElements as d}from"@atlaskit/pragmatic-drag-and-drop/element/adapter";const c=a(null);function l(){return r.useContext(c)}const u=({children:a,onDrop:l})=>{const[u]=r.useState((()=>Symbol("draggable-context")));return e((()=>d({canMonitor:({source:t})=>o(t.data)&&t.data.contextId===u,onDrop:({source:t,location:r})=>{if(!o(t.data))return;if(!r.current.dropTargets.length)return void(null==l||l({dragged:t.data,target:null}));const a=r.current.dropTargets[0];n(a.data)&&(null==l||l({dragged:t.data,target:a.data}))}})),[u,l]),t(c.Provider,{value:{contextId:u},children:a})};export{u as DragDropProvider,l as useDragDropContext};