From b369756cfda89c90ce9ed916636ec5d88fca4357 Mon Sep 17 00:00:00 2001
From: Philipp Stracker
Date: Mon, 28 Oct 2024 16:58:50 +0100
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Validate=20the=20initial=20tab,?=
=?UTF-8?q?=20improve=20component?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ReusableComponents/TabNavigation.js | 29 +++++++++++++++----
1 file changed, 24 insertions(+), 5 deletions(-)
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 ] );