From 95c1bf8f29c9249b4b3926f7bec3c2ae33de2610 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Fri, 24 Jan 2025 12:06:06 -0500 Subject: [PATCH 01/14] fix: update keepRawFields to prevent markdown --- .../domain/repositories/DatasetRepository.ts | 7 +++++- .../useCases/getDatasetByPersistentId.ts | 12 ++++++---- .../DatasetJSDataverseRepository.ts | 8 ++++--- src/sections/dataset/Dataset.tsx | 5 ++++- src/sections/dataset/DatasetProvider.tsx | 9 +++++++- .../EditDatasetMetadataFactory.tsx | 3 ++- .../shared/hierarchy/BreadcrumbsGenerator.tsx | 22 +++++++++++++++---- 7 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/dataset/domain/repositories/DatasetRepository.ts b/src/dataset/domain/repositories/DatasetRepository.ts index 7da556119..dde215f28 100644 --- a/src/dataset/domain/repositories/DatasetRepository.ts +++ b/src/dataset/domain/repositories/DatasetRepository.ts @@ -6,7 +6,12 @@ import { DatasetsWithCount } from '../models/DatasetsWithCount' import { VersionUpdateType } from '../models/VersionUpdateType' export interface DatasetRepository { - getByPersistentId: (persistentId: string, version?: string) => Promise + getByPersistentId: ( + persistentId: string, + version?: string, + requestedVersion?: string, + keepRawFields?: boolean + ) => Promise getLocks(persistentId: string): Promise getByPrivateUrlToken: (privateUrlToken: string) => Promise getVersionDiff: ( diff --git a/src/dataset/domain/useCases/getDatasetByPersistentId.ts b/src/dataset/domain/useCases/getDatasetByPersistentId.ts index 9f60aa247..c9d7a39a1 100644 --- a/src/dataset/domain/useCases/getDatasetByPersistentId.ts +++ b/src/dataset/domain/useCases/getDatasetByPersistentId.ts @@ -4,9 +4,13 @@ import { Dataset } from '../models/Dataset' export async function getDatasetByPersistentId( datasetRepository: DatasetRepository, persistentId: string, - version?: string + version?: string, + requestedVersion?: string, + keepRawFields?: boolean ): Promise { - return datasetRepository.getByPersistentId(persistentId, version).catch((error: Error) => { - throw new Error(error.message) - }) + return datasetRepository + .getByPersistentId(persistentId, version, requestedVersion, keepRawFields) + .catch((error: Error) => { + throw new Error(error.message) + }) } diff --git a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts index 91c1d5232..dcdd7c400 100644 --- a/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts +++ b/src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts @@ -172,10 +172,11 @@ export class DatasetJSDataverseRepository implements DatasetRepository { getByPersistentId( persistentId: string, version: string = DatasetNonNumericVersion.LATEST_PUBLISHED, - requestedVersion?: string + requestedVersion?: string, + keepRawFields?: boolean ): Promise { return getDataset - .execute(persistentId, version, includeDeaccessioned) + .execute(persistentId, version, includeDeaccessioned, keepRawFields) .then((jsDataset) => this.fetchDatasetDetails(jsDataset, version)) .then((datasetDetails) => { return this.fetchDownloadSizes(persistentId, version).then((downloadSizes) => { @@ -223,7 +224,8 @@ export class DatasetJSDataverseRepository implements DatasetRepository { return this.getByPersistentId( persistentId, DatasetNonNumericVersion.LATEST_PUBLISHED, - (requestedVersion = version) + (requestedVersion = version), + keepRawFields ) }) } diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index 07e115b88..8a1c173b5 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -26,6 +26,7 @@ import useUpdateDatasetAlerts from './useUpdateDatasetAlerts' import { QueryParamKey, Route } from '../Route.enum' import { MetadataBlockInfoRepository } from '../../metadata-block-info/domain/repositories/MetadataBlockInfoRepository' import { CollectionRepository } from '../../collection/domain/repositories/CollectionRepository' +import { MarkdownComponent } from '../dataset/markdown/MarkdownComponent' interface DatasetProps { datasetRepository: DatasetRepository @@ -97,7 +98,9 @@ export function Dataset({
-

{dataset.version.title}

+

+ +

diff --git a/src/sections/dataset/DatasetProvider.tsx b/src/sections/dataset/DatasetProvider.tsx index 6e1384047..28b4bbf7c 100644 --- a/src/sections/dataset/DatasetProvider.tsx +++ b/src/sections/dataset/DatasetProvider.tsx @@ -11,6 +11,7 @@ interface DatasetProviderProps { persistentId?: string privateUrlToken?: string version?: string + keepRawFields?: boolean } isPublishing?: boolean } @@ -25,7 +26,13 @@ export function DatasetProvider({ const getDataset = useCallback(() => { if (searchParams.persistentId) { - return getDatasetByPersistentId(repository, searchParams.persistentId, searchParams.version) + return getDatasetByPersistentId( + repository, + searchParams.persistentId, + searchParams.version, + undefined, + searchParams.keepRawFields + ) } if (searchParams.privateUrlToken) { return getDatasetByPrivateUrlToken(repository, searchParams.privateUrlToken) diff --git a/src/sections/edit-dataset-metadata/EditDatasetMetadataFactory.tsx b/src/sections/edit-dataset-metadata/EditDatasetMetadataFactory.tsx index 6b652afc6..847dd014f 100644 --- a/src/sections/edit-dataset-metadata/EditDatasetMetadataFactory.tsx +++ b/src/sections/edit-dataset-metadata/EditDatasetMetadataFactory.tsx @@ -20,11 +20,12 @@ function EditDatasetMetadataWithParams() { const persistentId = searchParams.get('persistentId') ?? undefined const searchParamVersion = searchParams.get('version') ?? undefined const version = searchParamVersionToDomainVersion(searchParamVersion) + const keepRawFields = true return ( + searchParams={{ persistentId: persistentId, version: version, keepRawFields: keepRawFields }}> { + if (item.type === 'dataset') { + return ( + + + + ) + } + return item.name + } return ( @@ -35,7 +46,7 @@ export function BreadcrumbsGenerator({ if (isLast) { return ( - {item.name} + {renderItemName(item)} ) } @@ -45,8 +56,11 @@ export function BreadcrumbsGenerator({ {item.name} }}> - {item.name} + linkProps={{ + page: Route.COLLECTIONS_BASE, + children: <>{item.name} + }}> + {renderItemName(item)} ) } @@ -62,7 +76,7 @@ export function BreadcrumbsGenerator({ persistentId: item.persistentId, version: item.version }}> - {item.name} + {renderItemName(item)} ) })} From 711025777057b9c8a9c75722aa2037dec9f3a396 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Fri, 24 Jan 2025 13:13:27 -0500 Subject: [PATCH 02/14] fix: update breadcrumb testcase --- tests/component/sections/dataset/Dataset.spec.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/component/sections/dataset/Dataset.spec.tsx b/tests/component/sections/dataset/Dataset.spec.tsx index c77b5e2b5..653b414fa 100644 --- a/tests/component/sections/dataset/Dataset.spec.tsx +++ b/tests/component/sections/dataset/Dataset.spec.tsx @@ -166,7 +166,8 @@ describe('Dataset', () => { testDataset ) - cy.findByText('Dataset Title').should('exist').should('have.class', 'active') + cy.findByText('Dataset Title').should('exist') + cy.findByText('Dataset Title').parents('.active').should('exist') cy.findByRole('link', { name: 'Root' }).should('exist') }) From 8b13d5d0927e32c591f36cd2b0b84c8c74d284fd Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Mon, 27 Jan 2025 22:07:01 -0500 Subject: [PATCH 03/14] fix: cancel update title and breadcrumb --- src/sections/dataset/Dataset.tsx | 5 +---- .../shared/hierarchy/BreadcrumbsGenerator.tsx | 17 +++-------------- .../component/sections/dataset/Dataset.spec.tsx | 2 +- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/sections/dataset/Dataset.tsx b/src/sections/dataset/Dataset.tsx index 8a1c173b5..07e115b88 100644 --- a/src/sections/dataset/Dataset.tsx +++ b/src/sections/dataset/Dataset.tsx @@ -26,7 +26,6 @@ import useUpdateDatasetAlerts from './useUpdateDatasetAlerts' import { QueryParamKey, Route } from '../Route.enum' import { MetadataBlockInfoRepository } from '../../metadata-block-info/domain/repositories/MetadataBlockInfoRepository' import { CollectionRepository } from '../../collection/domain/repositories/CollectionRepository' -import { MarkdownComponent } from '../dataset/markdown/MarkdownComponent' interface DatasetProps { datasetRepository: DatasetRepository @@ -98,9 +97,7 @@ export function Dataset({
-

- -

+

{dataset.version.title}

diff --git a/src/sections/shared/hierarchy/BreadcrumbsGenerator.tsx b/src/sections/shared/hierarchy/BreadcrumbsGenerator.tsx index c2d767c62..47e251c36 100644 --- a/src/sections/shared/hierarchy/BreadcrumbsGenerator.tsx +++ b/src/sections/shared/hierarchy/BreadcrumbsGenerator.tsx @@ -6,7 +6,6 @@ import { import { LinkToPage } from '../link-to-page/LinkToPage' import { Route } from '../../Route.enum' import styles from './BreadcrumbsGenerator.module.scss' -import { MarkdownComponent } from '../../dataset/markdown/MarkdownComponent' type BreadcrumbGeneratorProps = | { @@ -26,16 +25,6 @@ export function BreadcrumbsGenerator({ actionItemText }: BreadcrumbGeneratorProps) { const hierarchyArray = hierarchy.toArray() - const renderItemName = (item: UpwardHierarchyNode) => { - if (item.type === 'dataset') { - return ( - - - - ) - } - return item.name - } return ( @@ -46,7 +35,7 @@ export function BreadcrumbsGenerator({ if (isLast) { return ( - {renderItemName(item)} + {item.name} ) } @@ -60,7 +49,7 @@ export function BreadcrumbsGenerator({ page: Route.COLLECTIONS_BASE, children: <>{item.name} }}> - {renderItemName(item)} + {item.name} ) } @@ -76,7 +65,7 @@ export function BreadcrumbsGenerator({ persistentId: item.persistentId, version: item.version }}> - {renderItemName(item)} + {item.name} ) })} diff --git a/tests/component/sections/dataset/Dataset.spec.tsx b/tests/component/sections/dataset/Dataset.spec.tsx index 653b414fa..5357dfa73 100644 --- a/tests/component/sections/dataset/Dataset.spec.tsx +++ b/tests/component/sections/dataset/Dataset.spec.tsx @@ -167,7 +167,7 @@ describe('Dataset', () => { ) cy.findByText('Dataset Title').should('exist') - cy.findByText('Dataset Title').parents('.active').should('exist') + cy.findByText('Dataset Title').should('exist').should('have.class', 'active') cy.findByRole('link', { name: 'Root' }).should('exist') }) From a95ab0f48a113653c7ca09135ce104b7d9c6478d Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Wed, 5 Feb 2025 12:30:45 -0500 Subject: [PATCH 04/14] feat: update markdown transformation to textbox fields --- .../domain/models/MetadataBlockInfo.ts | 2 +- .../mappers/JSMetadataBlockInfoMapper.ts | 4 +- src/sections/dataset/DatasetFactory.tsx | 3 +- .../DatasetMetadataFieldValueFormatted.tsx | 36 ++++++++++++------ .../domain/models/MetadataBlockInfoMother.ts | 38 +++++++++---------- 5 files changed, 49 insertions(+), 34 deletions(-) diff --git a/src/metadata-block-info/domain/models/MetadataBlockInfo.ts b/src/metadata-block-info/domain/models/MetadataBlockInfo.ts index 9ace52756..7fd97174b 100644 --- a/src/metadata-block-info/domain/models/MetadataBlockInfo.ts +++ b/src/metadata-block-info/domain/models/MetadataBlockInfo.ts @@ -101,7 +101,7 @@ export interface MetadataBlockInfoDisplayFormat { export type MetadataBlockInfoDisplayFormatFields = Record -export type MetadataFieldInfo = Pick +export type MetadataFieldInfo = Pick export const METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER = '#VALUE' export const METADATA_FIELD_DISPLAY_FORMAT_NAME_PLACEHOLDER = '#NAME' diff --git a/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts b/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts index fa6a88aec..58357cadc 100644 --- a/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts +++ b/src/metadata-block-info/infrastructure/mappers/JSMetadataBlockInfoMapper.ts @@ -23,7 +23,7 @@ export class JSMetadataBlockInfoMapper { const fields: MetadataBlockInfoDisplayFormatFields = {} Object.entries(jsMetadataBlockInfoFields).forEach(([key, value]) => { - fields[key] = { displayFormat: this.toDisplayFormat(value.displayFormat) } + fields[key] = { displayFormat: this.toDisplayFormat(value.displayFormat), type: value.type } if (value.typeClass === 'compound' && value.childMetadataFields) { this.processCompoundFields(value.childMetadataFields, fields) @@ -38,7 +38,7 @@ export class JSMetadataBlockInfoMapper { result: MetadataBlockInfoDisplayFormatFields ): void { Object.entries(jsFields).forEach(([key, value]) => { - result[key] = { displayFormat: this.toDisplayFormat(value.displayFormat) } + result[key] = { displayFormat: this.toDisplayFormat(value.displayFormat), type: value.type } }) } diff --git a/src/sections/dataset/DatasetFactory.tsx b/src/sections/dataset/DatasetFactory.tsx index 5d70637b5..a3f269f57 100644 --- a/src/sections/dataset/DatasetFactory.tsx +++ b/src/sections/dataset/DatasetFactory.tsx @@ -49,6 +49,7 @@ function DatasetWithSearchParams() { const privateUrlToken = searchParams.get('privateUrlToken') const searchParamVersion = searchParams.get('version') ?? undefined const version = searchParamVersionToDomainVersion(searchParamVersion) + const keepRawFields = true const location = useLocation() const state = location.state as | { created: boolean; metadataUpdated: boolean; publishInProgress: boolean } @@ -81,7 +82,7 @@ function DatasetWithSearchParams() { return ( (isTextbox ? transformHtmlToMarkdown(value) : value) if (isArrayOfObjects(metadataFieldValue)) { return metadataFieldValue @@ -53,14 +56,14 @@ export function metadataFieldValueToDisplayFormat( } if (Array.isArray(metadataFieldValue)) { - return metadataFieldValue.join(`${separator} `) + return formatValue(metadataFieldValue.join(`${separator} `)) } if (isAnObject(metadataFieldValue)) { - return joinObjectValues(metadataFieldValue, separator) + return formatValue(joinObjectValues(metadataFieldValue, separator)) } - return metadataFieldValue + return formatValue(metadataFieldValue) } export function isArrayOfObjects(variable: unknown): variable is object[] { @@ -80,23 +83,34 @@ function joinSubFields( metadataBlockInfo?: MetadataBlockInfoDisplayFormat ): string { return Object.entries(metadataSubField) - .map(([subFieldName, subFieldValue]) => - formatSubFieldValue(subFieldValue, metadataBlockInfo?.fields[subFieldName]?.displayFormat) - ) + .map(([subFieldName, subFieldValue]) => { + return formatSubFieldValue( + subFieldValue, + metadataBlockInfo?.fields[subFieldName]?.displayFormat, + metadataBlockInfo?.fields[subFieldName]?.type + ) + }) .join(' ') } +const turndownService = new TurndownService() +function transformHtmlToMarkdown(source: string): string { + return turndownService.turndown(source) +} + function formatSubFieldValue( subFieldValue: string | undefined, - displayFormat: string | undefined + displayFormat: string | undefined, + type: string | undefined ): string { if (subFieldValue === undefined) { return '' } - if (!displayFormat) { - return subFieldValue - } + const formattedValue = + type === 'TEXTBOX' && subFieldValue ? transformHtmlToMarkdown(subFieldValue) : subFieldValue - return displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, subFieldValue) + return displayFormat + ? displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, formattedValue) + : formattedValue } diff --git a/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts b/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts index fed19e33e..f151fb629 100644 --- a/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts +++ b/tests/component/metadata-block-info/domain/models/MetadataBlockInfoMother.ts @@ -17,25 +17,25 @@ export class MetadataBlockInfoMother { return { name: MetadataBlockName.CITATION, fields: { - alternativePersistentId: { displayFormat: '' }, - publicationDate: { displayFormat: '' }, - citationDate: { displayFormat: '' }, - title: { displayFormat: '' }, - subject: { displayFormat: ';' }, - author: { displayFormat: '' }, - authorName: { displayFormat: '#VALUE' }, - authorAffiliation: { displayFormat: '(#VALUE)' }, - authorIdentifierScheme: { displayFormat: '- #VALUE:' }, - authorIdentifier: { displayFormat: '[#VALUE](https://orcid.org/#VALUE)' }, - datasetContact: { displayFormat: '#VALUE' }, - datasetContactName: { displayFormat: '#VALUE' }, - datasetContactAffiliation: { displayFormat: '(#VALUE)' }, - datasetContactEmail: { displayFormat: '[#VALUE](mailto:#VALUE)' }, - dsDescription: { displayFormat: '' }, - dsDescriptionValue: { displayFormat: '#VALUE' }, - producerURL: { displayFormat: '[#VALUE](#VALUE)' }, - producerLogoURL: { displayFormat: '![#NAME](#VALUE)' }, - dateOfCollectionStart: { displayFormat: '#NAME: #VALUE ' } + alternativePersistentId: { displayFormat: '', type: 'TEXT' }, + publicationDate: { displayFormat: '', type: 'DATE' }, + citationDate: { displayFormat: '', type: 'DATE' }, + title: { displayFormat: '', type: 'TEXT' }, + subject: { displayFormat: ';', type: 'TEXT' }, + author: { displayFormat: '', type: 'NONE' }, + authorName: { displayFormat: '#VALUE', type: 'TEXT' }, + authorAffiliation: { displayFormat: '(#VALUE)', type: 'TEXT' }, + authorIdentifierScheme: { displayFormat: '- #VALUE:', type: 'TEXT' }, + authorIdentifier: { displayFormat: '[#VALUE](https://orcid.org/#VALUE)', type: 'TEXT' }, + datasetContact: { displayFormat: '#VALUE', type: 'NONE' }, + datasetContactName: { displayFormat: '#VALUE', type: 'TEXT' }, + datasetContactAffiliation: { displayFormat: '(#VALUE)', type: 'TEXT' }, + datasetContactEmail: { displayFormat: '[#VALUE](mailto:#VALUE)', type: 'EMAIL' }, + dsDescription: { displayFormat: '', type: 'NONE' }, + dsDescriptionValue: { displayFormat: '#VALUE', type: 'TEXTBOX' }, + producerURL: { displayFormat: '[#VALUE](#VALUE)', type: 'NONE' }, + producerLogoURL: { displayFormat: '![#NAME](#VALUE)', type: 'URL' }, + dateOfCollectionStart: { displayFormat: '#NAME: #VALUE ', type: 'NONE' } }, ...props } From 4042cb552a510c68b0da55485a9104b0b61279d9 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Wed, 5 Feb 2025 13:19:35 -0500 Subject: [PATCH 05/14] feat: easier way to do markdown transformation --- .../DatasetMetadataFieldValueFormatted.tsx | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index b4f3fca46..01cc5e9d6 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -18,6 +18,13 @@ interface DatasetMetadataFieldValueFormattedProps { metadataFieldValue: DatasetMetadataFieldValueModel metadataBlockDisplayFormatInfo: MetadataBlockInfoDisplayFormat } + +const turndownService = new TurndownService() + +function transformHtmlToMarkdown(source: string): string { + return turndownService.turndown(source) +} + export function DatasetMetadataFieldValueFormatted({ metadataBlockName, metadataFieldName, @@ -37,7 +44,12 @@ export function DatasetMetadataFieldValueFormatted({ t(`${metadataBlockName}.datasetField.${metadataFieldName}.name`) ) - return + if (metadataBlockDisplayFormatInfo.fields[metadataFieldName]?.type === 'TEXTBOX') { + const markdownValue = transformHtmlToMarkdown(valueFormattedWithNamesTranslated) + return + } + + return {valueFormattedWithNamesTranslated} } export function metadataFieldValueToDisplayFormat( @@ -46,24 +58,22 @@ export function metadataFieldValueToDisplayFormat( metadataBlockInfo?: MetadataBlockInfoDisplayFormat ): string { const separator = metadataBlockInfo?.fields[metadataFieldName]?.displayFormat ?? '' - const isTextbox = metadataBlockInfo?.fields[metadataFieldName]?.type === 'TEXTBOX' - const formatValue = (value: string) => (isTextbox ? transformHtmlToMarkdown(value) : value) if (isArrayOfObjects(metadataFieldValue)) { return metadataFieldValue - .map((metadataSubField) => joinSubFields(metadataSubField, metadataBlockInfo)) - .join(' \n \n') + .map((subField) => joinSubFields(subField, metadataBlockInfo)) + .join('\n\n') } if (Array.isArray(metadataFieldValue)) { - return formatValue(metadataFieldValue.join(`${separator} `)) + return metadataFieldValue.join(separator) } if (isAnObject(metadataFieldValue)) { - return formatValue(joinObjectValues(metadataFieldValue, separator)) + return joinObjectValues(metadataFieldValue, separator) } - return formatValue(metadataFieldValue) + return metadataFieldValue } export function isArrayOfObjects(variable: unknown): variable is object[] { @@ -86,31 +96,23 @@ function joinSubFields( .map(([subFieldName, subFieldValue]) => { return formatSubFieldValue( subFieldValue, - metadataBlockInfo?.fields[subFieldName]?.displayFormat, - metadataBlockInfo?.fields[subFieldName]?.type + metadataBlockInfo?.fields[subFieldName]?.displayFormat ) }) .join(' ') } -const turndownService = new TurndownService() -function transformHtmlToMarkdown(source: string): string { - return turndownService.turndown(source) -} - function formatSubFieldValue( subFieldValue: string | undefined, - displayFormat: string | undefined, - type: string | undefined + displayFormat: string | undefined ): string { if (subFieldValue === undefined) { return '' } - const formattedValue = - type === 'TEXTBOX' && subFieldValue ? transformHtmlToMarkdown(subFieldValue) : subFieldValue + if (!displayFormat) { + return subFieldValue + } - return displayFormat - ? displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, formattedValue) - : formattedValue + return displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, subFieldValue) } From a2368dbb9294f468ddfd49deb350cc6e3d5b10bd Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Wed, 5 Feb 2025 13:27:12 -0500 Subject: [PATCH 06/14] fix: small tweaks --- .../DatasetMetadataFieldValueFormatted.tsx | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index 01cc5e9d6..4de339682 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -61,12 +61,12 @@ export function metadataFieldValueToDisplayFormat( if (isArrayOfObjects(metadataFieldValue)) { return metadataFieldValue - .map((subField) => joinSubFields(subField, metadataBlockInfo)) - .join('\n\n') + .map((metadataSubField) => joinSubFields(metadataSubField, metadataBlockInfo)) + .join(' \n \n') } if (Array.isArray(metadataFieldValue)) { - return metadataFieldValue.join(separator) + return metadataFieldValue.join(`${separator} `) } if (isAnObject(metadataFieldValue)) { @@ -93,12 +93,9 @@ function joinSubFields( metadataBlockInfo?: MetadataBlockInfoDisplayFormat ): string { return Object.entries(metadataSubField) - .map(([subFieldName, subFieldValue]) => { - return formatSubFieldValue( - subFieldValue, - metadataBlockInfo?.fields[subFieldName]?.displayFormat - ) - }) + .map(([subFieldName, subFieldValue]) => + formatSubFieldValue(subFieldValue, metadataBlockInfo?.fields[subFieldName]?.displayFormat) + ) .join(' ') } From 01ac7bf49f3c452ff5f56c55e0247531ce7f6d63 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Wed, 5 Feb 2025 15:17:03 -0500 Subject: [PATCH 07/14] fix: small tweaks --- .../DatasetMetadataFieldValueFormatted.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index 4de339682..202d1601d 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -49,7 +49,7 @@ export function DatasetMetadataFieldValueFormatted({ return } - return {valueFormattedWithNamesTranslated} + return } export function metadataFieldValueToDisplayFormat( From a1ba30494b982ebd86cb5ade4412c3c68b114589 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Wed, 5 Feb 2025 16:45:07 -0500 Subject: [PATCH 08/14] fix: try to improve coverage --- .../sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx index 5b7649f5c..6909b406d 100644 --- a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx +++ b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx @@ -63,6 +63,7 @@ describe('DatasetMetadata', () => { ) cy.findByAltText(translatedAltText).should('exist') cy.findByAltText(translatedAltText).should('have.attr', 'src', imageUrl) + cy.intercept(imageUrl).as('image') }) } } else { @@ -323,5 +324,6 @@ describe('DatasetMetadata', () => { ) cy.findAllByTestId('ds-metadata-block-display-format-error').should('exist') + cy.contains('Error getting metadata block display info').should('not.exist') }) }) From 86bfeb0d058f62fba141d0362aa774919f507a07 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Fri, 7 Feb 2025 11:11:59 -0500 Subject: [PATCH 09/14] fix: some fix --- src/sections/dataset/DatasetProvider.tsx | 2 +- .../DatasetMetadataFieldValueFormatted.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sections/dataset/DatasetProvider.tsx b/src/sections/dataset/DatasetProvider.tsx index 28b4bbf7c..4d7450c26 100644 --- a/src/sections/dataset/DatasetProvider.tsx +++ b/src/sections/dataset/DatasetProvider.tsx @@ -31,7 +31,7 @@ export function DatasetProvider({ searchParams.persistentId, searchParams.version, undefined, - searchParams.keepRawFields + true ) } if (searchParams.privateUrlToken) { diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index 202d1601d..f0cb2b379 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -46,6 +46,7 @@ export function DatasetMetadataFieldValueFormatted({ if (metadataBlockDisplayFormatInfo.fields[metadataFieldName]?.type === 'TEXTBOX') { const markdownValue = transformHtmlToMarkdown(valueFormattedWithNamesTranslated) + return } From a89de4a18a5d0c1b5b531beb9ce86ab308f94dd4 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Wed, 12 Feb 2025 13:46:15 -0500 Subject: [PATCH 10/14] fix: keepRawField parameter and test duplicates --- src/sections/dataset/DatasetFactory.tsx | 3 +-- src/sections/dataset/DatasetProvider.tsx | 1 - .../edit-dataset-metadata/EditDatasetMetadataFactory.tsx | 3 +-- tests/component/sections/dataset/Dataset.spec.tsx | 1 - .../sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx | 1 - 5 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/sections/dataset/DatasetFactory.tsx b/src/sections/dataset/DatasetFactory.tsx index a3f269f57..5d70637b5 100644 --- a/src/sections/dataset/DatasetFactory.tsx +++ b/src/sections/dataset/DatasetFactory.tsx @@ -49,7 +49,6 @@ function DatasetWithSearchParams() { const privateUrlToken = searchParams.get('privateUrlToken') const searchParamVersion = searchParams.get('version') ?? undefined const version = searchParamVersionToDomainVersion(searchParamVersion) - const keepRawFields = true const location = useLocation() const state = location.state as | { created: boolean; metadataUpdated: boolean; publishInProgress: boolean } @@ -82,7 +81,7 @@ function DatasetWithSearchParams() { return ( + searchParams={{ persistentId: persistentId, version: version }}> { testDataset ) - cy.findByText('Dataset Title').should('exist') cy.findByText('Dataset Title').should('exist').should('have.class', 'active') cy.findByRole('link', { name: 'Root' }).should('exist') }) diff --git a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx index 6909b406d..ec60b915e 100644 --- a/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx +++ b/tests/component/sections/dataset/dataset-metadata/DatasetMetadata.spec.tsx @@ -63,7 +63,6 @@ describe('DatasetMetadata', () => { ) cy.findByAltText(translatedAltText).should('exist') cy.findByAltText(translatedAltText).should('have.attr', 'src', imageUrl) - cy.intercept(imageUrl).as('image') }) } } else { From bd123335acf79362a1ebfb5c7eeb9d94768228b8 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Tue, 18 Feb 2025 11:47:25 -0500 Subject: [PATCH 11/14] fix: add transformHtmlToMarkdown To subfields --- .../DatasetMetadataFieldValueFormatted.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index f0cb2b379..86b071c9e 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -94,9 +94,18 @@ function joinSubFields( metadataBlockInfo?: MetadataBlockInfoDisplayFormat ): string { return Object.entries(metadataSubField) - .map(([subFieldName, subFieldValue]) => - formatSubFieldValue(subFieldValue, metadataBlockInfo?.fields[subFieldName]?.displayFormat) - ) + .map(([subFieldName, subFieldValue]) => { + let formattedSubFieldValue = formatSubFieldValue( + subFieldValue, + metadataBlockInfo?.fields[subFieldName]?.displayFormat + ) + const subFieldType = metadataBlockInfo?.fields[subFieldName]?.type as string | undefined + + if (subFieldType === 'TEXTBOX') + formattedSubFieldValue = transformHtmlToMarkdown(formattedSubFieldValue) + + return formattedSubFieldValue + }) .join(' ') } @@ -111,6 +120,7 @@ function formatSubFieldValue( if (!displayFormat) { return subFieldValue } + console.log(displayFormat, subFieldValue) return displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, subFieldValue) } From 8df7934a17edcf9977e8c1da951c8946a3325618 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Tue, 18 Feb 2025 11:48:13 -0500 Subject: [PATCH 12/14] fix: delete console.log --- .../DatasetMetadataFieldValueFormatted.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx index 86b071c9e..79087751c 100644 --- a/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx +++ b/src/sections/dataset/dataset-metadata/dataset-metadata-fields/DatasetMetadataFieldValueFormatted.tsx @@ -120,7 +120,6 @@ function formatSubFieldValue( if (!displayFormat) { return subFieldValue } - console.log(displayFormat, subFieldValue) return displayFormat.replaceAll(METADATA_FIELD_DISPLAY_FORMAT_PLACEHOLDER, subFieldValue) } From 2450b95a5753ad2352fd4186ab35639acf8bf233 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Fri, 21 Feb 2025 11:53:11 -0500 Subject: [PATCH 13/14] fix: add turndown service to pacakage.json --- package-lock.json | 19 ++++++++++--------- package.json | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2bc24fc7e..bf843721d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ "react-toastify": "11.0.2", "react-topbar-progress-indicator": "4.1.1", "sass": "1.58.1", + "turndown": "^7.2.0", "typescript": "5.7.2", "use-deep-compare": "1.2.1", "vite-plugin-istanbul": "4.0.1", @@ -5367,6 +5368,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==" + }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -22025,11 +22031,6 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/domino": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", - "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" - }, "node_modules/dompurify": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.3.tgz", @@ -41971,11 +41972,11 @@ } }, "node_modules/turndown": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.2.tgz", - "integrity": "sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", + "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", "dependencies": { - "domino": "^2.1.6" + "@mixmark-io/domino": "^2.2.0" } }, "node_modules/tweetnacl": { diff --git a/package.json b/package.json index 1e5ed0b88..e46777382 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "react-toastify": "11.0.2", "react-topbar-progress-indicator": "4.1.1", "sass": "1.58.1", + "turndown": "^7.2.0", "typescript": "5.7.2", "use-deep-compare": "1.2.1", "vite-plugin-istanbul": "4.0.1", From 8f0200291e385e608de0900d0192fe82ef3ea8be Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Fri, 21 Feb 2025 12:22:54 -0500 Subject: [PATCH 14/14] fix: remove caret for turndown --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf843721d..5e037cc94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "react-toastify": "11.0.2", "react-topbar-progress-indicator": "4.1.1", "sass": "1.58.1", - "turndown": "^7.2.0", + "turndown": "7.2.0", "typescript": "5.7.2", "use-deep-compare": "1.2.1", "vite-plugin-istanbul": "4.0.1", diff --git a/package.json b/package.json index e46777382..8134ef003 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "react-toastify": "11.0.2", "react-topbar-progress-indicator": "4.1.1", "sass": "1.58.1", - "turndown": "^7.2.0", + "turndown": "7.2.0", "typescript": "5.7.2", "use-deep-compare": "1.2.1", "vite-plugin-istanbul": "4.0.1",