Files

62 lines
2.1 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var useMountedState_1 = tslib_1.__importDefault(require("./useMountedState"));
var util_1 = require("./misc/util");
/*
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 || util_1.noop)(uri, event);
return;
}
if (dataTransfer.files && dataTransfer.files.length) {
(options.onFiles || util_1.noop)(Array.from(dataTransfer.files), event);
return;
}
if (dataTransfer.items && dataTransfer.items.length) {
dataTransfer.items[0].getAsString(function (text) {
if (mounted) {
(options.onText || util_1.noop)(text, event);
}
});
}
}; };
var createBond = function (process, setOver) { return ({
onDragOver: function (event) {
event.preventDefault();
},
onDragEnter: function (event) {
event.preventDefault();
setOver(true);
},
onDragLeave: function () {
setOver(false);
},
onDrop: function (event) {
event.preventDefault();
event.persist();
setOver(false);
process(event.dataTransfer, event);
},
onPaste: function (event) {
event.persist();
process(event.clipboardData, event);
},
}); };
var useDropArea = function (options) {
if (options === void 0) { options = {}; }
var onFiles = options.onFiles, onText = options.onText, onUri = options.onUri;
var isMounted = useMountedState_1.default();
var _a = react_1.useState(false), over = _a[0], setOver = _a[1];
var process = react_1.useMemo(function () { return createProcess(options, isMounted()); }, [onFiles, onText, onUri]);
var bond = react_1.useMemo(function () { return createBond(process, setOver); }, [process, setOver]);
return [bond, { over: over }];
};
exports.default = useDropArea;