@@ -70,6 +70,8 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
7070 const [ settingsPopperElement , setSettingsPopperElement ] = useState ( null ) ;
7171 const [ showSettings , setShowSettings ] = useState ( false ) ;
7272
73+ // Manage errors
74+ const [ labelStateInvalid , setLabelStateInvalid ] = useState ( false ) ;
7375 useEffect ( ( ) => {
7476 if ( created ) {
7577 setExpanded ( true ) ;
@@ -208,9 +210,7 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
208210 }
209211 ) ;
210212
211- function persistLabelChange ( ) {
212- // trim label will get a valid yaml key
213- const newKey = dbTrim ( labelState ) ;
213+ function persistLabelChange ( newKey : string ) {
214214 const futureOrder = headerMenuProps . headerProps . allColumns . map (
215215 ( o : Column ) => ( o . id === column . id ? newKey : o . id )
216216 ) ;
@@ -239,12 +239,26 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
239239 }
240240 function handleKeyDown ( e : any ) {
241241 if ( e . key === "Enter" ) {
242- persistLabelChange ( ) ;
242+ // trim label will get a valid yaml key
243+ const newKey = dbTrim ( labelState ) ;
244+ // Check if key already exists. If so, mark it as invalid
245+ if (
246+ headerMenuProps . headerProps . allColumns . find (
247+ ( o : Column ) => o . id === newKey
248+ )
249+ ) {
250+ setLabelStateInvalid ( true ) ;
251+ return ;
252+ }
253+ persistLabelChange ( newKey ) ;
243254 }
244255 }
245256
246257 function handleChange ( e : any ) {
247258 setLabelState ( e . target . value ) ;
259+ if ( labelStateInvalid ) {
260+ setLabelStateInvalid ( false ) ;
261+ }
248262 }
249263
250264 /**
@@ -292,7 +306,7 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
292306 < div
293307 className = { `menu ${ c ( "popper" ) } ` }
294308 style = { {
295- width : 240
309+ width : 240 ,
296310 } }
297311 >
298312 { /** Edit header label section */ }
@@ -305,7 +319,11 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
305319 >
306320 < div className = "is-fullwidth" style = { { marginBottom : 12 } } >
307321 < input
308- className = "form-input"
322+ className = {
323+ labelStateInvalid
324+ ? `${ c ( "invalid-form" ) } `
325+ : `${ c ( "form-input" ) } `
326+ }
309327 ref = { setInputRef }
310328 type = "text"
311329 value = { labelState }
@@ -356,7 +374,10 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
356374 >
357375 { types . map ( ( type ) => (
358376 < div key = { type . label } >
359- < div className = "menu-item sort-button" onClick = { type . onClick } >
377+ < div
378+ className = "menu-item sort-button"
379+ onClick = { type . onClick }
380+ >
360381 < span className = "svg-icon svg-text icon-margin" >
361382 { type . icon }
362383 </ span >
@@ -439,9 +460,8 @@ const HeaderMenu = (headerMenuProps: HeaderMenuProps) => {
439460 </ div >
440461 </ div >
441462 </ div >
442- )
443- }
444- </ div >
463+ ) }
464+ </ div >
445465 ) ;
446466} ;
447467
0 commit comments