Reload main object information after restoring a version (#1720)

Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
This commit is contained in:
Alex
2022-03-15 20:26:57 -07:00
committed by GitHub
parent cc43b3c743
commit ade9731773
4 changed files with 52 additions and 44 deletions

View File

@@ -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<boolean>(true);
const [shareFileModalOpen, setShareFileModalOpen] = useState<boolean>(false);
const [retentionModalOpen, setRetentionModalOpen] = useState<boolean>(false);
const [tagModalOpen, setTagModalOpen] = useState<boolean>(false);
@@ -170,9 +173,7 @@ const ObjectDetailPanel = ({
const [objectToShare, setObjectToShare] = useState<IFileInfo | null>(null);
const [versions, setVersions] = useState<IFileInfo[]>([]);
const [deleteOpen, setDeleteOpen] = useState<boolean>(false);
const [restoreVersionOpen, setRestoreVersionOpen] = useState<boolean>(false);
const [previewOpen, setPreviewOpen] = useState<boolean>(false);
const [restoreVersion, setRestoreVersion] = useState<string>("");
const [totalVersionsSize, setTotalVersionsSize] = useState<number>(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: <LegalHoldIcon />,
@@ -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: <RetentionIcon />,
@@ -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: <TagsIcon />,
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: <InspectMenuIcon />,
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 && (
<RestoreFileVersion
restoreOpen={restoreVersionOpen}
bucketName={bucketName}
versionID={restoreVersion}
objectPath={actualInfo.name}
onCloseAndUpdate={closeRestoreModal}
/>
)}
{previewOpen && actualInfo && (
<PreviewFileModal
open={previewOpen}
@@ -698,6 +676,7 @@ const mapStateToProps = ({ objectBrowser, system }: AppState) => ({
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);

View File

@@ -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<boolean>(false);
const [actualInfo, setActualInfo] = useState<IFileInfo | null>(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);

View File

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

View File

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