-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathEditFilesOptions.tsx
More file actions
130 lines (122 loc) · 4.28 KB
/
EditFilesOptions.tsx
File metadata and controls
130 lines (122 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import { Link } from 'react-router-dom'
import { DropdownButtonItem } from '@iqss/dataverse-design-system'
import { FilePreview } from '../../../../../../files/domain/models/FilePreview'
import { useTranslation } from 'react-i18next'
import { useState } from 'react'
import { FileSelection } from '../../row-selection/useFileSelection'
import { NoSelectedFilesModal } from '../no-selected-files-modal/NoSelectedFilesModal'
import { useNotImplementedModal } from '../../../../../not-implemented/NotImplementedModalContext'
import { FileRepository } from '@/files/domain/repositories/FileRepository'
import { DatasetRestrictFileButton } from '@/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/DatasetRestrictFileButton'
import { DatasetDeleteFileButton } from '@/sections/dataset/dataset-files/files-table/file-actions/edit-files-menu/DatasetDeleteFileButton'
import { RouteWithParams } from '@/sections/Route.enum'
import { ReplaceFileReferrer } from '@/sections/replace-file/ReplaceFile'
type EditFilesOptionsProps =
| {
files: FilePreview[]
file?: never
fileSelection: FileSelection
fileRepository: FileRepository
datasetInfo?: never
isHeader: true
}
| {
files?: never
file: FilePreview
fileSelection?: never
fileRepository: FileRepository
datasetInfo: EditFilesMenuDatasetInfo
isHeader: false
}
export interface EditFilesMenuDatasetInfo {
persistentId: string
versionNumber: string
releasedVersionExists: boolean
termsOfAccessForRestrictedFiles?: string
requestAccess: boolean
}
const SELECTED_FILES_EMPTY = 0
export function EditFilesOptions({
file,
files,
fileSelection,
fileRepository,
datasetInfo,
isHeader
}: EditFilesOptionsProps) {
const { t } = useTranslation('files')
const { t: tFile } = useTranslation('file')
const [showNoFilesSelectedModal, setShowNoFilesSelectedModal] = useState(false)
const settingsEmbargoAllowed = false // TODO - Ask Guillermo if this is included in the settings endpoint
const provenanceEnabledByConfig = false // TODO - Ask Guillermo if this is included in the MVP and from which endpoint is coming from
const { showModal } = useNotImplementedModal()
if (!isHeader) {
return (
<>
<DatasetRestrictFileButton
fileId={file.id}
isRestricted={file.access.restricted}
fileRepository={fileRepository}
datasetInfo={datasetInfo}
/>
<DropdownButtonItem
as={Link}
to={RouteWithParams.FILES_REPLACE(
datasetInfo.persistentId,
datasetInfo.versionNumber,
file.id,
ReplaceFileReferrer.DATASET
)}>
{tFile('actionButtons.editFileMenu.options.replace')}
</DropdownButtonItem>
<DatasetDeleteFileButton
fileId={file.id}
fileRepository={fileRepository}
datasetInfo={datasetInfo}
/>
</>
)
}
const onClick = () => {
if (Object.keys(fileSelection).length === SELECTED_FILES_EMPTY) {
setShowNoFilesSelectedModal(true)
} else {
// TODO - Implement edit files
showModal()
}
}
return (
<>
<DropdownButtonItem onClick={onClick}>
{t('actions.editFilesMenu.options.metadata')}
</DropdownButtonItem>
{files.some((file) => file.access.restricted) && (
<DropdownButtonItem onClick={onClick}>
{t('actions.editFilesMenu.options.unrestrict')}
</DropdownButtonItem>
)}
{files.some((file) => !file.access.restricted) && (
<DropdownButtonItem onClick={onClick}>
{t('actions.editFilesMenu.options.restrict')}
</DropdownButtonItem>
)}
{settingsEmbargoAllowed && (
<DropdownButtonItem onClick={onClick}>
{t('actions.editFilesMenu.options.embargo')}
</DropdownButtonItem>
)}
{provenanceEnabledByConfig && (
<DropdownButtonItem onClick={onClick}>
{t('actions.editFilesMenu.options.provenance')}
</DropdownButtonItem>
)}
<DropdownButtonItem onClick={onClick}>
{t('actions.editFilesMenu.options.delete')}
</DropdownButtonItem>
<NoSelectedFilesModal
show={showNoFilesSelectedModal}
handleClose={() => setShowNoFilesSelectedModal(false)}
/>
</>
)
}