Skip to content

Commit 7627b2c

Browse files
committed
feat(os): add refresh button on objects
ref: #DATATR-2633 Signed-off-by: Lionel Bueno <[email protected]>
1 parent 8e435a1 commit 7627b2c

File tree

5 files changed

+80
-28
lines changed

5 files changed

+80
-28
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Button } from '@datatr-ux/uxlib';
2+
import { RefreshCw } from 'lucide-react';
3+
4+
interface RefreshButtonProps {
5+
onClick: () => void;
6+
isLoading: boolean;
7+
}
8+
9+
export default function RefreshButton({
10+
onClick,
11+
isLoading,
12+
}: RefreshButtonProps) {
13+
return (
14+
<Button
15+
mode="outline"
16+
className="h-10 px-4"
17+
onClick={onClick}
18+
disabled={isLoading}
19+
>
20+
<RefreshCw className={`size-4 ${isLoading ? 'animate-spin' : ''}`} />
21+
</Button>
22+
);
23+
}

packages/manager/apps/pci-object-storage/src/pages/object-storage/storage/s3Id/objects/Objects.page.tsx

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import S3ObjectBrowser from './_components/S3ObjectBrowser.component';
1717
import { useObjectStorageData } from '@/pages/object-storage/ObjectStorage.context';
1818
import { useIsLocaleZone } from '@/hooks/useIsLocalZone.hook';
1919
import SearchBar from './_components/SearchBar.component';
20+
import RefreshButton from '@/components/refresh-button/RefreshButton.component';
2021

2122
const Objects = () => {
2223
const { projectId } = useParams();
@@ -75,23 +76,30 @@ const Objects = () => {
7576
<Plus className="size-6" />
7677
{t('addNewObject')}
7778
</Button>
78-
{!isLocaleZone && (
79-
<div className="flex items-center space-x-2">
80-
<Switch
81-
id="versions"
82-
checked={withVersion}
83-
onCheckedChange={setWithVersion}
84-
/>
85-
<Label htmlFor="versions">{t('seeVersionsSwitchLabel')}</Label>
86-
<SearchBar
87-
searchQuery={searchQuery}
88-
onSearchChange={setSearchQuery}
89-
deferredSearchQuery={deferredSearchQuery}
90-
filteredObjects={filteredObjects}
91-
placeholder={t('searchPlaceholder') || 'Search...'}
92-
/>
93-
</div>
94-
)}
79+
<div className="flex items-center space-x-2">
80+
<RefreshButton
81+
onRefresh={() => objectQuery.refetch()}
82+
isRefetching={objectQuery.isFetching}
83+
/>
84+
{!isLocaleZone && (
85+
<>
86+
<Switch
87+
id="versions"
88+
checked={withVersion}
89+
onCheckedChange={setWithVersion}
90+
/>
91+
<Label htmlFor="versions">{t('seeVersionsSwitchLabel')}</Label>
92+
<SearchBar
93+
searchQuery={searchQuery}
94+
onSearchChange={setSearchQuery}
95+
deferredSearchQuery={deferredSearchQuery}
96+
filteredObjects={filteredObjects}
97+
placeholder={t('searchPlaceholder') || 'Search...'}
98+
/>
99+
</>
100+
)}
101+
102+
</div>
95103
</div>
96104
<S3ObjectBrowser
97105
objects={objects}

packages/manager/apps/pci-object-storage/src/pages/object-storage/storage/s3Id/objects/object/versions/Versions.page.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ const Versions = () => {
4141
return (
4242
<>
4343
<h2>{t('versionsTitle')}</h2>
44-
<S3ObjectVersionList objects={objectVersionQuery.data} />
44+
<S3ObjectVersionList
45+
objects={objectVersionQuery.data}
46+
onRefreshClicked={objectVersionQuery.refetch}
47+
isLoading={objectVersionQuery.isFetching}
48+
/>
4549
<Outlet />
4650
</>
4751
);

packages/manager/apps/pci-object-storage/src/pages/object-storage/storage/s3Id/objects/object/versions/_components/S3VersionObjectListTable.component.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,19 @@ import useDownload from '@/hooks/useDownload';
1313
import { getObjectStoreApiErrorMessage } from '@/lib/apiHelper';
1414
import { useGetPresignUrlS3 } from '@/data/hooks/s3-storage/useGetPresignUrlS3.hook';
1515
import { useS3Data } from '../../../../S3.context';
16-
import Link from '@/components/links/Link.component';
16+
import RefreshButton from '@/components/refresh-button/RefreshButton.component';
1717

1818
interface ObjectsListProps {
1919
objects: StorageObject[];
20+
onRefreshClicked: () => void;
21+
isLoading: boolean;
2022
}
2123

22-
export default function S3ObjectVersionList({ objects }: ObjectsListProps) {
24+
export default function S3ObjectVersionList({
25+
objects,
26+
onRefreshClicked,
27+
isLoading,
28+
}: ObjectsListProps) {
2329
const { projectId } = useParams();
2430
const { s3 } = useS3Data();
2531
const [objectName, setObjectName] = useState<string>('');
@@ -78,10 +84,13 @@ export default function S3ObjectVersionList({ objects }: ObjectsListProps) {
7884
pageSize={25}
7985
filtersDefinition={storagesFilters}
8086
>
81-
<DataTable.Header>
82-
<DataTable.SearchBar />
83-
<DataTable.FiltersButton />
84-
</DataTable.Header>
87+
<div className="w-full flex flex-col sm:flex-row gap-2 pb-4">
88+
<div className="flex ml-auto gap-2">
89+
<RefreshButton onClick={onRefreshClicked} isLoading={isLoading} />
90+
<DataTable.SearchBar />
91+
<DataTable.FiltersButton />
92+
</div>
93+
</div>
8594
<DataTable.FiltersList />
8695
<DataTable.Table />
8796
<DataTable.Pagination />

packages/manager/apps/pci-object-storage/src/pages/object-storage/storage/swiftId/objects/Objects.page.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useSwiftData } from '../Swift.context';
66
import Guides from '@/components/guides/Guides.component';
77
import RoadmapChangelog from '@/components/roadmap-changelog/RoadmapChangelog.component';
88
import SwiftObjectBrowser from './_components/SwiftObjectBrowser.component';
9+
import RefreshButton from '@/components/refresh-button/RefreshButton.component';
910

1011
const SwiftObjectsPage = () => {
1112
const { t } = useTranslation('pci-object-storage/storages/swift/objects');
@@ -24,10 +25,17 @@ const SwiftObjectsPage = () => {
2425
</div>
2526
</div>
2627

27-
<Button onClick={() => navigate('./add-object')}>
28-
<Plus className="size-6" />
29-
{t('addNewObject')}
30-
</Button>
28+
<div className="flex items-center gap-2">
29+
<RefreshButton
30+
onRefresh={() => swiftQuery.refetch()}
31+
isRefetching={swiftQuery.isFetching}
32+
/>
33+
<Button onClick={() => navigate('./add-object')}>
34+
<Plus className="size-6" />
35+
{t('addNewObject')}
36+
</Button>
37+
38+
</div>
3139

3240
<SwiftObjectBrowser objects={objects} />
3341
<Outlet />

0 commit comments

Comments
 (0)