'use client'; import { useSearchParams, useRouter, usePathname } from 'next/navigation'; import { Loader2 } from 'lucide-react'; import { ResponsiveTabs, type ResponsiveTab } from '@/components/shared/responsive-tabs'; export type DetailTab = ResponsiveTab; interface DetailLayoutProps { header: React.ReactNode; tabs: DetailTab[]; defaultTab?: string; isLoading?: boolean; actions?: React.ReactNode; } export function DetailLayout({ header, tabs, defaultTab, isLoading, actions }: DetailLayoutProps) { const searchParams = useSearchParams(); const router = useRouter(); const pathname = usePathname(); const activeTab = searchParams.get('tab') ?? defaultTab ?? tabs[0]?.id ?? ''; function handleTabChange(tabId: string) { const params = new URLSearchParams(searchParams.toString()); params.set('tab', tabId); // eslint-disable-next-line @typescript-eslint/no-explicit-any router.replace(`${pathname}?${params.toString()}` as any, { scroll: false }); } if (isLoading) { return (
); } return (
{header}
{actions &&
{actions}
}
); }