Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -15,6 +15,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
25 changes: 25 additions & 0 deletions src/sections/edit-dataset-terms/EditDatasetTermsHelper.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
import {
DatasetNonNumericVersionSearchParam,
DatasetPublishingStatus
} from '@/dataset/domain/models/Dataset'
import type { Dataset } from '@/dataset/domain/models/Dataset'
import { QueryParamKey, Route } from '@/sections/Route.enum'

export class EditDatasetTermsHelper {
static EDIT_DATASET_TERMS_TABS_KEYS = {
datasetTerms: 'datasetTerms',
Expand All @@ -16,7 +23,25 @@ export class EditDatasetTermsHelper {
] ?? this.EDIT_DATASET_TERMS_TABS_KEYS.datasetTerms
)
}

public static buildDatasetPageUrl(
dataset: Dataset,
version: EditDatasetTermsDatasetPageVersion = 'current'
): string {
const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)

if (version === 'draft' || 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 type EditDatasetTermsTabKey =
(typeof EditDatasetTermsHelper.EDIT_DATASET_TERMS_TABS_KEYS)[keyof typeof EditDatasetTermsHelper.EDIT_DATASET_TERMS_TABS_KEYS]

export type EditDatasetTermsDatasetPageVersion = 'current' | 'draft'
33 changes: 13 additions & 20 deletions src/sections/edit-dataset-terms/edit-guestbook/EditGuestbook.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ import { useNavigate } from 'react-router-dom'
import { toast } from 'react-toastify'
import { Guestbook } from '@/guestbooks/domain/models/Guestbook'
import { GuestbookRepository } from '@/guestbooks/domain/repositories/GuestbookRepository'
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 {
EditDatasetTermsDatasetPageVersion,
EditDatasetTermsHelper
} from '../EditDatasetTermsHelper'
import styles from './EditGuestbook.module.scss'

interface EditGuestbookProps {
Expand All @@ -37,20 +36,14 @@ export function EditGuestbook({
const collectionIdOrAlias = dataset?.parentCollectionNode?.id
const collectionName = dataset?.parentCollectionNode?.name ?? ''

const navigateToDatasetView = useCallback(() => {
if (!dataset) return

const searchParams = new URLSearchParams()
searchParams.set(QueryParamKey.PERSISTENT_ID, dataset.persistentId)
const navigateToDatasetView = useCallback(
(version?: EditDatasetTermsDatasetPageVersion) => {
if (!dataset) return

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()}`)
}, [dataset, navigate])
navigate(EditDatasetTermsHelper.buildDatasetPageUrl(dataset, version))
},
[dataset, navigate]
)

const handleCancel = () => {
navigateToDatasetView()
Expand All @@ -70,7 +63,7 @@ export function EditGuestbook({
onSuccessfulAssignDatasetGuestbook: () => {
toast.success(t('alerts.termsUpdated.alertText'))
refreshDataset()
navigateToDatasetView()
navigateToDatasetView('draft')
}
})
const {
Expand All @@ -82,7 +75,7 @@ export function EditGuestbook({
onSuccessfulRemoveDatasetGuestbook: () => {
toast.success(t('alerts.termsUpdated.alertText'))
refreshDataset()
navigateToDatasetView()
navigateToDatasetView('draft')
}
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ 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 { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider'
import {
EditDatasetTermsDatasetPageVersion,
EditDatasetTermsHelper
} from '../EditDatasetTermsHelper'
import styles from './EditLicenseAndTerms.module.scss'

const CUSTOM_LICENSE_VALUE = 'CUSTOM' as const
Expand Down Expand Up @@ -46,27 +45,21 @@ export function EditLicenseAndTerms({
autoFetch: true
})

const navigateToDatasetView = useCallback(() => {
if (!dataset) return
const navigateToDatasetView = useCallback(
(version?: EditDatasetTermsDatasetPageVersion) => {
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()}`)
}, [dataset, navigate])
navigate(EditDatasetTermsHelper.buildDatasetPageUrl(dataset, version))
},
[dataset, navigate]
)

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
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 { useDatasetRepositories } from '@/shared/contexts/repositories/RepositoriesProvider'
import {
EditDatasetTermsDatasetPageVersion,
EditDatasetTermsHelper
} from '../EditDatasetTermsHelper'

interface EditTermsOfAccessProps {
onFormStateChange?: (isDirty: boolean) => void
Expand Down Expand Up @@ -41,11 +40,21 @@ export function EditTermsOfAccess({ onFormStateChange }: EditTermsOfAccessProps)
(dataset?.termsOfUse.termsOfAccess as TermsOfAccess) ?? defaultTermsOfAccess
const formContainerRef = useRef<HTMLDivElement>(null)

const navigateToDatasetView = useCallback(
(version?: EditDatasetTermsDatasetPageVersion) => {
if (!dataset) return

navigate(EditDatasetTermsHelper.buildDatasetPageUrl(dataset, version))
},
[dataset, navigate]
)

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

Expand Down Expand Up @@ -117,18 +126,7 @@ export function EditTermsOfAccess({ onFormStateChange }: EditTermsOfAccessProps)
}, [initialTermsOfAccess, isRequestAccessEnabled, t])

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()}`)
navigateToDatasetView()
}

return (
Expand Down
26 changes: 25 additions & 1 deletion tests/component/sections/dataset/DatasetProvider.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,19 +99,43 @@ describe('DatasetProvider', () => {
})

it('stops loading if error happens', () => {
cy.stub(console, 'error').as('consoleError')
datasetRepository.getByPersistentId = cy.stub().rejects(new Error('some error'))
cy.mount(
<LoadingProvider>
<DatasetProvider
repository={datasetRepository}
searchParams={{ privateUrlToken: 'some-private-url-token' }}>
searchParams={{ persistentId: dataset.persistentId }}>
<TestComponent />
</DatasetProvider>
</LoadingProvider>
)

cy.findByText('Loading...').should('exist')
cy.wrap(datasetRepository.getByPersistentId).should('have.been.calledOnce')
cy.get('@consoleError').should(
'have.been.calledWithMatch',
'There was an error getting the dataset'
)
cy.findByText('Dataset Not Found').should('exist')
cy.findByText('Loading...').should('not.exist')
})

it('does not fetch the dataset while publishing', () => {
cy.mount(
<LoadingProvider>
<DatasetProvider
repository={datasetRepository}
searchParams={{ persistentId: dataset.persistentId }}
isPublishing>
<TestComponent />
</DatasetProvider>
</LoadingProvider>
)

cy.wrap(datasetRepository.getByPersistentId).should('not.have.been.called')
cy.wrap(datasetRepository.getByPrivateUrlToken).should('not.have.been.called')
cy.findByText('Loading...').should('exist')
cy.findByText('Dataset Not Found').should('exist')
})
})
Loading
Loading