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
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to address the following issue in the same PR?


### 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