Skip to content
Merged
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
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Changed

- Add pagination support to the Dataset Version Summaries and File Version Summaries use cases by introducing optional pagination object. #885
- Refactored pagination to use consistent `CollectionItemsPaginationInfo` object in getMyDataCollectionItems, instead of individual limit/selectedPage parameters.
- Use of the new `sourceLastUpdateTime` query parameter from update dataset and file metadata endpoints to support optimistic concurrency control during editing operations. See [Edit Dataset Metadata](https://guides.dataverse.org/en/6.8/api/native-api.html#edit-dataset-metadata) and [Updating File Metadata](https://guides.dataverse.org/en/6.8/api/native-api.html#updating-file-metadata) guides for more details.
- Changed the way we were handling DATE type metadata field validation to better match the backend validation and give users better error messages. For example, for an input like “foo AD”, we now show “Production Date is not a valid date. The AD year must be numeric.“. For an input like “99999 AD”, we now show “Production Date is not a valid date. The AD year cant be higher than 9999.“. For an input like “[-9999?], we now show “Production Date is not a valid date. The year in brackets cannot be negative.“, etc.

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

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

2 changes: 1 addition & 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.77",
"@iqss/dataverse-client-javascript": "2.0.0-alpha.79",
"@iqss/dataverse-design-system": "*",
"@istanbuljs/nyc-config-typescript": "1.0.2",
"@tanstack/react-table": "8.9.2",
Expand Down
3 changes: 1 addition & 2 deletions src/collection/domain/repositories/CollectionRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ export interface CollectionRepository {
roleIds: number[],
collectionItemTypes: CollectionItemType[],
publicationStatuses: PublicationStatus[],
limit?: number,
selectedPage?: number,
paginationInfo?: CollectionItemsPaginationInfo,
searchText?: string,
otherUserName?: string
) => Promise<MyDataCollectionItemSubset>
Expand Down
7 changes: 3 additions & 4 deletions src/collection/domain/useCases/getMyDataCollectionItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import { CollectionRepository } from '../repositories/CollectionRepository'
import { MyDataCollectionItemSubset } from '../models/MyDataCollectionItemSubset'
import { PublicationStatus } from '../../../shared/core/domain/models/PublicationStatus'
import { CollectionItemType } from '@/collection/domain/models/CollectionItemType'
import { CollectionItemsPaginationInfo } from '../models/CollectionItemsPaginationInfo'

export async function getMyDataCollectionItems(
collectionRepository: CollectionRepository,
roleIds: number[],
collectionItemTypes: CollectionItemType[],
publicationStatuses: PublicationStatus[],
limit?: number,
selectedPage?: number,
paginationInfo?: CollectionItemsPaginationInfo,
searchText?: string,
otherUserName?: string
): Promise<MyDataCollectionItemSubset> {
Expand All @@ -18,8 +18,7 @@ export async function getMyDataCollectionItems(
roleIds,
collectionItemTypes,
publicationStatuses,
limit,
selectedPage,
paginationInfo,
searchText,
otherUserName
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,7 @@ export class CollectionJSDataverseRepository implements CollectionRepository {
roleIds: number[],
collectionItemTypes: CollectionItemType[],
publicationStatuses: PublicationStatus[],
limit?: number,
selectedPage?: number,
paginationInfo?: CollectionItemsPaginationInfo,
searchText?: string,
otherUserName?: string
): Promise<MyDataCollectionItemSubset> {
Expand All @@ -103,8 +102,8 @@ export class CollectionJSDataverseRepository implements CollectionRepository {
roleIds,
collectionItemTypes,
publicationStatuses,
limit,
selectedPage,
paginationInfo?.pageSize,
paginationInfo?.page,
searchText,
otherUserName
)
Expand Down
7 changes: 7 additions & 0 deletions src/dataset/domain/models/DatasetVersionPaginationInfo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { PaginationInfo } from '../../../shared/pagination/domain/models/PaginationInfo'

export class DatasetVersionPaginationInfo extends PaginationInfo<DatasetVersionPaginationInfo> {
constructor(page = 1, pageSize = 10, totalItems = 0, itemName = 'Version') {
super(page, pageSize, totalItems, itemName)
}
}
5 changes: 5 additions & 0 deletions src/dataset/domain/models/DatasetVersionSummaryInfo.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
export interface DatasetVersionSummarySubset {
summaries: DatasetVersionSummaryInfo[]
totalCount: number
}

export interface DatasetVersionSummaryInfo {
id: number
versionNumber: string
Expand Down
8 changes: 6 additions & 2 deletions src/dataset/domain/repositories/DatasetRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ import { DatasetPaginationInfo } from '../models/DatasetPaginationInfo'
import { DatasetDTO } from '../useCases/DTOs/DatasetDTO'
import { DatasetsWithCount } from '../models/DatasetsWithCount'
import { VersionUpdateType } from '../models/VersionUpdateType'
import { DatasetVersionSummaryInfo } from '../models/DatasetVersionSummaryInfo'
import { DatasetVersionSummarySubset } from '../models/DatasetVersionSummaryInfo'
import { DatasetDeaccessionDTO } from '../useCases/DTOs/DatasetDTO'
import { DatasetDownloadCount } from '../models/DatasetDownloadCount'
import { FormattedCitation, CitationFormat } from '../models/DatasetCitation'
import { DatasetTemplate } from '../models/DatasetTemplate'
import { CollectionSummary } from '@/collection/domain/models/CollectionSummary'
import { DatasetVersionPaginationInfo } from '../models/DatasetVersionPaginationInfo'

export interface DatasetRepository {
getByPersistentId: (
Expand Down Expand Up @@ -44,7 +45,10 @@ export interface DatasetRepository {
paginationInfo: DatasetPaginationInfo
) => Promise<DatasetsWithCount>
publish(persistentId: string, versionUpdateType: VersionUpdateType): Promise<void>
getDatasetVersionsSummaries: (datasetId: number | string) => Promise<DatasetVersionSummaryInfo[]>
getDatasetVersionsSummaries: (
datasetId: number | string,
paginationInfo?: DatasetVersionPaginationInfo
) => Promise<DatasetVersionSummarySubset>
getDownloadCount: (
datasetId: string | number,
includeMDC?: boolean
Expand Down
10 changes: 6 additions & 4 deletions src/dataset/domain/useCases/getDatasetVersionsSummaries.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { DatasetRepository } from '../repositories/DatasetRepository'
import { DatasetVersionSummaryInfo } from '../models/DatasetVersionSummaryInfo'
import { DatasetVersionSummarySubset } from '../models/DatasetVersionSummaryInfo'
import { DatasetVersionPaginationInfo } from '../models/DatasetVersionPaginationInfo'

export function getDatasetVersionsSummaries(
datasetRepository: DatasetRepository,
datasetId: number | string
): Promise<DatasetVersionSummaryInfo[]> {
return datasetRepository.getDatasetVersionsSummaries(datasetId).catch((error) => {
datasetId: number | string,
paginationInfo?: DatasetVersionPaginationInfo
): Promise<DatasetVersionSummarySubset> {
return datasetRepository.getDatasetVersionsSummaries(datasetId, paginationInfo).catch((error) => {
throw error
})
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ import { DatasetDTO } from '../../domain/useCases/DTOs/DatasetDTO'
import { DatasetDTOMapper } from '../mappers/DatasetDTOMapper'
import { DatasetsWithCount } from '../../domain/models/DatasetsWithCount'
import { VersionUpdateType } from '../../domain/models/VersionUpdateType'
import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetVersionSummarySubset } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetDownloadCount } from '@/dataset/domain/models/DatasetDownloadCount'
import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo'
import { FormattedCitation, CitationFormat } from '@/dataset/domain/models/DatasetCitation'
import { axiosInstance } from '@/axiosInstance'
import { DATAVERSE_BACKEND_URL } from '../../../config'
Expand Down Expand Up @@ -373,10 +374,15 @@ export class DatasetJSDataverseRepository implements DatasetRepository {
throw new Error(error.message)
})
}
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
return getDatasetVersionsSummaries.execute(datasetId).catch((error: ReadError) => {
throw error
})
getDatasetVersionsSummaries(
datasetId: number | string,
paginationInfo?: DatasetVersionPaginationInfo
): Promise<DatasetVersionSummarySubset> {
return getDatasetVersionsSummaries
.execute(datasetId, paginationInfo?.pageSize, paginationInfo?.offset)
.catch((error: ReadError) => {
throw error
})
}
getDownloadCount(
datasetId: string | number,
Expand Down
7 changes: 7 additions & 0 deletions src/files/domain/models/FileVersionPaginationInfo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { PaginationInfo } from '../../../shared/pagination/domain/models/PaginationInfo'

export class FileVersionPaginationInfo extends PaginationInfo<FileVersionPaginationInfo> {
constructor(page = 1, pageSize = 10, totalItems = 0, itemName = 'Version') {
super(page, pageSize, totalItems, itemName)
}
}
5 changes: 5 additions & 0 deletions src/files/domain/models/FileVersionSummaryInfo.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import { DatasetVersionState } from '@/dataset/domain/models/Dataset'

export interface FileVersionSummarySubset {
summaries: FileVersionSummaryInfo[]
totalCount: number
}

export interface FileVersionSummaryInfo {
datasetVersion: string
contributors?: string
Expand Down
8 changes: 6 additions & 2 deletions src/files/domain/repositories/FileRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import { UploadedFileDTO } from '@iqss/dataverse-client-javascript'
import { FixityAlgorithm } from '../models/FixityAlgorithm'
import { FileMetadataDTO } from '@/files/domain/useCases/DTOs/FileMetadataDTO'
import { RestrictFileDTO } from '../useCases/restrictFileDTO'
import { FileVersionSummaryInfo } from '../models/FileVersionSummaryInfo'
import { FileVersionSummarySubset } from '../models/FileVersionSummaryInfo'
import { FileVersionPaginationInfo } from '../models/FileVersionPaginationInfo'

export interface FileRepository {
getAllByDatasetPersistentId: (
Expand All @@ -32,7 +33,10 @@ export interface FileRepository {
criteria?: FileCriteria,
includeDeaccessioned?: boolean
) => Promise<number>
getFileVersionSummaries: (fileId: number | string) => Promise<FileVersionSummaryInfo[]>
getFileVersionSummaries: (
fileId: number | string,
paginationInfo?: FileVersionPaginationInfo
) => Promise<FileVersionSummarySubset>
getById: (id: number, datasetVersionNumber?: string) => Promise<File | undefined>
getMultipleFileDownloadUrl: (ids: number[], downloadMode: FileDownloadMode) => string
getFileDownloadUrl: (id: number, downloadMode: FileDownloadMode) => string
Expand Down
10 changes: 6 additions & 4 deletions src/files/domain/useCases/getFileVersionSummaries.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { FileRepository } from '../repositories/FileRepository'
import { FileVersionSummaryInfo } from '../models/FileVersionSummaryInfo'
import { FileVersionSummarySubset } from '../models/FileVersionSummaryInfo'
import { FileVersionPaginationInfo } from '../models/FileVersionPaginationInfo'

export function getFileVersionSummaries(
fileRepository: FileRepository,
fileId: number | string
): Promise<FileVersionSummaryInfo[]> {
return fileRepository.getFileVersionSummaries(fileId)
fileId: number | string,
paginationInfo?: FileVersionPaginationInfo
): Promise<FileVersionSummarySubset> {
return fileRepository.getFileVersionSummaries(fileId, paginationInfo)
}
10 changes: 7 additions & 3 deletions src/files/infrastructure/FileJSDataverseRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ import { FixityAlgorithm } from '../domain/models/FixityAlgorithm'
import { RestrictFileDTO } from '../domain/useCases/restrictFileDTO'
import { FileMetadataDTO } from '@/files/domain/useCases/DTOs/FileMetadataDTO'
import { JSDataverseReadErrorHandler } from '@/shared/helpers/JSDataverseReadErrorHandler'
import { FileVersionSummaryInfo } from '../domain/models/FileVersionSummaryInfo'
import { FileVersionSummarySubset } from '../domain/models/FileVersionSummaryInfo'
import { FileVersionPaginationInfo } from '../domain/models/FileVersionPaginationInfo'

const includeDeaccessioned = true

Expand Down Expand Up @@ -249,8 +250,11 @@ export class FileJSDataverseRepository implements FileRepository {
throw new Error(error.message)
})
}
getFileVersionSummaries(fileId: number | string): Promise<FileVersionSummaryInfo[]> {
return getFileVersionSummaries.execute(fileId)
getFileVersionSummaries(
fileId: number | string,
paginationInfo?: FileVersionPaginationInfo
): Promise<FileVersionSummarySubset> {
return getFileVersionSummaries.execute(fileId, paginationInfo?.pageSize, paginationInfo?.offset)
}

getById(id: number, datasetVersionNumber?: string): Promise<File> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,7 @@ async function loadNextItems(
searchCriteria.roleIds,
searchCriteria.itemTypes,
publicationStatuses,
paginationInfo.pageSize,
paginationInfo.page,
paginationInfo,
searchCriteria.searchText,
searchCriteria.otherUserName
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ import { useCallback, useEffect, useState } from 'react'
import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository'
import { getDatasetVersionsSummaries } from '@/dataset/domain/useCases/getDatasetVersionsSummaries'
import { DatasetVersionPaginationInfo } from '@/dataset/domain/models/DatasetVersionPaginationInfo'

interface UseGetDatasetVersionsSummaries {
datasetVersionSummaries: DatasetVersionSummaryInfo[] | undefined
error: string | null
isLoading: boolean
fetchSummaries: () => Promise<void>
fetchSummaries: (paginationInfo?: DatasetVersionPaginationInfo) => Promise<void>
}

interface Props {
Expand All @@ -25,23 +26,30 @@ export const useGetDatasetVersionsSummaries = ({
const [isLoading, setIsLoading] = useState<boolean>(autoFetch)
const [error, setError] = useState<string | null>(null)

const fetchSummaries = useCallback(async () => {
setIsLoading(true)
setError(null)
const fetchSummaries = useCallback(
async (paginationInfo?: DatasetVersionPaginationInfo) => {
setIsLoading(true)
setError(null)

try {
const versionSummaries = await getDatasetVersionsSummaries(datasetRepository, persistentId)
setSummaries(versionSummaries)
} catch (err) {
const errorMessage =
err instanceof Error && err.message
? err.message
: 'Something went wrong getting the information from the dataset versions summaries. Try again later.'
setError(errorMessage)
} finally {
setIsLoading(false)
}
}, [datasetRepository, persistentId])
try {
const versionSummaries = await getDatasetVersionsSummaries(
datasetRepository,
persistentId,
paginationInfo
)
setSummaries(versionSummaries.summaries)
} catch (err) {
const errorMessage =
err instanceof Error && err.message
? err.message
: 'Something went wrong getting the information from the dataset versions summaries. Try again later.'
setError(errorMessage)
} finally {
setIsLoading(false)
}
},
[datasetRepository, persistentId]
)

useEffect(() => {
if (autoFetch) {
Expand Down
Loading