UNPKG

carbon-react

Version:

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

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