62 lines
2.1 KiB
JavaScript
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;
|