Skip to content

Commit 3c72152

Browse files
committed
clear some redundant codes
1 parent a60f4df commit 3c72152

File tree

12 files changed

+260
-384
lines changed

12 files changed

+260
-384
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
1212
- Contact Owner button in File Page.
1313
- Share button in File Page.
1414
- Link Collection and Link Dataset features.
15+
- Edit Terms Integration
1516

1617
### Changed
1718

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.1.0-pr389.ec2282b",
21+
"@iqss/dataverse-client-javascript": "2.0.0-alpha.81",
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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@
152152
"restrictedFiles": "Restricted Files",
153153
"termsOfAccess": "Terms of Access for Restricted Files",
154154
"termsOfAccessInfo": "Restricting limits access to published files. People who want to use the restricted files can request access by default. If you disable request access, you must add information about access to the Terms of Access field. Learn about restricting files and dataset access in the User Guide.",
155+
"termsOfAccessRequiredWhenRequestDisabled": "Add information about terms of access for restricted files when request access is disabled.",
155156
"requestAccess": "Request Access",
156157
"enableAccessRequest": "Enable access request",
157158
"dataAccessPlace": "Data Access Place",

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ export function License({ license }: LicenseProps) {
4747
{!license && (
4848
<span>
4949
{t('customTerms.title')} - {t('customTerms.description')}
50-
{/* TODO: Add button to navigate to custom terms tab*/}
5150
</span>
5251
)}
5352
</Col>

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

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import { useDataset } from '../dataset/DatasetContext'
1212
import { BreadcrumbsGenerator } from '../shared/hierarchy/BreadcrumbsGenerator'
1313
import { NotFoundPage } from '../not-found-page/NotFoundPage'
1414
import { AppLoader } from '../shared/layout/app-loader/AppLoader'
15-
import { DatasetLicense, CustomTerms } from '@/dataset/domain/models/Dataset'
16-
import styles from './EditDatasetTerms.module.scss'
1715
import { useMediaQuery } from '@/shared/hooks/useMediaQuery'
16+
import styles from './EditDatasetTerms.module.scss'
1817

1918
const tabsKeys = EditDatasetTermsHelper.EDIT_DATASET_TERMS_TABS_KEYS
2019

@@ -67,19 +66,14 @@ export const EditDatasetTerms = ({
6766
</Alert>
6867

6968
{isMobile ? (
70-
<Accordion defaultActiveKey={[tabsKeys.datasetTerms]} alwaysOpen={true}>
69+
<Accordion defaultActiveKey={[tabsKeys.datasetTerms]}>
7170
<Accordion.Item eventKey={tabsKeys.datasetTerms}>
7271
<Accordion.Header>{t('editTerms.tabs.datasetTerms')}</Accordion.Header>
7372
<Accordion.Body>
7473
<div className={styles['tab-container']}>
7574
<DatasetTermsTab
7675
licenseRepository={licenseRepository}
7776
datasetRepository={datasetRepository}
78-
initialLicense={
79-
(dataset.license as DatasetLicense) ||
80-
(dataset.termsOfUse.customTerms as CustomTerms)
81-
}
82-
isInitialCustomTerms={dataset.termsOfUse.customTerms !== undefined}
8377
/>
8478
</div>
8579
</Accordion.Body>
@@ -89,10 +83,7 @@ export const EditDatasetTerms = ({
8983
<Accordion.Header>{t('editTerms.tabs.restrictedFilesTerms')}</Accordion.Header>
9084
<Accordion.Body>
9185
<div className={styles['tab-container']}>
92-
<RestrictedFilesTab
93-
datasetRepository={datasetRepository}
94-
initialTermsOfAccess={dataset.termsOfUse.termsOfAccess}
95-
/>
86+
<RestrictedFilesTab datasetRepository={datasetRepository} />
9687
</div>
9788
</Accordion.Body>
9889
</Accordion.Item>
@@ -113,11 +104,6 @@ export const EditDatasetTerms = ({
113104
<DatasetTermsTab
114105
licenseRepository={licenseRepository}
115106
datasetRepository={datasetRepository}
116-
initialLicense={
117-
(dataset.license as DatasetLicense) ||
118-
(dataset.termsOfUse.customTerms as CustomTerms)
119-
}
120-
isInitialCustomTerms={dataset.termsOfUse.customTerms !== undefined}
121107
/>
122108
</div>
123109
</Tabs.Tab>
@@ -126,10 +112,7 @@ export const EditDatasetTerms = ({
126112
eventKey={tabsKeys.restrictedFilesTerms}
127113
title={t('editTerms.tabs.restrictedFilesTerms')}>
128114
<div className={styles['tab-container']}>
129-
<RestrictedFilesTab
130-
datasetRepository={datasetRepository}
131-
initialTermsOfAccess={dataset.termsOfUse.termsOfAccess}
132-
/>
115+
<RestrictedFilesTab datasetRepository={datasetRepository} />
133116
</div>
134117
</Tabs.Tab>
135118

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

Lines changed: 43 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { useEffect, useMemo, useRef, useState } from 'react'
1+
import { useEffect, useMemo, useRef } from 'react'
22
import { useTranslation } from 'react-i18next'
33
import { useForm, Controller, FormProvider } from 'react-hook-form'
44
import { toast } from 'react-toastify'
5-
import { Form, Row, Col, Button, Alert, Spinner } from '@iqss/dataverse-design-system'
6-
import { DatasetLicense, CustomTerms } from '../../../dataset/domain/models/Dataset'
5+
import { Form, Row, Col, Button, Alert } from '@iqss/dataverse-design-system'
6+
import { CustomTerms } from '../../../dataset/domain/models/Dataset'
77
import { LicenseRepository } from '../../../licenses/domain/repositories/LicenseRepository'
88
import { useGetLicenses } from './useGetLicenses'
99
import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository'
1010
import { useDataset } from '../../dataset/DatasetContext'
11-
import { updateDatasetLicense } from '@/dataset/domain/useCases/updateDatasetLicense'
11+
import { useUpdateDatasetLicense } from './useUpdateDatasetLicense'
1212
import styles from './DatasetTermsTab.module.scss'
1313

1414
interface DatasetTermsFormData {
@@ -17,34 +17,33 @@ interface DatasetTermsFormData {
1717
}
1818

1919
interface DatasetTermsTabProps {
20-
initialLicense: DatasetLicense | CustomTerms
2120
licenseRepository: LicenseRepository
2221
datasetRepository: DatasetRepository
23-
isInitialCustomTerms: boolean
2422
}
2523

26-
export function DatasetTermsTab({
27-
initialLicense,
28-
licenseRepository,
29-
datasetRepository,
30-
isInitialCustomTerms
31-
}: DatasetTermsTabProps) {
24+
export function DatasetTermsTab({ licenseRepository, datasetRepository }: DatasetTermsTabProps) {
3225
const { t } = useTranslation('dataset')
3326
const { t: tShared } = useTranslation('shared')
3427
const { dataset, refreshDataset } = useDataset()
3528

3629
const formContainerRef = useRef<HTMLDivElement>(null)
37-
const [isSubmitting, setIsSubmitting] = useState(false)
38-
const [submitError, setSubmitError] = useState<string | null>(null)
3930

4031
const { licenses, isLoadingLicenses, errorLicenses } = useGetLicenses({
4132
licenseRepository,
4233
autoFetch: true
4334
})
4435

36+
const { handleUpdateLicense, isLoading, error } = useUpdateDatasetLicense({
37+
datasetRepository,
38+
onSuccessfulUpdateLicense: () => {
39+
toast.success(t('alerts.licenseUpdated.alertText'))
40+
refreshDataset()
41+
}
42+
})
43+
4544
const initialCustomTerms = useMemo((): CustomTerms => {
46-
if (isInitialCustomTerms) {
47-
return initialLicense as CustomTerms
45+
if (dataset?.termsOfUse.customTerms) {
46+
return dataset.termsOfUse.customTerms
4847
}
4948
return {
5049
termsOfUse: '',
@@ -56,11 +55,10 @@ export function DatasetTermsTab({
5655
conditions: '',
5756
disclaimer: ''
5857
}
59-
}, [initialLicense, isInitialCustomTerms])
58+
}, [dataset?.termsOfUse.customTerms])
6059

6160
const licenseOptions = useMemo(() => {
6261
const dynamicOptions = licenses
63-
.filter((license) => license.active)
6462
.sort((a, b) => a.sortOrder - b.sortOrder)
6563
.map((license) => ({
6664
value: license.id.toString(),
@@ -75,23 +73,23 @@ export function DatasetTermsTab({
7573
label: t('editTerms.datasetTerms.customTermsLabel'),
7674
uri: '',
7775
iconUri: '',
78-
isDefault: isInitialCustomTerms
76+
isDefault: dataset?.termsOfUse.customTerms !== undefined
7977
})
8078

8179
return dynamicOptions
82-
}, [licenses, t, isInitialCustomTerms])
80+
}, [licenses, t, dataset?.termsOfUse.customTerms])
8381

8482
// Determine the default license value based on initial state and available options
8583
const defaultLicenseValue = useMemo(() => {
86-
if (isInitialCustomTerms) {
84+
if (dataset?.termsOfUse.customTerms !== undefined) {
8785
return 'CUSTOM'
8886
} else {
8987
const matchingLicense = licenseOptions.find(
90-
(option) => option.label === (initialLicense as DatasetLicense).name
88+
(option) => option.label === dataset?.license?.name
9189
)
9290
return matchingLicense?.value
9391
}
94-
}, [licenseOptions, initialLicense, isInitialCustomTerms])
92+
}, [licenseOptions, dataset?.license?.name, dataset?.termsOfUse.customTerms])
9593

9694
const form = useForm<DatasetTermsFormData>({
9795
defaultValues: {
@@ -135,56 +133,27 @@ export function DatasetTermsTab({
135133
}))
136134
}, [initialCustomTerms, isCustomTerms, t])
137135

138-
const onSubmit = async (data: DatasetTermsFormData) => {
136+
const onSubmit = (data: DatasetTermsFormData) => {
139137
if (!dataset) return
140138

141-
setIsSubmitting(true)
142-
setSubmitError(null)
143-
144-
try {
145-
if (data.license === 'CUSTOM') {
146-
await updateDatasetLicense(datasetRepository, dataset.id, {
147-
customTerms: data.customTerms
139+
if (data.license === 'CUSTOM') {
140+
void handleUpdateLicense(dataset.id, {
141+
customTerms: data.customTerms
142+
})
143+
} else {
144+
const selectedLicense = licenseOptions.find((option) => option.value === data.license)
145+
if (selectedLicense) {
146+
void handleUpdateLicense(dataset.id, {
147+
name: selectedLicense.label
148148
})
149-
} else {
150-
const selectedLicense = licenseOptions.find((option) => option.value === data.license)
151-
if (selectedLicense) {
152-
await updateDatasetLicense(datasetRepository, dataset.id, {
153-
name: selectedLicense.label
154-
})
155-
}
156149
}
157-
toast.success(t('alerts.licenseUpdated.alertText'))
158-
refreshDataset()
159-
} catch (err) {
160-
const errorMessage =
161-
err instanceof Error && err.message ? err.message : t('editTerms.defaultLicenseUpdateError')
162-
setSubmitError(errorMessage)
163-
onSubmitError()
164-
} finally {
165-
setIsSubmitting(false)
166-
}
167-
}
168-
169-
function onSubmitError() {
170-
if (formContainerRef.current) {
171-
formContainerRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' })
172150
}
173151
}
174152

175-
const preventEnterSubmit = (e: React.KeyboardEvent<HTMLFormElement | HTMLButtonElement>) => {
176-
if (e.key !== 'Enter') return
177-
178-
const isButton = e.target instanceof HTMLButtonElement
179-
const isButtonTypeSubmit = isButton ? (e.target as HTMLButtonElement).type === 'submit' : false
180-
181-
if (!isButton && !isButtonTypeSubmit) e.preventDefault()
182-
}
183-
184153
return (
185154
<div ref={formContainerRef} className={styles['dataset-terms-tab']}>
186155
<FormProvider {...form}>
187-
<form onSubmit={handleSubmit(onSubmit)} onKeyDown={preventEnterSubmit} noValidate={true}>
156+
<form onSubmit={handleSubmit(onSubmit)} noValidate={true}>
188157
{/* License/Data Use Agreement Section */}
189158
<Row style={{ marginBottom: '1rem' }}>
190159
<Col sm={4}>
@@ -206,17 +175,11 @@ export function DatasetTermsTab({
206175
onChange={onChange}
207176
isInvalid={invalid}
208177
disabled={isLoadingLicenses}>
209-
{isLoadingLicenses ? (
210-
<Spinner variant="light" animation="border" size="sm" />
211-
) : errorLicenses ? (
212-
<Alert variant="danger">{tShared('loading')}</Alert>
213-
) : (
214-
licenseOptions.map((option) => (
215-
<option key={option.value} value={option.value}>
216-
{option.label}
217-
</option>
218-
))
219-
)}
178+
{licenseOptions.map((option) => (
179+
<option key={option.value} value={option.value}>
180+
{option.label}
181+
</option>
182+
))}
220183
</Form.Group.Select>
221184
<Form.Group.Feedback type="invalid">{error?.message}</Form.Group.Feedback>
222185
</Col>
@@ -261,10 +224,7 @@ export function DatasetTermsTab({
261224
name={`customTerms.${field.name}` as keyof DatasetTermsFormData}
262225
control={control}
263226
rules={field.rules}
264-
render={({
265-
field: { onChange, value, ref },
266-
fieldState: { invalid, error }
267-
}) => (
227+
render={({ field: { onChange, value }, fieldState: { invalid, error } }) => (
268228
<Col sm={8}>
269229
<Row>
270230
<Col>
@@ -275,7 +235,6 @@ export function DatasetTermsTab({
275235
isInvalid={invalid}
276236
rows={field.rows}
277237
aria-required={field.required}
278-
ref={ref}
279238
/>
280239
{field.required && (
281240
<Form.Group.Feedback type="invalid">
@@ -292,20 +251,20 @@ export function DatasetTermsTab({
292251
</>
293252
)}
294253

295-
{submitError && (
254+
{error && (
296255
<Alert variant="danger" dismissible={false}>
297-
{submitError}
256+
{error}
298257
</Alert>
299258
)}
300259

301260
<div className={styles['form-actions']}>
302-
<Button type="submit" disabled={!isValid || isSubmitting}>
303-
{isSubmitting ? tShared('saving') : tShared('saveChanges')}
261+
<Button type="submit" disabled={!isValid || isLoading}>
262+
{isLoading ? tShared('saving') : tShared('saveChanges')}
304263
</Button>
305264
<Button
306265
variant="secondary"
307266
type="button"
308-
disabled={isSubmitting}
267+
disabled={isLoading}
309268
onClick={() =>
310269
reset({
311270
license: defaultLicenseValue,

0 commit comments

Comments
 (0)