/
SourceChildHomeActionButton.jsx
129 lines (122 loc) · 4.32 KB
/
SourceChildHomeActionButton.jsx
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
import React from 'react';
import { Tooltip, IconButton, Menu, MenuList, MenuItem, ListItemIcon, ListItemText } from '@mui/material';
import {
Edit as EditIcon,
Delete as DeleteIcon,
RestoreFromTrash as RestoreIcon,
FileCopy as CopyIcon,
MoreVert as SettingsIcon,
GetApp as DownloadIcon,
CompareArrows as CompareIcon
} from '@mui/icons-material';
import { startCase } from 'lodash';
import { currentUserHasAccess, copyURL, toFullAPIURL } from '../../common/utils';
import DownloadButton from './DownloadButton';
const SourceChildHomeActionButton = ({
instance, currentURL, isVersionedObject, onEditClick, onRetire, onUnretire, mappings, resource, conceptCompareURL
}) => {
const [anchorEl, setAnchorEl] = React.useState(null);
const toggleMenu = event => setAnchorEl(anchorEl ? null : event.currentTarget)
const hasAccess = currentUserHasAccess();
const onCopyClick = () => copyURL(toFullAPIURL(encodeURI(currentURL)))
const onClick = (event, action) => {
setAnchorEl(null)
action(event)
}
const downloadFileName = isVersionedObject ?
`${resource}-${instance.id}` :
`${resource}-${instance.id}-version-${instance.version}`;
const isConcept = resource === 'concept'
const resourceLabel = startCase(resource)
const onCompareConceptsClick = event => {
event.stopPropagation()
event.preventDefault()
window.open(conceptCompareURL, '_blank')
}
return (
<React.Fragment>
<Tooltip title='Edit, Copy and more...'>
<IconButton size='small' onClick={toggleMenu} style={{marginTop: '-2px'}}>
<SettingsIcon fontSize='inherit' />
</IconButton>
</Tooltip>
<Menu
id="versions-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={toggleMenu}
>
<MenuList dense>
<MenuItem onClick={event => onClick(event, onCopyClick)}>
<ListItemIcon style={{minWidth: '28px'}}>
<CopyIcon fontSize="inherit" />
</ListItemIcon>
<ListItemText>
Copy URL
</ListItemText>
</MenuItem>
{
hasAccess && isVersionedObject &&
<MenuItem onClick={event => onClick(event, onEditClick)}>
<ListItemIcon style={{minWidth: '28px'}}>
<EditIcon fontSize="inherit" />
</ListItemIcon>
<ListItemText>
{
`Edit ${resourceLabel}`
}
</ListItemText>
</MenuItem>
}
{
hasAccess && isVersionedObject &&
<MenuItem onClick={event => onClick(event, instance.retired ? onUnretire : onRetire)}>
<ListItemIcon style={{minWidth: '28px'}}>
{
instance.retired ?
<RestoreIcon fontSize='inherit' /> :
<DeleteIcon fontSize='inherit' />
}
</ListItemIcon>
<ListItemText>
{
instance.retired ?
`Un-Retire ${resourceLabel}` :
`Retire ${resourceLabel}`
}
</ListItemText>
</MenuItem>
}
{
conceptCompareURL &&
<MenuItem onClick={onCompareConceptsClick}>
<ListItemIcon style={{minWidth: '28px'}}>
<CompareIcon fontSize="inherit" />
</ListItemIcon>
<ListItemText>
Compare From/To Concepts
</ListItemText>
</MenuItem>
}
<DownloadButton
resource={isConcept ? {...instance, mappings: mappings} : instance}
filename={downloadFileName}
queryParams={isConcept ? {includeInverseMappings: true, includeHierarchyPath: true, includeParentConceptURLs: true} : null}
buttonFunc={params => (
<MenuItem {...params}>
<ListItemIcon style={{minWidth: '28px'}}>
<DownloadIcon fontSize="inherit" />
</ListItemIcon>
<ListItemText>
Download
</ListItemText>
</MenuItem>
)}
/>
</MenuList>
</Menu>
</React.Fragment>
)
}
export default SourceChildHomeActionButton;