@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
JavaScript
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;
};