@@ -18,7 +18,10 @@ import {
18
18
import { AppState , deleteWorkflow } from '../../../store' ;
19
19
import { Workflow } from '../../../../common' ;
20
20
import { columns } from './columns' ;
21
- import { MultiSelectFilter } from '../../../general_components' ;
21
+ import {
22
+ DeleteWorkflowModal ,
23
+ MultiSelectFilter ,
24
+ } from '../../../general_components' ;
22
25
import { getStateOptions } from '../../../utils' ;
23
26
24
27
interface WorkflowListProps { }
@@ -39,6 +42,16 @@ export function WorkflowList(props: WorkflowListProps) {
39
42
( state : AppState ) => state . workflows
40
43
) ;
41
44
45
+ // delete workflow state
46
+ const [ isDeleteModalOpen , setIsDeleteModalOpen ] = useState < boolean > ( false ) ;
47
+ const [ workflowToDelete , setWorkflowToDelete ] = useState <
48
+ Workflow | undefined
49
+ > ( undefined ) ;
50
+ function clearDeleteState ( ) {
51
+ setWorkflowToDelete ( undefined ) ;
52
+ setIsDeleteModalOpen ( false ) ;
53
+ }
54
+
42
55
// search bar state
43
56
const [ searchQuery , setSearchQuery ] = useState < string > ( '' ) ;
44
57
const debounceSearchQuery = debounce ( ( query : string ) => {
@@ -70,48 +83,57 @@ export function WorkflowList(props: WorkflowListProps) {
70
83
icon : 'trash' ,
71
84
color : 'danger' ,
72
85
onClick : ( item : Workflow ) => {
73
- dispatch ( deleteWorkflow ( item . id ) ) ;
86
+ setWorkflowToDelete ( item ) ;
87
+ setIsDeleteModalOpen ( true ) ;
74
88
} ,
75
89
} ,
76
90
] ;
77
91
78
92
return (
79
- < EuiFlexGroup direction = "column" >
80
- < EuiFlexItem >
81
- < EuiFlexGroup direction = "row" gutterSize = "m" >
82
- < EuiFlexItem grow = { true } >
83
- < EuiFieldSearch
84
- fullWidth = { true }
85
- placeholder = "Search workflows..."
86
- onChange = { ( e ) => debounceSearchQuery ( e . target . value ) }
93
+ < >
94
+ { isDeleteModalOpen && workflowToDelete !== undefined && (
95
+ < DeleteWorkflowModal
96
+ workflow = { workflowToDelete }
97
+ onClose = { ( ) => {
98
+ clearDeleteState ( ) ;
99
+ } }
100
+ onConfirm = { ( ) => {
101
+ dispatch ( deleteWorkflow ( workflowToDelete . id ) ) ;
102
+ clearDeleteState ( ) ;
103
+ } }
104
+ />
105
+ ) }
106
+ < EuiFlexGroup direction = "column" >
107
+ < EuiFlexItem >
108
+ < EuiFlexGroup direction = "row" gutterSize = "m" >
109
+ < EuiFlexItem grow = { true } >
110
+ < EuiFieldSearch
111
+ fullWidth = { true }
112
+ placeholder = "Search workflows..."
113
+ onChange = { ( e ) => debounceSearchQuery ( e . target . value ) }
114
+ />
115
+ </ EuiFlexItem >
116
+ < MultiSelectFilter
117
+ filters = { getStateOptions ( ) }
118
+ title = "Status"
119
+ setSelectedFilters = { setSelectedStates }
87
120
/>
88
- </ EuiFlexItem >
89
- < MultiSelectFilter
90
- filters = { getStateOptions ( ) }
91
- title = "Status"
92
- setSelectedFilters = { setSelectedStates }
121
+ </ EuiFlexGroup >
122
+ </ EuiFlexItem >
123
+ < EuiFlexItem >
124
+ < EuiInMemoryTable < Workflow >
125
+ items = { filteredWorkflows }
126
+ rowHeader = "name"
127
+ // @ts -ignore
128
+ columns = { columns ( tableActions ) }
129
+ sorting = { sorting }
130
+ pagination = { true }
131
+ message = { loading === true ? < EuiLoadingSpinner size = "xl" /> : null }
132
+ hasActions = { true }
93
133
/>
94
- </ EuiFlexGroup >
95
- </ EuiFlexItem >
96
- < EuiFlexItem >
97
- < EuiInMemoryTable < Workflow >
98
- items = { filteredWorkflows }
99
- rowHeader = "name"
100
- // @ts -ignore
101
- columns = { columns ( tableActions ) }
102
- sorting = { sorting }
103
- pagination = { true }
104
- message = {
105
- loading === true ? (
106
- < EuiLoadingSpinner size = "xl" />
107
- ) : (
108
- 'No existing workflows found'
109
- )
110
- }
111
- hasActions = { true }
112
- />
113
- </ EuiFlexItem >
114
- </ EuiFlexGroup >
134
+ </ EuiFlexItem >
135
+ </ EuiFlexGroup >
136
+ </ >
115
137
) ;
116
138
}
117
139
0 commit comments