carbon-react
Version:
A library of reusable React components for easily building user interfaces.
2 lines (1 loc) • 1.08 kB
JavaScript
;var r=require("react/jsx-runtime"),t=require("react"),e=require("@atlaskit/pragmatic-drag-and-drop/element/adapter"),a=require("./data.js");const o=t.createContext(null);exports.DragDropProvider=({children:n,onDrop:d,onDropTargetChange:g})=>{const[u]=t.useState((()=>Symbol("drag-drop-provider-id")));return t.useEffect((()=>e.monitorForElements({canMonitor:({source:r})=>a.isDraggable(r.data)&&r.data.contextId===u,onDrop:({source:r,location:t})=>{if(!a.isDraggable(r.data))return;if(!t.current.dropTargets.length)return void(null==d||d({dragged:r.data,target:null}));const e=t.current.dropTargets[0];a.isDropTarget(e.data)&&(null==d||d({dragged:r.data,target:e.data}))},onDropTargetChange:({source:r,location:t})=>{if(!a.isDraggable(r.data))return;if(!t.current.dropTargets.length)return void(null==g||g({dragged:r.data,target:null}));const e=t.current.dropTargets[0];a.isDropTarget(e.data)&&(null==g||g({dragged:r.data,target:e.data}))}})),[u,d,g]),r.jsx(o.Provider,{value:{contextId:u},children:n})},exports.useDragDropContext=function(){return t.useContext(o)};