/* eslint-disable security/detect-object-injection */ import { useState, useEffect, useCallback } from 'react' import { useLocation, useNavigate } from 'react-router-dom' interface TabItem { title: string component: React.ReactNode } interface TabsProps { items: TabItem[] setUrlParams: (params: URLSearchParams) => void } export const Tabs: React.FC = ({ items, setUrlParams }: TabsProps) => { const location = useLocation() const navigate = useNavigate() const [activeIndex, setActiveIndex] = useState(0) useEffect(() => { const params = new URLSearchParams(location.search) const urlTab = params.get('tab') if (urlTab !== null && !isNaN(Number(urlTab))) { const index = Number(urlTab) if (index >= 0 && index < items.length) { setActiveIndex(index) } } }, [items.length, location.search]) const updateActiveTab = useCallback( (index: number) => { setActiveIndex(index) const params = new URLSearchParams(location.search) params.set('tab', `${index}`) setUrlParams(params) const newUrl = location.pathname + '?' + params.toString() navigate(newUrl, { replace: false }) }, [location.pathname, location.search, navigate, setUrlParams], ) return (
{items.map((item, index) => (
updateActiveTab(index)} > {item.title}
))}
{items[activeIndex]?.component}
) }