From d1069ed35923c9425827838ce121eb1ff170237a Mon Sep 17 00:00:00 2001 From: Prakash Senthil Vel <23444145+prakashsvmx@users.noreply.github.com> Date: Mon, 17 Jul 2023 21:33:31 +0530 Subject: [PATCH] fix loading of objects at a path when url is shared opened elsewhere (#2944) - fix loading of objects at a path when url is shared and opened elsewhere - fix bug when a path is created and objects are uploaded it is not refreshed --- portal-ui/src/common/utils.ts | 19 +++++++++++++-- .../Buckets/BucketDetails/BrowserHandler.tsx | 24 +++++++++---------- .../Objects/ListObjects/CreatePathModal.tsx | 5 ++++ 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/portal-ui/src/common/utils.ts b/portal-ui/src/common/utils.ts index f8cbd283d..7f3be8d7d 100644 --- a/portal-ui/src/common/utils.ts +++ b/portal-ui/src/common/utils.ts @@ -434,12 +434,27 @@ export const representationNumber = (number: number | undefined) => { return `${returnValue}${unit}`; }; +/** Ref https://developer.mozilla.org/en-US/docs/Glossary/Base64 */ + +const base64ToBytes = (base64: any): Uint8Array => { + const binString: any = atob(base64); + // @ts-ignore + return Uint8Array.from(binString, (m) => m.codePointAt(0)); +}; + +const bytesToBase64 = (bytes: any) => { + const binString = Array.from(bytes, (x: any) => String.fromCodePoint(x)).join( + "" + ); + return btoa(binString); +}; + export const encodeURLString = (name: string | null) => { if (!name) { return ""; } try { - return btoa(unescape(encodeURIComponent(name))); + return bytesToBase64(new TextEncoder().encode(name)); } catch (err) { return ""; } @@ -447,7 +462,7 @@ export const encodeURLString = (name: string | null) => { export const decodeURLString = (text: string) => { try { - return decodeURIComponent(escape(window.atob(text))); + return new TextDecoder().decode(base64ToBytes(text)); } catch (err) { return text; } diff --git a/portal-ui/src/screens/Console/Buckets/BucketDetails/BrowserHandler.tsx b/portal-ui/src/screens/Console/Buckets/BucketDetails/BrowserHandler.tsx index 9ca039c59..a784463ba 100644 --- a/portal-ui/src/screens/Console/Buckets/BucketDetails/BrowserHandler.tsx +++ b/portal-ui/src/screens/Console/Buckets/BucketDetails/BrowserHandler.tsx @@ -291,18 +291,6 @@ const BrowserHandler = () => { [bucketName, rewindEnabled, showDeleted, dispatch, onMessageCallBack] ); - useEffect(() => { - // when a bucket param changes, (i.e /browser/:bucketName), re-init e.g with KBar, this should not apply for resources prefixes. - const permitItems = permissionItems(bucketName, "", allowResources || []); - - if (bucketName && (!permitItems || permitItems.length === 0)) { - dispatch(resetMessages()); - dispatch(setLoadingRecords(true)); - dispatch(setLoadingObjects(true)); - initWSRequest("", new Date()); - } - }, [bucketName, dispatch, initWSRequest, allowResources]); - useEffect(() => { return () => { const request: WebsocketRequest = { @@ -480,6 +468,18 @@ const BrowserHandler = () => { } }, [bucketName, loadingLocking, dispatch, displayListObjects]); + useEffect(() => { + // when a bucket param changes, (i.e /browser/:bucketName), re-init e.g with KBar, this should not apply for resources prefixes. + const permitItems = permissionItems(bucketName, "", allowResources || []); + + if (bucketName && (!permitItems || permitItems.length === 0)) { + dispatch(resetMessages()); + dispatch(setLoadingRecords(true)); + dispatch(setLoadingObjects(true)); + initWSRequest("", new Date()); + } + }, [bucketName, dispatch, initWSRequest, allowResources]); + return ( {!anonymousMode && } diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/CreatePathModal.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/CreatePathModal.tsx index cf7c1e909..890592822 100644 --- a/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/CreatePathModal.tsx +++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/CreatePathModal.tsx @@ -103,9 +103,14 @@ const CreatePathModal = ({ .filter((splitItem) => splitItem.trim() !== "") .join("/"); + if (folderPath.slice(0, 1) === "/") { + folderPath = folderPath.slice(1); //trim '/' + } + const newPath = `/browser/${bucketName}/${encodeURLString( `${folderPath}${cleanPathURL}/` )}`; + navigate(newPath); onClose(); };