Skip to content

Commit

Permalink
merge develop into 434
Browse files Browse the repository at this point in the history
  • Loading branch information
g-saracca committed Sep 4, 2024
2 parents a6d669e + 08511d7 commit 43aad32
Show file tree
Hide file tree
Showing 49 changed files with 909 additions and 237 deletions.
4 changes: 2 additions & 2 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
> All contributions to this project will be released under the Apache License, Version 2.0.
> By submitting a pull request or filing a bug, issue, or
> feature request, you are agreeing to comply with this waiver of copyright interest.
> Details can be found in our [LICENSE](LICENSE).
> Details can be found in our [LICENSE](/LICENSE).
Thank you for your interest in contributing to Dataverse Frontend! We are open to contributions from everyone. You don't
need permission to participate. Just jump in. If you have questions, please reach out using one or more of the channels
Expand Down Expand Up @@ -81,7 +81,7 @@ guidelines to help:
### How to start

After you’ve forked the Dataverse Frontend repository, you should follow the Getting Started instructions in the
[Developer Guide](DEVELOPER_GUIDE.md) to get your local environment up and running.
[Developer Guide](/DEVELOPER_GUIDE.md) to get your local environment up and running.

### GitHub reviews & assignments

Expand Down
30 changes: 26 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
},
"dependencies": {
"@faker-js/faker": "7.6.0",
"@iqss/dataverse-client-javascript": "2.0.0-pr169.aa49f06",
"@iqss/dataverse-client-javascript": "2.0.0-pr187.f29c0e6",
"@iqss/dataverse-design-system": "*",
"@istanbuljs/nyc-config-typescript": "1.0.2",
"@tanstack/react-table": "8.9.2",
Expand Down Expand Up @@ -44,7 +44,9 @@
"typescript": "4.9.5",
"use-deep-compare": "1.2.1",
"vite-plugin-istanbul": "4.0.1",
"web-vitals": "2.1.4"
"web-vitals": "2.1.4",
"js-md5": "0.8.3",
"async-mutex": "0.5.0"
},
"scripts": {
"start": "vite --base=/spa",
Expand Down
11 changes: 11 additions & 0 deletions src/collection/domain/models/CollectionPreview.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export interface CollectionPreview {
id: string
name: string
isReleased: boolean
releaseOrCreateDate: Date
parentCollectionId?: string
parentCollectionName?: string
description?: string
affiliation?: string
thumbnail?: string
}
10 changes: 6 additions & 4 deletions src/dataset/domain/models/Dataset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,10 +217,6 @@ export enum DatasetNonNumericVersion {
export enum DatasetNonNumericVersionSearchParam {
DRAFT = 'DRAFT'
}
// TODO: Maybe add this to some routing related folder or file
export enum QueryParamsKeys {
VERSION = 'version'
}

export class DatasetVersionNumber {
constructor(public readonly majorNumber?: number, public readonly minorNumber?: number) {}
Expand All @@ -231,6 +227,12 @@ export class DatasetVersionNumber {
}
return `${this.majorNumber}.${this.minorNumber}`
}
toSearchParam(): string {
if (this.majorNumber === undefined || this.minorNumber === undefined) {
return DatasetNonNumericVersionSearchParam.DRAFT
}
return this.toString()
}
}

export class DatasetVersion {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,15 +132,11 @@ export class DatasetJSDataverseRepository implements DatasetRepository {
.execute(persistentId, version, includeDeaccessioned)
.then((jsDataset) => this.fetchDatasetDetails(jsDataset, version))
.then((datasetDetails) => {
if (datasetDetails.jsDatasetPermissions.canEditDataset) {
return this.fetchDownloadSizes(persistentId, version).then((downloadSizes) => {
datasetDetails.jsDatasetFilesTotalOriginalDownloadSize = downloadSizes[0]
datasetDetails.jsDatasetFilesTotalArchivalDownloadSize = downloadSizes[1]
return datasetDetails
})
} else {
return this.fetchDownloadSizes(persistentId, version).then((downloadSizes) => {
datasetDetails.jsDatasetFilesTotalOriginalDownloadSize = downloadSizes[0]
datasetDetails.jsDatasetFilesTotalArchivalDownloadSize = downloadSizes[1]
return datasetDetails
}
})
})
.then((datasetDetails) => {
return JSDatasetMapper.toDataset(
Expand Down
6 changes: 5 additions & 1 deletion src/files/domain/models/FilePreview.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { FileMetadata } from './FileMetadata'
import { FileIngest } from './FileIngest'
import { FileAccess } from './FileAccess'
import { DatasetPublishingStatus } from '../../../dataset/domain/models/Dataset'
import {
DatasetPublishingStatus,
DatasetVersionNumber
} from '../../../dataset/domain/models/Dataset'
import { FilePermissions } from './FilePermissions'

export interface FilePreview {
Expand All @@ -12,6 +15,7 @@ export interface FilePreview {
ingest: FileIngest
metadata: FileMetadata
permissions: FilePermissions
datasetVersionNumber?: DatasetVersionNumber
releaseOrCreateDate?: Date
someDatasetVersionHasBeenReleased?: boolean
datasetPersistentId?: string
Expand Down
30 changes: 30 additions & 0 deletions src/files/domain/models/FileUploadState.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'
import { FileSize, FileSizeUnit } from './FileMetadata'
import { UploadedFileDTOMapper } from '../../infrastructure/mappers/UploadedFileDTOMapper'

export interface FileUploadState {
progress: number
Expand All @@ -17,6 +19,7 @@ export interface FileUploadState {
description?: string
tags: string[]
restricted: boolean
checksumValue?: string
}

export interface FileUploaderState {
Expand Down Expand Up @@ -94,6 +97,18 @@ export class FileUploadTools {
return { state: oldState.state, uploaded: this.toUploaded(oldState.state) }
}

static checksum(
file: File,
checksumValue: string,
oldState: FileUploaderState
): FileUploaderState {
const fileUploadState = oldState.state.get(this.key(file))
if (fileUploadState) {
fileUploadState.checksumValue = checksumValue
}
return { state: oldState.state, uploaded: this.toUploaded(oldState.state) }
}

static failed(file: File, oldState: FileUploaderState): FileUploaderState {
const fileUploadState = oldState.state.get(this.key(file))
if (fileUploadState) {
Expand Down Expand Up @@ -127,6 +142,21 @@ export class FileUploadTools {
return { state: oldState.state, uploaded: this.toUploaded(oldState.state) }
}

static mapToUploadedFilesDTOs(state: FileUploadState[]): UploadedFileDTO[] {
return state.map((uploadedFile) =>
UploadedFileDTOMapper.toUploadedFileDTO(
uploadedFile.fileName,
uploadedFile.description,
uploadedFile.fileDir,
uploadedFile.tags,
uploadedFile.restricted,
uploadedFile.storageId as string,
uploadedFile.checksumValue as string,
uploadedFile.fileType === '' ? 'application/octet-stream' : uploadedFile.fileType // some browsers (e.g., chromium for .java files) fail to detect the mime type for some files and leave the fileType as an empty string, we use the default value 'application/octet-stream' in that case
)
)
}

private static toNewState(
file: File,
oldState: FileUploaderState
Expand Down
9 changes: 2 additions & 7 deletions src/files/domain/repositories/FileRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { FilePaginationInfo } from '../models/FilePaginationInfo'
import { FilePreview } from '../models/FilePreview'
import { FilesWithCount } from '../models/FilesWithCount'
import { FileHolder } from '../models/FileHolder'
import { FileUploadState } from '../models/FileUploadState'
import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'

export interface FileRepository {
getAllByDatasetPersistentId: (
Expand Down Expand Up @@ -42,10 +42,5 @@ export interface FileRepository {
abortController: AbortController,
storageIdSetter: (storageId: string) => void
) => Promise<void>
addUploadedFiles: (datasetId: number | string, files: FileUploadState[]) => Promise<void>
addUploadedFile: (
datasetId: number | string,
file: FileHolder,
storageId: string
) => Promise<void>
addUploadedFiles: (datasetId: number | string, files: UploadedFileDTO[]) => Promise<void>
}
21 changes: 3 additions & 18 deletions src/files/domain/useCases/addUploadedFiles.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,16 @@
import { FileUploadState } from '../models/FileUploadState'
import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'
import { FileRepository } from '../repositories/FileRepository'

export function addUploadedFiles(
fileRepository: FileRepository,
datasetId: number | string,
files: FileUploadState[],
files: UploadedFileDTO[],
done: () => void
): void {
fileRepository
.addUploadedFiles(datasetId, files)
.then(done)
.catch((error: Error) => {
throw new Error(error.message)
})
.finally(done)
}

export function addUploadedFile(
fileRepository: FileRepository,
datasetId: number | string,
file: File,
storageId: string,
done: () => void
): void {
fileRepository
.addUploadedFile(datasetId, { file: file }, storageId)
.catch((error: Error) => {
throw new Error(error.message)
})
.finally(done)
}
13 changes: 4 additions & 9 deletions src/files/infrastructure/FileJSDataverseRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import {
getFileDownloadCount,
getFileUserPermissions,
uploadFile as jsUploadFile,
addUploadedFilesToDataset,
UploadedFileDTO,
ReadError
} from '@iqss/dataverse-client-javascript'
import { FileCriteria } from '../domain/models/FileCriteria'
Expand All @@ -31,7 +33,6 @@ import { FilePermissions } from '../domain/models/FilePermissions'
import { JSFilePermissionsMapper } from './mappers/JSFilePermissionsMapper'
import { FilesWithCount } from '../domain/models/FilesWithCount'
import { FileHolder } from '../domain/models/FileHolder'
import { FileUploadState } from '../domain/models/FileUploadState'

const includeDeaccessioned = true

Expand Down Expand Up @@ -300,13 +301,7 @@ export class FileJSDataverseRepository implements FileRepository {
})
}

addUploadedFiles(_datasetId: number | string, _files: FileUploadState[]): Promise<void> {
// TODO: not yet implemented
return new Promise<void>(() => {})
}

addUploadedFile(_datasetId: number | string, _file: FileHolder): Promise<void> {
return new Promise<void>(() => {})
// return addUploadedFilesToDataset.execute(datasetId, file.file)
addUploadedFiles(datasetId: number | string, uploadedFiles: UploadedFileDTO[]): Promise<void> {
return addUploadedFilesToDataset.execute(datasetId, uploadedFiles)
}
}
1 change: 1 addition & 0 deletions src/files/infrastructure/mappers/JSFileMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export class JSFileMapper {
id: this.toFileId(jsFile.id),
name: this.toFileName(jsFile.name),
datasetPublishingStatus: datasetVersion.publishingStatus,
datasetVersionNumber: datasetVersion.number,
access: JSFileAccessMapper.toFileAccess(jsFile.restricted),
ingest: JSFileIngestMapper.toFileIngest(),
metadata: JSFileMetadataMapper.toFileMetadata(jsFile, downloadsCount, thumbnail, tabularData),
Expand Down
26 changes: 26 additions & 0 deletions src/files/infrastructure/mappers/UploadedFileDTOMapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'

export class UploadedFileDTOMapper {
static toUploadedFileDTO(
fileName: string,
description: string | undefined,
fileDir: string,
tags: string[],
restricted: boolean,
storageId: string,
checksumValue: string,
fileType: string
): UploadedFileDTO {
return {
fileName: fileName,
description: description,
directoryLabel: fileDir,
categories: tags,
restrict: restricted,
storageId: storageId,
checksumValue: checksumValue,
checksumType: 'md5',
mimeType: fileType
}
}
}
5 changes: 5 additions & 0 deletions src/sections/Route.enum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,8 @@ export const RouteWithParams = {
CREATE_COLLECTION: (ownerCollectionId?: string) =>
`/collections/${ownerCollectionId ?? ROOT_COLLECTION_ALIAS}/create`
}

export enum QueryParamKey {
VERSION = 'version',
PERSISTENT_ID = 'persistentId'
}
2 changes: 1 addition & 1 deletion src/sections/collection/datasets-list/DatasetsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export function DatasetsList({ datasetRepository, page, collectionId }: Datasets
<PaginationResultsInfo paginationInfo={paginationInfo} />
</div>
{datasets.map((dataset) => (
<DatasetCard dataset={dataset} key={dataset.persistentId} />
<DatasetCard dataset={dataset} key={`${dataset.persistentId}-${dataset.version.id}`} />
))}
<PaginationControls
onPaginationInfoChange={setPaginationInfo}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ export function DatasetsListWithInfiniteScroll({
<PaginationResultsInfo paginationInfo={paginationInfo} accumulated={accumulatedCount} />
</div>
{accumulatedDatasets.map((dataset) => (
<DatasetCard dataset={dataset} key={dataset.persistentId} />
<DatasetCard dataset={dataset} key={`${dataset.persistentId}-${dataset.version.id}`} />
))}
</>
)}
Expand Down
Loading

0 comments on commit 43aad32

Please sign in to comment.