@@ -48,6 +48,7 @@ export const KeyValueTable = <K extends string>({
48
48
headerComponent,
49
49
onChange,
50
50
onDelete,
51
+ isAdditionNotAllowed,
51
52
} : KeyValueTableProps < K > ) => {
52
53
// CONSTANTS
53
54
const { headers, rows } = config
@@ -82,13 +83,10 @@ export const KeyValueTable = <K extends string>({
82
83
83
84
useEffect ( ( ) => {
84
85
const sortFn = ( a : KeyValueRow < K > , b : KeyValueRow < K > ) => {
85
- if ( ! a [ sortBy ] . value && ! b [ sortBy ] . value ) {
86
- return 0
87
- }
88
86
if ( sortOrder === SortingOrder . ASC ) {
89
- return a [ sortBy ] . value < b [ sortBy ] . value ? 1 : - 1
87
+ return b . data [ sortBy ] . value . localeCompare ( a . data [ sortBy ] . value )
90
88
}
91
- return a [ sortBy ] . value > b [ sortBy ] . value ? 1 : - 1
89
+ return a . data [ sortBy ] . value . localeCompare ( b . data [ sortBy ] . value )
92
90
}
93
91
94
92
const sortedRows = [ ..._rows ]
@@ -102,14 +100,14 @@ export const KeyValueTable = <K extends string>({
102
100
setNewRowAdded ( false )
103
101
104
102
if (
105
- ! firstRow [ secondHeaderKey ] . value &&
103
+ ! firstRow . data [ secondHeaderKey ] . value &&
106
104
keyTextAreaRef . current [ 0 ] . current &&
107
105
valueTextAreaRef . current [ 0 ] . current
108
106
) {
109
107
keyTextAreaRef . current [ 0 ] . current . focus ( )
110
108
}
111
109
if (
112
- ! firstRow [ firstHeaderKey ] . value &&
110
+ ! firstRow . data [ firstHeaderKey ] . value &&
113
111
valueTextAreaRef . current [ 0 ] . current &&
114
112
valueTextAreaRef . current [ 0 ] . current
115
113
) {
@@ -125,14 +123,17 @@ export const KeyValueTable = <K extends string>({
125
123
const { value } = e . target
126
124
127
125
const data = {
128
- [ firstHeaderKey ] : {
129
- value : key === firstHeaderKey ? value : '' ,
130
- placeholder : 'Enter Key' ,
131
- } ,
132
- [ secondHeaderKey ] : {
133
- value : key === secondHeaderKey ? value : '' ,
134
- placeholder : 'Enter Value' ,
126
+ data : {
127
+ [ firstHeaderKey ] : {
128
+ value : key === firstHeaderKey ? value : '' ,
129
+ placeholder : 'Enter Key' ,
130
+ } ,
131
+ [ secondHeaderKey ] : {
132
+ value : key === secondHeaderKey ? value : '' ,
133
+ placeholder : 'Enter Value' ,
134
+ } ,
135
135
} ,
136
+ id : Date . now ( ) * Math . random ( ) ,
136
137
} as KeyValueRow < K >
137
138
138
139
setNewRowAdded ( true )
@@ -146,7 +147,7 @@ export const KeyValueTable = <K extends string>({
146
147
const { value } = e . target
147
148
148
149
let newRows = [ ]
149
- if ( ! value && ! row [ key === firstHeaderKey ? secondHeaderKey : firstHeaderKey ] . value ) {
150
+ if ( ! value && ! row . data [ key === firstHeaderKey ? secondHeaderKey : firstHeaderKey ] . value ) {
150
151
newRows = _rows . filter ( ( _ , idx ) => idx !== rowIndex )
151
152
152
153
keyTextAreaRef . current = keyTextAreaRef . current . filter ( ( _ , idx ) => idx !== rowIndex )
@@ -159,16 +160,19 @@ export const KeyValueTable = <K extends string>({
159
160
..._rows . slice ( 0 , rowIndex ) ,
160
161
{
161
162
...row ,
162
- [ key ] : {
163
- ...row [ key ] ,
164
- value,
163
+ data : {
164
+ ...row . data ,
165
+ [ key ] : {
166
+ ...row . data [ key ] ,
167
+ value,
168
+ } ,
165
169
} ,
166
170
} ,
167
171
..._rows . slice ( rowIndex + 1 ) ,
168
172
]
169
173
}
170
174
setRows ( newRows )
171
- onChange ?.( rowIndex , key )
175
+ onChange ?.( rowIndex , key , value )
172
176
}
173
177
174
178
return (
@@ -205,26 +209,28 @@ export const KeyValueTable = <K extends string>({
205
209
) }
206
210
{ ! ! headerComponent && < div className = "px-12" > { headerComponent } </ div > }
207
211
</ div >
208
- < div
209
- className = "table-row flexbox dc__align-items-center dc__border-bottom"
210
- style = { { borderColor : 'var(--N100)' } }
211
- >
212
- { headers . map ( ( { key } ) => (
213
- < div
214
- key = { key }
215
- className = { `cn-9 fs-13 lh-20 py-8 px-12 flex dc__overflow-auto ${ key === firstHeaderKey ? 'head__key' : 'flex-grow-1' } ` }
216
- >
217
- < textarea
218
- ref = { key === firstHeaderKey ? inputRowRef : undefined }
219
- className = "table-input table-input__text-area pt-8 pb-8 pl-10 pb-10 lh-20 fs-13 fw-4"
220
- value = ""
221
- rows = { 1 }
222
- placeholder = { key === firstHeaderKey ? 'Enter Key' : 'Enter Value' }
223
- onChange = { onNewRowEdit ( key ) }
224
- />
225
- </ div >
226
- ) ) }
227
- </ div >
212
+ { ! isAdditionNotAllowed && (
213
+ < div
214
+ className = "table-row flexbox dc__align-items-center dc__border-bottom"
215
+ style = { { borderColor : 'var(--N100)' } }
216
+ >
217
+ { headers . map ( ( { key } ) => (
218
+ < div
219
+ key = { key }
220
+ className = { `cn-9 fs-13 lh-20 py-8 px-12 flex dc__overflow-auto ${ key === firstHeaderKey ? 'head__key' : 'flex-grow-1' } ` }
221
+ >
222
+ < textarea
223
+ ref = { key === firstHeaderKey ? inputRowRef : undefined }
224
+ className = "table-input table-input__text-area pt-8 pb-8 pl-10 pb-10 lh-20 fs-13 fw-4"
225
+ value = ""
226
+ rows = { 1 }
227
+ placeholder = { key === firstHeaderKey ? 'Enter Key' : 'Enter Value' }
228
+ onChange = { onNewRowEdit ( key ) }
229
+ />
230
+ </ div >
231
+ ) ) }
232
+ </ div >
233
+ ) }
228
234
{ _rows ?. map ( ( row , index ) => (
229
235
< div
230
236
key = { `${ index . toString ( ) } ` }
@@ -236,16 +242,16 @@ export const KeyValueTable = <K extends string>({
236
242
key = { `${ index . toString ( ) } -${ i . toString ( ) } ` }
237
243
className = { `cn-9 fs-13 lh-20 py-8 px-12 dc__overflow-auto flexbox dc__align-items-center dc__gap-4 ${ key === firstHeaderKey ? 'head__key' : 'flex-grow-1' } ` }
238
244
>
239
- { maskValue ?. [ key ] && row [ key ] . value ? (
245
+ { maskValue ?. [ key ] && row . data [ key ] . value ? (
240
246
'*****'
241
247
) : (
242
248
< >
243
249
< ResizableTagTextArea
244
- { ...row [ key ] }
250
+ { ...row . data [ key ] }
245
251
className = "table-input"
246
252
minHeight = { 20 }
247
253
maxHeight = { 144 }
248
- value = { row [ key ] . value }
254
+ value = { row . data [ key ] . value }
249
255
onChange = { onRowDataEdit ( row , key , index ) }
250
256
refVar = {
251
257
key === firstHeaderKey
@@ -259,7 +265,7 @@ export const KeyValueTable = <K extends string>({
259
265
}
260
266
disableOnBlurResizeToMinHeight
261
267
/>
262
- { row [ key ] . showAsterisk && (
268
+ { row . data [ key ] . showAsterisk && (
263
269
< span className = "cr-5 fs-16 dc__align-self-start px-6" > *</ span >
264
270
) }
265
271
</ >
0 commit comments