11import React from 'react' ;
2- import { useLocation } from 'react-router-dom'
2+ import { useTranslation } from 'react-i18next'
3+ import { useLocation , useHistory } from 'react-router-dom'
34import Fade from '@mui/material/Fade' ;
45import APIService from '../../services/APIService' ;
56import { toParentURI } from '../../common/utils'
67import MappingHeader from './MappingHeader' ;
78import MappingTabs from './MappingTabs' ;
89import MappingDetails from './MappingDetails'
910import MappingForm from './MappingForm'
11+ import RetireConfirmDialog from '../common/RetireConfirmDialog'
12+ import { OperationsContext } from '../app/LayoutContext' ;
1013
1114const 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 </ >
0 commit comments