Skip to content

Commit 637ebc7

Browse files
committed
1 parent 4e3d133 commit 637ebc7

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

src/components/mappings/MappingHeader.jsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { toOwnerURI, currentUserHasAccess } from '../../common/utils';
88
import Breadcrumbs from '../common/Breadcrumbs'
99
import MappingManagementList from './MappingManagementList'
1010

11-
const MappingHeader = ({mapping, onClose, repoURL, nested, onEdit, repo}) => {
11+
const MappingHeader = ({mapping, onClose, repoURL, nested, onEdit, onRetire, repo}) => {
1212
const { t } = useTranslation()
1313
const [menu, setMenu] = React.useState(false)
1414
const [menuAnchorEl, setMenuAnchorEl] = React.useState(false)
@@ -26,6 +26,9 @@ const MappingHeader = ({mapping, onClose, repoURL, nested, onEdit, repo}) => {
2626
if(option === 'editMapping') {
2727
onEdit()
2828
}
29+
if(option === 'retireMapping') {
30+
onRetire()
31+
}
2932
}
3033

3134
return (
@@ -57,7 +60,7 @@ const MappingHeader = ({mapping, onClose, repoURL, nested, onEdit, repo}) => {
5760
<Button endIcon={<DownIcon fontSize='inherit' />} variant='text' sx={{textTransform: 'none', color: 'surface.contrastText'}} onClick={onMenuOpen} id='mapping-actions'>
5861
{t('common.actions')}
5962
</Button>
60-
<MappingManagementList anchorEl={menuAnchorEl} open={menu} onClose={onMenuClose} id='mapping-actions' onClick={onManageOptionClick} />
63+
<MappingManagementList anchorEl={menuAnchorEl} open={menu} onClose={onMenuClose} id='mapping-actions' onClick={onManageOptionClick} mapping={mapping} />
6164
</span>
6265
</div>
6366
}

src/components/mappings/MappingHome.jsx

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
import React from 'react';
2-
import { useLocation } from 'react-router-dom'
2+
import { useTranslation } from 'react-i18next'
3+
import { useLocation, useHistory } from 'react-router-dom'
34
import Fade from '@mui/material/Fade';
45
import APIService from '../../services/APIService';
56
import { toParentURI } from '../../common/utils'
67
import MappingHeader from './MappingHeader';
78
import MappingTabs from './MappingTabs';
89
import MappingDetails from './MappingDetails'
910
import MappingForm from './MappingForm'
11+
import RetireConfirmDialog from '../common/RetireConfirmDialog'
12+
import { OperationsContext } from '../app/LayoutContext';
1013

1114
const MappingHome = props => {
15+
const { t } = useTranslation()
1216
const location = useLocation()
17+
const history = useHistory()
1318
const isInitialMount = React.useRef(true);
1419

1520
const [mapping, setMapping] = React.useState(props.mapping || {})
1621
const [repo, setRepo] = React.useState(props.repo || {})
1722
const [tab, setTab] = React.useState('metadata')
1823
const [edit, setEdit] = React.useState(false)
1924

25+
const [retireDialog, setRetireDialog] = React.useState(false)
26+
const { setAlert } = React.useContext(OperationsContext);
27+
2028
React.useEffect(() => {
2129
setMapping(props.mapping || {})
2230
getService().get().then(response => {
@@ -56,6 +64,24 @@ const MappingHome = props => {
5664
return APIService.new().overrideURL(encodeURI(url))
5765
}
5866

67+
const toggleRetire = reason => {
68+
setRetireDialog(false)
69+
const isRetired = mapping.retired
70+
let service = APIService.new().overrideURL(mapping.url)
71+
service = mapping.retired ? service.appendToUrl('reactivate/').put({comment: reason}) : service.delete({comment: reason})
72+
service.then(response => {
73+
if(response?.status === 204) {
74+
setAlert({severity: 'success', message: isRetired ? t('mapping.success_unretired') : t('mapping.success_retired')})
75+
history.push(mapping.url)
76+
setTimeout(() => window.location.reload(), 1000)
77+
}
78+
else {
79+
let error = response?.data?.__all__ || t('mapping.error_update')
80+
setAlert({severity: 'error', message: error})
81+
}
82+
})
83+
}
84+
5985
return (mapping?.id && repo?.id) ? (
6086
<>
6187
<Fade in={edit}>
@@ -80,7 +106,7 @@ const MappingHome = props => {
80106
<Fade in={!edit}>
81107
<div className='col-xs-12' style={{padding: '8px 16px 12px 16px'}}>
82108
<div className='col-xs-12 padding-0' style={{marginBottom: '12px'}}>
83-
<MappingHeader mapping={mapping} onClose={props.onClose} repoURL={getRepoURL()} repo={repo} nested={props.nested} onEdit={() => setEdit(true)} />
109+
<MappingHeader mapping={mapping} onClose={props.onClose} repoURL={getRepoURL()} repo={repo} nested={props.nested} onEdit={() => setEdit(true)} onRetire={() => setRetireDialog(true)} />
84110
</div>
85111
<MappingTabs tab={tab} onTabChange={(event, newTab) => setTab(newTab)} />
86112
{
@@ -89,6 +115,12 @@ const MappingHome = props => {
89115
<MappingDetails mapping={mapping} />
90116
</div>
91117
}
118+
<RetireConfirmDialog
119+
open={retireDialog}
120+
onClose={() => setRetireDialog(false)}
121+
title={`${t('common.retire')} ${t('mapping.mapping')}`}
122+
onSubmit={toggleRetire}
123+
/>
92124
</div>
93125
</Fade>
94126
</>

src/components/mappings/MappingManagementList.jsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import React from 'react';
22
import { useTranslation } from 'react-i18next'
3-
import { Menu, ListItem, ListItemButton, ListItemText, ListItemIcon} from '@mui/material'
3+
import { Menu, ListItem, ListItemButton, ListItemText, ListItemIcon, Divider} from '@mui/material'
44
import EditIcon from '@mui/icons-material/Edit';
5+
import RetireIcon from '@mui/icons-material/Delete';
6+
import UnretireIcon from '@mui/icons-material/RestoreFromTrash';
57

6-
const MappingManagementList = ({ anchorEl, open, onClose, id, onClick }) => {
8+
const MappingManagementList = ({ anchorEl, open, onClose, id, onClick, mapping }) => {
79
const { t } = useTranslation()
810
return (
911
<Menu
@@ -24,6 +26,15 @@ const MappingManagementList = ({ anchorEl, open, onClose, id, onClick }) => {
2426
<ListItemText primary={t('mapping.edit_mapping')} />
2527
</ListItemButton>
2628
</ListItem>
29+
<Divider />
30+
<ListItem disablePadding>
31+
<ListItemButton id='retireMapping' onClick={() => onClick('retireMapping')} sx={{padding: '8px 12px', color: 'error.main'}}>
32+
<ListItemIcon sx={{minWidth: 'auto', marginRight: '12px', color: 'error.main'}}>
33+
{mapping?.retired ? <UnretireIcon /> : <RetireIcon />}
34+
</ListItemIcon>
35+
<ListItemText primary={mapping?.retired ? t('common.unretire') : t('common.retire')} />
36+
</ListItemButton>
37+
</ListItem>
2738
</Menu>
2839
)
2940
}

0 commit comments

Comments
 (0)