AlkantarClanX12
Current Path : /home/thanudqk/siamfreetour.com/wp-content/themes/blossom-recipe/src/components/Tab/ |
Current File : /home/thanudqk/siamfreetour.com/wp-content/themes/blossom-recipe/src/components/Tab/useTabs.jsx |
import { useRef, useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; function useTabs(initialTabs, initialActiveTab = 0, onChange) { const tabsRef = useRef(initialTabs); const [activeTab, setActiveTab] = useState(initialActiveTab); const navigate = useNavigate(); const handleTabClick = (index) => { if (index !== activeTab) { setActiveTab(index); const newHash = tabsRef.current[index].title.toLowerCase().replace(/ /g, "-"); if (onChange) { onChange(tabsRef.current[index].title); } navigate(`/wp-admin/themes.php?page=blossom-recipe-dashboard#${newHash}`); } }; const checkHash = () => { const hash = window.location.hash.substring(1); const tabIndex = tabsRef.current.findIndex( (tab) => tab.title.toLowerCase().replace(/ /g, "-") === hash ); if (tabIndex !== -1 && tabIndex !== activeTab) { setActiveTab(tabIndex); if (onChange) { onChange(tabsRef.current[tabIndex].title); } } }; useEffect(() => { checkHash(); window.addEventListener('hashchange', checkHash); return () => { window.removeEventListener('hashchange', checkHash); }; }, []); const renderTabs = () => { return tabsRef.current.map((tab, index) => ( <button key={index} onClick={() => handleTabClick(index)} className={activeTab === index ? 'active-tab' : ''} > {tab.icon} {tab.title} </button> )); }; const renderContent = () => { return tabsRef.current[activeTab].content; }; return { renderTabs, renderContent }; } export default useTabs;