Skip to content

Commit ade9731

Browse files
authored
Reload main object information after restoring a version (#1720)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
1 parent cc43b3c commit ade9731

File tree

4 files changed

+52
-44
lines changed

4 files changed

+52
-44
lines changed

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectDetailPanel.tsx

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import {
4545
import { IAM_SCOPES } from "../../../../../../common/SecureComponent/permissions";
4646
import {
4747
completeObject,
48+
setLoadingObjectInfo,
4849
setNewObject,
4950
setVersionsModeEnabled,
5051
updateProgress,
@@ -66,7 +67,6 @@ import ShareFile from "../ObjectDetails/ShareFile";
6667
import SetRetention from "../ObjectDetails/SetRetention";
6768
import DeleteObject from "../ListObjects/DeleteObject";
6869
import SetLegalHoldModal from "../ObjectDetails/SetLegalHoldModal";
69-
import RestoreFileVersion from "../ObjectDetails/RestoreFileVersion";
7070
import {
7171
hasPermission,
7272
SecureComponent,
@@ -123,13 +123,15 @@ interface IObjectDetailPanelProps {
123123
versioning: boolean;
124124
versionsMode: boolean;
125125
selectedVersion: string;
126+
loadingObjectInfo: boolean;
126127
onClosePanel: (hardRefresh: boolean) => void;
127128
setErrorSnackMessage: typeof setErrorSnackMessage;
128129
setSnackBarMessage: typeof setSnackBarMessage;
129130
setNewObject: typeof setNewObject;
130131
updateProgress: typeof updateProgress;
131132
completeObject: typeof completeObject;
132133
setVersionsModeEnabled: typeof setVersionsModeEnabled;
134+
setLoadingObjectInfo: typeof setLoadingObjectInfo;
133135
}
134136

135137
const emptyFile: IFileInfo = {
@@ -158,8 +160,9 @@ const ObjectDetailPanel = ({
158160
selectedVersion,
159161
onClosePanel,
160162
setVersionsModeEnabled,
163+
loadingObjectInfo,
164+
setLoadingObjectInfo,
161165
}: IObjectDetailPanelProps) => {
162-
const [loadObjectData, setLoadObjectData] = useState<boolean>(true);
163166
const [shareFileModalOpen, setShareFileModalOpen] = useState<boolean>(false);
164167
const [retentionModalOpen, setRetentionModalOpen] = useState<boolean>(false);
165168
const [tagModalOpen, setTagModalOpen] = useState<boolean>(false);
@@ -170,9 +173,7 @@ const ObjectDetailPanel = ({
170173
const [objectToShare, setObjectToShare] = useState<IFileInfo | null>(null);
171174
const [versions, setVersions] = useState<IFileInfo[]>([]);
172175
const [deleteOpen, setDeleteOpen] = useState<boolean>(false);
173-
const [restoreVersionOpen, setRestoreVersionOpen] = useState<boolean>(false);
174176
const [previewOpen, setPreviewOpen] = useState<boolean>(false);
175-
const [restoreVersion, setRestoreVersion] = useState<string>("");
176177
const [totalVersionsSize, setTotalVersionsSize] = useState<number>(0);
177178

178179
const internalPathsDecoded = decodeFileName(internalPaths) || "";
@@ -187,9 +188,9 @@ const ObjectDetailPanel = ({
187188

188189
useEffect(() => {
189190
if (bucketName !== "" && internalPaths) {
190-
setLoadObjectData(true);
191+
setLoadingObjectInfo(true);
191192
}
192-
}, [internalPaths, bucketName]);
193+
}, [internalPaths, bucketName, setLoadingObjectInfo]);
193194

194195
useEffect(() => {
195196
if (distributedSetup && allInfoElements.length >= 1) {
@@ -208,7 +209,7 @@ const ObjectDetailPanel = ({
208209
}, [selectedVersion, distributedSetup, allInfoElements]);
209210

210211
useEffect(() => {
211-
if (loadObjectData && internalPaths !== "") {
212+
if (loadingObjectInfo && internalPaths !== "") {
212213
api
213214
.invoke(
214215
"GET",
@@ -237,20 +238,21 @@ const ObjectDetailPanel = ({
237238
setVersions([]);
238239
}
239240

240-
setLoadObjectData(false);
241+
setLoadingObjectInfo(false);
241242
})
242243
.catch((error: ErrorResponseHandler) => {
243244
setErrorSnackMessage(error);
244-
setLoadObjectData(false);
245+
setLoadingObjectInfo(false);
245246
});
246247
}
247248
}, [
248-
loadObjectData,
249+
loadingObjectInfo,
249250
bucketName,
250251
internalPaths,
251252
setErrorSnackMessage,
252253
distributedSetup,
253254
selectedVersion,
255+
setLoadingObjectInfo
254256
]);
255257

256258
let tagKeys: string[] = [];
@@ -266,7 +268,7 @@ const ObjectDetailPanel = ({
266268
const closeRetentionModal = (updateInfo: boolean) => {
267269
setRetentionModalOpen(false);
268270
if (updateInfo) {
269-
setLoadObjectData(true);
271+
setLoadingObjectInfo(true);
270272
}
271273
};
272274

@@ -319,30 +321,21 @@ const ObjectDetailPanel = ({
319321
const closeAddTagModal = (reloadObjectData: boolean) => {
320322
setTagModalOpen(false);
321323
if (reloadObjectData) {
322-
setLoadObjectData(true);
324+
setLoadingObjectInfo(true);
323325
}
324326
};
325327

326328
const closeInspectModal = (reloadObjectData: boolean) => {
327329
setInspectModalOpen(false);
328330
if (reloadObjectData) {
329-
setLoadObjectData(true);
331+
setLoadingObjectInfo(true);
330332
}
331333
};
332334

333335
const closeLegalholdModal = (reload: boolean) => {
334336
setLegalholdOpen(false);
335337
if (reload) {
336-
setLoadObjectData(true);
337-
}
338-
};
339-
340-
const closeRestoreModal = (reloadObjectData: boolean) => {
341-
setRestoreVersionOpen(false);
342-
setRestoreVersion("");
343-
344-
if (reloadObjectData) {
345-
setLoadObjectData(true);
338+
setLoadingObjectInfo(true);
346339
}
347340
};
348341

@@ -392,7 +385,6 @@ const ObjectDetailPanel = ({
392385
label: "Legal Hold",
393386
disabled:
394387
!!actualInfo.is_delete_marker ||
395-
extensionPreview(currentItem) === "none" ||
396388
!hasPermission(bucketName, [IAM_SCOPES.S3_PUT_OBJECT_LEGAL_HOLD]) ||
397389
selectedVersion !== "",
398390
icon: <LegalHoldIcon />,
@@ -403,7 +395,6 @@ const ObjectDetailPanel = ({
403395
label: "Retention",
404396
disabled:
405397
!!actualInfo.is_delete_marker ||
406-
extensionPreview(currentItem) === "none" ||
407398
!hasPermission(bucketName, [IAM_SCOPES.S3_GET_OBJECT_RETENTION]) ||
408399
selectedVersion !== "",
409400
icon: <RetentionIcon />,
@@ -414,10 +405,7 @@ const ObjectDetailPanel = ({
414405
setTagModalOpen(true);
415406
},
416407
label: "Tags",
417-
disabled:
418-
!!actualInfo.is_delete_marker ||
419-
extensionPreview(currentItem) === "none" ||
420-
selectedVersion !== "",
408+
disabled: !!actualInfo.is_delete_marker || selectedVersion !== "",
421409
icon: <TagsIcon />,
422410
tooltip: "Change Tags for this File",
423411
},
@@ -426,10 +414,7 @@ const ObjectDetailPanel = ({
426414
setInspectModalOpen(true);
427415
},
428416
label: "Inspect",
429-
disabled:
430-
!!actualInfo.is_delete_marker ||
431-
extensionPreview(currentItem) === "none" ||
432-
selectedVersion !== "",
417+
disabled: !!actualInfo.is_delete_marker || selectedVersion !== "",
433418
icon: <InspectMenuIcon />,
434419
tooltip: "Inspect this file",
435420
},
@@ -450,7 +435,9 @@ const ObjectDetailPanel = ({
450435

451436
const difTime = currentTime.getTime() - modifiedTime.getTime();
452437

453-
return `${niceDaysInt(difTime, "ms")} ago`;
438+
const formatTime = niceDaysInt(difTime, "ms");
439+
440+
return formatTime.trim() !== "" ? `${formatTime} ago` : "Just now";
454441
};
455442

456443
return (
@@ -490,15 +477,6 @@ const ObjectDetailPanel = ({
490477
actualInfo={actualInfo}
491478
/>
492479
)}
493-
{restoreVersionOpen && actualInfo && (
494-
<RestoreFileVersion
495-
restoreOpen={restoreVersionOpen}
496-
bucketName={bucketName}
497-
versionID={restoreVersion}
498-
objectPath={actualInfo.name}
499-
onCloseAndUpdate={closeRestoreModal}
500-
/>
501-
)}
502480
{previewOpen && actualInfo && (
503481
<PreviewFileModal
504482
open={previewOpen}
@@ -698,6 +676,7 @@ const mapStateToProps = ({ objectBrowser, system }: AppState) => ({
698676
distributedSetup: get(system, "distributedSetup", false),
699677
versionsMode: get(objectBrowser, "versionsMode", false),
700678
selectedVersion: get(objectBrowser, "selectedVersion", ""),
679+
loadingObjectInfo: get(objectBrowser, "loadingObjectInfo", false),
701680
});
702681

703682
const mapDispatchToProps = {
@@ -707,6 +686,7 @@ const mapDispatchToProps = {
707686
updateProgress,
708687
completeObject,
709688
setVersionsModeEnabled,
689+
setLoadingObjectInfo,
710690
};
711691

712692
const connector = connect(mapStateToProps, mapDispatchToProps);

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/VersionsNavigator.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import ScreenTitle from "../../../../Common/ScreenTitle/ScreenTitle";
4747
import RestoreFileVersion from "./RestoreFileVersion";
4848
import {
4949
completeObject,
50+
setLoadingObjectInfo,
5051
setLoadingVersions,
5152
setNewObject,
5253
setSelectedVersion,
@@ -119,6 +120,7 @@ interface IVersionsNavigatorProps {
119120
completeObject: typeof completeObject;
120121
setSelectedVersion: typeof setSelectedVersion;
121122
setLoadingVersions: typeof setLoadingVersions;
123+
setLoadingObjectInfo: typeof setLoadingObjectInfo;
122124
}
123125

124126
const emptyFile: IFileInfo = {
@@ -146,6 +148,7 @@ const VersionsNavigator = ({
146148
bucketName,
147149
setSelectedVersion,
148150
setLoadingVersions,
151+
setLoadingObjectInfo,
149152
}: IVersionsNavigatorProps) => {
150153
const [shareFileModalOpen, setShareFileModalOpen] = useState<boolean>(false);
151154
const [actualInfo, setActualInfo] = useState<IFileInfo | null>(null);
@@ -274,6 +277,7 @@ const VersionsNavigator = ({
274277

275278
if (reloadObjectData) {
276279
setLoadingVersions(true);
280+
setLoadingObjectInfo(true);
277281
}
278282
};
279283

@@ -462,6 +466,7 @@ const mapDispatchToProps = {
462466
completeObject,
463467
setSelectedVersion,
464468
setLoadingVersions,
469+
setLoadingObjectInfo,
465470
};
466471

467472
const connector = connect(mapStateToProps, mapDispatchToProps);

portal-ui/src/screens/Console/ObjectBrowser/actions.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export const BUCKET_BROWSER_SET_SELECTED_VERSION =
4040
"BUCKET_BROWSER/SET_SELECTED_VERSION";
4141
export const BUCKET_BROWSER_SHOW_DELETED = "BUCKET_BROWSER/SHOW_DELETED";
4242
export const BUCKET_BROWSER_LOAD_VERSIONS = "BUCKET_BROWSER/LOAD_VERSIONS";
43+
export const BUCKET_BROWSER_LOAD_OBJECT_DETAILS =
44+
"BUCKET_BROWSER/LOAD_OBJECT_DETAILS";
4345

4446
interface RewindSetEnabled {
4547
type: typeof REWIND_SET_ENABLE;
@@ -120,6 +122,11 @@ interface SetLoadingVersions {
120122
status: boolean;
121123
}
122124

125+
interface SetLoadingObjectInfo {
126+
type: typeof BUCKET_BROWSER_LOAD_OBJECT_DETAILS;
127+
status: boolean;
128+
}
129+
123130
export type ObjectBrowserActionTypes =
124131
| RewindSetEnabled
125132
| RewindReset
@@ -136,7 +143,8 @@ export type ObjectBrowserActionTypes =
136143
| SetSearchVersions
137144
| SetSelectedversion
138145
| SetShowDeletedObjects
139-
| SetLoadingVersions;
146+
| SetLoadingVersions
147+
| SetLoadingObjectInfo;
140148

141149
export const setRewindEnable = (
142150
state: boolean,
@@ -255,3 +263,10 @@ export const setLoadingVersions = (status: boolean) => {
255263
status,
256264
};
257265
};
266+
267+
export const setLoadingObjectInfo = (status: boolean) => {
268+
return {
269+
type: BUCKET_BROWSER_LOAD_OBJECT_DETAILS,
270+
status,
271+
};
272+
};

portal-ui/src/screens/Console/ObjectBrowser/reducers.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
BUCKET_BROWSER_SET_SELECTED_VERSION,
3232
BUCKET_BROWSER_SHOW_DELETED,
3333
BUCKET_BROWSER_LOAD_VERSIONS,
34+
BUCKET_BROWSER_LOAD_OBJECT_DETAILS,
3435
} from "./actions";
3536

3637
export interface Route {
@@ -50,6 +51,7 @@ export interface ObjectBrowserState {
5051
objectManager: ObjectManager;
5152
searchObjects: string;
5253
loadingVersions: boolean;
54+
loadingObjectInfo: boolean;
5355
versionsMode: boolean;
5456
versionedFile: string;
5557
searchVersions: string;
@@ -85,6 +87,7 @@ const defaultRewind = {
8587
const initialState: ObjectBrowserState = {
8688
versionsMode: false,
8789
loadingVersions: true,
90+
loadingObjectInfo: true,
8891
rewind: {
8992
...defaultRewind,
9093
},
@@ -261,6 +264,11 @@ export function objectBrowserReducer(
261264
...state,
262265
loadingVersions: action.status,
263266
};
267+
case BUCKET_BROWSER_LOAD_OBJECT_DETAILS:
268+
return {
269+
...state,
270+
loadingObjectInfo: action.status,
271+
};
264272
default:
265273
return state;
266274
}

0 commit comments

Comments
 (0)