Skip to content

Commit 6dec3d6

Browse files
committed
fix(renterd): files global view full keys
1 parent a854027 commit 6dec3d6

File tree

14 files changed

+171
-134
lines changed

14 files changed

+171
-134
lines changed

.changeset/fluffy-timers-allow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'renterd': patch
3+
---
4+
5+
Fixed an issue where the global files view was not showing full file paths.

apps/renterd-e2e/src/specs/files.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
createFilesMap,
1616
expectFilesMap,
1717
openDirectoryContextMenu,
18+
changeExplorerMode,
1819
} from '../fixtures/files'
1920
import { afterTest, beforeTest } from '../fixtures/beforeTest'
2021
import { clearToasts, fillTextInputByName } from '@siafoundation/e2e'
@@ -53,6 +54,25 @@ test('can create directory and delete a directory', async ({ page }) => {
5354
await fileInList(page, dirPath2)
5455
})
5556

57+
test('can see full file paths in the all files view mode', async ({ page }) => {
58+
const bucketName = 'bucket1'
59+
const dirName1 = 'dir1'
60+
const dirName2 = 'dir2'
61+
const dirPath1 = `${bucketName}/${dirName1}/`
62+
const dirPath2 = `${bucketName}/${dirName1}/${dirName2}/`
63+
const visiblePath = `${dirName1}/${dirName2}/`
64+
65+
await navigateToBuckets({ page })
66+
await createBucket(page, bucketName)
67+
await openBucket(page, bucketName)
68+
await createDirectory(page, dirName1)
69+
await openDirectory(page, dirPath1)
70+
await createDirectory(page, dirName2)
71+
await fileInList(page, dirPath2)
72+
await changeExplorerMode(page, 'all files')
73+
await expect(page.getByText(visiblePath)).toBeVisible()
74+
})
75+
5676
test('can upload, rename, and delete files', async ({ page }) => {
5777
const bucketName = 'files-test'
5878
const dirName = 'test-dir'

apps/renterd/components/Files/FilesViewDropdownMenu.tsx

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,30 @@ import {
88
BaseMenuItem,
99
MenuSeparator,
1010
Option,
11+
TableColumn,
1112
} from '@siafoundation/design-system'
1213
import { CaretDown16, SettingsAdjust16 } from '@siafoundation/react-icons'
1314
import { sortOptions, SortField } from '../../contexts/filesManager/types'
14-
import { useFilesManager } from '../../contexts/filesManager'
1515
import { groupBy } from '@technically/lodash'
1616

17-
export function FilesViewDropdownMenu() {
18-
const {
19-
configurableColumns,
20-
toggleColumnVisibility,
21-
resetDefaultColumnVisibility,
22-
sortField,
23-
setSortField,
24-
sortDirection,
25-
setSortDirection,
26-
visibleColumnIds,
27-
} = useFilesManager()
17+
export function FilesViewDropdownMenu({
18+
tableState,
19+
}: {
20+
tableState: {
21+
sortField: SortField
22+
sortDirection: 'asc' | 'desc'
23+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
24+
visibleColumns: TableColumn<any, any, any>[]
25+
toggleColumnVisibility: (id: string) => void
26+
resetDefaultColumnVisibility: () => void
27+
setSortField: (field: SortField) => void
28+
setSortDirection: (direction: 'asc' | 'desc') => void
29+
configurableColumns: {
30+
label: string
31+
id: string
32+
}[]
33+
}
34+
}) {
2835
return (
2936
<Popover
3037
trigger={
@@ -43,9 +50,9 @@ export function FilesViewDropdownMenu() {
4350
<Label>Order by</Label>
4451
<MenuItemRightSlot>
4552
<Select
46-
value={sortField}
53+
value={tableState.sortField}
4754
onChange={(e) => {
48-
setSortField(e.currentTarget.value as SortField)
55+
tableState.setSortField(e.currentTarget.value as SortField)
4956
}}
5057
>
5158
{Object.entries(groupBy(sortOptions, 'category')).map(
@@ -66,12 +73,14 @@ export function FilesViewDropdownMenu() {
6673
<Label>Direction</Label>
6774
<MenuItemRightSlot>
6875
<Select
69-
value={sortDirection}
76+
value={tableState.sortDirection}
7077
onClick={(e) => {
7178
e.stopPropagation()
7279
}}
7380
onChange={(e) => {
74-
setSortDirection(e.currentTarget.value as 'asc' | 'desc')
81+
tableState.setSortDirection(
82+
e.currentTarget.value as 'asc' | 'desc'
83+
)
7584
}}
7685
>
7786
<Option key="desc" value="desc">
@@ -90,7 +99,7 @@ export function FilesViewDropdownMenu() {
9099
<Button
91100
onClick={(e) => {
92101
e.stopPropagation()
93-
resetDefaultColumnVisibility()
102+
tableState.resetDefaultColumnVisibility()
94103
}}
95104
>
96105
Reset default
@@ -99,12 +108,12 @@ export function FilesViewDropdownMenu() {
99108
</BaseMenuItem>
100109
<BaseMenuItem>
101110
<PoolCombo
102-
options={configurableColumns.map((column) => ({
111+
options={tableState.configurableColumns.map((column) => ({
103112
label: column.label,
104113
value: column.id,
105114
}))}
106-
values={visibleColumnIds}
107-
onChange={(value) => toggleColumnVisibility(value)}
115+
values={tableState.visibleColumns.map((column) => column.id)}
116+
onChange={(value) => tableState.toggleColumnVisibility(value)}
108117
/>
109118
</BaseMenuItem>
110119
</Popover>

apps/renterd/components/FilesDirectory/FilesActionsMenu.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import { useFilesManager } from '../../contexts/filesManager'
1010
import { FilesViewDropdownMenu } from '../Files/FilesViewDropdownMenu'
1111
import { useDialog } from '../../contexts/dialog'
1212
import { useCanUpload } from '../Files/useCanUpload'
13+
import { useFilesDirectory } from '../../contexts/filesDirectory'
1314
import { useUploadsManager } from '../../contexts/uploadsManager'
1415
// esm compat
1516
const { useDropzone } = reactDropzone
1617

1718
export function FilesActionsMenu() {
1819
const { openDialog } = useDialog()
1920
const { isViewingBuckets } = useFilesManager()
21+
const { tableState } = useFilesDirectory()
2022
const { uploadFiles } = useUploadsManager()
2123

2224
const canUpload = useCanUpload()
@@ -65,7 +67,7 @@ export function FilesActionsMenu() {
6567
</Button>
6668
</>
6769
)}
68-
<FilesViewDropdownMenu />
70+
<FilesViewDropdownMenu tableState={tableState} />
6971
</div>
7072
)
7173
}

apps/renterd/components/FilesDirectory/FilesExplorer.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,7 @@ import { pluralize } from '@siafoundation/units'
77
import { useUploadsManager } from '../../contexts/uploadsManager'
88

99
export function FilesExplorer() {
10-
const {
11-
sortField,
12-
sortDirection,
13-
sortableColumns,
14-
toggleSort,
15-
isViewingBuckets,
16-
visibleColumns,
17-
} = useFilesManager()
10+
const { isViewingBuckets } = useFilesManager()
1811
const { uploadFiles } = useUploadsManager()
1912
const {
2013
datasetPage,
@@ -27,6 +20,7 @@ export function FilesExplorer() {
2720
onDragCancel,
2821
onDragMove,
2922
draggingObjects,
23+
tableState,
3024
} = useFilesDirectory()
3125
const canUpload = useCanUpload()
3226
return (
@@ -44,11 +38,11 @@ export function FilesExplorer() {
4438
pageSize={10}
4539
data={datasetPage}
4640
context={cellContext}
47-
columns={visibleColumns}
48-
sortableColumns={sortableColumns}
49-
sortField={sortField}
50-
sortDirection={sortDirection}
51-
toggleSort={toggleSort}
41+
columns={tableState.visibleColumns}
42+
sortableColumns={tableState.sortableColumns}
43+
sortField={tableState.sortField}
44+
sortDirection={tableState.sortDirection}
45+
toggleSort={tableState.toggleSort}
5246
rowSize="dense"
5347
onDragStart={onDragStart}
5448
onDragOver={onDragOver}

apps/renterd/components/FilesFlat/FilesActionsMenu.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { Button } from '@siafoundation/design-system'
22
import { Search16 } from '@siafoundation/react-icons'
33
import { useDialog } from '../../contexts/dialog'
44
import { FilesViewDropdownMenu } from '../Files/FilesViewDropdownMenu'
5+
import { useFilesFlat } from '../../contexts/filesFlat'
56

67
export function FilesActionsMenu() {
78
const { openDialog } = useDialog()
8-
9+
const { tableState } = useFilesFlat()
910
return (
1011
<div className="flex gap-2">
1112
<Button
@@ -15,7 +16,7 @@ export function FilesActionsMenu() {
1516
>
1617
<Search16 />
1718
</Button>
18-
<FilesViewDropdownMenu />
19+
<FilesViewDropdownMenu tableState={tableState} />
1920
</div>
2021
)
2122
}

apps/renterd/components/FilesFlat/FilesExplorer.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import { Table } from '@siafoundation/design-system'
22
import { EmptyState } from './EmptyState'
33
import { useFilesFlat } from '../../contexts/filesFlat'
4-
import { useFilesManager } from '../../contexts/filesManager'
54

65
export function FilesExplorer() {
7-
const { sortableColumns, visibleColumns, toggleSort } = useFilesManager()
8-
const { datasetPage, datasetState, cellContext, sortField, sortDirection } =
9-
useFilesFlat()
6+
const { datasetPage, datasetState, cellContext, tableState } = useFilesFlat()
107
return (
118
<div className="relative">
129
<Table
@@ -16,11 +13,11 @@ export function FilesExplorer() {
1613
pageSize={10}
1714
data={datasetPage}
1815
context={cellContext}
19-
columns={visibleColumns}
20-
sortableColumns={sortableColumns}
21-
sortField={sortField}
22-
sortDirection={sortDirection}
23-
toggleSort={toggleSort}
16+
columns={tableState.visibleColumns}
17+
sortableColumns={tableState.sortableColumns}
18+
sortField={tableState.sortField}
19+
sortDirection={tableState.sortDirection}
20+
toggleSort={tableState.toggleSort}
2421
rowSize="dense"
2522
/>
2623
</div>

apps/renterd/contexts/filesDirectory/dataset.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@ import { useFilesManager } from '../filesManager'
66
import { defaultDatasetRefreshInterval } from '../../config/swr'
77
import { ObjectsParams } from '@siafoundation/renterd-types'
88
import { usePaginationMarker } from '@siafoundation/design-system'
9+
import { SortField } from '../filesManager/types'
910

1011
const defaultLimit = 50
1112

12-
export function useDataset() {
13-
const {
14-
activeBucketName,
15-
activeDirectoryPath,
16-
fileNamePrefixFilter,
17-
sortDirection,
18-
sortField,
19-
} = useFilesManager()
13+
export function useDataset({
14+
tableState,
15+
}: {
16+
tableState: {
17+
sortField: SortField
18+
sortDirection: 'asc' | 'desc'
19+
}
20+
}) {
21+
const { activeBucketName, activeDirectoryPath, fileNamePrefixFilter } =
22+
useFilesManager()
2023
const { limit, marker } = usePaginationMarker(defaultLimit)
2124
const pathParams = bucketAndKeyParamsFromPath(activeDirectoryPath)
2225

@@ -30,8 +33,8 @@ export function useDataset() {
3033
const p: ObjectsParams = {
3134
prefix,
3235
bucket: pathParams.bucket,
33-
sortby: sortField,
34-
sortdir: sortDirection,
36+
sortby: tableState.sortField,
37+
sortdir: tableState.sortDirection,
3538
limit,
3639
delimiter: '/',
3740
}
@@ -42,8 +45,8 @@ export function useDataset() {
4245
}, [
4346
fileNamePrefixFilter,
4447
pathParams,
45-
sortField,
46-
sortDirection,
48+
tableState.sortField,
49+
tableState.sortDirection,
4750
marker,
4851
limit,
4952
])
@@ -69,6 +72,7 @@ export function useDataset() {
6972
const d = useDatasetGeneric({
7073
id: 'filesDirectory',
7174
objects,
75+
tableState,
7276
})
7377

7478
return {

apps/renterd/contexts/filesDirectory/index.tsx

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,46 @@
1-
import { useDatasetState, useMultiSelect } from '@siafoundation/design-system'
1+
import {
2+
useDatasetState,
3+
useMultiSelect,
4+
useTableState,
5+
} from '@siafoundation/design-system'
26
import {
37
createContext,
48
MouseEvent,
59
useContext,
610
useEffect,
711
useMemo,
812
} from 'react'
9-
import { CellContext, ObjectData } from '../filesManager/types'
13+
import {
14+
CellContext,
15+
columnsDefaultVisible,
16+
defaultSortField,
17+
sortOptions,
18+
ObjectData,
19+
} from '../filesManager/types'
1020
import { useDataset } from './dataset'
1121
import { useMove } from './move'
1222
import { useFilesManager } from '../filesManager'
23+
import { columns } from './columns'
1324

1425
function useFilesDirectoryMain() {
26+
const tableState = useTableState('renterd/v0/filesDirectory', {
27+
columns,
28+
columnsDefaultVisible,
29+
sortOptions,
30+
defaultSortField,
31+
})
1532
const {
1633
activeDirectory,
1734
activeBucket,
1835
setActiveDirectory,
1936
filters,
20-
visibleColumns,
2137
isViewingBuckets,
2238
} = useFilesManager()
2339

2440
const { limit, marker, nextMarker, isMore, response, refresh, dataset } =
25-
useDataset()
41+
useDataset({
42+
tableState,
43+
})
2644

2745
const multiSelect = useMultiSelect(dataset)
2846

@@ -141,7 +159,6 @@ function useFilesDirectoryMain() {
141159

142160
return {
143161
datasetState,
144-
visibleColumns,
145162
multiSelect,
146163
cellContext,
147164
refresh,
@@ -159,6 +176,7 @@ function useFilesDirectoryMain() {
159176
draggingObjects,
160177
moveSelectedFiles,
161178
moveSelectedFilesOperationCount,
179+
tableState,
162180
}
163181
}
164182

0 commit comments

Comments
 (0)