UNPKG

@prefect9/ui

Version:

UI React components

76 lines (75 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/es.array.includes.js"); require("core-js/modules/es.string.includes.js"); require("core-js/modules/web.dom-collections.iterator.js"); var _isType = require("@prefect9/is-type"); function DragDropFilesObserver() { if (!this) throw new Error('Make DragDropFilesObserver as new object'); if (this.constructor !== DragDropFilesObserver) throw new Error('Invalid DragDropFilesObserver this variable'); const result = this; let destructed = false; const dragHandlers = []; let dragged = false; let nowDragged = false; const setDrag = newDrag => { nowDragged = newDrag; if (dragged === nowDragged) return; dragged = nowDragged; if (dragHandlers.length) for (let dragHandler of dragHandlers) dragHandler(nowDragged); }; const dragStartHandler = e => { e.preventDefault(); if (destructed) return; const types = e.dataTransfer.types; if (!types.includes('Files')) return; setDrag(true); }; window.addEventListener('dragenter', dragStartHandler); window.addEventListener('dragover', dragStartHandler); const dragEndHandler = e => { e.preventDefault(); if (destructed) return; const seed = "".concat(Math.random()); nowDragged = seed; setTimeout(() => { if (destructed) return; if (nowDragged !== seed) return; setDrag(false); }, 100); }; window.addEventListener('dragleave', dragEndHandler); result.onDrag = handler => { if (destructed) throw new Error('Observer already destructed'); if (!(0, _isType.isFunc)(handler)) throw new Error('Handler must be function'); handler(dragged); dragHandlers.push(handler); }; const dropHandlers = []; const dropHandler = e => { e.preventDefault(); if (destructed) return; setDrag(false); const files = e.dataTransfer.files; if (!files.length) return; if (dropHandlers.length) for (let dropHandler of dropHandlers) dropHandler(files); }; window.addEventListener('drop', dropHandler); result.onDrop = handler => { if (destructed) throw new Error('Observer already destructed'); if (!(0, _isType.isFunc)(handler)) throw new Error('Handler must be function'); dropHandlers.push(handler); }; result.destruct = () => { window.removeEventListener('dragenter', dragStartHandler); window.removeEventListener('dragover', dragStartHandler); window.removeEventListener('dragleave', dragEndHandler); window.removeEventListener('drop', dropHandler); setDrag(false); destructed = true; }; } var _default = exports.default = DragDropFilesObserver;