UNPKG

vue-hooks-plus

Version:
90 lines (89 loc) 3.47 kB
"use strict"; const domTarget = require("../utils/domTarget"); const useEffectWithTarget = require("../utils/useEffectWithTarget"); const vue = require("vue"); const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e }; const useEffectWithTarget__default = /* @__PURE__ */ _interopDefaultLegacy(useEffectWithTarget); const useDrop = (target, options = {}) => { const optionsRef = vue.ref(options); const dragEnterTarget = vue.ref(); useEffectWithTarget__default.default( () => { const targetElement = domTarget.getTargetElement(target); if (!(targetElement == null ? void 0 : targetElement.addEventListener)) { return; } const onData = (dataTransfer, event) => { const uri = dataTransfer.getData("text/uri-list"); const dom = dataTransfer.getData("custom"); if (dom && optionsRef.value.onDom) { let data = dom; try { data = JSON.parse(dom); } catch (e) { data = dom; } optionsRef.value.onDom(data, event); return; } if (uri && optionsRef.value.onUri) { optionsRef.value.onUri(uri, event); return; } if (dataTransfer.files && dataTransfer.files.length && optionsRef.value.onFiles) { optionsRef.value.onFiles(Array.from(dataTransfer.files), event); return; } if (dataTransfer.items && dataTransfer.items.length && optionsRef.value.onText) { dataTransfer.items[0].getAsString((text) => { optionsRef.value.onText(text, event); }); } }; const onDragEnter = (event) => { var _a, _b; event.preventDefault(); event.stopPropagation(); dragEnterTarget.value = event.target; (_b = (_a = optionsRef.value).onDragEnter) == null ? void 0 : _b.call(_a, event); }; const onDragOver = (event) => { var _a, _b; event.preventDefault(); (_b = (_a = optionsRef.value).onDragOver) == null ? void 0 : _b.call(_a, event); }; const onDragLeave = (event) => { var _a, _b; if (event.target === dragEnterTarget.value) { (_b = (_a = optionsRef.value).onDragLeave) == null ? void 0 : _b.call(_a, event); } }; const onDrop = (event) => { var _a, _b; event.preventDefault(); onData(event.dataTransfer, event); (_b = (_a = optionsRef.value).onDrop) == null ? void 0 : _b.call(_a, event); }; const onPaste = (event) => { var _a, _b; onData(event.clipboardData, event); (_b = (_a = optionsRef.value).onPaste) == null ? 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 () => { targetElement.removeEventListener("dragenter", onDragEnter); targetElement.removeEventListener("dragover", onDragOver); targetElement.removeEventListener("dragleave", onDragLeave); targetElement.removeEventListener("drop", onDrop); targetElement.removeEventListener("paste", onPaste); }; }, [], target ); }; module.exports = useDrop;