From ade973177360d270ed2106c8585dc47f5fe89987 Mon Sep 17 00:00:00 2001 From: Alex <33497058+bexsoft@users.noreply.github.com> Date: Tue, 15 Mar 2022 20:26:57 -0700 Subject: [PATCH] Reload main object information after restoring a version (#1720) Signed-off-by: Benjamin Perez --- .../Objects/ListObjects/ObjectDetailPanel.tsx | 66 +++++++------------ .../ObjectDetails/VersionsNavigator.tsx | 5 ++ .../screens/Console/ObjectBrowser/actions.ts | 17 ++++- .../screens/Console/ObjectBrowser/reducers.ts | 8 +++ 4 files changed, 52 insertions(+), 44 deletions(-) diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectDetailPanel.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectDetailPanel.tsx index 64170931f..9d440bbf2 100644 --- a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectDetailPanel.tsx +++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectDetailPanel.tsx @@ -45,6 +45,7 @@ import { import { IAM_SCOPES } from "../../../../../../common/SecureComponent/permissions"; import { completeObject, + setLoadingObjectInfo, setNewObject, setVersionsModeEnabled, updateProgress, @@ -66,7 +67,6 @@ import ShareFile from "../ObjectDetails/ShareFile"; import SetRetention from "../ObjectDetails/SetRetention"; import DeleteObject from "../ListObjects/DeleteObject"; import SetLegalHoldModal from "../ObjectDetails/SetLegalHoldModal"; -import RestoreFileVersion from "../ObjectDetails/RestoreFileVersion"; import { hasPermission, SecureComponent, @@ -123,6 +123,7 @@ interface IObjectDetailPanelProps { versioning: boolean; versionsMode: boolean; selectedVersion: string; + loadingObjectInfo: boolean; onClosePanel: (hardRefresh: boolean) => void; setErrorSnackMessage: typeof setErrorSnackMessage; setSnackBarMessage: typeof setSnackBarMessage; @@ -130,6 +131,7 @@ interface IObjectDetailPanelProps { updateProgress: typeof updateProgress; completeObject: typeof completeObject; setVersionsModeEnabled: typeof setVersionsModeEnabled; + setLoadingObjectInfo: typeof setLoadingObjectInfo; } const emptyFile: IFileInfo = { @@ -158,8 +160,9 @@ const ObjectDetailPanel = ({ selectedVersion, onClosePanel, setVersionsModeEnabled, + loadingObjectInfo, + setLoadingObjectInfo, }: IObjectDetailPanelProps) => { - const [loadObjectData, setLoadObjectData] = useState(true); const [shareFileModalOpen, setShareFileModalOpen] = useState(false); const [retentionModalOpen, setRetentionModalOpen] = useState(false); const [tagModalOpen, setTagModalOpen] = useState(false); @@ -170,9 +173,7 @@ const ObjectDetailPanel = ({ const [objectToShare, setObjectToShare] = useState(null); const [versions, setVersions] = useState([]); const [deleteOpen, setDeleteOpen] = useState(false); - const [restoreVersionOpen, setRestoreVersionOpen] = useState(false); const [previewOpen, setPreviewOpen] = useState(false); - const [restoreVersion, setRestoreVersion] = useState(""); const [totalVersionsSize, setTotalVersionsSize] = useState(0); const internalPathsDecoded = decodeFileName(internalPaths) || ""; @@ -187,9 +188,9 @@ const ObjectDetailPanel = ({ useEffect(() => { if (bucketName !== "" && internalPaths) { - setLoadObjectData(true); + setLoadingObjectInfo(true); } - }, [internalPaths, bucketName]); + }, [internalPaths, bucketName, setLoadingObjectInfo]); useEffect(() => { if (distributedSetup && allInfoElements.length >= 1) { @@ -208,7 +209,7 @@ const ObjectDetailPanel = ({ }, [selectedVersion, distributedSetup, allInfoElements]); useEffect(() => { - if (loadObjectData && internalPaths !== "") { + if (loadingObjectInfo && internalPaths !== "") { api .invoke( "GET", @@ -237,20 +238,21 @@ const ObjectDetailPanel = ({ setVersions([]); } - setLoadObjectData(false); + setLoadingObjectInfo(false); }) .catch((error: ErrorResponseHandler) => { setErrorSnackMessage(error); - setLoadObjectData(false); + setLoadingObjectInfo(false); }); } }, [ - loadObjectData, + loadingObjectInfo, bucketName, internalPaths, setErrorSnackMessage, distributedSetup, selectedVersion, + setLoadingObjectInfo ]); let tagKeys: string[] = []; @@ -266,7 +268,7 @@ const ObjectDetailPanel = ({ const closeRetentionModal = (updateInfo: boolean) => { setRetentionModalOpen(false); if (updateInfo) { - setLoadObjectData(true); + setLoadingObjectInfo(true); } }; @@ -319,30 +321,21 @@ const ObjectDetailPanel = ({ const closeAddTagModal = (reloadObjectData: boolean) => { setTagModalOpen(false); if (reloadObjectData) { - setLoadObjectData(true); + setLoadingObjectInfo(true); } }; const closeInspectModal = (reloadObjectData: boolean) => { setInspectModalOpen(false); if (reloadObjectData) { - setLoadObjectData(true); + setLoadingObjectInfo(true); } }; const closeLegalholdModal = (reload: boolean) => { setLegalholdOpen(false); if (reload) { - setLoadObjectData(true); - } - }; - - const closeRestoreModal = (reloadObjectData: boolean) => { - setRestoreVersionOpen(false); - setRestoreVersion(""); - - if (reloadObjectData) { - setLoadObjectData(true); + setLoadingObjectInfo(true); } }; @@ -392,7 +385,6 @@ const ObjectDetailPanel = ({ label: "Legal Hold", disabled: !!actualInfo.is_delete_marker || - extensionPreview(currentItem) === "none" || !hasPermission(bucketName, [IAM_SCOPES.S3_PUT_OBJECT_LEGAL_HOLD]) || selectedVersion !== "", icon: , @@ -403,7 +395,6 @@ const ObjectDetailPanel = ({ label: "Retention", disabled: !!actualInfo.is_delete_marker || - extensionPreview(currentItem) === "none" || !hasPermission(bucketName, [IAM_SCOPES.S3_GET_OBJECT_RETENTION]) || selectedVersion !== "", icon: , @@ -414,10 +405,7 @@ const ObjectDetailPanel = ({ setTagModalOpen(true); }, label: "Tags", - disabled: - !!actualInfo.is_delete_marker || - extensionPreview(currentItem) === "none" || - selectedVersion !== "", + disabled: !!actualInfo.is_delete_marker || selectedVersion !== "", icon: , tooltip: "Change Tags for this File", }, @@ -426,10 +414,7 @@ const ObjectDetailPanel = ({ setInspectModalOpen(true); }, label: "Inspect", - disabled: - !!actualInfo.is_delete_marker || - extensionPreview(currentItem) === "none" || - selectedVersion !== "", + disabled: !!actualInfo.is_delete_marker || selectedVersion !== "", icon: , tooltip: "Inspect this file", }, @@ -450,7 +435,9 @@ const ObjectDetailPanel = ({ const difTime = currentTime.getTime() - modifiedTime.getTime(); - return `${niceDaysInt(difTime, "ms")} ago`; + const formatTime = niceDaysInt(difTime, "ms"); + + return formatTime.trim() !== "" ? `${formatTime} ago` : "Just now"; }; return ( @@ -490,15 +477,6 @@ const ObjectDetailPanel = ({ actualInfo={actualInfo} /> )} - {restoreVersionOpen && actualInfo && ( - - )} {previewOpen && actualInfo && ( ({ distributedSetup: get(system, "distributedSetup", false), versionsMode: get(objectBrowser, "versionsMode", false), selectedVersion: get(objectBrowser, "selectedVersion", ""), + loadingObjectInfo: get(objectBrowser, "loadingObjectInfo", false), }); const mapDispatchToProps = { @@ -707,6 +686,7 @@ const mapDispatchToProps = { updateProgress, completeObject, setVersionsModeEnabled, + setLoadingObjectInfo, }; const connector = connect(mapStateToProps, mapDispatchToProps); diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/VersionsNavigator.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/VersionsNavigator.tsx index f28098000..ed200144a 100644 --- a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/VersionsNavigator.tsx +++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/VersionsNavigator.tsx @@ -47,6 +47,7 @@ import ScreenTitle from "../../../../Common/ScreenTitle/ScreenTitle"; import RestoreFileVersion from "./RestoreFileVersion"; import { completeObject, + setLoadingObjectInfo, setLoadingVersions, setNewObject, setSelectedVersion, @@ -119,6 +120,7 @@ interface IVersionsNavigatorProps { completeObject: typeof completeObject; setSelectedVersion: typeof setSelectedVersion; setLoadingVersions: typeof setLoadingVersions; + setLoadingObjectInfo: typeof setLoadingObjectInfo; } const emptyFile: IFileInfo = { @@ -146,6 +148,7 @@ const VersionsNavigator = ({ bucketName, setSelectedVersion, setLoadingVersions, + setLoadingObjectInfo, }: IVersionsNavigatorProps) => { const [shareFileModalOpen, setShareFileModalOpen] = useState(false); const [actualInfo, setActualInfo] = useState(null); @@ -274,6 +277,7 @@ const VersionsNavigator = ({ if (reloadObjectData) { setLoadingVersions(true); + setLoadingObjectInfo(true); } }; @@ -462,6 +466,7 @@ const mapDispatchToProps = { completeObject, setSelectedVersion, setLoadingVersions, + setLoadingObjectInfo, }; const connector = connect(mapStateToProps, mapDispatchToProps); diff --git a/portal-ui/src/screens/Console/ObjectBrowser/actions.ts b/portal-ui/src/screens/Console/ObjectBrowser/actions.ts index de302c91b..13ecbf55f 100644 --- a/portal-ui/src/screens/Console/ObjectBrowser/actions.ts +++ b/portal-ui/src/screens/Console/ObjectBrowser/actions.ts @@ -40,6 +40,8 @@ export const BUCKET_BROWSER_SET_SELECTED_VERSION = "BUCKET_BROWSER/SET_SELECTED_VERSION"; export const BUCKET_BROWSER_SHOW_DELETED = "BUCKET_BROWSER/SHOW_DELETED"; export const BUCKET_BROWSER_LOAD_VERSIONS = "BUCKET_BROWSER/LOAD_VERSIONS"; +export const BUCKET_BROWSER_LOAD_OBJECT_DETAILS = + "BUCKET_BROWSER/LOAD_OBJECT_DETAILS"; interface RewindSetEnabled { type: typeof REWIND_SET_ENABLE; @@ -120,6 +122,11 @@ interface SetLoadingVersions { status: boolean; } +interface SetLoadingObjectInfo { + type: typeof BUCKET_BROWSER_LOAD_OBJECT_DETAILS; + status: boolean; +} + export type ObjectBrowserActionTypes = | RewindSetEnabled | RewindReset @@ -136,7 +143,8 @@ export type ObjectBrowserActionTypes = | SetSearchVersions | SetSelectedversion | SetShowDeletedObjects - | SetLoadingVersions; + | SetLoadingVersions + | SetLoadingObjectInfo; export const setRewindEnable = ( state: boolean, @@ -255,3 +263,10 @@ export const setLoadingVersions = (status: boolean) => { status, }; }; + +export const setLoadingObjectInfo = (status: boolean) => { + return { + type: BUCKET_BROWSER_LOAD_OBJECT_DETAILS, + status, + }; +}; diff --git a/portal-ui/src/screens/Console/ObjectBrowser/reducers.ts b/portal-ui/src/screens/Console/ObjectBrowser/reducers.ts index 584c18f49..6730aa213 100644 --- a/portal-ui/src/screens/Console/ObjectBrowser/reducers.ts +++ b/portal-ui/src/screens/Console/ObjectBrowser/reducers.ts @@ -31,6 +31,7 @@ import { BUCKET_BROWSER_SET_SELECTED_VERSION, BUCKET_BROWSER_SHOW_DELETED, BUCKET_BROWSER_LOAD_VERSIONS, + BUCKET_BROWSER_LOAD_OBJECT_DETAILS, } from "./actions"; export interface Route { @@ -50,6 +51,7 @@ export interface ObjectBrowserState { objectManager: ObjectManager; searchObjects: string; loadingVersions: boolean; + loadingObjectInfo: boolean; versionsMode: boolean; versionedFile: string; searchVersions: string; @@ -85,6 +87,7 @@ const defaultRewind = { const initialState: ObjectBrowserState = { versionsMode: false, loadingVersions: true, + loadingObjectInfo: true, rewind: { ...defaultRewind, }, @@ -261,6 +264,11 @@ export function objectBrowserReducer( ...state, loadingVersions: action.status, }; + case BUCKET_BROWSER_LOAD_OBJECT_DETAILS: + return { + ...state, + loadingObjectInfo: action.status, + }; default: return state; }