diff --git a/src/dataset/domain/models/DatasetVersionSummaryInfo.ts b/src/dataset/domain/models/DatasetVersionSummaryInfo.ts index 021e86c1f..8de8378e7 100644 --- a/src/dataset/domain/models/DatasetVersionSummaryInfo.ts +++ b/src/dataset/domain/models/DatasetVersionSummaryInfo.ts @@ -17,7 +17,7 @@ export type DatasetVersionSummary = { export interface Deaccessioned { reason: string - url: string + url?: string } export interface SummaryUpdates { diff --git a/src/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.tsx b/src/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.tsx index 686b7ffaa..9c68cc92c 100644 --- a/src/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.tsx +++ b/src/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import { toast } from 'react-toastify' import { useContext } from 'react' +import { useForm, SubmitHandler } from 'react-hook-form' import { DatasetContext } from '@/sections/dataset/DatasetContext' import { Dataset } from '../../../../dataset/domain/models/Dataset' import { DropdownButtonItem, DropdownSeparator } from '@iqss/dataverse-design-system' @@ -10,7 +11,7 @@ import { DatasetRepository } from '@/dataset/domain/repositories/DatasetReposito import { DeaccessionFormData } from '@/sections/dataset/deaccession-dataset/DeaccessionFormData' import { useDeaccessionDataset } from '@/sections/dataset/deaccession-dataset/useDeaccessionDataset' import { ConfirmationModal } from '@/sections/dataset/deaccession-dataset/ConfirmationModal' -import { useForm, SubmitHandler } from 'react-hook-form' +import { Deaccessioned } from '@/dataset/domain/models/DatasetVersionSummaryInfo' interface DeaccessionDatasetButtonProps { dataset: Dataset @@ -31,9 +32,10 @@ export function DeaccessionDatasetButton({ onDeaccessionSucceed ) const publishedVersions = - dataset.versionsSummaries?.filter( - (version) => version.publishedOn && version.summary !== 'versionDeaccessioned' - ) || [] + dataset.versionsSummaries?.filter((version) => { + const summary = version.summary as { deaccessioned: Deaccessioned } + return version.publishedOn && !summary.deaccessioned + }) || [] const defaultVersions = publishedVersions.length === 1 ? [publishedVersions[0].versionNumber] : [] function onDeaccessionSucceed() { setShowConfirmationModal(false) diff --git a/src/sections/dataset/deaccession-dataset/ConfirmationModal.tsx b/src/sections/dataset/deaccession-dataset/ConfirmationModal.tsx index b747612d0..4e083cbc1 100644 --- a/src/sections/dataset/deaccession-dataset/ConfirmationModal.tsx +++ b/src/sections/dataset/deaccession-dataset/ConfirmationModal.tsx @@ -1,4 +1,4 @@ -import { Modal, Button, Alert } from '@iqss/dataverse-design-system' +import { Modal, Button, Alert, Spinner, Stack } from '@iqss/dataverse-design-system' import { useTranslation } from 'react-i18next' import { SubmissionStatus } from '@/sections/shared/form/DatasetMetadataForm/useSubmitDataset' @@ -18,6 +18,7 @@ export function ConfirmationModal({ onCancel }: ConfirmationModalProps) { const { t } = useTranslation(['dataset', 'shared']) + const isDeaccessioning = submissionStatus === SubmissionStatus.IsSubmitting return ( @@ -35,10 +36,15 @@ export function ConfirmationModal({ )} - - diff --git a/src/sections/dataset/deaccession-dataset/DeaccessionDatasetModal.tsx b/src/sections/dataset/deaccession-dataset/DeaccessionDatasetModal.tsx index 4b6b0ecc6..4884fdeef 100644 --- a/src/sections/dataset/deaccession-dataset/DeaccessionDatasetModal.tsx +++ b/src/sections/dataset/deaccession-dataset/DeaccessionDatasetModal.tsx @@ -1,5 +1,5 @@ import { Trans, useTranslation } from 'react-i18next' -import { Alert, Button, Form, Modal, Stack } from '@iqss/dataverse-design-system' +import { Alert, Button, Col, Form, Modal, Stack } from '@iqss/dataverse-design-system' import { DatasetVersionSummaryInfo } from '@/dataset/domain/models/DatasetVersionSummaryInfo' import { isValidURL } from '@/metadata-block-info/domain/models/fieldValidations' import { DeaccessionFormData } from './DeaccessionFormData' @@ -58,7 +58,7 @@ export function DeaccessionDatasetModal({
{publishedVersions.length > 1 && ( - + {t('deaccession.version.label')}
val !== e.target.value) - field.onChange(newValue) }} /> @@ -97,7 +96,7 @@ export function DeaccessionDatasetModal({
)} - + {t('deaccession.reason.label')} )}> - + {t('deaccession.reasonOther.label')} - + {t('deaccession.forwardUrl.label')} export const Default: Story = { + render: () => ( + {}} + onCancel={() => {}} + /> + ) +} + +export const WithLoading: Story = { render: () => ( {}} - onCancel={() => {}}> + onCancel={() => {}} + /> ) } + export const WithError: Story = { render: () => ( {}} - onCancel={() => {}}> + onCancel={() => {}} + /> ) } diff --git a/src/stories/dataset/deaccession-dataset/DeaccessionDatasetModal.stories.tsx b/src/stories/dataset/deaccession-dataset/DeaccessionDatasetModal.stories.tsx index 8f4235dab..2bca855c3 100644 --- a/src/stories/dataset/deaccession-dataset/DeaccessionDatasetModal.stories.tsx +++ b/src/stories/dataset/deaccession-dataset/DeaccessionDatasetModal.stories.tsx @@ -33,8 +33,20 @@ export const Default: Story = { control={control} errors={{}} publishedVersions={[ - { id: 1, contributors: 'contributors', versionNumber: '1.0', publishedOn: '2023-01-01' }, - { id: 2, contributors: 'contributors', versionNumber: '1.1', publishedOn: '2023-02-01' } + { + id: 1, + contributors: 'contributors', + versionNumber: '1.0', + publishedOn: '2023-01-01', + summary: {} + }, + { + id: 2, + contributors: 'contributors', + versionNumber: '1.1', + publishedOn: '2023-02-01', + summary: {} + } ]} /> ) diff --git a/tests/component/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.spec.tsx b/tests/component/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.spec.tsx index e5539b8eb..63e1c987d 100644 --- a/tests/component/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.spec.tsx +++ b/tests/component/sections/dataset/dataset-action-buttons/edit-dataset-menu/DeaccessionDatasetButton.spec.tsx @@ -115,19 +115,22 @@ describe('DeaccessionDatasetButton', () => { id: 1, versionNumber: '1.0', publishedOn: '2021-01-01', - contributors: 'Contributors' + contributors: 'Contributors', + summary: {} }, { id: 2, versionNumber: '2.0', publishedOn: '2021-01-02', - contributors: 'Contributors' + contributors: 'Contributors', + summary: {} }, { id: 3, versionNumber: 'draft', publishedOn: undefined, - contributors: 'Contributors' + contributors: 'Contributors', + summary: {} } ] const dataset = DatasetMother.create({ @@ -232,7 +235,90 @@ describe('DeaccessionDatasetButton', () => { cy.findByTestId('deaccession-forward-url').type('https://example.com') cy.get('button[type="submit"]').click() cy.get('button').contains('Yes').should('exist').click() - cy.wrap(repository.deaccession).should('be.calledTwice') + cy.wrap(repository.deaccession).should('have.been.called') + }) + + it('does not show deaccessioned versions in the version list', () => { + const versionsSummaries: DatasetVersionSummaryInfo[] = [ + { + id: 1, + versionNumber: '1.0', + publishedOn: '2021-01-01', + contributors: 'Contributors', + summary: { + deaccessioned: { + reason: 'IRB request.', + url: 'https://example.com' + } + } + }, + { + id: 2, + versionNumber: '2.0', + publishedOn: '2021-01-02', + contributors: 'Contributors', + summary: {} + }, + { + id: 3, + versionNumber: '3.0', + publishedOn: '2021-01-22', + contributors: 'Contributors', + summary: {} + } + ] + + const dataset = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithPublishingDatasetAllowed(), + version: DatasetVersionMother.createReleased(), + versionsSummaries: versionsSummaries + }) + + cy.customMount() + + cy.findByRole('button', { name: 'Deaccession Dataset' }).click() + cy.get('form').should('exist') + cy.findByText('1.0 - 2021-01-01').should('not.exist') + cy.findByText('2.0 - 2021-01-02').should('exist') + cy.findByText('3.0 - 2021-01-22').should('exist') + cy.get('input[type="checkbox"]').should('have.length', 2) + }) + + it('does not show versions list in the version list if there is only one deaccessioned version available', () => { + const versionsSummaries: DatasetVersionSummaryInfo[] = [ + { + id: 1, + versionNumber: '1.0', + publishedOn: '2021-01-01', + contributors: 'Contributors', + summary: { + deaccessioned: { + reason: 'IRB request.', + url: 'https://example.com' + } + } + }, + { + id: 2, + versionNumber: '2.0', + publishedOn: '2021-01-02', + contributors: 'Contributors', + summary: {} + } + ] + + const dataset = DatasetMother.create({ + permissions: DatasetPermissionsMother.createWithPublishingDatasetAllowed(), + version: DatasetVersionMother.createReleased(), + versionsSummaries: versionsSummaries + }) + + cy.customMount() + + cy.findByRole('button', { name: 'Deaccession Dataset' }).click() + cy.get('form').should('exist') + cy.findByText('1.0 - 2021-01-01').should('not.exist') + cy.findByText('2.0 - 2021-01-02').should('not.exist') }) }) })