From 61cf397a023b53579dbe9a5f9ad55d5350902e56 Mon Sep 17 00:00:00 2001 From: Alex <33497058+bexsoft@users.noreply.github.com> Date: Tue, 28 Sep 2021 18:28:02 -0500 Subject: [PATCH] Loaded correct version of the file for sharing (#1090) Loaded correct version of the file for sharing when undefined is received in share window, this fixes an issue with objects list where non version was retrieved from backend Signed-off-by: Benjamin Perez Co-authored-by: Benjamin Perez Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> --- .../Objects/ListObjects/ListObjects.tsx | 2 +- .../Objects/ObjectDetails/ShareFile.tsx | 134 ++++++++++++------ 2 files changed, 95 insertions(+), 41 deletions(-) diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx index 665144e53..f35b4d4eb 100644 --- a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx +++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx @@ -910,7 +910,7 @@ const ListObjects = ({ dataObject={{ name: selectedPreview.name, last_modified: "", - version_id: selectedPreview.version_id || null, + version_id: selectedPreview.version_id, }} /> )} diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.tsx index dabd3f25a..9cb14168b 100644 --- a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.tsx +++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.tsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, Fragment } from "react"; import get from "lodash/get"; import { connect } from "react-redux"; import { createStyles, Theme, withStyles } from "@material-ui/core/styles"; @@ -34,6 +34,7 @@ import api from "../../../../../../common/api"; import ModalWrapper from "../../../../Common/ModalWrapper/ModalWrapper"; import PredefinedList from "../../../../Common/FormComponents/PredefinedList/PredefinedList"; import DaysSelector from "../../../../Common/FormComponents/DaysSelector/DaysSelector"; +import { LinearProgress } from "@material-ui/core"; const styles = (theme: Theme) => createStyles({ @@ -68,9 +69,11 @@ const ShareFile = ({ setModalErrorSnackMessage, }: IShareFileProps) => { const [shareURL, setShareURL] = useState(""); + const [isLoadingVersion, setIsLoadingVersion] = useState(true); const [isLoadingFile, setIsLoadingFile] = useState(false); const [selectedDate, setSelectedDate] = useState(""); const [dateValid, setDateValid] = useState(true); + const [versionID, setVersionID] = useState("null"); const initialDate = new Date(); @@ -85,7 +88,49 @@ const ShareFile = ({ }; useEffect(() => { - if (dateValid) { + // In case version is undefined, we get the latest version of the object + if (dataObject.version_id === undefined) { + // In case it is not distributed setup, then we default to "null"; + if (distributedSetup) { + api + .invoke( + "GET", + `/api/v1/buckets/${bucketName}/objects?prefix=${btoa( + dataObject.name + )}${distributedSetup ? "&with_versions=true" : ""}` + ) + .then((res: IFileInfo[]) => { + const result = get(res, "objects", []); + + const latestVersion = result.find( + (elem: IFileInfo) => elem.is_latest + ); + + if (latestVersion) { + setVersionID(latestVersion.version_id); + return; + } + + // Version couldn't ve retrieved, we default + setVersionID("null"); + }) + .catch((error: ErrorResponseHandler) => { + setModalErrorSnackMessage(error); + }); + + setIsLoadingVersion(false); + return; + } + setVersionID("null"); + setIsLoadingVersion(false); + return; + } + setVersionID(dataObject.version_id || "null"); + setIsLoadingVersion(false); + }, [bucketName, dataObject, distributedSetup, setModalErrorSnackMessage]); + + useEffect(() => { + if (dateValid && !isLoadingVersion) { setIsLoadingFile(true); setShareURL(""); @@ -95,14 +140,12 @@ const ShareFile = ({ const diffDate = slDate.getTime() - currDate.getTime(); if (diffDate > 0) { - const versID = distributedSetup ? dataObject.version_id : "null"; - api .invoke( "GET", `/api/v1/buckets/${bucketName}/objects/share?prefix=${btoa( dataObject.name - )}&version_id=${versID || "null"}${ + )}&version_id=${versionID}${ selectedDate !== "" ? `&expires=${diffDate}ms` : "" }` ) @@ -125,6 +168,8 @@ const ShareFile = ({ setShareURL, setModalErrorSnackMessage, distributedSetup, + isLoadingVersion, + versionID, ]); return ( @@ -137,42 +182,51 @@ const ShareFile = ({ }} > - - This module generates a temporary URL with integrated access - credentials for sharing objects for up to 7 days. -
- The temporary URL expires after the configured time limit. -
- - - - - - + {isLoadingVersion && ( + + - - - - - - + )} + {!isLoadingVersion && ( + + + This module generates a temporary URL with integrated access + credentials for sharing objects for up to 7 days. +
+ The temporary URL expires after the configured time limit. +
+ + + + + + + + + + + + + +
+ )}