UNPKG

synapse-react-client

Version:

[![Build Status](https://travis-ci.com/Sage-Bionetworks/Synapse-React-Client.svg?branch=main)](https://travis-ci.com/Sage-Bionetworks/Synapse-React-Client) [![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synaps

158 lines 8.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); var SynapseClient_1 = require("../SynapseClient"); var getUserData_1 = require("../functions/getUserData"); var __1 = require(".."); var lodash_es_1 = require("lodash-es"); var use_deep_compare_effect_1 = (0, tslib_1.__importDefault)(require("use-deep-compare-effect")); var SynapseContext_1 = require("../SynapseContext"); var UserProfileTemplate = { ownerId: '', firstName: 'Unknown', lastName: 'Unknown', userName: 'Unknown', // A name chosen by the user that uniquely identifies them }; var entityHeaderTemplate = { name: 'Unknown', id: 'unknown', type: 'org.sagebionetworks.repo.model.FileEntity', versionNumber: 0, versionLabel: 'placeholder', benefactorId: 0, createdOn: 'null', modifiedOn: 'null', createdBy: 'null', modifiedBy: 'null', // The ID of the user that last modified this entity. }; var getEntityHeaderItems = function (lookupList, token) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var newData, notFound, notFoundPlaceholders; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, SynapseClient_1.getEntityHeaders)(lookupList, token)]; case 1: newData = _a.sent(); notFound = lookupList.filter(function (item) { return newData.results.map(function (item) { return item.id; }).indexOf(item.targetId) === -1; }); notFoundPlaceholders = notFound.map(function (item) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, entityHeaderTemplate), { id: item.targetId, name: "" + item.targetId })); }); return [2 /*return*/, (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], newData.results, true), notFoundPlaceholders, true)]; } }); }); }; var getUserProfileItems = function (lookupList) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var newData, notFound, notFoundPlaceholders; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, getUserData_1.getUserProfileWithProfilePicAttached)(lookupList)]; case 1: newData = _a.sent(); notFound = lookupList.filter(function (item) { return newData.list.map(function (item) { return item.ownerId; }).indexOf(item) === -1; }); notFoundPlaceholders = notFound.map(function (item) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, UserProfileTemplate), { ownerId: item, name: "Unknown User (" + item + ")" })); }); return [2 /*return*/, (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], newData.list, true), notFoundPlaceholders, true)]; } }); }); }; // React hook to get user profiles or entities //******************************************************************************************* */ function useGetInfoFromIds(props) { var _this = this; var ids = props.ids, type = props.type; var accessToken = (0, SynapseContext_1.useSynapseContext)().accessToken; var _a = (0, react_1.useState)([]), data = _a[0], setData = _a[1]; var idProp = function (type) { return type === 'USER_PROFILE' ? 'ownerId' : 'id'; }; var storageKey = function (type) { return type === 'USER_PROFILE' ? __1.SynapseConstants.USER_PROFILE_STORAGE_KEY : __1.SynapseConstants.ENTITY_HEADER_STORAGE_KEY; }; // look at current list of data, see if incoming ids has new data, // if so grab those ids var curList = data.map(function (el) { return el[idProp(type)]; }); var incomingList = ids.filter(function (el) { return el !== __1.SynapseConstants.VALUE_NOT_SET; }); var newValues = (0, lodash_es_1.uniq)(lodash_es_1.without.apply(void 0, (0, tslib_1.__spreadArray)([incomingList], curList, false))); var saveToSessionStorage = function (data, type) { if (!data.length) { return; } //get what's there var dataInStorage = sessionStorage.getItem(storageKey(type)); try { var dataInStorageAsObjectArr = dataInStorage ? JSON.parse(dataInStorage) : []; //get an array of ids for items already in storage var ids_1 = dataInStorageAsObjectArr.map(function (item) { return item[idProp(type)]; }); //push all the new data if ids are new for (var _i = 0, data_1 = data; _i < data_1.length; _i++) { var dataObject = data_1[_i]; if (!ids_1.includes(dataObject[idProp(type)])) { dataInStorageAsObjectArr.push(dataObject); } } sessionStorage.setItem(storageKey(type), JSON.stringify(dataInStorageAsObjectArr)); } catch (e) { sessionStorage.setItem(storageKey(type), JSON.stringify(data)); } }; // Alina TODO: check if the items are already in Local Storage before making server call. // Michael TODO: There's a bug where the data held in useGetInfoFromIds will be stale if the user token changes, // this can be solved by using the useCompare hook on the token to track when it changes (0, use_deep_compare_effect_1.default)(function () { var getData = function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var newIds, newReferences, newReferencesChunks, totalData_1, _i, newReferencesChunks_1, newReferences_1, newData, _a, error_1; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: if (!(newValues.length > 0)) return [3 /*break*/, 10]; _b.label = 1; case 1: _b.trys.push([1, 9, , 10]); newIds = Array.from(newValues); newReferences = type === 'USER_PROFILE' ? newIds : newIds.map(function (el) { return ({ targetId: el }); }); newReferencesChunks = (0, lodash_es_1.chunk)(newReferences, 45); totalData_1 = []; _i = 0, newReferencesChunks_1 = newReferencesChunks; _b.label = 2; case 2: if (!(_i < newReferencesChunks_1.length)) return [3 /*break*/, 8]; newReferences_1 = newReferencesChunks_1[_i]; if (!(type === 'USER_PROFILE')) return [3 /*break*/, 4]; return [4 /*yield*/, getUserProfileItems(newReferences_1)]; case 3: _a = _b.sent(); return [3 /*break*/, 6]; case 4: return [4 /*yield*/, getEntityHeaderItems(newReferences_1, accessToken)]; case 5: _a = _b.sent(); _b.label = 6; case 6: newData = _a; totalData_1.push.apply(totalData_1, newData); _b.label = 7; case 7: _i++; return [3 /*break*/, 2]; case 8: setData(function (oldData) { return oldData.concat.apply(oldData, totalData_1); }); return [3 /*break*/, 10]; case 9: error_1 = _b.sent(); console.error('Error on data retrieval', error_1); return [3 /*break*/, 10]; case 10: saveToSessionStorage(data, type); return [2 /*return*/]; } }); }); }; getData(); }, [accessToken, type, newValues]); return data; } exports.default = useGetInfoFromIds; //# sourceMappingURL=useGetInfoFromIds.js.map