UNPKG

react-use

Version:
82 lines (81 loc) 3.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = tslib_1.__importStar(require("react")); var useMountedState_1 = tslib_1.__importDefault(require("./useMountedState")); var useState = React.useState, useMemo = React.useMemo, useCallback = React.useCallback, useEffect = React.useEffect; var noop = function () { }; /* const defaultState: DropAreaState = { over: false, }; */ var createProcess = function (options, mounted) { return function (dataTransfer, event) { var uri = dataTransfer.getData('text/uri-list'); if (uri) { (options.onUri || noop)(uri, event); return; } if (dataTransfer.files && dataTransfer.files.length) { (options.onFiles || noop)(Array.from(dataTransfer.files), event); return; } if (dataTransfer.items && dataTransfer.items.length) { dataTransfer.items[0].getAsString(function (text) { if (mounted) { (options.onText || noop)(text, event); } }); } }; }; var useDrop = function (options, args) { if (options === void 0) { options = {}; } if (args === void 0) { args = []; } var onFiles = options.onFiles, onText = options.onText, onUri = options.onUri; var isMounted = useMountedState_1.default(); var _a = useState(false), over = _a[0], setOverRaw = _a[1]; var setOver = useCallback(setOverRaw, []); var process = useMemo(function () { return createProcess(options, isMounted()); }, [onFiles, onText, onUri]); useEffect(function () { var onDragOver = function (event) { event.preventDefault(); setOver(true); }; var onDragEnter = function (event) { event.preventDefault(); setOver(true); }; var onDragLeave = function () { setOver(false); }; var onDragExit = function () { setOver(false); }; var onDrop = function (event) { event.preventDefault(); setOver(false); process(event.dataTransfer, event); }; var onPaste = function (event) { process(event.clipboardData, event); }; document.addEventListener('dragover', onDragOver); document.addEventListener('dragenter', onDragEnter); document.addEventListener('dragleave', onDragLeave); document.addEventListener('dragexit', onDragExit); document.addEventListener('drop', onDrop); if (onText) { document.addEventListener('paste', onPaste); } return function () { document.removeEventListener('dragover', onDragOver); document.removeEventListener('dragenter', onDragEnter); document.removeEventListener('dragleave', onDragLeave); document.removeEventListener('dragexit', onDragExit); document.removeEventListener('drop', onDrop); document.removeEventListener('paste', onPaste); }; }, tslib_1.__spreadArrays([process], args)); return { over: over }; }; exports.default = useDrop;