Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -13,6 +13,8 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Changed

- Hide "Export Metadata" on file pages that are not for the latest released dataset version.
Comment thread
pdurbin marked this conversation as resolved.
Outdated

### Fixed

### Removed
Expand Down
5 changes: 3 additions & 2 deletions src/dataset/infrastructure/mappers/JSDatasetVersionMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,16 @@ export class JSDatasetVersionMapper {
jsDatasetLastUpdateTime: string,
jsDatasetPublicationDate?: string,
jsDatasettermsOfAccess?: TermsOfAccess,
jsDatasetDeaccessionedNote?: string
jsDatasetDeaccessionedNote?: string,
isLatest = true
): DatasetVersion {
return new DatasetVersion.Builder(
jDatasetVersionId,
jsDatasetTitle,
this.toVersionNumber(jsDatasetVersionInfo),
this.toStatus(jsDatasetVersionInfo.state),
jsDatasetCitation,
true, // TODO Connect with dataset version isLatest
isLatest,
false, // TODO Connect with dataset version isInReview
this.toStatus(jsDatasetVersionInfo.state),
this.toSomeDatasetVersionHasBeenReleased(jsDatasetVersionInfo, jsDatasetPublicationDate),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
Dataset,
DatasetLock,
DatasetNonNumericVersion,
DatasetNonNumericVersionSearchParam,
TermsOfAccess
} from '../../domain/models/Dataset'
import { DatasetVersionDiff } from '../../domain/models/DatasetVersionDiff'
Expand Down Expand Up @@ -88,6 +89,43 @@ export class DatasetJSDataverseRepository implements DatasetRepository {
return requireAppConfig().backendUrl
}

static isLatestReleasedVersion(
datasetId: number | string,
datasetVersionNumber?: string
): Promise<boolean> {
if (datasetVersionNumber === undefined) {
return Promise.resolve(true)
}

return getDatasetVersionsSummaries
.execute(datasetId, 2, 0)
.then((datasetVersionSummarySubset) => {
const latestReleasedDatasetVersion = datasetVersionSummarySubset.summaries.find(
(summary) =>
summary.versionNumber !== DatasetNonNumericVersion.DRAFT &&
summary.versionNumber !== DatasetNonNumericVersionSearchParam.DRAFT
)?.versionNumber

return (
latestReleasedDatasetVersion !== undefined &&
latestReleasedDatasetVersion ===
DatasetJSDataverseRepository.toVersionSummaryVersion(datasetVersionNumber)
)
})
.catch(() => false)
}

private static toVersionSummaryVersion(datasetVersionNumber: string): string {
if (
datasetVersionNumber === DatasetNonNumericVersion.DRAFT ||
datasetVersionNumber === DatasetNonNumericVersionSearchParam.DRAFT
) {
return DatasetNonNumericVersionSearchParam.DRAFT
}

return datasetVersionNumber
}

getAllWithCount(
collectionId: string,
paginationInfo: DatasetPaginationInfo
Expand Down
13 changes: 10 additions & 3 deletions src/files/infrastructure/FileJSDataverseRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { FileCriteria } from '../domain/models/FileCriteria'
import { DomainFileMapper } from './mappers/DomainFileMapper'
import { JSFileMapper } from './mappers/JSFileMapper'
import { DatasetVersion, DatasetVersionNumber } from '../../dataset/domain/models/Dataset'
import { DatasetJSDataverseRepository } from '@/dataset/infrastructure/repositories/DatasetJSDataverseRepository'
import { File } from '../domain/models/File'
import { FilePaginationInfo } from '../domain/models/FilePaginationInfo'
import { requireAppConfig } from '../../config'
Expand Down Expand Up @@ -293,7 +294,11 @@ export class FileJSDataverseRepository implements FileRepository {
FileJSDataverseRepository.getDownloadCountById(jsFile.id, jsFile.publicationDate),
Promise.resolve(resolvedPermissions),
FileJSDataverseRepository.getThumbnailById(jsFile.id),
FileJSDataverseRepository.getTabularDataById(jsFile.id, jsFile.tabularData)
FileJSDataverseRepository.getTabularDataById(jsFile.id, jsFile.tabularData),
DatasetJSDataverseRepository.isLatestReleasedVersion(
jsDataset.id,
datasetVersionNumber
)
])
})
})
Expand All @@ -306,7 +311,8 @@ export class FileJSDataverseRepository implements FileRepository {
downloadsCount,
permissions,
thumbnail,
tabularData
tabularData,
isLatestDatasetVersion
]) =>
JSFileMapper.toFile(
jsFile,
Expand All @@ -316,7 +322,8 @@ export class FileJSDataverseRepository implements FileRepository {
downloadsCount,
permissions,
thumbnail,
tabularData
tabularData,
isLatestDatasetVersion
)
)
.catch((error: ReadError) => {
Expand Down
7 changes: 5 additions & 2 deletions src/files/infrastructure/mappers/JSFileMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ export class JSFileMapper {
downloadsCount: number,
permissions: FilePermissions,
thumbnail?: string,
tabularData?: FileTabularData
tabularData?: FileTabularData,
isLatestDatasetVersion = true
): File {
const datasetVersion = JSDatasetVersionMapper.toVersion(
jsDataset.versionId,
Expand All @@ -57,7 +58,9 @@ export class JSFileMapper {
datasetCitation,
jsDataset.versionInfo.lastUpdateTime,
jsDataset.publicationDate,
jsDataset.termsOfUse?.termsOfAccess
jsDataset.termsOfUse?.termsOfAccess,
undefined,
isLatestDatasetVersion
)
return {
id: this.toFileId(jsFile.id),
Expand Down
26 changes: 14 additions & 12 deletions src/sections/file/file-metadata/FileMetadata.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,20 @@ export function FileMetadata({

return (
<>
<div className="d-flex justify-content-end mb-3">
<ExportMetadataDropdown
datasetPersistentId={datasetPersistentId}
anonymizedView={false}
datasetIsReleased={datasetVersion.someDatasetVersionHasBeenReleased}
datasetIsDeaccessioned={
datasetVersion.publishingStatus === DatasetPublishingStatus.DEACCESSIONED
}
canUpdateDataset={permissions.canEditOwnerDataset}
dataverseInfoRepository={dataverseInfoRepository}
/>
</div>
{datasetVersion.isLatest && (
<div className="d-flex justify-content-end mb-3">
<ExportMetadataDropdown
datasetPersistentId={datasetPersistentId}
anonymizedView={false}
datasetIsReleased={datasetVersion.someDatasetVersionHasBeenReleased}
datasetIsDeaccessioned={
datasetVersion.publishingStatus === DatasetPublishingStatus.DEACCESSIONED
}
canUpdateDataset={permissions.canEditOwnerDataset}
dataverseInfoRepository={dataverseInfoRepository}
/>
</div>
)}
<Accordion defaultActiveKey="0">
<Accordion.Item eventKey="0">
<Accordion.Header>{t('metadata.title')}</Accordion.Header>
Expand Down
43 changes: 43 additions & 0 deletions tests/component/sections/file/file-metadata/FileMetadata.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import {
import { FilePermissionsMother } from '../../../files/domain/models/FilePermissionsMother'
import { DataverseInfoMockRepository } from '@/stories/shared-mock-repositories/info/DataverseInfoMockRepository'
import { requireAppConfig } from '@/config'
import { DatasetVersionMother } from '@tests/component/dataset/domain/models/DatasetMother'
import { DatasetMetadataExportFormatsMother } from '@tests/component/info/domain/models/DatasetMetadataExportFormatsMother'

const appConfig = requireAppConfig()

Expand All @@ -31,6 +33,47 @@ describe('FileMetadata', () => {
cy.findByRole('button', { name: 'File Metadata' }).should('exist')
})

it('renders export metadata when the file is on the latest dataset version', () => {
const dataverseInfoRepository = new DataverseInfoMockRepository()
cy.stub(dataverseInfoRepository, 'getAvailableDatasetMetadataExportFormats').resolves(
DatasetMetadataExportFormatsMother.create()
)

cy.customMount(
<FileMetadata
name={file.name}
metadata={file.metadata}
permissions={file.permissions}
datasetPersistentId={file.datasetPersistentId}
datasetVersion={DatasetVersionMother.createRealistic()}
dataverseInfoRepository={dataverseInfoRepository}
/>
)

cy.findByRole('button', { name: 'Export Metadata' }).should('exist')
})

it('does not render export metadata when the file is not on the latest dataset version', () => {
const dataverseInfoRepository = new DataverseInfoMockRepository()
const getAvailableDatasetMetadataExportFormats = cy
.stub(dataverseInfoRepository, 'getAvailableDatasetMetadataExportFormats')
.resolves(DatasetMetadataExportFormatsMother.create())

cy.customMount(
<FileMetadata
name={file.name}
metadata={file.metadata}
permissions={file.permissions}
datasetPersistentId={file.datasetPersistentId}
datasetVersion={DatasetVersionMother.createReleased({ isLatest: false })}
dataverseInfoRepository={dataverseInfoRepository}
/>
)

cy.findByRole('button', { name: 'Export Metadata' }).should('not.exist')
cy.wrap(getAvailableDatasetMetadataExportFormats).should('not.have.been.called')
})

it('renders the file preview', () => {
cy.customMount(
<FileMetadata
Expand Down
Loading