diff --git a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js index 48c2a85e5..e68c91892 100644 --- a/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js +++ b/modules/ppcp-settings/resources/js/Components/ReusableComponents/TabNavigation.js @@ -1,15 +1,34 @@ +import { memo, useCallback, useEffect, useState } from '@wordpress/element'; import { TabPanel } from '@wordpress/components'; import { getQuery, updateQueryString } from '@woocommerce/navigation'; -import { useEffect, useState } from '@wordpress/element'; const TabNavigation = ( { tabs } ) => { - const initialPanel = getQuery()?.panel ?? tabs[ 0 ].name; - const [ activePanel, setActivePanel ] = useState( initialPanel ); + const { panel } = getQuery(); - const updatePanelUri = ( tabName ) => { - setActivePanel( tabName ); + const isValidTab = ( tabsList, checkTab ) => { + return tabsList.some( ( tab ) => tab.name === checkTab ); }; + const getValidInitialPanel = () => { + if ( ! panel || ! isValidTab( tabs, panel ) ) { + return tabs[ 0 ].name; + } + return panel; + }; + + const [ activePanel, setActivePanel ] = useState( getValidInitialPanel ); + + const updatePanelUri = useCallback( + ( tabName ) => { + if ( isValidTab( tabs, tabName ) ) { + setActivePanel( tabName ); + } else { + console.warn( `Invalid tab name: ${ tabName }` ); + } + }, + [ tabs ] + ); + useEffect( () => { updateQueryString( { panel: activePanel }, '/', getQuery() ); }, [ activePanel ] );