@@ -24,16 +24,13 @@ import {
24
24
ComponentSizeType ,
25
25
Drawer ,
26
26
DynamicDataTable ,
27
- GenericEmptyState ,
28
27
Icon ,
29
28
InfoIconTippy ,
30
29
showError ,
31
30
ToastManager ,
32
31
ToastVariantType ,
33
32
} from '@devtron-labs/devtron-fe-common-lib'
34
33
35
- import ImgEmptyChartGroup from '@Images/[email protected] '
36
-
37
34
import { updateTaints } from '../clusterNodes.service'
38
35
import { EDIT_TAINTS_MODAL_MESSAGING , TAINTS_TABLE_HEADERS } from '../constants'
39
36
import { EditTaintsModalType , EditTaintsRequest , TaintsTableHeaderKeys , TaintsTableType } from '../types'
@@ -76,9 +73,6 @@ const EditTaintsModal = ({ name, version, kind, taints, closePopup }: EditTaints
76
73
// HOOKS
77
74
const { clusterId } = useParams < { clusterId : string } > ( )
78
75
79
- // CONSTANTS
80
- const isTaintListEmpty = taintList . length === 0
81
-
82
76
// HANDLERS
83
77
const onClose = ( ) => {
84
78
if ( ! apiCallInProgress ) {
@@ -100,23 +94,29 @@ const EditTaintsModal = ({ name, version, kind, taints, closePopup }: EditTaints
100
94
const updatedTaintCellError = structuredClone ( taintCellError )
101
95
delete updatedTaintCellError [ row . id ]
102
96
97
+ if ( filteredTaintList . length === 0 ) {
98
+ const newTaintsRow = getTaintsTableRow ( )
99
+ filteredTaintList . push ( newTaintsRow )
100
+ updatedTaintCellError [ newTaintsRow . id ] = getTaintsRowCellError ( )
101
+ }
102
+
103
103
setTaintList ( filteredTaintList )
104
104
setTaintCellError ( updatedTaintCellError )
105
105
}
106
106
107
107
const handleEditTaint : TaintsTableType [ 'onRowEdit' ] = ( row , headerKey , value ) => {
108
- const updatedTaintList = taintList . map ( ( taint ) =>
109
- taint . id === row . id
110
- ? { ...taint , data : { ...taint . data , [ headerKey ] : { ...taint . data [ headerKey ] , value } } }
111
- : taint ,
112
- )
113
- const updatedTaintCellError = {
114
- ...taintCellError ,
115
- [ row . id ] : {
116
- ...taintCellError [ row . id ] ,
117
- [ headerKey ] : getTaintsTableCellValidateState ( headerKey , value ) ,
118
- } ,
108
+ const indexToUpdateInTaintList = taintList . findIndex ( ( taint ) => taint . id === row . id )
109
+ if ( indexToUpdateInTaintList === - 1 ) {
110
+ return
119
111
}
112
+
113
+ const updatedTaintList = taintList
114
+ const updatedTaintRow = taintList [ indexToUpdateInTaintList ]
115
+ updatedTaintRow . data [ headerKey ] . value = value
116
+ updatedTaintList [ indexToUpdateInTaintList ] = updatedTaintRow
117
+
118
+ const updatedTaintCellError = structuredClone ( taintCellError )
119
+ updatedTaintCellError [ row . id ] [ headerKey ] = getTaintsTableCellValidateState ( headerKey , updatedTaintRow )
120
120
validateUniqueTaintKey ( { taintCellError : updatedTaintCellError , taintList : updatedTaintList } )
121
121
122
122
setTaintList ( updatedTaintList )
@@ -173,77 +173,56 @@ const EditTaintsModal = ({ name, version, kind, taints, closePopup }: EditTaints
173
173
/>
174
174
</ div >
175
175
< div className = "flex-grow-1 dc__overflow-auto flexbox-col dc__gap-16 p-20" >
176
- { isTaintListEmpty ? (
177
- < GenericEmptyState
178
- title = { EDIT_TAINTS_MODAL_MESSAGING . emptyState . title }
179
- subTitle = { EDIT_TAINTS_MODAL_MESSAGING . emptyState . subTitle }
180
- image = { ImgEmptyChartGroup }
181
- isButtonAvailable
182
- renderButton = { ( ) => (
183
- < Button
184
- dataTestId = "add-taint"
185
- text = { EDIT_TAINTS_MODAL_MESSAGING . addTaint }
186
- startIcon = { < Icon name = "ic-add" color = { null } /> }
187
- onClick = { handleAddTaint }
188
- />
189
- ) }
190
- />
191
- ) : (
192
- < >
193
- < div className = "flex dc__content-space" >
194
- < div className = "flex" >
195
- < Icon name = "ic-spray-can" color = "N900" />
196
- < h3 className = "fs-14 lh-20 fw-6 cn-9 mt-0 mb-0 ml-8 mr-4" >
197
- { EDIT_TAINTS_MODAL_MESSAGING . infoTitle }
198
- </ h3 >
199
- < InfoIconTippy
200
- heading = "Taints"
201
- documentationLinkText = "View documentation"
202
- documentationLink = "TAINT"
203
- additionalContent = { < AdditionalContent /> }
204
- openInNewTab
205
- />
206
- </ div >
207
- < Button
208
- dataTestId = "add-taint"
209
- variant = { ButtonVariantType . secondary }
210
- startIcon = { < Icon name = "ic-add" color = { null } /> }
211
- size = { ComponentSizeType . small }
212
- text = { EDIT_TAINTS_MODAL_MESSAGING . addTaint }
213
- onClick = { handleAddTaint }
214
- />
215
- </ div >
216
- < DynamicDataTable < TaintsTableHeaderKeys >
217
- headers = { TAINTS_TABLE_HEADERS }
218
- rows = { taintList }
219
- onRowAdd = { handleAddTaint }
220
- onRowDelete = { handleDeleteTaint }
221
- onRowEdit = { handleEditTaint }
222
- cellError = { taintCellError }
223
- isAdditionNotAllowed
224
- shouldAutoFocusOnMount
176
+ < div className = "flex dc__content-space" >
177
+ < div className = "flex" >
178
+ < Icon name = "ic-spray-can" color = "N900" />
179
+ < h3 className = "fs-14 lh-20 fw-6 cn-9 mt-0 mb-0 ml-8 mr-4" >
180
+ { EDIT_TAINTS_MODAL_MESSAGING . infoTitle }
181
+ </ h3 >
182
+ < InfoIconTippy
183
+ heading = "Taints"
184
+ documentationLinkText = "View documentation"
185
+ documentationLink = "TAINT"
186
+ additionalContent = { < AdditionalContent /> }
187
+ openInNewTab
225
188
/>
226
- </ >
227
- ) }
228
- </ div >
229
- { ! isTaintListEmpty && (
230
- < div className = "dc__border-top flex right p-16 dc__gap-12" >
189
+ </ div >
231
190
< Button
232
- dataTestId = "edit-taints-modal-cancel "
191
+ dataTestId = "add-taint "
233
192
variant = { ButtonVariantType . secondary }
234
- style = { ButtonStyleType . neutral }
235
- disabled = { apiCallInProgress }
236
- text = { EDIT_TAINTS_MODAL_MESSAGING . Actions . cancel }
237
- onClick = { onClose }
238
- />
239
- < Button
240
- dataTestId = "edit-taints-modal-save"
241
- isLoading = { apiCallInProgress }
242
- text = { EDIT_TAINTS_MODAL_MESSAGING . Actions . save }
243
- onClick = { onSave }
193
+ startIcon = { < Icon name = "ic-add" color = { null } /> }
194
+ size = { ComponentSizeType . small }
195
+ text = { EDIT_TAINTS_MODAL_MESSAGING . addTaint }
196
+ onClick = { handleAddTaint }
244
197
/>
245
198
</ div >
246
- ) }
199
+ < DynamicDataTable < TaintsTableHeaderKeys >
200
+ headers = { TAINTS_TABLE_HEADERS }
201
+ rows = { taintList }
202
+ onRowAdd = { handleAddTaint }
203
+ onRowDelete = { handleDeleteTaint }
204
+ onRowEdit = { handleEditTaint }
205
+ cellError = { taintCellError }
206
+ isAdditionNotAllowed
207
+ shouldAutoFocusOnMount
208
+ />
209
+ </ div >
210
+ < div className = "dc__border-top flex right p-16 dc__gap-12" >
211
+ < Button
212
+ dataTestId = "edit-taints-modal-cancel"
213
+ variant = { ButtonVariantType . secondary }
214
+ style = { ButtonStyleType . neutral }
215
+ disabled = { apiCallInProgress }
216
+ text = { EDIT_TAINTS_MODAL_MESSAGING . Actions . cancel }
217
+ onClick = { onClose }
218
+ />
219
+ < Button
220
+ dataTestId = "edit-taints-modal-save"
221
+ isLoading = { apiCallInProgress }
222
+ text = { EDIT_TAINTS_MODAL_MESSAGING . Actions . save }
223
+ onClick = { onSave }
224
+ />
225
+ </ div >
247
226
</ div >
248
227
</ Drawer >
249
228
)
0 commit comments