Skip to content

Commit 1fc4c71

Browse files
committed
feat: update delete and restrict file button
1 parent dc958fa commit 1fc4c71

6 files changed

Lines changed: 164 additions & 36 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { useState } from 'react'
2+
import { useTranslation } from 'react-i18next'
3+
import { useNavigate, useSearchParams } from 'react-router-dom'
4+
import { toast } from 'react-toastify'
5+
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
6+
import { FileRepository } from '@/files/domain/repositories/FileRepository'
7+
import { QueryParamKey, Route } from '@/sections/Route.enum'
8+
import { DatasetNonNumericVersionSearchParam } from '@/dataset/domain/models/Dataset'
9+
import { ConfirmDeleteFileModal } from '@/sections/file/file-action-buttons/edit-file-menu/delete-file-button/confirm-delete-file-modal/ConfirmDeleteFileModal'
10+
import { EditFileMenuDatasetInfo } from '@/sections/file/file-action-buttons/edit-file-menu/EditFileMenu'
11+
import { useDeleteFile } from '@/sections/file/file-action-buttons/edit-file-menu/delete-file-button/useDeleteFile'
12+
import { useFilesContext } from '@/sections/file/FilesContext'
13+
14+
interface DatasetDeleteFileButtonProps {
15+
fileId: number
16+
fileRepository: FileRepository
17+
datasetInfo: EditFileMenuDatasetInfo
18+
}
19+
20+
export const DatasetDeleteFileButton = ({
21+
fileId,
22+
fileRepository,
23+
datasetInfo
24+
}: DatasetDeleteFileButtonProps) => {
25+
const [showConfirmationModal, setShowConfirmationModal] = useState(false)
26+
const navigate = useNavigate()
27+
const { t } = useTranslation('file')
28+
29+
const { handleDeleteFile, isDeletingFile, errorDeletingFile } = useDeleteFile({
30+
fileRepository,
31+
onSuccessfulDelete: closeModalAndNavigateToDataset
32+
})
33+
34+
const handleOpenModal = () => setShowConfirmationModal(true)
35+
const handleCloseModal = () => setShowConfirmationModal(false)
36+
const { refreshFiles } = useFilesContext()
37+
const [searchParamsURL] = useSearchParams()
38+
const urlParams = new URLSearchParams(searchParamsURL)
39+
const version = urlParams.get(QueryParamKey.VERSION)
40+
console.log(refreshFiles)
41+
function closeModalAndNavigateToDataset() {
42+
setShowConfirmationModal(false)
43+
44+
if (version === 'DRAFT' || version === ':draft') {
45+
void refreshFiles()
46+
} else {
47+
const searchParams = new URLSearchParams()
48+
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
49+
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
50+
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
51+
}
52+
53+
toast.success(t('fileDeletedSuccess'))
54+
}
55+
56+
return (
57+
<>
58+
<DropdownButtonItem onClick={handleOpenModal}>
59+
{t('actionButtons.editFileMenu.options.delete')}
60+
</DropdownButtonItem>
61+
<ConfirmDeleteFileModal
62+
show={showConfirmationModal}
63+
handleClose={handleCloseModal}
64+
handleDelete={() => handleDeleteFile(fileId)}
65+
datasetReleasedVersionExists={datasetInfo.releasedVersionExists}
66+
isDeletingFile={isDeletingFile}
67+
errorDeletingFile={errorDeletingFile}
68+
/>
69+
</>
70+
)
71+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { useState } from 'react'
2+
import { useTranslation } from 'react-i18next'
3+
import { useNavigate, useSearchParams } from 'react-router-dom'
4+
import { toast } from 'react-toastify'
5+
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
6+
import { FileRepository } from '@/files/domain/repositories/FileRepository'
7+
import { QueryParamKey, Route } from '@/sections/Route.enum'
8+
import { DatasetNonNumericVersionSearchParam } from '@/dataset/domain/models/Dataset'
9+
import { ConfirmRestrictFileModal } from '@/sections/file/file-action-buttons/edit-file-menu/restrict-file-button/confirm-restrict-file-modal/ConfirmRestrictFileModal'
10+
import { EditFileMenuDatasetInfo } from '@/sections/file/file-action-buttons/edit-file-menu/EditFileMenu'
11+
import { useRestrictFile } from '@/sections/file/file-action-buttons/edit-file-menu/restrict-file-button/useRestrictFile'
12+
import { useFilesContext } from '@/sections/file/FilesContext'
13+
14+
interface DatasetRestrictFileButtonProps {
15+
fileId: number
16+
isRestricted: boolean
17+
fileRepository: FileRepository
18+
datasetInfo: EditFileMenuDatasetInfo
19+
}
20+
21+
export const DatasetRestrictFileButton = ({
22+
fileId,
23+
isRestricted,
24+
fileRepository,
25+
datasetInfo
26+
}: DatasetRestrictFileButtonProps) => {
27+
const [showConfirmationModal, setShowConfirmationModal] = useState(false)
28+
const navigate = useNavigate()
29+
const { t } = useTranslation('file')
30+
const { handleRestrictFile, isRestrictingFile, errorRestrictingFile } = useRestrictFile({
31+
isRestricted,
32+
fileRepository,
33+
onSuccessfulRestrict: closeModalAndNavigateToDataset
34+
})
35+
const handleOpenModal = () => setShowConfirmationModal(true)
36+
const handleCloseModal = () => setShowConfirmationModal(false)
37+
const { refreshFiles } = useFilesContext()
38+
const [searchParamsURL] = useSearchParams()
39+
const urlParams = new URLSearchParams(searchParamsURL)
40+
const version = urlParams.get(QueryParamKey.VERSION)
41+
42+
function closeModalAndNavigateToDataset() {
43+
setShowConfirmationModal(false)
44+
45+
if (version === 'DRAFT' || version === ':draft') {
46+
void refreshFiles()
47+
} else {
48+
const searchParams = new URLSearchParams()
49+
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
50+
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
51+
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
52+
}
53+
isRestricted
54+
? toast.success(t('restriction.fileUnrestrictedSuccess'))
55+
: toast.success(t('restriction.fileRestrictdSuccess'))
56+
}
57+
return (
58+
<>
59+
<DropdownButtonItem onClick={handleOpenModal}>
60+
{isRestricted
61+
? t('actionButtons.editFileMenu.options.unrestrict')
62+
: t('actionButtons.editFileMenu.options.restrict')}
63+
</DropdownButtonItem>
64+
<ConfirmRestrictFileModal
65+
show={showConfirmationModal}
66+
handleClose={handleCloseModal}
67+
handleRestrict={() => handleRestrictFile(fileId)}
68+
datasetReleasedVersionExists={datasetInfo.releasedVersionExists}
69+
termsOfAccessForRestrictedFiles={datasetInfo.termsOfAccessForRestrictedFiles}
70+
isRestrictingFile={isRestrictingFile}
71+
errorRestrictingFile={errorRestrictingFile}
72+
isRestricted={isRestricted}
73+
/>
74+
</>
75+
)
76+
}

src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesMenu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { DropdownButton } from '@iqss/dataverse-design-system'
22
import { PencilFill } from 'react-bootstrap-icons'
33
import { useSession } from '../../../../../session/SessionContext'
4-
import styles from './EditFilesMenu.module.scss'
54
import { EditFilesOptions } from './EditFilesOptions'
65
import { FilePreview } from '../../../../../../files/domain/models/FilePreview'
76
import { useTranslation } from 'react-i18next'
87
import { useDataset } from '../../../../DatasetContext'
98
import { FileSelection } from '../../row-selection/useFileSelection'
109
import { useMediaQuery } from '../../../../../../shared/hooks/useMediaQuery'
1110
import { FileRepository } from '@/files/domain/repositories/FileRepository'
11+
import styles from './EditFilesMenu.module.scss'
1212

1313
interface EditFilesMenuProps {
1414
files: FilePreview[]

src/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/EditFilesOptions.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { FileSelection } from '../../row-selection/useFileSelection'
66
import { NoSelectedFilesModal } from '../no-selected-files-modal/NoSelectedFilesModal'
77
import { useNotImplementedModal } from '../../../../../not-implemented/NotImplementedModalContext'
88
import { FileRepository } from '@/files/domain/repositories/FileRepository'
9-
import { RestrictFileButton } from '@/sections/file/file-action-buttons/edit-file-menu/restrict-file-button/RestrictFileButton'
10-
import { DeleteFileButton } from '@/sections/file/file-action-buttons/edit-file-menu/delete-file-button/DeleteFileButton'
9+
import { DatasetRestrictFileButton } from '@/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/DatasetRestrictFileButton'
10+
import { DatasetDeleteFileButton } from '@/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/DatasetDeleteFileButton'
1111

1212
type EditFilesOptionsProps =
1313
| {
@@ -51,16 +51,14 @@ export function EditFilesOptions({
5151
if (!isHeader) {
5252
return (
5353
<>
54-
<RestrictFileButton
55-
key={file.id}
54+
<DatasetRestrictFileButton
5655
fileId={file.id}
5756
isRestricted={file.access.restricted}
5857
fileRepository={fileRepository}
5958
datasetInfo={datasetInfo}
6059
/>
6160

62-
<DeleteFileButton
63-
key={file.id}
61+
<DatasetDeleteFileButton
6462
fileId={file.id}
6563
fileRepository={fileRepository}
6664
datasetInfo={datasetInfo}

src/sections/file/file-action-buttons/edit-file-menu/delete-file-button/DeleteFileButton.tsx

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState } from 'react'
22
import { useTranslation } from 'react-i18next'
3-
import { useNavigate, useSearchParams } from 'react-router-dom'
3+
import { useNavigate } from 'react-router-dom'
44
import { toast } from 'react-toastify'
55
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
66
import { FileRepository } from '@/files/domain/repositories/FileRepository'
@@ -9,7 +9,6 @@ import { DatasetNonNumericVersionSearchParam } from '@/dataset/domain/models/Dat
99
import { ConfirmDeleteFileModal } from './confirm-delete-file-modal/ConfirmDeleteFileModal'
1010
import { EditFileMenuDatasetInfo } from '../EditFileMenu'
1111
import { useDeleteFile } from './useDeleteFile'
12-
import { useFilesContext } from '@/sections/file/FilesContext'
1312

1413
interface DeleteFileButtonProps {
1514
fileId: number
@@ -33,22 +32,13 @@ export const DeleteFileButton = ({
3332

3433
const handleOpenModal = () => setShowConfirmationModal(true)
3534
const handleCloseModal = () => setShowConfirmationModal(false)
36-
const { refreshFiles } = useFilesContext()
37-
const [searchParamsURL] = useSearchParams()
38-
const urlParams = new URLSearchParams(searchParamsURL)
39-
const version = urlParams.get(QueryParamKey.VERSION)
4035

4136
function closeModalAndNavigateToDataset() {
4237
setShowConfirmationModal(false)
43-
44-
if (version === 'DRAFT' || version === ':draft') {
45-
void refreshFiles()
46-
} else {
47-
const searchParams = new URLSearchParams()
48-
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
49-
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
50-
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
51-
}
38+
const searchParams = new URLSearchParams()
39+
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
40+
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
41+
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
5242

5343
toast.success(t('fileDeletedSuccess'))
5444
}

src/sections/file/file-action-buttons/edit-file-menu/restrict-file-button/RestrictFileButton.tsx

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState } from 'react'
22
import { useTranslation } from 'react-i18next'
3-
import { useNavigate, useSearchParams } from 'react-router-dom'
3+
import { useNavigate } from 'react-router-dom'
44
import { toast } from 'react-toastify'
55
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
66
import { FileRepository } from '@/files/domain/repositories/FileRepository'
@@ -9,7 +9,6 @@ import { DatasetNonNumericVersionSearchParam } from '@/dataset/domain/models/Dat
99
import { ConfirmRestrictFileModal } from './confirm-restrict-file-modal/ConfirmRestrictFileModal'
1010
import { EditFileMenuDatasetInfo } from '../EditFileMenu'
1111
import { useRestrictFile } from './useRestrictFile'
12-
import { useFilesContext } from '@/sections/file/FilesContext'
1312

1413
interface RestrictFileButtonProps {
1514
fileId: number
@@ -35,26 +34,20 @@ export const RestrictFileButton = ({
3534
})
3635
const handleOpenModal = () => setShowConfirmationModal(true)
3736
const handleCloseModal = () => setShowConfirmationModal(false)
38-
const { refreshFiles } = useFilesContext()
39-
const [searchParamsURL] = useSearchParams()
40-
const urlParams = new URLSearchParams(searchParamsURL)
41-
const version = urlParams.get(QueryParamKey.VERSION)
4237

4338
function closeModalAndNavigateToDataset() {
4439
setShowConfirmationModal(false)
4540

46-
if (version === 'DRAFT' || version === ':draft') {
47-
void refreshFiles()
48-
} else {
49-
const searchParams = new URLSearchParams()
50-
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
51-
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
52-
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
53-
}
41+
const searchParams = new URLSearchParams()
42+
searchParams.set(QueryParamKey.PERSISTENT_ID, datasetInfo.persistentId)
43+
searchParams.set(QueryParamKey.VERSION, DatasetNonNumericVersionSearchParam.DRAFT)
44+
navigate(`${Route.DATASETS}?${searchParams.toString()}`)
45+
5446
isRestricted
5547
? toast.success(t('restriction.fileUnrestrictedSuccess'))
5648
: toast.success(t('restriction.fileRestrictdSuccess'))
5749
}
50+
5851
return (
5952
<>
6053
<DropdownButtonItem onClick={handleOpenModal}>

0 commit comments

Comments
 (0)