Skip to content

Commit 04b0343

Browse files
committed
refactor(renterd): split out uploads manager context
1 parent a786cbe commit 04b0343

File tree

11 files changed

+77
-51
lines changed

11 files changed

+77
-51
lines changed

apps/renterd/components/Files/FilesStatsMenuShared/FilesStatsMenuCount.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import { useObjectStats } from '@siafoundation/renterd-react'
33
import { useFilesManager } from '../../../contexts/filesManager'
44
import { useFilesDirectory } from '../../../contexts/filesDirectory'
55
import { useFilesFlat } from '../../../contexts/filesFlat'
6+
import { useUploadsManager } from '../../../contexts/uploadsManager'
67

78
export function FilesStatsMenuCount() {
8-
const { isViewingABucket, uploadsList, activeExplorerMode } =
9-
useFilesManager()
9+
const { isViewingABucket, activeExplorerMode } = useFilesManager()
10+
const { uploadsList } = useUploadsManager()
1011
const { datasetPageTotal: directoryPageTotal } = useFilesDirectory()
1112
const { datasetPageTotal: flatPageTotal } = useFilesFlat()
1213
const datasetPageTotal =

apps/renterd/components/FilesDirectory/FilesExplorer.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ import { EmptyState } from './EmptyState'
44
import { useCanUpload } from '../Files/useCanUpload'
55
import { useFilesManager } from '../../contexts/filesManager'
66
import { pluralize } from '@siafoundation/units'
7+
import { useUploadsManager } from '../../contexts/uploadsManager'
78

89
export function FilesExplorer() {
910
const {
10-
uploadFiles,
1111
sortField,
1212
sortDirection,
1313
sortableColumns,
1414
toggleSort,
1515
isViewingBuckets,
1616
visibleColumns,
1717
} = useFilesManager()
18+
const { uploadFiles } = useUploadsManager()
1819
const {
1920
datasetPage,
2021
datasetPageTotal,

apps/renterd/config/providers.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { FilesManagerProvider } from '../contexts/filesManager'
1111
import { FilesDirectoryProvider } from '../contexts/filesDirectory'
1212
import { UploadsProvider } from '../contexts/uploads'
1313
import { AlertsProvider } from '../contexts/alerts'
14+
import { UploadsManagerProvider } from '../contexts/uploadsManager'
1415

1516
type Props = {
1617
children: React.ReactNode
@@ -25,20 +26,22 @@ export function Providers({ children }: Props) {
2526
<ContractsProvider>
2627
<HostsProvider>
2728
<FilesManagerProvider>
28-
<UploadsProvider>
29-
<FilesDirectoryProvider>
30-
<FilesFlatProvider>
31-
<KeysProvider>
32-
<AlertsProvider>
33-
{/* this is here so that dialogs can use all the other providers,
29+
<UploadsManagerProvider>
30+
<UploadsProvider>
31+
<FilesDirectoryProvider>
32+
<FilesFlatProvider>
33+
<KeysProvider>
34+
<AlertsProvider>
35+
{/* this is here so that dialogs can use all the other providers,
3436
and the other providers can trigger dialogs */}
35-
<Dialogs />
36-
{children}
37-
</AlertsProvider>
38-
</KeysProvider>
39-
</FilesFlatProvider>
40-
</FilesDirectoryProvider>
41-
</UploadsProvider>
37+
<Dialogs />
38+
{children}
39+
</AlertsProvider>
40+
</KeysProvider>
41+
</FilesFlatProvider>
42+
</FilesDirectoryProvider>
43+
</UploadsProvider>
44+
</UploadsManagerProvider>
4245
</FilesManagerProvider>
4346
</HostsProvider>
4447
</ContractsProvider>

apps/renterd/contexts/filesManager/dataset.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import { useFilesManager } from '.'
1414
import { useEffect } from 'react'
1515
import { Maybe } from '@siafoundation/types'
16+
import { useUploadsManager } from '../uploadsManager'
1617

1718
type Props = {
1819
id: string
@@ -27,13 +28,13 @@ export function useDataset({ id, objects }: Props) {
2728
activeBucket,
2829
activeBucketName,
2930
fileNamePrefixFilter,
30-
uploadsList,
3131
sortDirection,
3232
sortField,
3333
activeDirectoryPath,
3434
buckets,
3535
setActiveDirectory,
3636
} = useFilesManager()
37+
const { uploadsList } = useUploadsManager()
3738
const { dataset: allContracts } = useContracts()
3839
const response = useSWR<Maybe<ObjectData[]>>(
3940
objects.isValidating || buckets.isValidating

apps/renterd/contexts/filesManager/index.tsx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import {
1818
getKeyFromPath,
1919
pathSegmentsToPath,
2020
} from '../../lib/paths'
21-
import { useUploads } from './uploads'
2221
import { useDownloads } from './downloads'
2322
import { useBuckets } from '@siafoundation/renterd-react'
2423
import { routes } from '../../config/routes'
@@ -94,9 +93,6 @@ function useFilesManagerMain() {
9493
[router, activeDirectory]
9594
)
9695

97-
const { uploadFiles, uploadsMap, uploadsList } = useUploads({
98-
activeDirectoryPath,
99-
})
10096
const { downloadFiles, downloadsList, getFileUrl, downloadCancel } =
10197
useDownloads()
10298

@@ -223,9 +219,6 @@ function useFilesManagerMain() {
223219
setActiveDirectoryAndFileNamePrefix,
224220
activeDirectoryPath,
225221
navigateToModeSpecificFiltering,
226-
uploadFiles,
227-
uploadsMap,
228-
uploadsList,
229222
downloadFiles,
230223
downloadsList,
231224
downloadCancel,

apps/renterd/contexts/filesManager/types.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Bucket } from '@siafoundation/renterd-types'
22
import { FullPath } from '../../lib/paths'
33
import { MultiSelect, TableColumn } from '@siafoundation/design-system'
4-
import { MultipartUpload } from '../../lib/multipartUpload'
54
import { MouseEvent } from 'react'
65

76
export type ObjectType = 'bucket' | 'directory' | 'file'
@@ -81,17 +80,3 @@ export const sortOptions: { id: SortField; label: string; category: string }[] =
8180
]
8281

8382
export type ExplorerMode = 'directory' | 'flat'
84-
85-
export type UploadStatus = 'queued' | 'uploading' | 'processing'
86-
87-
export type ObjectUploadData = ObjectData & {
88-
multipartId?: string
89-
multipartUpload?: MultipartUpload
90-
uploadStatus: UploadStatus
91-
uploadAbort?: () => Promise<void>
92-
uploadFile?: File
93-
remote?: boolean
94-
createdAt: string
95-
}
96-
97-
export type UploadsMap = Record<string, ObjectUploadData>

apps/renterd/contexts/uploads/useLocalUploads.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import {
66
import { useMemo } from 'react'
77
import { columnsDefaultVisible, defaultSortField, sortOptions } from './types'
88
import { columns } from './columns'
9-
import { useFilesManager } from '../filesManager'
10-
import { ObjectUploadData } from '../filesManager/types'
9+
import { ObjectUploadData } from '../uploadsManager/types'
1110
import { Maybe } from '@siafoundation/types'
11+
import { useUploadsManager } from '../uploadsManager'
1212

1313
const defaultLimit = 500
1414

1515
export function useLocalUploads() {
16-
const { uploadsList } = useFilesManager()
16+
const { uploadsList } = useUploadsManager()
1717
const { limit, offset } = usePaginationOffset(defaultLimit)
1818

1919
const datasetPage = useMemo<Maybe<ObjectUploadData[]>>(() => {

apps/renterd/contexts/uploads/useRemoteUploads.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@ import { columnsDefaultVisible, defaultSortField, sortOptions } from './types'
1212
import { columns } from './columns'
1313
import { join, getFilename } from '../../lib/paths'
1414
import { useFilesManager } from '../filesManager'
15-
import { ObjectUploadData } from '../filesManager/types'
15+
import { ObjectUploadData } from '../uploadsManager/types'
1616
import { MultipartUploadListUploadsPayload } from '@siafoundation/renterd-types'
1717
import { maybeFromNullishArrayResponse } from '@siafoundation/react-core'
1818
import { Maybe, Nullable } from '@siafoundation/types'
19-
import { getUploadId } from '../filesManager/uploads'
19+
import { getUploadId, useUploadsManager } from '../uploadsManager'
2020

2121
const defaultLimit = 500
2222

2323
export function useRemoteUploads() {
24-
const { uploadsMap, activeBucket } = useFilesManager()
24+
const { activeBucket } = useFilesManager()
25+
const { uploadsMap } = useUploadsManager()
2526
const { limit, marker } = usePaginationMarker(defaultLimit)
2627
const markers = useMarkersFromParam(marker)
2728

apps/renterd/contexts/filesManager/uploads.tsx renamed to apps/renterd/contexts/uploadsManager/index.tsx

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use client'
2+
13
import { triggerErrorToast } from '@siafoundation/design-system'
24
import {
35
throttle,
@@ -14,7 +16,14 @@ import {
1416
} from '@siafoundation/renterd-react'
1517
import { Bucket, busObjectsRoute } from '@siafoundation/renterd-types'
1618
import { MiBToBytes, minutesInMilliseconds } from '@siafoundation/units'
17-
import { useCallback, useEffect, useMemo, useRef } from 'react'
19+
import {
20+
createContext,
21+
useCallback,
22+
useContext,
23+
useEffect,
24+
useMemo,
25+
useRef,
26+
} from 'react'
1827
import { MultipartUpload } from '../../lib/multipartUpload'
1928
import {
2029
FullPath,
@@ -24,18 +33,16 @@ import {
2433
} from '../../lib/paths'
2534
import { ObjectUploadData, UploadsMap } from './types'
2635
import { useWarnActiveUploadsOnClose } from './useWarnActiveUploadsOnClose'
36+
import { useFilesManager } from '../filesManager'
2737

2838
const maxConcurrentUploads = 5
2939
const maxConcurrentPartsPerUpload = 5
3040
const getMultipartUploadPartSize = (minShards: number) =>
3141
MiBToBytes(4).times(minShards)
3242
const checkAndStartUploadsInterval = 500
3343

34-
type Props = {
35-
activeDirectoryPath: string
36-
}
37-
38-
export function useUploads({ activeDirectoryPath }: Props) {
44+
function useUploadsManagerMain() {
45+
const { activeDirectoryPath } = useFilesManager()
3946
const buckets = useBuckets()
4047
const mutate = useMutate()
4148
const workerUploadPart = useMultipartUploadPart()
@@ -348,6 +355,24 @@ export function useUploads({ activeDirectoryPath }: Props) {
348355
}
349356
}
350357

358+
export type UploadsManagerState = ReturnType<typeof useUploadsManagerMain>
359+
360+
const UploadsManagerContext = createContext({} as UploadsManagerState)
361+
export const useUploadsManager = () => useContext(UploadsManagerContext)
362+
363+
type Props = {
364+
children: React.ReactNode
365+
}
366+
367+
export function UploadsManagerProvider({ children }: Props) {
368+
const state = useUploadsManagerMain()
369+
return (
370+
<UploadsManagerContext.Provider value={state}>
371+
{children}
372+
</UploadsManagerContext.Provider>
373+
)
374+
}
375+
351376
export function getUploadId(path: FullPath) {
352377
return `u/${path}`
353378
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { ObjectData } from '../filesManager/types'
2+
import { MultipartUpload } from '../../lib/multipartUpload'
3+
4+
export type UploadStatus = 'queued' | 'uploading' | 'processing'
5+
6+
export type ObjectUploadData = ObjectData & {
7+
multipartId?: string
8+
multipartUpload?: MultipartUpload
9+
uploadStatus: UploadStatus
10+
uploadAbort?: () => Promise<void>
11+
uploadFile?: File
12+
remote?: boolean
13+
createdAt: string
14+
}
15+
16+
export type UploadsMap = Record<string, ObjectUploadData>

0 commit comments

Comments
 (0)