From 75432a4bc7c7b1cd4f3cd3245f83a99ac7f99a6f Mon Sep 17 00:00:00 2001 From: Zakaria Date: Fri, 23 Oct 2026 10:12:41 -0400 Subject: [PATCH] feat(s3): add a copy button for the bucket name --- .../src/components/StorageObjectBrowser.test.tsx | 13 +++++++++++++ .../src/components/StorageObjectBrowser.tsx | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/components/StorageObjectBrowser.test.tsx b/packages/frontend/src/components/StorageObjectBrowser.test.tsx index 093e420..36b64f7 100644 --- a/packages/frontend/src/components/StorageObjectBrowser.test.tsx +++ b/packages/frontend/src/components/StorageObjectBrowser.test.tsx @@ -99,6 +99,19 @@ test('shows an object extension instead of a generic object type', async () => { expect(await screen.findByText('JSON file')).toBeInTheDocument() }) +test('offers a copy action for the AWS bucket name', async () => { + apiMocks.listStorageObjects.mockResolvedValue({prefix: '', objects: []}) + const queryClient = new QueryClient({defaultOptions: {queries: {retry: false}}}) + + render( + + {}}/> + , + ) + + expect(await screen.findByRole('button', {name: 'Copy Bucket name'})).toBeInTheDocument() +}) + test('opens the object action with copy selected', async () => { apiMocks.listStorageObjects.mockResolvedValue({prefix: '', objects: [{ key: 'orders/order.json', name: 'order.json', type: 'object', size: 10, lastModified: null, metadata: {}, diff --git a/packages/frontend/src/components/StorageObjectBrowser.tsx b/packages/frontend/src/components/StorageObjectBrowser.tsx index e485388..948ce0e 100644 --- a/packages/frontend/src/components/StorageObjectBrowser.tsx +++ b/packages/frontend/src/components/StorageObjectBrowser.tsx @@ -17,6 +17,7 @@ import type {CapabilitySchema, ObjectActionName} from '@/types/schema' import {formatBytes, objectIconKind, objectPreviewKind} from '@/lib/format' import {ImagePreviewModal} from '@/components/ImagePreviewModal' import {ObjectThumbnail} from '@/components/ObjectThumbnail' +import {CopyValueButton} from '@/components/CopyValueButton' interface StorageObjectBrowserProps { cloud: CloudProvider @@ -268,7 +269,7 @@ export function StorageObjectBrowser({cloud, resource, capabilities = [], runtim

Objects

-

{resource.name}

+

{cloud === 'aws' ? {resource.name} : resource.name}

{totalFolders} folders, {totalFiles} {objectLabel}