Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

# production
/dist
/dist-uploader

# storybook
/storybook-static
Expand Down
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Added

- Added the value entered by the user in the error messages for metadata field validation errors in EMAIL and URL type fields. For example, instead of showing “Point of Contact E-mail is not a valid email address.“, we now show “Point of Contact E-mail foo is not a valid email address.”
- DVWebloader V2: A standalone file uploader build that reuses React file upload components, supporting S3 direct uploads with configurable tagging.
- Shared file upload hooks (`useFileUploadState`, `useFileUploadOperations`) for better code reuse between the main SPA and standalone uploader.
- Added the value entered by the user in the error messages for metadata field validation errors in EMAIL and URL type fields. For example, instead of showing "Point of Contact E-mail is not a valid email address.", we now show "Point of Contact E-mail foo is not a valid email address."
- Contact Owner button in File Page.
- Share button in File Page.
- Link Collection and Link Dataset features.
Expand Down
92 changes: 45 additions & 47 deletions package-lock.json

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

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@dnd-kit/sortable": "8.0.0",
"@dnd-kit/utilities": "3.2.2",
"@faker-js/faker": "7.6.0",
"@iqss/dataverse-client-javascript": "2.0.0-alpha.79",
"@iqss/dataverse-client-javascript": "file:../dataverse-client-javascript",
"@iqss/dataverse-design-system": "*",
"@istanbuljs/nyc-config-typescript": "1.0.2",
"@tanstack/react-table": "8.9.2",
Expand Down Expand Up @@ -64,6 +64,7 @@
"scripts": {
"start": "vite --base=/spa",
"build": "tsc && vite build",
"build-uploader": "vite build --config vite.config.uploader.ts && cp -r public/locales dist-uploader/ && cp src/standalone-uploader/dvwebloaderV2.html src/standalone-uploader/embeddedDvWebloader.html dist-uploader/",
"build-keycloak-theme": "npm run build && keycloakify build",
"preview": "vite preview",
"lint": "npm run typecheck && npm run lint:eslint && npm run lint:stylelint && npm run lint:prettier",
Expand Down
1 change: 1 addition & 0 deletions public/locales/en/shared.json
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,7 @@
"accordionTitle": "Upload with HTTP via your browser",
"selectFileSingle": "Select file to add",
"selectFileMultiple": "Select files to add",
"selectFolder": "Select folder to add",
"dragDropSingle": "Drag and drop file here.",
"dragDropMultiple": "Drag and drop files and/or directories here.",
"cancelUpload": "Cancel upload",
Expand Down
1 change: 1 addition & 0 deletions src/files/domain/models/FixityAlgorithm.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export enum FixityAlgorithm {
NONE = 'NONE',
MD5 = 'MD5',
SHA1 = 'SHA-1',
SHA256 = 'SHA-256',
Expand Down
8 changes: 7 additions & 1 deletion src/files/domain/useCases/addUploadedFiles.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'
import { FileRepository } from '../repositories/FileRepository'

/**
* Minimal repository type for addUploadedFiles.
* Only requires the addUploadedFiles method.
*/
type AddUploadedFilesRepository = Pick<FileRepository, 'addUploadedFiles'>

export function addUploadedFiles(
fileRepository: FileRepository,
fileRepository: AddUploadedFilesRepository,
datasetId: number | string,
files: UploadedFileDTO[]
): Promise<void> {
Expand Down
8 changes: 7 additions & 1 deletion src/files/domain/useCases/replaceFile.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'
import { FileRepository } from '../repositories/FileRepository'

/**
* Minimal repository type for replaceFile.
* Only requires the replace method.
*/
type ReplaceFileRepository = Pick<FileRepository, 'replace'>

export function replaceFile(
fileRepository: FileRepository,
fileRepository: ReplaceFileRepository,
fileId: number | string,
newFile: UploadedFileDTO
): Promise<number> {
Expand Down
8 changes: 7 additions & 1 deletion src/files/domain/useCases/uploadFile.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import { FileRepository } from '../repositories/FileRepository'

/**
* Minimal repository type for uploadFile.
* Only requires the uploadFile method.
*/
type UploadFileRepository = Pick<FileRepository, 'uploadFile'>

export function uploadFile(
fileRepository: FileRepository,
fileRepository: UploadFileRepository,
datasetId: number | string,
file: File,
done: () => void,
Expand Down
4 changes: 2 additions & 2 deletions src/sections/Route.enum.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ReplaceFileReferrer } from './replace-file/ReplaceFile'
import { EditFileMetadataReferrer } from '@/sections/edit-file-metadata/EditFileMetadata'
import { ReplaceFileReferrer } from './replace-file/ReplaceFileReferrer'
import { EditFileMetadataReferrer } from '@/sections/edit-file-metadata/EditFileMetadataReferrer'

export enum Route {
HOME = '/',
Expand Down
10 changes: 4 additions & 6 deletions src/sections/edit-file-metadata/EditFileMetadata.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,18 @@ import {
} from '@/sections/edit-file-metadata/EditFilesList'
import { useLoading } from '../../shared/contexts/loading/LoadingContext'
import { useFile } from '@/sections/file/useFile'
import { EditFileMetadataReferrer } from './EditFileMetadataReferrer'
import styles from './EditFileMetadata.module.scss'

// Re-export for backwards compatibility
export { EditFileMetadataReferrer } from './EditFileMetadataReferrer'

interface EditFileMetadataProps {
fileId: number
fileRepository: FileRepository
referrer: EditFileMetadataReferrer
}

// From where the user is coming from
export enum EditFileMetadataReferrer {
DATASET = 'dataset',
FILE = 'file'
}

export const EditFileMetadata = ({ fileId, fileRepository, referrer }: EditFileMetadataProps) => {
const { t: tEditFileMetadata } = useTranslation('editFileMetadata')
const { t: tFiles } = useTranslation('files')
Expand Down
8 changes: 8 additions & 0 deletions src/sections/edit-file-metadata/EditFileMetadataReferrer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/**
* Enum indicating where the user came from when editing file metadata.
* Extracted to its own file to avoid circular import issues.
*/
export enum EditFileMetadataReferrer {
DATASET = 'dataset',
FILE = 'file'
}
10 changes: 4 additions & 6 deletions src/sections/replace-file/ReplaceFile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@ import { BreadcrumbsGenerator } from '../shared/hierarchy/BreadcrumbsGenerator'
import { AppLoader } from '../shared/layout/app-loader/AppLoader'
import { NotFoundPage } from '../not-found-page/NotFoundPage'
import { FileUploader, OperationType } from '../shared/file-uploader/FileUploader'
import { ReplaceFileReferrer } from './ReplaceFileReferrer'
import styles from './ReplaceFile.module.scss'

// Re-export for backwards compatibility
export { ReplaceFileReferrer } from './ReplaceFileReferrer'

interface ReplaceFileProps {
fileRepository: FileRepository
fileIdFromParams: number
Expand All @@ -19,12 +23,6 @@ interface ReplaceFileProps {
referrer?: ReplaceFileReferrer
}

// From where the user is coming from
export enum ReplaceFileReferrer {
DATASET = 'dataset',
FILE = 'file'
}

export const ReplaceFile = ({
fileRepository,
fileIdFromParams,
Expand Down
8 changes: 8 additions & 0 deletions src/sections/replace-file/ReplaceFileReferrer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/**
* Enum indicating where the user came from when replacing a file.
* Extracted to its own file to avoid circular import issues.
*/
export enum ReplaceFileReferrer {
DATASET = 'dataset',
FILE = 'file'
}
2 changes: 1 addition & 1 deletion src/sections/shared/file-uploader/FileUploader.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { File as FileModel } from '@/files/domain/models/File'
import { FileRepository } from '@/files/domain/repositories/FileRepository'
import { ReplaceFileReferrer } from '@/sections/replace-file/ReplaceFile'
import { ReplaceFileReferrer } from '@/sections/replace-file/ReplaceFileReferrer'
import { FileUploaderProvider } from './context/FileUploaderContext'
import { useGetFixityAlgorithm } from './useGetFixityAlgorithm'
import { FileUploaderGlobalConfig } from './context/fileUploaderReducer'
Expand Down
5 changes: 4 additions & 1 deletion src/sections/shared/file-uploader/FileUploaderHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@ export class FileUploaderHelper {
}

public static async getChecksum(blob: Blob, algorithm: FixityAlgorithm): Promise<string> {
if (algorithm === FixityAlgorithm.MD5) {
if (algorithm === FixityAlgorithm.NONE) {
// No checksum calculation needed
return ''
} else if (algorithm === FixityAlgorithm.MD5) {
return await this.getMD5Checksum(blob)
} else {
return await this.getSubtleDigestChecksum(blob, algorithm)
Expand Down
Loading
Loading