UNPKG

@ozen-ui/kit

Version:

React component library

109 lines (108 loc) 4.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useAsFileUploaderDropZone = void 0; var useEventListener_1 = require("../../../../hooks/useEventListener"); var useStoredValue_1 = require("../../../../hooks/useStoredValue"); var context_1 = require("../../context"); var utils_1 = require("../../utils"); var useAsFileUploaderDropZone = function (ref, options) { var _a = options !== null && options !== void 0 ? options : {}, _b = _a.isWithReactionToClick, isWithReactionToClick = _b === void 0 ? true : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c; var _d = (0, context_1.useFileUploaderContext)(), setDragging = _d.setDragging, setFiles = _d.setFiles, files = _d.files, status = _d.status, openUploader = _d.openUploader, calculateAllow = _d.calculateAllow, onAllowDropChange = _d.onAllowDropChange, onDrop = _d.onDrop; var isActive = !disabled; var isDisabledStatus = status === 'disabled'; var isLoadingStatus = status === 'loading'; var getDataTransferFiles = function (event) { var _a; var eventFiles = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files; if (!eventFiles) { return []; } return Array.from(eventFiles); }; var getDataTransferItems = function (event) { var _a; var eventFiles = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.items; if (!eventFiles) { return []; } return Array.from(eventFiles); }; var lastIsAllow = (0, useStoredValue_1.useStoredValue)(false); var isDraggingOver = (0, useStoredValue_1.useStoredValue)(false); (0, useEventListener_1.useEventListener)({ element: ref, eventName: 'dragenter', handler: function (event) { event.preventDefault(); event.stopPropagation(); if (isDraggingOver.current) { return; } var items = getDataTransferItems(event); var calculatedAllow = calculateAllow(items); lastIsAllow.current = calculatedAllow.isAllow; onAllowDropChange(calculatedAllow.isAllow, calculatedAllow.failed); isDraggingOver.current = true; if (!calculatedAllow.isAllow) { return; } setDragging(event, true); }, active: isActive, }); (0, useEventListener_1.useEventListener)({ element: ref, eventName: 'dragover', handler: function (event) { event.preventDefault(); event.stopPropagation(); }, active: isActive, }); (0, useEventListener_1.useEventListener)({ element: ref, eventName: 'dragleave', handler: function (event) { var _a; event.preventDefault(); event.stopPropagation(); if ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget)) { return; } setDragging(event, false); onAllowDropChange(true, []); isDraggingOver.current = false; }, active: isActive, }); (0, useEventListener_1.useEventListener)({ element: ref, eventName: 'drop', handler: function (event) { event.preventDefault(); event.stopPropagation(); var eventFiles = getDataTransferFiles(event); onDrop(event, eventFiles); setDragging(event, false); isDraggingOver.current = false; if (!lastIsAllow.current) { onAllowDropChange(true, []); return; } setFiles((0, utils_1.mergeFiles)(files, eventFiles)); }, active: isActive, }); (0, useEventListener_1.useEventListener)({ element: ref, eventName: 'click', handler: function () { if (isLoadingStatus || isDisabledStatus || !isWithReactionToClick) { return; } openUploader(); }, active: isActive, }); }; exports.useAsFileUploaderDropZone = useAsFileUploaderDropZone;