22// SPDX-License-Identifier: Apache-2.0
33
44import * as Redux from 'redux'
5- import { Box , Chip , Tab , Tabs } from '@material-ui/core'
5+ import { Box , Button , Chip , Tab , Tabs } from '@material-ui/core'
66import { DatasetVersion } from '../../types/api'
77import { IState } from '../../store/reducers'
88import {
@@ -12,19 +12,24 @@ import {
1212 withStyles
1313} from '@material-ui/core/styles'
1414import { LineageDataset } from '../lineage/types'
15+ import { alpha } from '@material-ui/core/styles'
1516import { bindActionCreators } from 'redux'
1617import { connect } from 'react-redux'
1718import {
19+ deleteDataset ,
20+ dialogToggle ,
1821 fetchDatasetVersions ,
1922 resetDataset ,
2023 resetDatasetVersions
2124} from '../../store/actionCreators'
25+ import { theme } from '../../helpers/theme'
2226import { useHistory } from 'react-router-dom'
2327import CircularProgress from '@material-ui/core/CircularProgress/CircularProgress'
2428import CloseIcon from '@material-ui/icons/Close'
2529import DatasetColumnLineage from './DatasetColumnLineage'
2630import DatasetInfo from './DatasetInfo'
2731import DatasetVersions from './DatasetVersions'
32+ import Dialog from '../Dialog'
2833import IconButton from '@material-ui/core/IconButton'
2934import MqText from '../core/text/MqText'
3035import React , { ChangeEvent , FunctionComponent , SetStateAction , useEffect } from 'react'
@@ -45,6 +50,14 @@ const styles = ({ spacing }: ITheme) => {
4550 '&:not(:last-of-type)' : {
4651 marginRight : spacing ( 1 )
4752 }
53+ } ,
54+ buttonDelete : {
55+ borderColor : theme . palette . error . main ,
56+ color : theme . palette . error . main ,
57+ '&:hover' : {
58+ borderColor : alpha ( theme . palette . error . main , 0.3 ) ,
59+ backgroundColor : alpha ( theme . palette . error . main , 0.3 )
60+ }
4861 }
4962 } )
5063}
@@ -53,12 +66,16 @@ interface StateProps {
5366 lineageDataset : LineageDataset
5467 versions : DatasetVersion [ ]
5568 versionsLoading : boolean
69+ datasets : IState [ 'datasets' ]
70+ display : IState [ 'display' ]
5671}
5772
5873interface DispatchProps {
5974 fetchDatasetVersions : typeof fetchDatasetVersions
6075 resetDatasetVersions : typeof resetDatasetVersions
6176 resetDataset : typeof resetDataset
77+ deleteDataset : typeof deleteDataset
78+ dialogToggle : typeof dialogToggle
6279}
6380
6481type IProps = IWithStyles < typeof styles > & StateProps & DispatchProps
@@ -73,11 +90,16 @@ function a11yProps(index: number) {
7390const DatasetDetailPage : FunctionComponent < IProps > = props => {
7491 const {
7592 classes,
93+ datasets,
94+ display,
7695 fetchDatasetVersions,
7796 resetDataset,
7897 resetDatasetVersions,
98+ deleteDataset,
99+ dialogToggle,
79100 versions,
80- versionsLoading
101+ versionsLoading,
102+ lineageDataset
81103 } = props
82104 const { root } = classes
83105 const history = useHistory ( )
@@ -87,6 +109,12 @@ const DatasetDetailPage: FunctionComponent<IProps> = props => {
87109 fetchDatasetVersions ( props . lineageDataset . namespace , props . lineageDataset . name )
88110 } , [ props . lineageDataset . name ] )
89111
112+ useEffect ( ( ) => {
113+ if ( datasets . deletedDatasetName ) {
114+ history . push ( '/datasets' )
115+ }
116+ } , [ datasets . deletedDatasetName ] )
117+
90118 // unmounting
91119 useEffect (
92120 ( ) => ( ) => {
@@ -148,9 +176,31 @@ const DatasetDetailPage: FunctionComponent<IProps> = props => {
148176 />
149177 </ Tabs >
150178 </ Box >
151- < IconButton onClick = { ( ) => history . push ( '/datasets' ) } >
152- < CloseIcon />
153- </ IconButton >
179+ < Box display = { 'flex' } alignItems = { 'center' } >
180+ < Box mr = { 1 } >
181+ < Button
182+ variant = 'outlined'
183+ className = { classes . buttonDelete }
184+ onClick = { ( ) => {
185+ props . dialogToggle ( '' )
186+ } }
187+ >
188+ { i18next . t ( 'datasets.dialog_delete' ) }
189+ </ Button >
190+ < Dialog
191+ dialogIsOpen = { display . dialogIsOpen }
192+ dialogToggle = { dialogToggle }
193+ title = { i18next . t ( 'jobs.dialog_confirmation_title' ) }
194+ ignoreWarning = { ( ) => {
195+ deleteDataset ( lineageDataset . name , lineageDataset . namespace )
196+ props . dialogToggle ( '' )
197+ } }
198+ />
199+ </ Box >
200+ < IconButton onClick = { ( ) => history . push ( '/datasets' ) } >
201+ < CloseIcon />
202+ </ IconButton >
203+ </ Box >
154204 </ Box >
155205 < MqText heading font = { 'mono' } >
156206 { name }
@@ -173,7 +223,8 @@ const DatasetDetailPage: FunctionComponent<IProps> = props => {
173223}
174224
175225const mapStateToProps = ( state : IState ) => ( {
176- datasets : state . datasets . result ,
226+ datasets : state . datasets ,
227+ display : state . display ,
177228 versions : state . datasetVersions . result . versions ,
178229 versionsLoading : state . datasetVersions . isLoading
179230} )
@@ -183,7 +234,9 @@ const mapDispatchToProps = (dispatch: Redux.Dispatch) =>
183234 {
184235 fetchDatasetVersions : fetchDatasetVersions ,
185236 resetDatasetVersions : resetDatasetVersions ,
186- resetDataset : resetDataset
237+ resetDataset : resetDataset ,
238+ deleteDataset : deleteDataset ,
239+ dialogToggle : dialogToggle
187240 } ,
188241 dispatch
189242 )
0 commit comments