UNPKG

ahooks

Version:
33 lines 1.34 kB
import useLatest from '../useLatest'; import { getTargetElement } from '../utils/domTarget'; import useEffectWithTarget from '../utils/useEffectWithTarget'; var useDrag = function (data, target, options) { if (options === void 0) { options = {}; } var optionsRef = useLatest(options); var dataRef = useLatest(data); useEffectWithTarget(function () { var targetElement = getTargetElement(target); if (!(targetElement === null || targetElement === void 0 ? void 0 : targetElement.addEventListener)) { return; } var onDragStart = function (event) { var _a, _b; (_b = (_a = optionsRef.current).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, event); event.dataTransfer.setData('custom', JSON.stringify(dataRef.current)); }; var onDragEnd = function (event) { var _a, _b; (_b = (_a = optionsRef.current).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, event); }; targetElement.setAttribute('draggable', 'true'); targetElement.addEventListener('dragstart', onDragStart); targetElement.addEventListener('dragend', onDragEnd); return function () { targetElement.removeEventListener('dragstart', onDragStart); targetElement.removeEventListener('dragend', onDragEnd); }; }, [], target); }; export default useDrag;