@@ -234,6 +234,7 @@ const ToggleBlockDialog = ( {
234234const Sidenav = ( {
235235 currentTab,
236236 handleTabChange,
237+ hasUnsavedChanges,
237238 handleSettingsSave,
238239 currentSearch,
239240 isSaving,
@@ -337,6 +338,11 @@ const Sidenav = ( {
337338 } ,
338339 ] , [ ] )
339340
341+ const saveButtonClasses = classnames ( [
342+ 's-save-changes' ,
343+ { 's-button-has-unsaved-changes' : hasUnsavedChanges } ,
344+ ] )
345+
340346 return (
341347 < >
342348 < nav className = "s-sidenav" >
@@ -348,14 +354,14 @@ const Sidenav = ( {
348354 } ) => {
349355 const isSearched = currentSearch &&
350356 settings . some ( setting => setting . toLowerCase ( ) . includes ( currentSearch ) )
351- const classes = classnames ( [
357+ const tabClasses = classnames ( [
352358 's-sidenav-item' ,
353359 { 's-sidenav-item-highlight' : isSearched } ,
354360 { 's-active' : currentTab === id } ,
355361 ] )
356362 return ( < button
357363 key = { id }
358- className = { classes }
364+ className = { tabClasses }
359365 onClick = { ( ) => handleTabChange ( id ) }
360366 onKeyDown = { ( ) => handleTabChange ( id ) }
361367 role = "tab"
@@ -367,7 +373,7 @@ const Sidenav = ( {
367373 } ) }
368374 < div className = "s-save-changes-wrapper" >
369375 < button
370- className = "s-save-changes"
376+ className = { saveButtonClasses }
371377 onClick = { handleSettingsSave }
372378 >
373379 { isSaving ? < Spinner /> : __ ( 'Save Changes' , i18n ) }
@@ -439,10 +445,13 @@ const Settings = () => {
439445 currentSearch,
440446 }
441447
448+ const hasUnsavedChanges = useMemo ( ( ) => Object . keys ( unsavedChanges ) . length > 0 , [ unsavedChanges ] )
449+
442450 return < >
443451 < Sidenav
444452 currentTab = { currentTab }
445453 handleTabChange = { setCurrentTab }
454+ hasUnsavedChanges = { hasUnsavedChanges }
446455 handleSettingsSave = { handleSettingsSave }
447456 currentSearch = { currentSearch }
448457 isSaving = { isSaving }
0 commit comments