|
1 | | -import { useCallback, useEffect, useState } from 'react' |
| 1 | +import { useCallback, useEffect, useMemo, useState } from 'react' |
2 | 2 | import { ReadError } from '@iqss/dataverse-client-javascript' |
3 | 3 | import { FileSize, FileSizeUnit } from '@/files/domain/models/FileMetadata' |
4 | 4 | import { getDatasetUploadLimits } from '@/dataset/domain/useCases/getDatasetUploadLimits' |
5 | 5 | import { DatasetUploadLimits } from '@/dataset/domain/models/DatasetUploadLimits' |
6 | | -import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository' |
| 6 | +import { DatasetJSDataverseRepository } from '@/dataset/infrastructure/repositories/DatasetJSDataverseRepository' |
7 | 7 | import { JSDataverseReadErrorHandler } from '@/shared/helpers/JSDataverseReadErrorHandler' |
8 | 8 |
|
9 | 9 | interface UploadLimit { |
10 | 10 | maxFilesAvailableToUploadFormatted?: string |
11 | 11 | storageQuotaRemainingFormatted?: string |
12 | 12 | } |
13 | 13 |
|
| 14 | +const defaultDatasetRepository = new DatasetJSDataverseRepository() |
| 15 | + |
14 | 16 | export function useUploadLimit( |
15 | 17 | datasetPersistentId: string, |
16 | | - datasetRepository: DatasetRepository, |
17 | | - fetchUploadLimits: ( |
18 | | - datasetId: string | number, |
19 | | - datasetRepository: DatasetRepository |
20 | | - ) => Promise<DatasetUploadLimits> = getDatasetUploadLimits |
| 18 | + fetchUploadLimits?: (datasetId: string | number) => Promise<DatasetUploadLimits> |
21 | 19 | ) { |
22 | 20 | const [uploadLimit, setUploadLimit] = useState<UploadLimit>({}) |
23 | 21 | const [isLoadingUploadLimits, setIsLoadingUploadLimits] = useState<boolean>(true) |
24 | 22 | const [errorUploadLimits, setErrorUploadLimits] = useState<string | null>(null) |
25 | 23 |
|
| 24 | + const fetcher = useMemo<(datasetId: string | number) => Promise<DatasetUploadLimits>>( |
| 25 | + () => |
| 26 | + fetchUploadLimits ?? |
| 27 | + ((datasetId) => getDatasetUploadLimits(datasetId, defaultDatasetRepository)), |
| 28 | + [fetchUploadLimits] |
| 29 | + ) |
| 30 | + |
26 | 31 | const fetchUploadLimitsCallback = useCallback(async () => { |
27 | 32 | setIsLoadingUploadLimits(true) |
28 | 33 | setErrorUploadLimits(null) |
29 | 34 |
|
30 | 35 | try { |
31 | | - const limits = await fetchUploadLimits(datasetPersistentId, datasetRepository) |
| 36 | + const limits = await fetcher(datasetPersistentId) |
32 | 37 |
|
33 | 38 | if (Object.keys(limits).length === 0) { |
34 | 39 | setUploadLimit({}) |
@@ -59,7 +64,7 @@ export function useUploadLimit( |
59 | 64 | } finally { |
60 | 65 | setIsLoadingUploadLimits(false) |
61 | 66 | } |
62 | | - }, [datasetPersistentId, datasetRepository, fetchUploadLimits]) |
| 67 | + }, [datasetPersistentId, fetcher]) |
63 | 68 |
|
64 | 69 | useEffect(() => { |
65 | 70 | void fetchUploadLimitsCallback() |
|
0 commit comments