diff --git a/src/files/domain/models/FileItemTypePreview.ts b/src/files/domain/models/FileItemTypePreview.ts
index 881dab1a7..1bb2fa037 100644
--- a/src/files/domain/models/FileItemTypePreview.ts
+++ b/src/files/domain/models/FileItemTypePreview.ts
@@ -1,5 +1,6 @@
import { CollectionItemType } from '../../../collection/domain/models/CollectionItemType'
import { PublicationStatus } from '../../../shared/core/domain/models/PublicationStatus'
+import { FileLabel } from './FileMetadata'
export interface FileItemTypePreview {
type: CollectionItemType.FILE
@@ -21,6 +22,9 @@ export interface FileItemTypePreview {
datasetCitation: string
publicationStatuses: PublicationStatus[]
releaseOrCreateDate: Date
+ variables?: number
+ observations?: number
+ tags?: FileLabel[]
restricted: boolean
canDownloadFile: boolean
}
diff --git a/src/files/domain/models/FileMetadata.ts b/src/files/domain/models/FileMetadata.ts
index 1d4629e6d..5e656b433 100644
--- a/src/files/domain/models/FileMetadata.ts
+++ b/src/files/domain/models/FileMetadata.ts
@@ -99,8 +99,8 @@ export class FileEmbargo {
}
export interface FileTabularData {
- variablesCount: number
- observationsCount: number
+ variables: number
+ observations: number
unf?: string
}
diff --git a/src/files/infrastructure/mappers/JSFileItemTypePreviewMapper.ts b/src/files/infrastructure/mappers/JSFileItemTypePreviewMapper.ts
index af31af661..2804d1c5d 100644
--- a/src/files/infrastructure/mappers/JSFileItemTypePreviewMapper.ts
+++ b/src/files/infrastructure/mappers/JSFileItemTypePreviewMapper.ts
@@ -1,8 +1,20 @@
import { FilePreview as JSFilePreview } from '@iqss/dataverse-client-javascript'
import { FileItemTypePreview } from '../../domain/models/FileItemTypePreview'
+import { FileLabelType } from '@/files/domain/models/FileMetadata'
+import { FileLabel } from '@/files/domain/models/FileMetadata'
export class JSFileItemTypePreviewMapper {
static toFileItemTypePreview(jsFilePreview: JSFilePreview): FileItemTypePreview {
+ const tabularTagsAsLabels: FileLabel[] = (jsFilePreview.tabularTags || []).map((tag) => ({
+ type: FileLabelType.TAG,
+ value: tag
+ }))
+
+ const categoriesAsLabels: FileLabel[] = (jsFilePreview.categories || []).map((category) => ({
+ type: FileLabelType.CATEGORY,
+ value: category
+ }))
+
return {
type: jsFilePreview.type,
id: jsFilePreview.fileId,
@@ -23,6 +35,9 @@ export class JSFileItemTypePreviewMapper {
datasetCitation: jsFilePreview.datasetCitation,
publicationStatuses: jsFilePreview.publicationStatuses,
releaseOrCreateDate: jsFilePreview.releaseOrCreateDate,
+ tags: [...categoriesAsLabels, ...tabularTagsAsLabels] as FileLabel[],
+ variables: jsFilePreview.variables,
+ observations: jsFilePreview.observations,
restricted: jsFilePreview.restricted,
canDownloadFile: jsFilePreview.canDownloadFile
}
diff --git a/src/files/infrastructure/mappers/JSFileMetadataMapper.ts b/src/files/infrastructure/mappers/JSFileMetadataMapper.ts
index 5d4557824..e08f4bf19 100644
--- a/src/files/infrastructure/mappers/JSFileMetadataMapper.ts
+++ b/src/files/infrastructure/mappers/JSFileMetadataMapper.ts
@@ -124,8 +124,8 @@ export class JSFileMetadataMapper {
static toFileTabularData(jsTabularData: JSFileTabularData[]): FileTabularData {
return {
- variablesCount: jsTabularData[0].varQuantity ?? 0,
- observationsCount: jsTabularData[0].caseQuantity ?? 0,
+ variables: jsTabularData[0].varQuantity ?? 0,
+ observations: jsTabularData[0].caseQuantity ?? 0,
unf: jsTabularData[0].UNF
}
}
diff --git a/src/sections/collection/collection-items-panel/items-list/file-card/FileCardInfo.tsx b/src/sections/collection/collection-items-panel/items-list/file-card/FileCardInfo.tsx
index 977212bb6..ea4c5da66 100644
--- a/src/sections/collection/collection-items-panel/items-list/file-card/FileCardInfo.tsx
+++ b/src/sections/collection/collection-items-panel/items-list/file-card/FileCardInfo.tsx
@@ -6,6 +6,7 @@ import { FileCardHelper } from './FileCardHelper'
import { Route } from '@/sections/Route.enum'
import { DvObjectType } from '@/shared/hierarchy/domain/models/UpwardHierarchyNode'
import { LinkToPage } from '@/sections/shared/link-to-page/LinkToPage'
+import { FileLabels } from '@/sections/file/file-labels/FileLabels'
import { CopyToClipboardButton } from '@/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/copy-to-clipboard-button/CopyToClipboardButton'
import styles from './FileCard.module.scss'
@@ -15,6 +16,8 @@ interface FileCardInfoProps {
export function FileCardInfo({ filePreview }: FileCardInfoProps) {
const bytesFormatted = FileCardHelper.formatBytesToCompactNumber(filePreview.sizeInBytes)
+ const variables = filePreview.variables || 0
+ const observations = filePreview.observations || 0
return (
@@ -39,6 +42,9 @@ export function FileCardInfo({ filePreview }: FileCardInfoProps) {
{filePreview.fileType}
{`- ${bytesFormatted}`}
+ {filePreview.fileType === 'Tab-Delimited' && (
+ {`- ${variables} variables, ${observations} observations`}
+ )}
{filePreview.checksum && (
{`- ${filePreview.checksum.type}:`}
@@ -46,7 +52,10 @@ export function FileCardInfo({ filePreview }: FileCardInfoProps) {
)}
-
{filePreview.description}
+
+
+
+ {filePreview.description &&
{filePreview.description}
}
)
diff --git a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileTabularData.tsx b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileTabularData.tsx
index 19e854db7..a59ea82c5 100644
--- a/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileTabularData.tsx
+++ b/src/sections/dataset/dataset-files/files-table/file-info/file-info-cell/file-info-data/FileTabularData.tsx
@@ -13,8 +13,8 @@ export function FileTabularData({
}
return (
- {tabularData.variablesCount} {t('table.tabularData.variables')},{' '}
- {tabularData.observationsCount} {t('table.tabularData.observations')}{' '}
+ {tabularData.variables} {t('table.tabularData.variables')}, {tabularData.observations}{' '}
+ {t('table.tabularData.observations')}{' '}
{tabularData.unf && }
)
diff --git a/src/sections/file/file-labels/FileLabels.module.scss b/src/sections/file/file-labels/FileLabels.module.scss
index 0fe9630bf..e21db111a 100644
--- a/src/sections/file/file-labels/FileLabels.module.scss
+++ b/src/sections/file/file-labels/FileLabels.module.scss
@@ -1,3 +1,4 @@
.container > * {
margin-right: 0.5em;
+ font-size: 12px;
}
diff --git a/src/sections/file/file-metadata/FileMetadata.tsx b/src/sections/file/file-metadata/FileMetadata.tsx
index 1c95782f8..935d1fdf7 100644
--- a/src/sections/file/file-metadata/FileMetadata.tsx
+++ b/src/sections/file/file-metadata/FileMetadata.tsx
@@ -157,13 +157,13 @@ export function FileMetadata({
{t('metadata.fields.variables')}
- {metadata.tabularData.variablesCount}
+ {metadata.tabularData.variables}
{t('metadata.fields.observations')}
- {metadata.tabularData.observationsCount}
+ {metadata.tabularData.observations}
>
)}
diff --git a/tests/component/files/domain/models/FileItemTypePreviewMother.ts b/tests/component/files/domain/models/FileItemTypePreviewMother.ts
index f61b34124..ed306b9cb 100644
--- a/tests/component/files/domain/models/FileItemTypePreviewMother.ts
+++ b/tests/component/files/domain/models/FileItemTypePreviewMother.ts
@@ -2,7 +2,9 @@ import { faker } from '@faker-js/faker'
import { CollectionItemType } from '@/collection/domain/models/CollectionItemType'
import { FileItemTypePreview } from '@/files/domain/models/FileItemTypePreview'
import { PublicationStatus } from '@/shared/core/domain/models/PublicationStatus'
+import { FileLabelType } from '@/files/domain/models/FileMetadata'
import { FakerHelper } from '../../../shared/FakerHelper'
+import { FileLabelMother } from './FileMetadataMother'
export class FileItemTypePreviewMother {
static create(props?: Partial): FileItemTypePreview {
@@ -29,6 +31,12 @@ export class FileItemTypePreviewMother {
datasetCitation: faker.lorem.paragraph(),
publicationStatuses: [PublicationStatus.Published],
releaseOrCreateDate: faker.date.past(),
+ tags: [
+ FileLabelMother.create({ type: FileLabelType.TAG }),
+ FileLabelMother.create({ type: FileLabelType.CATEGORY })
+ ],
+ observations: faker.datatype.number(),
+ variables: faker.datatype.number(),
restricted: faker.datatype.boolean(),
canDownloadFile: faker.datatype.boolean(),
...props
diff --git a/tests/component/files/domain/models/FileLabelMother.ts b/tests/component/files/domain/models/FileLabelMother.ts
new file mode 100644
index 000000000..91b0fb772
--- /dev/null
+++ b/tests/component/files/domain/models/FileLabelMother.ts
@@ -0,0 +1,11 @@
+import { faker } from '@faker-js/faker'
+import { FileLabel, FileLabelType } from '@/files/domain/models/FileMetadata'
+
+export class FileLabelMother {
+ static create(props?: Partial): FileLabel {
+ return {
+ type: props?.type ?? FileLabelType.CATEGORY,
+ value: props?.value ?? faker.lorem.word()
+ }
+ }
+}
diff --git a/tests/component/files/domain/models/FileMetadataMother.ts b/tests/component/files/domain/models/FileMetadataMother.ts
index b943a2160..82257978d 100644
--- a/tests/component/files/domain/models/FileMetadataMother.ts
+++ b/tests/component/files/domain/models/FileMetadataMother.ts
@@ -58,8 +58,8 @@ export class FileTypeMother {
export class FileTabularDataMother {
static create(props?: Partial): FileTabularData {
return {
- variablesCount: faker.datatype.number(100),
- observationsCount: faker.datatype.number(100),
+ variables: faker.datatype.number(100),
+ observations: faker.datatype.number(100),
unf: `UNF:6:xXw6cIZnwHWvmRdwhYCQZA==`,
...props
}
diff --git a/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx b/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx
index c4201fea7..6d0f75cb6 100644
--- a/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx
+++ b/tests/component/sections/collection/collection-items-panel/file-card/FileCard.spec.tsx
@@ -17,5 +17,27 @@ describe('FileCard', () => {
cy.contains(FileCardHelper.formatBytesToCompactNumber(filePreview.sizeInBytes)).should('exist')
filePreview.description && cy.findByText(filePreview.description).should('exist')
filePreview.datasetName && cy.findByText(filePreview.datasetName).should('exist')
+ filePreview.tags &&
+ filePreview.tags.forEach((tag) => {
+ cy.findByText(tag.value).should('exist')
+ })
+ })
+
+ it('should render the card if file is tabular', () => {
+ const filePreview = FileItemTypePreviewMother.create({ fileType: 'Tab-Delimited' })
+ cy.customMount()
+
+ cy.contains(DateHelper.toDisplayFormat(filePreview.releaseOrCreateDate)).should('exist')
+ cy.contains(filePreview.fileType).should('exist')
+ filePreview.checksum?.type && cy.contains(filePreview.checksum?.type).should('exist')
+ cy.contains(FileCardHelper.formatBytesToCompactNumber(filePreview.sizeInBytes)).should('exist')
+ filePreview.description && cy.findByText(filePreview.description).should('exist')
+ filePreview.datasetName && cy.findByText(filePreview.datasetName).should('exist')
+ filePreview.tags &&
+ filePreview.tags.forEach((tag) => {
+ cy.findByText(tag.value).should('exist')
+ })
+ filePreview.variables && cy.contains(filePreview.variables).should('exist')
+ filePreview.observations && cy.contains(filePreview.observations).should('exist')
})
})
diff --git a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx
index f30b9386d..e501e5fff 100644
--- a/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx
+++ b/tests/component/sections/dataset/dataset-files/files-table/files-info/file-info-cell/file-info-data/FileTabularData.spec.tsx
@@ -4,8 +4,8 @@ import styles from '../../../../../../../../../src/sections/dataset/dataset-file
describe('FileTabularData', () => {
it('renders the tabular data and CopyToClipboardButton when tabularData is provided', () => {
const tabularData = {
- variablesCount: 10,
- observationsCount: 100,
+ variables: 10,
+ observations: 100,
unf: 'UNF:6:xXw6cIZnwHWvmRdwhYCQZA=='
}
cy.customMount()
diff --git a/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx b/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx
index d845be11e..256926532 100644
--- a/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx
+++ b/tests/component/sections/file/file-metadata/FileMetadata.spec.tsx
@@ -385,7 +385,7 @@ describe('FileMetadata', () => {
it('renders the tabular data if it exists', () => {
const metadataWithTabularData = FileMetadataMother.create({
- tabularData: FileTabularDataMother.create({ variablesCount: 123, observationsCount: 321 })
+ tabularData: FileTabularDataMother.create({ variables: 123, observations: 321 })
})
cy.customMount(
{
.getAllByDatasetPersistentId(dataset.persistentId, dataset.version)
.then((files) => {
const expectedTabularData = {
- variablesCount: 7,
- observationsCount: 10
+ variables: 7,
+ observations: 10
}
files.forEach((file) => {
- expect(file.metadata.tabularData?.variablesCount).to.deep.equal(
- expectedTabularData.variablesCount
+ expect(file.metadata.tabularData?.variables).to.deep.equal(
+ expectedTabularData.variables
)
- expect(file.metadata.tabularData?.observationsCount).to.deep.equal(
- expectedTabularData.observationsCount
+ expect(file.metadata.tabularData?.observations).to.deep.equal(
+ expectedTabularData.observations
)
expect(file.metadata.tabularData?.unf).to.not.be.undefined
})