Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
78b2efd
fix: adding more tests
ChengShi-1 May 8, 2026
dcc23e1
fix: lint
ChengShi-1 May 8, 2026
e3ac75f
fix: external tool guestbook integration
ChengShi-1 May 11, 2026
999d6a6
fix: e2e test
ChengShi-1 May 12, 2026
7dd66e4
Merge branch 'develop' into 941-external-tools-should-require-terms-a…
ChengShi-1 Jun 10, 2026
76ab7c1
Merge branch 'develop' into 941-external-tools-should-require-terms-a…
ChengShi-1 Jun 10, 2026
1496b02
fix: make the test timeout longer
ChengShi-1 Jun 10, 2026
b5544d9
Merge branch 'develop' into 941-external-tools-should-require-terms-a…
ChengShi-1 Jun 29, 2026
ffeed64
fix: add a link to the information to open modal of terms
ChengShi-1 Jun 29, 2026
6265a0c
fix: add tests to improve test coverage
ChengShi-1 Jun 29, 2026
adf53bd
fix: add tests to improve test coverage
ChengShi-1 Jun 29, 2026
776f24d
redirect to draft version of dataset after editing terms
ekraffmiller Jul 8, 2026
7af09ec
fix component test
ekraffmiller Jul 8, 2026
b6edd2c
update CHANGELOG.md
ekraffmiller Jul 8, 2026
7dec332
increase test coverage
ekraffmiller Jul 8, 2026
88017e6
increase test coverage
ekraffmiller Jul 9, 2026
1878f74
fix flaky test
ekraffmiller Jul 9, 2026
f0e8fc4
Merge branch 'pr-987' into 977-edit-terms-navigation
ekraffmiller Jul 13, 2026
54c82e2
Merge branch 'develop' into 941-external-tools-should-require-terms-a…
ChengShi-1 Jul 22, 2026
214172c
fix: unit test
ChengShi-1 Jul 22, 2026
9664acd
resolve merge conflicts
ekraffmiller Jul 22, 2026
3f5dd4d
Merge pull request #1016 from IQSS/977-edit-terms-navigation
sekmiller Jul 22, 2026
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 @@ -19,6 +19,8 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Fixed

- Edit Dataset Terms: navigate to the draft version of the dataset after saving changes to the terms, instead of the latest published version.

### Removed

---
Expand Down
2,687 changes: 2,399 additions & 288 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion public/locales/en/file.json
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@
"getCategoriesError": "Something went wrong fetching available categories. Try again later.",
"previewTab": {
"openInNewWindow": "Open in New Window",
"defaultLoadingToolError": "Something went wrong loading the external tool. Try again later."
"defaultLoadingToolError": "Something went wrong loading the external tool. Try again later.",
"acceptTermsAndGuestbooks": "Accept the dataset terms or guestbooks",
"termsRequired": "before previewing this file."
}
}
4 changes: 3 additions & 1 deletion public/locales/es/file.json
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@
"getCategoriesError": "Algo salió mal al obtener las categorías disponibles. Intenta nuevamente más tarde.",
"previewTab": {
"openInNewWindow": "Abrir en una nueva ventana",
"defaultLoadingToolError": "Algo salió mal al cargar la herramienta externa. Intenta nuevamente más tarde."
"defaultLoadingToolError": "Algo salió mal al cargar la herramienta externa. Intenta nuevamente más tarde.",
"acceptTermsAndGuestbooks": "Acepta los términos del dataset o guestbooks",
"termsRequired": "antes de previsualizar este fichero."
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ interface DownloadWithTermsAndGuestbookModalProps {
datasetCustomTerms?: CustomTermsModel
show: boolean
handleClose: () => void
onAccept?: () => void
}

type GuestbookFormValues = Record<string, string>
Expand All @@ -44,7 +45,8 @@ export function DownloadWithTermsAndGuestbookModal({
datasetLicense,
datasetCustomTerms,
show,
handleClose
handleClose,
onAccept
}: DownloadWithTermsAndGuestbookModalProps) {
const { t: tFiles } = useTranslation('files')
const { t: tDataset } = useTranslation('dataset')
Expand Down Expand Up @@ -226,7 +228,8 @@ export function DownloadWithTermsAndGuestbookModal({
format,
handleClose,
accessRepository,
downloadFromSignedUrl
downloadFromSignedUrl,
onSubmitSuccess: onAccept
})

useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ interface UseGuestbookCollectSubmissionProps {
handleClose: () => void
accessRepository: AccessRepository
downloadFromSignedUrl: (signedUrl: string) => Promise<void>
onSubmitSuccess?: () => void
}

interface HandleSubmitProps {
Expand All @@ -34,7 +35,8 @@ export const useGuestbookCollectSubmission = ({
format,
handleClose,
accessRepository,
downloadFromSignedUrl
downloadFromSignedUrl,
onSubmitSuccess
}: UseGuestbookCollectSubmissionProps) => {
const { t: tFiles } = useTranslation('files')
const [hasAttemptedAccept, setHasAttemptedAccept] = useState(false)
Expand Down Expand Up @@ -108,6 +110,12 @@ export const useGuestbookCollectSubmission = ({
setIsSubmittingGuestbook(false)
}

if (signedUrl && onSubmitSuccess) {
handleModalClose()
onSubmitSuccess()
return
}

if (signedUrl) {
void downloadFromSignedUrl(signedUrl)
.then(() => {
Expand All @@ -132,6 +140,7 @@ export const useGuestbookCollectSubmission = ({
fileIds,
format,
handleModalClose,
onSubmitSuccess,
tFiles
]
)
Expand Down
27 changes: 27 additions & 0 deletions src/sections/edit-dataset-terms/datasetTermsNavigation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import {
Dataset,
DatasetNonNumericVersionSearchParam,
DatasetPublishingStatus
} from '@/dataset/domain/models/Dataset'
import { QueryParamKey, Route } from '@/sections/Route.enum'

export const buildDatasetTermsReturnUrl = (dataset: Dataset): string => {
const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)

if (dataset.version.publishingStatus === DatasetPublishingStatus.DRAFT) {
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
} else {
searchParams.set(QueryParamKey.VERSION, dataset.version.number.toString())
}

return `${Route.DATASETS}?${searchParams.toString()}`
}

export const buildDatasetDraftReturnUrl = (dataset: Dataset): string => {
const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)

return `${Route.DATASETS}?${searchParams.toString()}`
}
23 changes: 8 additions & 15 deletions src/sections/edit-dataset-terms/edit-guestbook/EditGuestbook.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,12 @@ import { Trans, useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router-dom'
import { toast } from 'react-toastify'
import { Guestbook } from '@/guestbooks/domain/models/Guestbook'
import {
DatasetNonNumericVersionSearchParam,
DatasetPublishingStatus
} from '@/dataset/domain/models/Dataset'
import { useGetGuestbooksByCollectionId } from '@/sections/guestbooks/useGetGuestbooksByCollectionId'
import { QueryParamKey, Route } from '@/sections/Route.enum'
import { useAssignDatasetGuestbook } from './useAssignDatasetGuestbook'
import { useRemoveDatasetGuestbook } from './useRemoveDatasetGuestbook'
import { useDataset } from '../../dataset/DatasetContext'
import { PreviewGuestbookModal } from '@/sections/guestbooks/preview-modal/PreviewGuestbookModal'
import { buildDatasetDraftReturnUrl, buildDatasetTermsReturnUrl } from '../datasetTermsNavigation'
import { useGuestbookRepositories } from '@/shared/contexts/repositories/RepositoriesProvider'
import styles from './EditGuestbook.module.scss'

Expand All @@ -36,16 +32,13 @@ export function EditGuestbook({ onPreview, onFormStateChange }: EditGuestbookPro
const navigateToDatasetView = useCallback(() => {
if (!dataset) return

const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)
navigate(buildDatasetTermsReturnUrl(dataset))
}, [dataset, navigate])

if (dataset.version.publishingStatus === DatasetPublishingStatus.DRAFT) {
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
} else {
searchParams.set(QueryParamKey.VERSION, dataset.version.number.toString())
}
const navigateToDatasetDraftView = useCallback(() => {
if (!dataset) return

navigate(`${Route.DATASETS}?${searchParams.toString()}`)
navigate(buildDatasetDraftReturnUrl(dataset))
}, [dataset, navigate])

const handleCancel = () => {
Expand All @@ -66,7 +59,7 @@ export function EditGuestbook({ onPreview, onFormStateChange }: EditGuestbookPro
onSuccessfulAssignDatasetGuestbook: () => {
toast.success(t('alerts.termsUpdated.alertText'))
refreshDataset()
navigateToDatasetView()
navigateToDatasetDraftView()
}
})
const {
Expand All @@ -78,7 +71,7 @@ export function EditGuestbook({ onPreview, onFormStateChange }: EditGuestbookPro
onSuccessfulRemoveDatasetGuestbook: () => {
toast.success(t('alerts.termsUpdated.alertText'))
refreshDataset()
navigateToDatasetView()
navigateToDatasetDraftView()
}
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ import { LicenseRepository } from '../../../licenses/domain/repositories/License
import { useGetLicenses } from './useGetLicenses'
import { useDataset } from '../../dataset/DatasetContext'
import { useUpdateDatasetLicense } from './useUpdateDatasetLicense'
import { Route, QueryParamKey } from '../../Route.enum'
import {
DatasetNonNumericVersionSearchParam,
DatasetPublishingStatus
} from '../../../dataset/domain/models/Dataset'
import { buildDatasetDraftReturnUrl, buildDatasetTermsReturnUrl } from '../datasetTermsNavigation'
import { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider'
import styles from './EditLicenseAndTerms.module.scss'

Expand Down Expand Up @@ -49,24 +45,21 @@ export function EditLicenseAndTerms({
const navigateToDatasetView = useCallback(() => {
if (!dataset) return

const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)
navigate(buildDatasetTermsReturnUrl(dataset))
}, [dataset, navigate])

if (dataset.version.publishingStatus === DatasetPublishingStatus.DRAFT) {
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
} else {
searchParams.set(QueryParamKey.VERSION, dataset.version.number.toString())
}
const navigateToDatasetDraftView = useCallback(() => {
if (!dataset) return

navigate(`${Route.DATASETS}?${searchParams.toString()}`)
navigate(buildDatasetDraftReturnUrl(dataset))
}, [dataset, navigate])

const { handleUpdateLicense, isLoading, error } = useUpdateDatasetLicense({
datasetRepository,
onSuccessfulUpdateLicense: () => {
toast.success(t('alerts.licenseUpdated.alertText'))
refreshDataset()
navigateToDatasetView()
navigateToDatasetDraftView()
}
})

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import { useEffect, useMemo, useRef } from 'react'
import { useCallback, useEffect, useMemo, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import { useForm, Controller, FormProvider, useWatch } from 'react-hook-form'
import { toast } from 'react-toastify'
import { Form, Row, Col, Button, Alert } from '@iqss/dataverse-design-system'
import styles from '../edit-license-and-terms/EditLicenseAndTerms.module.scss'
import {
DatasetNonNumericVersionSearchParam,
DatasetPublishingStatus,
TermsOfAccess
} from '@/dataset/domain/models/Dataset'
import { TermsOfAccess } from '@/dataset/domain/models/Dataset'
import { useDataset } from '../../dataset/DatasetContext'
import { useUpdateTermsOfAccess } from './useUpdateTermsOfAccess'
import { QueryParamKey, Route } from '@/sections/Route.enum'
import { useNavigate } from 'react-router-dom'
import { buildDatasetDraftReturnUrl, buildDatasetTermsReturnUrl } from '../datasetTermsNavigation'
import { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider'

interface EditTermsOfAccessProps {
Expand Down Expand Up @@ -40,12 +36,18 @@ export function EditTermsOfAccess({ onFormStateChange }: EditTermsOfAccessProps)
const initialTermsOfAccess =
(dataset?.termsOfUse.termsOfAccess as TermsOfAccess) ?? defaultTermsOfAccess
const formContainerRef = useRef<HTMLDivElement>(null)
const navigateToDatasetDraftView = useCallback(() => {
if (!dataset) return

navigate(buildDatasetDraftReturnUrl(dataset))
}, [dataset, navigate])

const { handleUpdateTermsOfAccess, isLoading, error } = useUpdateTermsOfAccess({
datasetRepository,
onSuccessfulUpdateTermsOfAccess: () => {
toast.success(t('alerts.termsUpdated.alertText'))
refreshDataset()
navigateToDatasetDraftView()
}
})

Expand Down Expand Up @@ -119,16 +121,7 @@ export function EditTermsOfAccess({ onFormStateChange }: EditTermsOfAccessProps)
const handleCancel = () => {
if (!dataset) return

const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)

if (dataset.version.publishingStatus === DatasetPublishingStatus.DRAFT) {
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
} else {
searchParams.set(QueryParamKey.VERSION, dataset.version.number.toString())
}

navigate(`${Route.DATASETS}?${searchParams.toString()}`)
navigate(buildDatasetTermsReturnUrl(dataset))
}

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ const FileToolOptions = ({ fileId, fileType, kind }: FileToolOptionsProps) => {
<Icon />
</DropdownHeader>

{tools.map((tool) => (
{applicableTools.map((tool) => (
<ToolOption
key={tool.id}
toolId={tool.id}
Expand Down
Loading
Loading