UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

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

619 lines 24.5 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _regeneratorRuntime from "@babel/runtime/regenerator"; import React, { createContext, useContext, useState, useEffect, useRef, useCallback } from 'react'; import HUDWasabiServiceManager from "../HUDManagers/HUDWasabiServiceManager.js"; import hudEventManager from "../HUDManagers/HUDEventManager.js"; import { useHUDVault } from "./HUDVaultProvider.js"; var WasabiServiceContext = /*#__PURE__*/createContext(); export var useMonitorFileActivity = function useMonitorFileActivity(loadFiles, fileCache, defaultBucketName) { var defaultDirectoryPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; var defaultInterval = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 30000; var defaultCallback = arguments.length > 5 ? arguments[5] : undefined; var previousFileList = useRef([]); var startMonitoring = useCallback(function () { var bucketName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultBucketName; var directoryPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultDirectoryPath; var interval = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultInterval; var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : defaultCallback; var mounted = true; var monitor = setInterval( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() { var currentFileList, deletedFiles, newFiles, cacheKey; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (!(!mounted || !loadFiles || !fileCache)) { _context.next = 2; break; } return _context.abrupt("return"); case 2: _context.next = 4; return loadFiles(bucketName, directoryPath); case 4: currentFileList = _context.sent; if (previousFileList.current.length > 0) { deletedFiles = previousFileList.current.filter(function (file) { return !currentFileList.find(function (f) { return f.Key === file.Key; }); }); newFiles = currentFileList.filter(function (file) { return !previousFileList.current.find(function (f) { return f.Key === file.Key; }); }); if ((newFiles.length > 0 || deletedFiles.length > 0) && typeof callback === "function") { cacheKey = "".concat(bucketName, "/").concat(directoryPath); fileCache.current[cacheKey] = currentFileList; callback({ newFiles: newFiles, deletedFiles: deletedFiles }); } } previousFileList.current = currentFileList; case 7: case "end": return _context.stop(); } }, _callee); })), interval); var loadInitialFiles = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() { return _regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return loadFiles(bucketName, directoryPath); case 2: previousFileList.current = _context2.sent; case 3: case "end": return _context2.stop(); } }, _callee2); })); return function loadInitialFiles() { return _ref2.apply(this, arguments); }; }(); loadInitialFiles(); return function () { mounted = false; clearInterval(monitor); }; }, [defaultBucketName, defaultDirectoryPath, defaultInterval, defaultCallback, loadFiles, fileCache]); return startMonitoring; }; export var HUDWasabiServiceProvider = function HUDWasabiServiceProvider(_ref3) { var children = _ref3.children, _ref3$credentialsID = _ref3.credentialsID, credentialsID = _ref3$credentialsID === void 0 ? "HUDWasabi" : _ref3$credentialsID; var _useHUDVault = useHUDVault(), credentials = _useHUDVault.credentials; var _useState = useState("s3.us-east-1.wasabisys.com"), _useState2 = _slicedToArray(_useState, 2), endpoint = _useState2[0], setEndpoint = _useState2[1]; var _useState3 = useState(null), _useState4 = _slicedToArray(_useState3, 2), currentService = _useState4[0], setCurrentService = _useState4[1]; var _useState5 = useState("us-east-1"), _useState6 = _slicedToArray(_useState5, 2), region = _useState6[0], _setRegion = _useState6[1]; var _useState7 = useState(""), _useState8 = _slicedToArray(_useState7, 2), bucketName = _useState8[0], setBucketName = _useState8[1]; var _useState9 = useState(true), _useState10 = _slicedToArray(_useState9, 2), loading = _useState10[0], setLoading = _useState10[1]; var _useState11 = useState([]), _useState12 = _slicedToArray(_useState11, 2), files = _useState12[0], setFiles = _useState12[1]; var fileCache = useRef({}); var service = useRef(null); var initializeService = function initializeService() { if (credentials && credentials[credentialsID] && credentials[credentialsID].accessKeyId && credentials[credentialsID].secretAccessKey) { var _currentService = new HUDWasabiServiceManager(credentials[credentialsID].accessKeyId, credentials[credentialsID].secretAccessKey, region, endpoint); service.current = _currentService; setCurrentService(service.current); hudEventManager.emit("WCloudStorageOperational"); } }; var uploadFiles = /*#__PURE__*/function () { var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(bucketName, selectedFiles) { var promises; return _regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: if (!(!service.current || !bucketName)) { _context3.next = 3; break; } console.error("Service or bucketName: ".concat(bucketName, " not available.")); return _context3.abrupt("return"); case 3: setLoading(true); _context3.prev = 4; promises = files.map(function (file) { var params = { Bucket: bucketName, Body: file.body, Key: file.key }; return service.current.uploadFile(params); }); _context3.next = 8; return Promise.all(promises); case 8: console.log("All files uploaded successfully to ".concat(bucketName, "!")); _context3.next = 14; break; case 11: _context3.prev = 11; _context3.t0 = _context3["catch"](4); console.error("Did not upload upload files: ", _context3.t0.message); case 14: setLoading(false); return _context3.abrupt("return"); case 16: case "end": return _context3.stop(); } }, _callee3, null, [[4, 11]]); })); return function uploadFiles(_x, _x2) { return _ref4.apply(this, arguments); }; }(); var deleteFiles = /*#__PURE__*/function () { var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(bucketName) { var fileKeys, directoryPath, _files, result, _args4 = arguments; return _regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: fileKeys = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : []; directoryPath = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : ""; if (!(!service.current || !bucketName || !fileKeys.length && !directoryPath)) { _context4.next = 5; break; } console.error("Service, bucketName: ".concat(bucketName, ", fileKeys, or directoryPath not available.")); return _context4.abrupt("return"); case 5: setLoading(true); _context4.prev = 6; if (!(fileKeys.length === 0 && directoryPath)) { _context4.next = 12; break; } _context4.next = 10; return loadFiles(bucketName, directoryPath); case 10: _files = _context4.sent; fileKeys = _files.map(function (file) { return file.Key; }); case 12: if (!(fileKeys.length === 0)) { _context4.next = 16; break; } console.log("No files to delete."); setLoading(false); return _context4.abrupt("return"); case 16: _context4.next = 18; return service.current.deleteFiles(bucketName, fileKeys); case 18: result = _context4.sent; console.log("Files deleted successfully: ", result); _context4.next = 25; break; case 22: _context4.prev = 22; _context4.t0 = _context4["catch"](6); console.error("Did not delete files: ", _context4.t0.message); case 25: setLoading(false); return _context4.abrupt("return"); case 27: case "end": return _context4.stop(); } }, _callee4, null, [[6, 22]]); })); return function deleteFiles(_x3) { return _ref5.apply(this, arguments); }; }(); var downloadFiles = /*#__PURE__*/function () { var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(bucketName, fileKeys) { return _regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: if (!(!service.current || !bucketName)) { _context5.next = 3; break; } console.error("Service or bucketName: ".concat(bucketName, " not available.")); return _context5.abrupt("return"); case 3: _context5.prev = 3; return _context5.abrupt("return", service.current.downloadFiles(bucketName, fileKeys)); case 7: _context5.prev = 7; _context5.t0 = _context5["catch"](3); console.error("Did not batch download: ", _context5.t0.message); return _context5.abrupt("return", []); case 11: case "end": return _context5.stop(); } }, _callee5, null, [[3, 7]]); })); return function downloadFiles(_x4, _x5) { return _ref6.apply(this, arguments); }; }(); var downloadFile = /*#__PURE__*/function () { var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(bucketName, fileName) { var fileData, url, link; return _regeneratorRuntime.wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: if (!(!service.current || !bucketName || !fileName)) { _context6.next = 3; break; } console.error("Service, bucketName: ".concat(bucketName, ", or fileName: ").concat(fileName, " not available.")); return _context6.abrupt("return"); case 3: setLoading(true); _context6.prev = 4; _context6.next = 7; return service.current.downloadFile(bucketName, fileName); case 7: fileData = _context6.sent; url = window.URL.createObjectURL(new Blob([fileData])); link = document.createElement("a"); link.href = url; link.setAttribute("download", fileName); document.body.appendChild(link); link.click(); document.body.removeChild(link); _context6.next = 20; break; case 17: _context6.prev = 17; _context6.t0 = _context6["catch"](4); console.error("Did not download file: ", _context6.t0.message); case 20: setLoading(false); return _context6.abrupt("return"); case 22: case "end": return _context6.stop(); } }, _callee6, null, [[4, 17]]); })); return function downloadFile(_x6, _x7) { return _ref7.apply(this, arguments); }; }(); var getFileData = /*#__PURE__*/function () { var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(bucketName, fileName) { var signedURL, metadata, fileURL, fileData, fileNameSegment, _args7 = arguments; return _regeneratorRuntime.wrap(function _callee7$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: signedURL = _args7.length > 2 && _args7[2] !== undefined ? _args7[2] : false; if (!(!service.current || !bucketName || !fileName)) { _context7.next = 4; break; } console.error("Service, bucketName: ".concat(bucketName, ", or fileName: ").concat(fileName, " not available.")); return _context7.abrupt("return", null); case 4: setLoading(true); _context7.prev = 5; _context7.next = 8; return service.current.getFileMetadata(bucketName, fileName); case 8: metadata = _context7.sent; fileURL = null; if (!signedURL) { _context7.next = 16; break; } _context7.next = 13; return service.current.getSignedUrl(bucketName, fileName); case 13: fileURL = _context7.sent; _context7.next = 21; break; case 16: if (signedURL) { _context7.next = 21; break; } _context7.next = 19; return service.current.downloadFile(bucketName, fileName); case 19: fileData = _context7.sent; fileURL = window.URL.createObjectURL(new Blob([fileData])); case 21: fileNameSegment = fileName.split("/").pop(); return _context7.abrupt("return", { name: fileNameSegment, size: metadata.ContentLength, lastModified: metadata.LastModified, url: fileURL, contentType: metadata.ContentType }); case 25: _context7.prev = 25; _context7.t0 = _context7["catch"](5); console.error("Did not retrieve file data: ", _context7.t0.message); return _context7.abrupt("return", null); case 29: _context7.prev = 29; setLoading(false); return _context7.finish(29); case 32: case "end": return _context7.stop(); } }, _callee7, null, [[5, 25, 29, 32]]); })); return function getFileData(_x8, _x9) { return _ref8.apply(this, arguments); }; }(); var getFileURL = /*#__PURE__*/function () { var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(bucketName, fileName) { return _regeneratorRuntime.wrap(function _callee8$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: _context8.next = 2; return getFileData(bucketName, fileName, true); case 2: return _context8.abrupt("return", _context8.sent); case 3: case "end": return _context8.stop(); } }, _callee8); })); return function getFileURL(_x10, _x11) { return _ref9.apply(this, arguments); }; }(); var loadFilesWithPagination = /*#__PURE__*/function () { var _ref10 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(bucketName) { var directoryPath, maxKeys, continuationToken, params, data, _args9 = arguments; return _regeneratorRuntime.wrap(function _callee9$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: directoryPath = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : ""; maxKeys = _args9.length > 2 && _args9[2] !== undefined ? _args9[2] : 1000; continuationToken = _args9.length > 3 && _args9[3] !== undefined ? _args9[3] : null; params = { Bucket: bucketName, MaxKeys: maxKeys, Prefix: directoryPath ? "".concat(directoryPath, "/") : "" }; if (continuationToken) { params.ContinuationToken = continuationToken; } _context9.prev = 5; _context9.next = 8; return service.current.listFiles(params); case 8: data = _context9.sent; return _context9.abrupt("return", { files: data.Contents, nextToken: data.NextContinuationToken || null }); case 12: _context9.prev = 12; _context9.t0 = _context9["catch"](5); console.error("Did not load files with pagination: ", _context9.t0.message); return _context9.abrupt("return", { files: [], nextToken: null }); case 16: case "end": return _context9.stop(); } }, _callee9, null, [[5, 12]]); })); return function loadFilesWithPagination(_x12) { return _ref10.apply(this, arguments); }; }(); var loadSpecificFiles = /*#__PURE__*/function () { var _ref11 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10(bucketName, searchTerm) { var directoryPath, files, filteredFiles, _args10 = arguments; return _regeneratorRuntime.wrap(function _callee10$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: directoryPath = _args10.length > 2 && _args10[2] !== undefined ? _args10[2] : ""; _context10.next = 3; return loadFiles(bucketName, directoryPath); case 3: files = _context10.sent; filteredFiles = files.filter(function (file) { return file.Key.includes(searchTerm); }); return _context10.abrupt("return", filteredFiles); case 6: case "end": return _context10.stop(); } }, _callee10); })); return function loadSpecificFiles(_x13, _x14) { return _ref11.apply(this, arguments); }; }(); var loadFilesWithCache = /*#__PURE__*/function () { var _ref12 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11(bucketName) { var directoryPath, cacheKey, files, _args11 = arguments; return _regeneratorRuntime.wrap(function _callee11$(_context11) { while (1) switch (_context11.prev = _context11.next) { case 0: directoryPath = _args11.length > 1 && _args11[1] !== undefined ? _args11[1] : ""; cacheKey = "".concat(bucketName, "/").concat(directoryPath); if (!fileCache.current[cacheKey]) { _context11.next = 4; break; } return _context11.abrupt("return", fileCache.current[cacheKey]); case 4: _context11.next = 6; return loadFiles(bucketName, directoryPath); case 6: files = _context11.sent; fileCache.current[cacheKey] = files; return _context11.abrupt("return", files); case 9: case "end": return _context11.stop(); } }, _callee11); })); return function loadFilesWithCache(_x15) { return _ref12.apply(this, arguments); }; }(); var loadFiles = /*#__PURE__*/function () { var _ref13 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12(bucketName) { var directoryPath, params, data, _args12 = arguments; return _regeneratorRuntime.wrap(function _callee12$(_context12) { while (1) switch (_context12.prev = _context12.next) { case 0: directoryPath = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : ""; if (!(!service.current || !bucketName)) { _context12.next = 4; break; } console.error("Service or bucketName: ".concat(bucketName, " not available.")); return _context12.abrupt("return", []); case 4: setLoading(true); _context12.prev = 5; params = { Bucket: bucketName }; if (typeof directoryPath === "string" && directoryPath.trim() !== "") { params.Prefix = directoryPath.endsWith("/") ? directoryPath : "".concat(directoryPath, "/"); } _context12.next = 10; return service.current.listFiles(params); case 10: data = _context12.sent; setFiles(data.Contents); return _context12.abrupt("return", data.Contents); case 15: _context12.prev = 15; _context12.t0 = _context12["catch"](5); console.error("Did not load files: ", _context12.t0.message); case 18: setLoading(false); return _context12.abrupt("return", []); case 20: case "end": return _context12.stop(); } }, _callee12, null, [[5, 15]]); })); return function loadFiles(_x16) { return _ref13.apply(this, arguments); }; }(); var clearCache = function clearCache(bucketName) { var directoryPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; var cacheKey = "".concat(bucketName, "/").concat(directoryPath); delete fileCache.current[cacheKey]; }; useEffect(function () { initializeService(); }, [credentials, region, endpoint]); useEffect(function () { if (service && service.current && bucketName && bucketName.trim() !== "") { service.current.listFiles(bucketName).then(function (data) { setFiles(data.Contents); setLoading(false); })["catch"](function (error) { console.error("Did not load files: ", error.message); setLoading(false); }); } }, [service, bucketName]); return /*#__PURE__*/React.createElement(WasabiServiceContext.Provider, { value: { setBucketName: setBucketName, bucketName: bucketName, loading: loading, fileCache: fileCache, files: files, downloadFiles: downloadFiles, downloadFile: downloadFile, deleteFiles: deleteFiles, uploadFiles: uploadFiles, getFileData: getFileData, getFileURL: getFileURL, clearCache: clearCache, loadFilesWithPagination: loadFilesWithPagination, loadFilesWithCache: loadFilesWithCache, loadSpecificFiles: loadSpecificFiles, loadFiles: loadFiles, setRegion: function setRegion(currentRegion) { _setRegion(currentRegion); setEndpoint("s3.".concat(currentRegion, ".wasabisys.com")); }, region: region, setEndpoint: setEndpoint, endpoint: endpoint, initializeService: initializeService } }, children); }; export var useHUDWasabiService = function useHUDWasabiService() { var context = useContext(WasabiServiceContext); if (!context) { throw new Error('Must use within an HUDSessionProvider > HUDVaultProvider > HUDWasabiServiceProvider'); } return context; };