From 19e6e2dbcf5a82314bebcc6e6121922654f59d10 Mon Sep 17 00:00:00 2001 From: Jean-Marc Millet Date: Tue, 3 Sep 2024 15:49:56 +0200 Subject: [PATCH 1/5] remove query after folder creation or file upload to avoid cache issue --- src/react/actions/s3object.ts | 10 +++++++++- src/react/databrowser/objects/FolderCreate.tsx | 10 +++++++++- src/react/databrowser/objects/ObjectUpload.tsx | 6 +++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/react/actions/s3object.ts b/src/react/actions/s3object.ts index a227a1564..0d43a356a 100644 --- a/src/react/actions/s3object.ts +++ b/src/react/actions/s3object.ts @@ -40,6 +40,7 @@ import { LIST_OBJECT_VERSIONS_S3_TYPE } from '../utils/s3'; import type { Marker, ZenkoClient } from '../../types/zenko'; import { getClients } from '../utils/actions'; import { newSearchListing } from '.'; +import { QueryClient } from 'react-query'; export const UPLOADING_OBJECT = 'Uploading object(s)'; export function listObjectsSuccess( @@ -178,17 +179,22 @@ export function resetObjectMetadata(): ResetObjectMetadataAction { type: 'RESET_OBJECT_METADATA', }; } + export function createFolder( bucketName: string, prefixWithSlash: string, folderName: string, + queryClient: QueryClient, ): ThunkStatePromisedAction { return (dispatch, getState) => { const { zenkoClient } = getClients(getState()); dispatch(networkStart('Creating folder')); return zenkoClient .createFolder(bucketName, prefixWithSlash, folderName) - .then(() => dispatch(listObjects(bucketName, prefixWithSlash))) + .then(() => { + queryClient.removeQueries(['objectVersions', bucketName]); + dispatch(listObjects(bucketName, prefixWithSlash)); + }) .catch((error) => dispatch(handleAWSClientError(error))) .catch((error) => dispatch(handleAWSError(error, 'byComponent'))) .finally(() => { @@ -447,6 +453,7 @@ export function uploadFiles( bucketName: string, prefixWithSlash: string, files: Array, + queryClient: QueryClient, ): ThunkStatePromisedAction { return (dispatch, getState) => { const { zenkoClient } = getClients(getState()); @@ -455,6 +462,7 @@ export function uploadFiles( return zenkoClient .uploadObject(bucketName, prefixWithSlash, files) .then(() => { + queryClient.removeQueries(['objectVersions', bucketName]); dispatch(listObjects(bucketName, prefixWithSlash)); }) .catch((error) => { diff --git a/src/react/databrowser/objects/FolderCreate.tsx b/src/react/databrowser/objects/FolderCreate.tsx index cb743c1da..7389a67eb 100644 --- a/src/react/databrowser/objects/FolderCreate.tsx +++ b/src/react/databrowser/objects/FolderCreate.tsx @@ -10,6 +10,7 @@ import type { AppState } from '../../../types/state'; import { closeFolderCreateModal, createFolder } from '../../actions'; import { CustomModal as Modal } from '../../ui-elements/Modal'; import { addTrailingSlash } from '../../utils'; +import { useQueryClient } from 'react-query'; export const Description = styled.div` margin-top: ${spacing.sp16}; width: 20.5rem; @@ -30,6 +31,8 @@ const FolderCreate = ({ bucketName, prefixWithSlash }: Props) => { ); const dispatch: Dispatch = useDispatch(); + const queryClient = useQueryClient(); + if (!show) { return null; } @@ -46,7 +49,12 @@ const FolderCreate = ({ bucketName, prefixWithSlash }: Props) => { setFolderName(''); dispatch( - createFolder(bucketName, prefixWithSlash, addTrailingSlash(folderName)), + createFolder( + bucketName, + prefixWithSlash, + addTrailingSlash(folderName), + queryClient, + ), ); }; diff --git a/src/react/databrowser/objects/ObjectUpload.tsx b/src/react/databrowser/objects/ObjectUpload.tsx index 3a54064e1..3809e33ab 100644 --- a/src/react/databrowser/objects/ObjectUpload.tsx +++ b/src/react/databrowser/objects/ObjectUpload.tsx @@ -14,6 +14,7 @@ import { spacing } from '@scality/core-ui/dist/style/theme'; import styled from 'styled-components'; import { useDropzone } from 'react-dropzone'; import { usePrefixWithSlash } from '../../utils/hooks'; +import { useQueryClient } from 'react-query'; const DropZone = styled.div` flex: 1; display: flex; @@ -118,6 +119,7 @@ const ObjectUpload = ({ bucketName }: Props) => { ); const dispatch: Dispatch = useDispatch(); const prefixWithSlash = usePrefixWithSlash(); + const queryClient = useQueryClient(); const onDrop = (accepted, rejections) => { if (accepted.length > 0) { @@ -156,7 +158,9 @@ const ObjectUpload = ({ bucketName }: Props) => { const upload = () => { cleanFiles(); - dispatch(uploadFiles(bucketName, prefixWithSlash, acceptedFiles)); + dispatch( + uploadFiles(bucketName, prefixWithSlash, acceptedFiles, queryClient), + ); }; if (!show) { From 93a003a7937dc695f78f028c3b275b1f009e28e4 Mon Sep 17 00:00:00 2001 From: Jean-Marc Millet Date: Tue, 3 Sep 2024 15:53:29 +0200 Subject: [PATCH 2/5] fix isBucketEmpty condition (was returning false when object.lenght = 0) --- src/react/ui-elements/DeleteBucket/index.tsx | 5 ++--- src/react/utils/hooks.ts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/react/ui-elements/DeleteBucket/index.tsx b/src/react/ui-elements/DeleteBucket/index.tsx index 821540465..119fe2698 100644 --- a/src/react/ui-elements/DeleteBucket/index.tsx +++ b/src/react/ui-elements/DeleteBucket/index.tsx @@ -38,13 +38,12 @@ export const DeleteBucket = ({ bucketName }: DeleteBucketProps) => { : 'Bucket is not empty' } overlayStyle={{ - width: '9rem', - display: isBucketEmpty ? undefined : 'none', + display: isBucketEmpty ? 'none' : undefined, }} >