Skip to content

Commit 6469d8b

Browse files
committed
feat: add correct use cases to update terms
1 parent 8919df6 commit 6469d8b

File tree

16 files changed

+774
-233
lines changed

16 files changed

+774
-233
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@dnd-kit/sortable": "8.0.0",
1919
"@dnd-kit/utilities": "3.2.2",
2020
"@faker-js/faker": "7.6.0",
21-
"@iqss/dataverse-client-javascript": "2.0.0-alpha.77",
21+
"@iqss/dataverse-client-javascript": "2.1.0-pr389.ec2282b",
2222
"@iqss/dataverse-design-system": "*",
2323
"@istanbuljs/nyc-config-typescript": "1.0.2",
2424
"@tanstack/react-table": "8.9.2",

public/locales/en/dataset.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@
104104
"heading": "Success!",
105105
"alertText": "The terms for this dataset have been updated."
106106
},
107+
"licenseUpdated": {
108+
"heading": "Success!",
109+
"alertText": "The license for this dataset has been updated."
110+
},
107111
"thumbnailUpdated": {
108112
"heading": "Success!",
109113
"alertText": "Dataset thumbnail updated."

src/dataset/domain/repositories/DatasetRepository.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ export interface DatasetRepository {
3434
datasetDTO: DatasetDTO,
3535
sourceLastUpdateTime?: string
3636
) => Promise<void>
37-
updateLicense: (
38-
datasetId: string | number,
39-
licenseUpdateRequest: DatasetLicenseUpdateRequest
40-
) => Promise<void>
4137
deaccession: (
4238
datasetId: string | number,
4339
version: string,
@@ -63,6 +59,10 @@ export interface DatasetRepository {
6359
) => Promise<FormattedCitation>
6460
getTemplates: (collectionIdOrAlias: number | string) => Promise<DatasetTemplate[]>
6561
updateTermsOfAccess: (datasetId: string | number, termsOfAccess: TermsOfAccess) => Promise<void>
62+
updateDatasetLicense: (
63+
datasetId: string | number,
64+
licenseUpdateRequest: DatasetLicenseUpdateRequest
65+
) => Promise<void>
6666
link(datasetId: string | number, collectionIdOrAlias: string | number): Promise<void>
6767
unlink(datasetId: string | number, collectionIdOrAlias: string | number): Promise<void>
6868
getDatasetLinkedCollections: (datasetId: string | number) => Promise<CollectionSummary[]>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { DatasetLicenseUpdateRequest } from '../models/DatasetLicenseUpdateRequest'
2+
import { DatasetRepository } from '../repositories/DatasetRepository'
3+
4+
export function updateDatasetLicense(
5+
datasetRepository: DatasetRepository,
6+
datasetId: string | number,
7+
licenseUpdateRequest: DatasetLicenseUpdateRequest
8+
): Promise<void> {
9+
return datasetRepository
10+
.updateDatasetLicense(datasetId, licenseUpdateRequest)
11+
.catch((error: Error) => {
12+
throw new Error(error.message)
13+
})
14+
}

src/dataset/infrastructure/mappers/JSDatasetMapper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class JSDatasetMapper {
7676
),
7777
JSDatasetMapper.toDatasetPermissions(jsDatasetPermissions),
7878
JSDatasetMapper.toLocks(jsDatasetLocks),
79-
true, // TODO Connect with dataset hasValidTermsOfAccess
79+
jsDataset.termsOfUse.termsOfAccess.termsOfAccessForRestrictedFiles !== undefined,
8080
true, // TODO Connect with dataset hasOneTabularFileAtLeast
8181
true, // TODO Connect with dataset isValid
8282
JSDatasetMapper.toDownloadUrls(jsDataset.persistentId, version),

src/dataset/infrastructure/repositories/DatasetJSDataverseRepository.ts

Lines changed: 17 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { DatasetRepository } from '../../domain/repositories/DatasetRepository'
22
import {
3-
CustomTerms,
43
Dataset,
54
DatasetLock,
65
DatasetNonNumericVersion,
@@ -43,7 +42,9 @@ import {
4342
getDatasetTemplates,
4443
linkDataset,
4544
unlinkDataset,
46-
getDatasetLinkedCollections
45+
getDatasetLinkedCollections,
46+
updateTermsOfAccess,
47+
updateDatasetLicense
4748
} from '@iqss/dataverse-client-javascript'
4849
import { JSDatasetMapper } from '../mappers/JSDatasetMapper'
4950
import { DatasetPaginationInfo } from '../../domain/models/DatasetPaginationInfo'
@@ -52,7 +53,7 @@ import { DatasetDTO } from '../../domain/useCases/DTOs/DatasetDTO'
5253
import { DatasetDTOMapper } from '../mappers/DatasetDTOMapper'
5354
import { DatasetsWithCount } from '../../domain/models/DatasetsWithCount'
5455
import { VersionUpdateType } from '../../domain/models/VersionUpdateType'
55-
import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
56+
import { DatasetVersionSummarySubset } from '@/dataset/domain/models/DatasetVersionSummaryInfo'
5657
import { DatasetDownloadCount } from '@/dataset/domain/models/DatasetDownloadCount'
5758
import { FormattedCitation, CitationFormat } from '@/dataset/domain/models/DatasetCitation'
5859
import { DatasetLicenseUpdateRequest } from '../../domain/models/DatasetLicenseUpdateRequest'
@@ -381,10 +382,16 @@ export class DatasetJSDataverseRepository implements DatasetRepository {
381382
throw new Error(error.message)
382383
})
383384
}
384-
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
385-
return getDatasetVersionsSummaries.execute(datasetId).catch((error: ReadError) => {
386-
throw error
387-
})
385+
getDatasetVersionsSummaries(
386+
datasetId: number | string,
387+
limit?: number,
388+
offset?: number
389+
): Promise<DatasetVersionSummarySubset> {
390+
return getDatasetVersionsSummaries
391+
.execute(datasetId, limit, offset)
392+
.catch((error: ReadError) => {
393+
throw error
394+
})
388395
}
389396
getDownloadCount(
390397
datasetId: string | number,
@@ -455,63 +462,14 @@ export class DatasetJSDataverseRepository implements DatasetRepository {
455462
})
456463
}
457464

458-
updateLicense(
465+
updateDatasetLicense(
459466
datasetId: string | number,
460467
licenseUpdateRequest: DatasetLicenseUpdateRequest
461468
): Promise<void> {
462-
// return updateTermsOfAccess.execute(datasetId, licenseUpdateRequest)
463-
// TODO: This method should use updateDatasetLicense from js-dataverse when available
464-
// For now, implementing as a direct API call
465-
466-
// The license API requires numeric dataset ID, not persistentId
467-
// We need to use the dataset.id (numeric) for license updates
468-
const apiUrl = `${DatasetJSDataverseRepository.DATAVERSE_BACKEND_URL}/api/datasets/${datasetId}/license`
469-
470-
const payload: {
471-
name?: string
472-
customTerms?: CustomTerms
473-
} = {}
474-
475-
if (licenseUpdateRequest.name) {
476-
payload.name = licenseUpdateRequest.name
477-
}
478-
479-
if (licenseUpdateRequest.customTerms) {
480-
payload.customTerms = licenseUpdateRequest.customTerms
481-
}
482-
483-
return axiosInstance
484-
.put(apiUrl, payload)
485-
.then(() => undefined)
486-
.catch((error: unknown) => {
487-
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
488-
throw new Error(`Failed to update dataset license: ${errorMessage}`)
489-
})
469+
return updateDatasetLicense.execute(datasetId, licenseUpdateRequest)
490470
}
491471

492472
updateTermsOfAccess(datasetId: string | number, termsOfAccess: TermsOfAccess): Promise<void> {
493-
// return updateTermsOfAccess.execute(datasetId, termsOfAccess)
494-
495-
// TODO: This method should use updateDatasetLicense from js-dataverse when available
496-
// For now, implementing as a direct API call
497-
498-
const apiUrl = `${DatasetJSDataverseRepository.DATAVERSE_BACKEND_URL}/api/datasets/${datasetId}/access`
499-
500-
// Map client model field to API expected field name
501-
const { termsOfAccessForRestrictedFiles, ...rest } = termsOfAccess
502-
const payload = {
503-
...rest,
504-
...(termsOfAccessForRestrictedFiles !== undefined
505-
? { termsOfAccess: termsOfAccessForRestrictedFiles }
506-
: {})
507-
}
508-
509-
return axiosInstance
510-
.put(apiUrl, { customTermsOfAccess: payload })
511-
.then(() => undefined)
512-
.catch((error: unknown) => {
513-
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
514-
throw new Error(`Failed to update dataset terms of access: ${errorMessage}`)
515-
})
473+
return updateTermsOfAccess.execute(datasetId, termsOfAccess)
516474
}
517475
}

src/sections/dataset/dataset-terms/DatasetTermsRow.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Col, Row } from '@iqss/dataverse-design-system'
22
import { QuestionMarkTooltip } from '@iqss/dataverse-design-system'
33
import { MarkdownComponent } from '@/sections/dataset/markdown/MarkdownComponent'
44
import styles from '@/sections/dataset/dataset-terms/DatasetTerms.module.scss'
5+
import TurndownService from 'turndown'
56

67
interface DatasetTermsRowProps {
78
title: string
@@ -14,13 +15,20 @@ export function DatasetTermsRow({ title, tooltipMessage, value }: DatasetTermsRo
1415
return null
1516
}
1617

18+
const turndownService = new TurndownService()
19+
function convertHtmlToMarkdown(html: string): string {
20+
return turndownService.turndown(html)
21+
}
22+
1723
return (
1824
<Row className={styles['dataset-terms-row']}>
1925
<Col sm={3}>
2026
<strong>{title} </strong>
2127
<QuestionMarkTooltip placement="right" message={tooltipMessage} />
2228
</Col>
23-
<Col>{value && <div>{<MarkdownComponent markdown={value} />}</div>}</Col>
29+
<Col>
30+
{value && <div>{<MarkdownComponent markdown={convertHtmlToMarkdown(value)} />}</div>}
31+
</Col>
2432
</Row>
2533
)
2634
}

src/sections/edit-dataset-terms/EditDatasetTerms.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ export const EditDatasetTerms = ({
120120
</Accordion>
121121
) : (
122122
<Tabs activeKey={activeKey} onSelect={updateTabOnSelect}>
123-
<Tabs.Tab eventKey={tabsKeys.datasetTerms} title={t('editTerms.tabs.datasetTerms')}>
123+
<Tabs.Tab
124+
eventKey={tabsKeys.datasetTerms}
125+
title={t('editTerms.tabs.datasetTerms')}
126+
disabled={true}>
124127
<div className={styles['tab-container']}>
125128
<DatasetTermsTab
126129
licenseRepository={licenseRepository}
@@ -145,7 +148,10 @@ export const EditDatasetTerms = ({
145148
</div>
146149
</Tabs.Tab>
147150

148-
<Tabs.Tab eventKey={tabsKeys.guestBook} title={t('editTerms.tabs.guestBook')}>
151+
<Tabs.Tab
152+
eventKey={tabsKeys.guestBook}
153+
title={t('editTerms.tabs.guestBook')}
154+
disabled={true}>
149155
<div className={styles['tab-container']}>
150156
<GuestBookTab />
151157
</div>

src/sections/edit-dataset-terms/dataset-terms-tab/useUpdateDatasetLicense.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { DatasetRepository } from '../../../dataset/domain/repositories/DatasetR
44
import { DatasetLicenseUpdateRequest } from '../../../dataset/domain/models/DatasetLicenseUpdateRequest'
55
import { JSDataverseWriteErrorHandler } from '../../../shared/helpers/JSDataverseWriteErrorHandler'
66
import { WriteError } from '@iqss/dataverse-client-javascript'
7+
import { updateDatasetLicense } from '@/dataset/domain/useCases/updateDatasetLicense'
78

89
export interface UseUpdateDatasetLicense {
910
datasetRepository: DatasetRepository
@@ -35,7 +36,7 @@ export const useUpdateDatasetLicense = ({
3536
setError(null)
3637

3738
try {
38-
await datasetRepository.updateLicense(datasetId, licenseUpdateRequest)
39+
await updateDatasetLicense(datasetRepository, datasetId, licenseUpdateRequest)
3940
onSuccessfulUpdateLicense()
4041
} catch (err: WriteError | unknown) {
4142
if (err instanceof WriteError) {

0 commit comments

Comments
 (0)