Skip to content

Commit 0510baa

Browse files
committed
feat(getFilesCountInfo): implement use case for getFilesCountInfo
1 parent 974f6e8 commit 0510baa

14 files changed

Lines changed: 172 additions & 45 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { File } from '../models/File'
22
import { FileCriteria } from '../models/FileCriteria'
3+
import { FilesCountInfo } from '../models/FilesCountInfo'
34

45
export interface FileRepository {
56
getAllByDatasetPersistentId: (
67
datasetPersistentId: string,
78
version?: string,
89
criteria?: FileCriteria
910
) => Promise<File[]>
11+
getCountInfoByDatasetPersistentId: (
12+
datasetPersistentId: string,
13+
version?: string
14+
) => Promise<FilesCountInfo>
1015
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { FileRepository } from '../repositories/FileRepository'
2+
import { FileVersionNotNumber } from '../models/File'
3+
import { FilesCountInfo } from '../models/FilesCountInfo'
4+
5+
export async function getFilesCountInfoByDatasetPersistentId(
6+
fileRepository: FileRepository,
7+
persistentId: string,
8+
version: string = FileVersionNotNumber.LATEST
9+
): Promise<FilesCountInfo> {
10+
return fileRepository
11+
.getCountInfoByDatasetPersistentId(persistentId, version)
12+
.catch((error: Error) => {
13+
throw new Error(error.message)
14+
})
15+
}

src/files/infrastructure/FileJSDataverseRepository.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { FileRepository } from '../domain/repositories/FileRepository'
22
import { File } from '../domain/models/File'
33
import { FilesMockData } from '../../stories/files/FileMockData'
4+
import { FilesCountInfo } from '../domain/models/FilesCountInfo'
5+
import { FilesCountInfoMother } from '../../../tests/component/files/domain/models/FilesCountInfoMother'
46

57
export class FileJSDataverseRepository implements FileRepository {
68
// eslint-disable-next-line unused-imports/no-unused-vars
@@ -12,4 +14,16 @@ export class FileJSDataverseRepository implements FileRepository {
1214
}, 1000)
1315
})
1416
}
17+
// eslint-disable-next-line unused-imports/no-unused-vars
18+
getCountInfoByDatasetPersistentId(
19+
persistentId: string,
20+
version?: string
21+
): Promise<FilesCountInfo> {
22+
// TODO - implement using js-dataverse
23+
return new Promise((resolve) => {
24+
setTimeout(() => {
25+
resolve(FilesCountInfoMother.create())
26+
}, 1000)
27+
})
28+
}
1529
}

src/sections/dataset/dataset-files/DatasetFiles.tsx

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import { FileRepository } from '../../../files/domain/repositories/FileRepositor
22
import { useState } from 'react'
33
import { FilesTable } from './files-table/FilesTable'
44
import { FileCriteriaControls } from './file-criteria-controls/FileCriteriaControls'
5-
import { FileAccessOption, FileCriteria, FileTag } from '../../../files/domain/models/FileCriteria'
6-
import { FilesCountInfo } from '../../../files/domain/models/FilesCountInfo'
7-
import { FileType } from '../../../files/domain/models/File'
5+
import { FileCriteria } from '../../../files/domain/models/FileCriteria'
86
import { useFiles } from './useFiles'
97

108
interface DatasetFilesProps {
@@ -13,35 +11,13 @@ interface DatasetFilesProps {
1311
datasetVersion?: string
1412
}
1513

16-
const filesCountInfo: FilesCountInfo = {
17-
total: 222,
18-
perFileType: [
19-
{
20-
type: new FileType('text'),
21-
count: 5
22-
},
23-
{
24-
type: new FileType('image'),
25-
count: 485
26-
}
27-
],
28-
perAccess: [
29-
{ access: FileAccessOption.PUBLIC, count: 222 },
30-
{ access: FileAccessOption.RESTRICTED, count: 10 }
31-
],
32-
perFileTag: [
33-
{ tag: new FileTag('document'), count: 5 },
34-
{ tag: new FileTag('code'), count: 10 }
35-
]
36-
} // TODO (filesCountInfo) - Get from use case, pending to be discussed if this is going to have its own use case or not
37-
3814
export function DatasetFiles({
3915
filesRepository,
4016
datasetPersistentId,
4117
datasetVersion
4218
}: DatasetFilesProps) {
4319
const [criteria, setCriteria] = useState<FileCriteria>(new FileCriteria())
44-
const { files, isLoading } = useFiles(
20+
const { files, isLoading, filesCountInfo } = useFiles(
4521
filesRepository,
4622
datasetPersistentId,
4723
datasetVersion,

src/sections/dataset/dataset-files/useFiles.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { FileRepository } from '../../../files/domain/repositories/FileRepositor
33
import { File } from '../../../files/domain/models/File'
44
import { getFilesByDatasetPersistentId } from '../../../files/domain/useCases/getFilesByDatasetPersistentId'
55
import { FileCriteria } from '../../../files/domain/models/FileCriteria'
6+
import { FilesCountInfo } from '../../../files/domain/models/FilesCountInfo'
7+
import { getFilesCountInfoByDatasetPersistentId } from '../../../files/domain/useCases/getFilesCountInfoByDatasetPersistentId'
68

79
export function useFiles(
810
filesRepository: FileRepository,
@@ -12,6 +14,12 @@ export function useFiles(
1214
) {
1315
const [files, setFiles] = useState<File[]>([])
1416
const [isLoading, setIsLoading] = useState<boolean>(true)
17+
const [filesCountInfo, setFilesCountInfo] = useState<FilesCountInfo>({
18+
total: 0,
19+
perFileType: [],
20+
perAccess: [],
21+
perFileTag: []
22+
})
1523

1624
useEffect(() => {
1725
setIsLoading(true)
@@ -24,10 +32,21 @@ export function useFiles(
2432
console.error('There was an error getting the files', error)
2533
setIsLoading(false)
2634
})
27-
}, [filesRepository, datasetPersistentId, criteria])
35+
}, [filesRepository, datasetPersistentId, datasetVersion, criteria])
36+
37+
useEffect(() => {
38+
getFilesCountInfoByDatasetPersistentId(filesRepository, datasetPersistentId, datasetVersion)
39+
.then((filesCountInfo: FilesCountInfo) => {
40+
setFilesCountInfo(filesCountInfo)
41+
})
42+
.catch((error) => {
43+
console.error('There was an error getting the files count info', error)
44+
})
45+
}, [filesRepository, datasetPersistentId, datasetVersion])
2846

2947
return {
3048
files,
31-
isLoading
49+
isLoading,
50+
filesCountInfo
3251
}
3352
}

src/stories/dataset/dataset-files/DatasetFiles.stories.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { DatasetMockData } from '../DatasetMockData'
55
import { FileMockRepository } from '../../files/FileMockRepository'
66
import { FileMockLoadingRepository } from '../../files/FileMockLoadingRepository'
77
import { FileMockNoDataRepository } from '../../files/FileMockNoDataRepository'
8+
import { FileMockNoFiltersRepository } from '../../files/FileMockNoFiltersRepository'
89

910
const meta: Meta<typeof DatasetFiles> = {
1011
title: 'Sections/Dataset Page/DatasetFiles',
@@ -47,13 +48,12 @@ export const NoFiles: Story = {
4748
)
4849
}
4950

50-
// TODO (filesCountInfo) - Implement use case for no filters, pending to be discussed
51-
// export const NoFilters: Story = {
52-
// render: () => (
53-
// <DatasetFiles
54-
// filesRepository={new FileMockNoFiltersRepository()}
55-
// datasetPersistentId={testDataset.persistentId}
56-
// datasetVersion={testDataset.version.toString()}
57-
// />
58-
// )
59-
// }
51+
export const NoFilters: Story = {
52+
render: () => (
53+
<DatasetFiles
54+
filesRepository={new FileMockNoFiltersRepository()}
55+
datasetPersistentId={testDataset.persistentId}
56+
datasetVersion={testDataset.version.toString()}
57+
/>
58+
)
59+
}

src/stories/files/FileMockLoadingRepository.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { FileRepository } from '../../files/domain/repositories/FileRepository'
22
import { File } from '../../files/domain/models/File'
3+
import { FilesCountInfo } from '../../files/domain/models/FilesCountInfo'
34

45
export class FileMockLoadingRepository implements FileRepository {
56
// eslint-disable-next-line unused-imports/no-unused-vars
@@ -10,4 +11,16 @@ export class FileMockLoadingRepository implements FileRepository {
1011
}, 0)
1112
})
1213
}
14+
// eslint-disable-next-line unused-imports/no-unused-vars
15+
getCountInfoByDatasetPersistentId(
16+
persistentId: string,
17+
version?: string
18+
): Promise<FilesCountInfo> {
19+
// TODO - implement using js-dataverse
20+
return new Promise((resolve) => {
21+
setTimeout(() => {
22+
// Do nothing
23+
}, 1000)
24+
})
25+
}
1326
}

src/stories/files/FileMockNoDataRepository.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { FileRepository } from '../../files/domain/repositories/FileRepository'
22
import { File } from '../../files/domain/models/File'
3+
import { FilesCountInfo } from '../../files/domain/models/FilesCountInfo'
4+
import { FilesCountInfoMother } from '../../../tests/component/files/domain/models/FilesCountInfoMother'
35

46
export class FileMockNoDataRepository implements FileRepository {
57
// eslint-disable-next-line unused-imports/no-unused-vars
@@ -10,4 +12,16 @@ export class FileMockNoDataRepository implements FileRepository {
1012
}, 1000)
1113
})
1214
}
15+
// eslint-disable-next-line unused-imports/no-unused-vars
16+
getCountInfoByDatasetPersistentId(
17+
persistentId: string,
18+
version?: string
19+
): Promise<FilesCountInfo> {
20+
// TODO - implement using js-dataverse
21+
return new Promise((resolve) => {
22+
setTimeout(() => {
23+
resolve(FilesCountInfoMother.createEmpty())
24+
}, 1000)
25+
})
26+
}
1327
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { FileRepository } from '../../files/domain/repositories/FileRepository'
2+
import { File } from '../../files/domain/models/File'
3+
import { FilesCountInfo } from '../../files/domain/models/FilesCountInfo'
4+
import { FilesCountInfoMother } from '../../../tests/component/files/domain/models/FilesCountInfoMother'
5+
import { FilesMockData } from './FileMockData'
6+
7+
export class FileMockNoFiltersRepository implements FileRepository {
8+
// eslint-disable-next-line unused-imports/no-unused-vars
9+
getAllByDatasetPersistentId(persistentId: string, version?: string): Promise<File[]> {
10+
return new Promise((resolve) => {
11+
setTimeout(() => {
12+
resolve(FilesMockData())
13+
}, 1000)
14+
})
15+
}
16+
// eslint-disable-next-line unused-imports/no-unused-vars
17+
getCountInfoByDatasetPersistentId(
18+
persistentId: string,
19+
version?: string
20+
): Promise<FilesCountInfo> {
21+
// TODO - implement using js-dataverse
22+
return new Promise((resolve) => {
23+
setTimeout(() => {
24+
resolve(FilesCountInfoMother.createOnlyTotal())
25+
}, 1000)
26+
})
27+
}
28+
}

src/stories/files/FileMockRepository.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { FileRepository } from '../../files/domain/repositories/FileRepository'
22
import { FilesMockData } from './FileMockData'
33
import { File } from '../../files/domain/models/File'
4+
import { FilesCountInfo } from '../../files/domain/models/FilesCountInfo'
5+
import { FilesCountInfoMother } from '../../../tests/component/files/domain/models/FilesCountInfoMother'
46

57
export class FileMockRepository implements FileRepository {
68
// eslint-disable-next-line unused-imports/no-unused-vars
@@ -11,4 +13,16 @@ export class FileMockRepository implements FileRepository {
1113
}, 1000)
1214
})
1315
}
16+
// eslint-disable-next-line unused-imports/no-unused-vars
17+
getCountInfoByDatasetPersistentId(
18+
persistentId: string,
19+
version?: string
20+
): Promise<FilesCountInfo> {
21+
// TODO - implement using js-dataverse
22+
return new Promise((resolve) => {
23+
setTimeout(() => {
24+
resolve(FilesCountInfoMother.create())
25+
}, 1000)
26+
})
27+
}
1428
}

0 commit comments

Comments
 (0)