Files
NapCatQQ/.pnpm-store/v3/files/a7/abfda417f6990cd45be9fb868810720f23da2db0a6d9f5ee40e7cbbca9955a301482b9c4a0bf29919a49190b475a1d0fdcf17ce2e6feffa90287e5dbaf0c94
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

87 lines
3.8 KiB
Plaintext

import useLatest from '../useLatest';
import { getTargetElement } from '../utils/domTarget';
import useEffectWithTarget from '../utils/useEffectWithTarget';
import { useRef } from 'react';
var useDrop = function (target, options) {
if (options === void 0) { options = {}; }
var optionsRef = useLatest(options);
// https://stackoverflow.com/a/26459269
var dragEnterTarget = useRef(undefined);
useEffectWithTarget(function () {
var targetElement = getTargetElement(target);
if (!(targetElement === null || targetElement === void 0 ? void 0 : targetElement.addEventListener)) {
return;
}
var onData = function (dataTransfer, event) {
var uri = dataTransfer.getData('text/uri-list');
var dom = dataTransfer.getData('custom');
if (dom && optionsRef.current.onDom) {
var data = dom;
try {
data = JSON.parse(dom);
}
catch (_a) {
data = dom;
}
optionsRef.current.onDom(data, event);
return;
}
if (uri && optionsRef.current.onUri) {
optionsRef.current.onUri(uri, event);
return;
}
if (dataTransfer.files && dataTransfer.files.length && optionsRef.current.onFiles) {
optionsRef.current.onFiles(Array.from(dataTransfer.files), event);
return;
}
if (dataTransfer.items && dataTransfer.items.length && optionsRef.current.onText) {
dataTransfer.items[0].getAsString(function (text) {
optionsRef.current.onText(text, event);
});
}
};
var onDragEnter = function (event) {
var _a, _b;
event.preventDefault();
event.stopPropagation();
dragEnterTarget.current = event.target;
(_b = (_a = optionsRef.current).onDragEnter) === null || _b === void 0 ? void 0 : _b.call(_a, event);
};
var onDragOver = function (event) {
var _a, _b;
event.preventDefault();
(_b = (_a = optionsRef.current).onDragOver) === null || _b === void 0 ? void 0 : _b.call(_a, event);
};
var onDragLeave = function (event) {
var _a, _b;
if (event.target === dragEnterTarget.current) {
(_b = (_a = optionsRef.current).onDragLeave) === null || _b === void 0 ? void 0 : _b.call(_a, event);
}
};
var onDrop = function (event) {
var _a, _b;
event.preventDefault();
onData(event.dataTransfer, event);
(_b = (_a = optionsRef.current).onDrop) === null || _b === void 0 ? void 0 : _b.call(_a, event);
};
var onPaste = function (event) {
var _a, _b;
onData(event.clipboardData, event);
(_b = (_a = optionsRef.current).onPaste) === null || _b === void 0 ? void 0 : _b.call(_a, event);
};
targetElement.addEventListener('dragenter', onDragEnter);
targetElement.addEventListener('dragover', onDragOver);
targetElement.addEventListener('dragleave', onDragLeave);
targetElement.addEventListener('drop', onDrop);
targetElement.addEventListener('paste', onPaste);
return function () {
targetElement.removeEventListener('dragenter', onDragEnter);
targetElement.removeEventListener('dragover', onDragOver);
targetElement.removeEventListener('dragleave', onDragLeave);
targetElement.removeEventListener('drop', onDrop);
targetElement.removeEventListener('paste', onPaste);
};
}, [], target);
};
export default useDrop;