Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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

- BREAKING CHANGE: add pagination support to the Dataset and File Version Summaries use cases by introducing optional limit and offset query parameters. #885

- 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
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,7 +4,7 @@ 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'
Expand Down Expand Up @@ -44,7 +44,11 @@ export interface DatasetRepository {
paginationInfo: DatasetPaginationInfo
) => Promise<DatasetsWithCount>
publish(persistentId: string, versionUpdateType: VersionUpdateType): Promise<void>
getDatasetVersionsSummaries: (datasetId: number | string) => Promise<DatasetVersionSummaryInfo[]>
getDatasetVersionsSummaries: (
datasetId: number | string,
limit?: number,
offset?: number
) => 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'

export function getDatasetVersionsSummaries(
datasetRepository: DatasetRepository,
datasetId: number | string
): Promise<DatasetVersionSummaryInfo[]> {
return datasetRepository.getDatasetVersionsSummaries(datasetId).catch((error) => {
datasetId: number | string,
limit?: number,
offset?: number
): Promise<DatasetVersionSummarySubset> {
return datasetRepository.getDatasetVersionsSummaries(datasetId, limit, offset).catch((error) => {
throw error
})
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ 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 { FormattedCitation, CitationFormat } from '@/dataset/domain/models/DatasetCitation'
import { axiosInstance } from '@/axiosInstance'
Expand Down Expand Up @@ -373,10 +373,16 @@ 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,
limit?: number,
offset?: number
): Promise<DatasetVersionSummarySubset> {
return getDatasetVersionsSummaries
.execute(datasetId, limit, offset)
.catch((error: ReadError) => {
throw error
})
}
getDownloadCount(
datasetId: string | number,
Expand Down
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,7 @@ 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'

export interface FileRepository {
getAllByDatasetPersistentId: (
Expand All @@ -32,7 +32,11 @@ export interface FileRepository {
criteria?: FileCriteria,
includeDeaccessioned?: boolean
) => Promise<number>
getFileVersionSummaries: (fileId: number | string) => Promise<FileVersionSummaryInfo[]>
getFileVersionSummaries: (
fileId: number | string,
limit?: number,
offset?: number
) => 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'

export function getFileVersionSummaries(
fileRepository: FileRepository,
fileId: number | string
): Promise<FileVersionSummaryInfo[]> {
return fileRepository.getFileVersionSummaries(fileId)
fileId: number | string,
limit?: number,
offset?: number
): Promise<FileVersionSummarySubset> {
return fileRepository.getFileVersionSummaries(fileId, limit, offset)
}
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,7 @@ 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'

const includeDeaccessioned = true

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

getById(id: number, datasetVersionNumber?: string): Promise<File> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ interface UseGetDatasetVersionsSummaries {
datasetVersionSummaries: DatasetVersionSummaryInfo[] | undefined
error: string | null
isLoading: boolean
fetchSummaries: () => Promise<void>
fetchSummaries: (limit?: number, offset?: number) => Promise<void>
}

interface Props {
Expand All @@ -25,23 +25,31 @@ 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 (limit?: number, offset?: number) => {
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,
limit,
offset
)
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
42 changes: 25 additions & 17 deletions src/sections/file/file-version/useGetFileVersionsSummaries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ interface UseGetFileVersionsSummaries {
fileVersionSummaries: FileVersionSummaryInfo[] | undefined
error: string | null
isLoading: boolean
fetchSummaries: () => Promise<void>
fetchSummaries: (limit?: number, offset?: number) => Promise<void>
}

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

const fetchSummaries = useCallback(async () => {
setIsLoading(true)
setError(null)
try {
const versionSummaries = await getFileVersionSummaries(fileRepository, fileId)
setSummaries(versionSummaries)
} catch (err) {
const errorMessage =
err instanceof Error && err.message
? err.message
: 'Something went wrong getting the information from the file versions summaries. Try again later.'
setError(errorMessage)
} finally {
setIsLoading(false)
}
}, [fileRepository, fileId])
const fetchSummaries = useCallback(
async (limit?: number, offset?: number) => {
setIsLoading(true)
setError(null)
try {
const versionSummaries = await getFileVersionSummaries(
fileRepository,
fileId,
limit,
offset
)
setSummaries(versionSummaries.summaries)
} catch (err) {
const errorMessage =
err instanceof Error && err.message
? err.message
: 'Something went wrong getting the information from the file versions summaries. Try again later.'
setError(errorMessage)
} finally {
setIsLoading(false)
}
},
[fileRepository, fileId]
)

useEffect(() => {
if (autoFetch) {
Expand Down
8 changes: 6 additions & 2 deletions src/stories/dataset/DatasetErrorMockRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { DatasetDTO } from '../../dataset/domain/useCases/DTOs/DatasetDTO'
import { FakerHelper } from '../../../tests/component/shared/FakerHelper'
import { VersionUpdateType } from '../../dataset/domain/models/VersionUpdateType'
import { DatasetVersionDiff } from '@/dataset/domain/models/DatasetVersionDiff'
import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetDeaccessionDTO } from '@iqss/dataverse-client-javascript'
import { DatasetVersionSummarySubset } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetDownloadCount } from '@/dataset/domain/models/DatasetDownloadCount'
import { CitationFormat, FormattedCitation } from '@/dataset/domain/models/DatasetCitation'
import { DatasetTemplate } from '@/dataset/domain/models/DatasetTemplate'
Expand Down Expand Up @@ -87,7 +87,11 @@ export class DatasetErrorMockRepository implements DatasetMockRepository {
})
}

getDatasetVersionsSummaries(_datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
getDatasetVersionsSummaries(
_datasetId: number | string,
_limit?: number,
_offset?: number
): Promise<DatasetVersionSummarySubset> {
return new Promise((_resolve, reject) => {
setTimeout(() => {
reject('Error thrown from mock')
Expand Down
8 changes: 6 additions & 2 deletions src/stories/dataset/DatasetLoadingMockRepository.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { DatasetMockRepository } from './DatasetMockRepository'
import { DatasetPaginationInfo } from '../../dataset/domain/models/DatasetPaginationInfo'
import { DatasetsWithCount } from '../../dataset/domain/models/DatasetsWithCount'
import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetVersionSummarySubset } from '@/dataset/domain/models/DatasetVersionSummaryInfo'

export class DatasetLoadingMockRepository extends DatasetMockRepository {
getDatasetsWithCount: (
Expand All @@ -14,7 +14,11 @@ export class DatasetLoadingMockRepository extends DatasetMockRepository {
return new Promise(() => {})
}

getDatasetVersionsSummaries(_datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
getDatasetVersionsSummaries(
_datasetId: number | string,
_limit?: number,
_offset?: number
): Promise<DatasetVersionSummarySubset> {
return new Promise(() => {})
}
}
8 changes: 6 additions & 2 deletions src/stories/dataset/DatasetMockRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { DatasetDTO } from '../../dataset/domain/useCases/DTOs/DatasetDTO'
import { DatasetsWithCount } from '../../dataset/domain/models/DatasetsWithCount'
import { FakerHelper } from '../../../tests/component/shared/FakerHelper'
import { VersionUpdateType } from '../../dataset/domain/models/VersionUpdateType'
import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetVersionSummarySubset } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
import { DatasetDeaccessionDTO } from '@iqss/dataverse-client-javascript'
import { DatasetDownloadCount } from '@/dataset/domain/models/DatasetDownloadCount'
import { DatasetDownloadCountMother } from '@tests/component/dataset/domain/models/DatasetDownloadCountMother'
Expand Down Expand Up @@ -98,7 +98,11 @@ export class DatasetMockRepository implements DatasetRepository {
})
}

getDatasetVersionsSummaries(_datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
getDatasetVersionsSummaries(
_datasetId: number | string,
_limit?: number,
_offset?: number
): Promise<DatasetVersionSummarySubset> {
return new Promise((resolve) => {
setTimeout(() => {
resolve(DatasetVersionsSummariesMother.create())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,18 @@ export const WithOneVersion: Story = {
datasetMockRepository.getDatasetVersionsSummaries = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve([
{
id: 1,
contributors: 'contributors',
versionNumber: '1.0',
publishedOn: '2023-01-01',
summary: DatasetVersionSummaryStringValues.firstPublished
}
])
resolve({
summaries: [
{
id: 1,
contributors: 'contributors',
versionNumber: '1.0',
publishedOn: '2023-01-01',
summary: DatasetVersionSummaryStringValues.firstPublished
}
],
totalCount: 1
})
}, 1_000)
})
}
Expand Down
Loading
Loading