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