UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton

80 lines 2.88 kB
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import * as React from "react"; import { createContext, useContext, useState, useEffect, useRef } from "react"; var HUDDropZoneContext = /*#__PURE__*/createContext(null); export var HUDDropZoneProvider = function HUDDropZoneProvider(_ref) { var children = _ref.children; var _useState = useState([]), _useState2 = _slicedToArray(_useState, 2), files = _useState2[0], setFiles = _useState2[1]; var filesRef = useRef([]); var removeFile = function removeFile(index) { setFiles(function (prevFiles) { return prevFiles.filter(function (_, i) { return i !== index; }); }); if (filesRef.current) { filesRef.current = filesRef.current.filter(function (_, i) { return i !== index; }); } }; var replaceFile = function replaceFile(inputFile, index) { setFiles(function (prevFiles) { return prevFiles.map(function (file, i) { return i === index ? inputFile : file; }); }); if (filesRef.current) { filesRef.current = filesRef.current.map(function (file, i) { return i === index ? inputFile : file; }); } }; var clearFiles = function clearFiles() { setFiles([]); if (filesRef.current) { filesRef.current = []; } }; var addFiles = function addFiles(incomingFiles) { setFiles(function (prevFiles) { return [].concat(_toConsumableArray(prevFiles), _toConsumableArray(incomingFiles)); }); filesRef.current = [].concat(_toConsumableArray(filesRef.current), _toConsumableArray(incomingFiles)); }; var getFile = function getFile() { var _filesRef$current2; var attribute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "use-index"; var data = arguments.length > 1 ? arguments[1] : undefined; if (attribute === "use-index") { var _filesRef$current; return ((_filesRef$current = filesRef.current) === null || _filesRef$current === void 0 ? void 0 : _filesRef$current[data]) || null; } return ((_filesRef$current2 = filesRef.current) === null || _filesRef$current2 === void 0 ? void 0 : _filesRef$current2.find(function (file) { return file[attribute] === data; })) || null; }; return /*#__PURE__*/React.createElement(HUDDropZoneContext.Provider, { value: { setFiles: setFiles, files: files, filesRef: filesRef, removeFile: removeFile, replaceFile: replaceFile, clearFiles: clearFiles, addFiles: addFiles, getFile: getFile } }, children); }; export var useHUDDropZone = function useHUDDropZone() { var context = useContext(HUDDropZoneContext); if (!context) { throw new Error("Must use within an HUDDropZoneProvider"); } return context; };