"use client"; import { cn } from "@/lib/utils"; import Link, { LinkProps } from "next/link"; import { usePathname, useSearchParams } from "next/navigation"; import * as React from "react"; import { Suspense } from "react"; interface Context { defaultValue: string; hrefFor: (value: string) => LinkProps["href"]; searchParam: string; selected: string; } const TabsContext = React.createContext(null as any); export function Tabs(props: { children: React.ReactNode; className?: string; defaultValue: string; searchParam?: string; }) { const { children, className, searchParam = "tab", ...other } = props; return ( Loading...}> ); } function TabsContentWrapper(props: { children: React.ReactNode; className?: string; defaultValue: string; searchParam?: string; }) { const { children, className, searchParam = "tab", ...other } = props; const searchParams = useSearchParams()!; const selected = searchParams.get(searchParam) || props.defaultValue; const pathname = usePathname(); const hrefFor: Context["hrefFor"] = React.useCallback( (value) => { const params = new URLSearchParams(searchParams); if (value === props.defaultValue) { params.delete(searchParam); } else { params.set(searchParam, value); } const asString = params.toString(); return pathname + (asString ? "?" + asString : ""); }, [searchParams, props.searchParam], ); return (
{children}
); } const useContext = () => { const context = React.useContext(TabsContext); if (!context) { throw new Error( "Tabs compound components cannot be rendered outside the Tabs component", ); } return context; }; export function TabsList(props: { children: React.ReactNode; className?: string; }) { return (
); } export const TabsTrigger = (props: { children: React.ReactNode; className?: string; value: string; }) => { const context = useContext(); return ( ); }; export function TabsContent(props: { children: React.ReactNode; className?: string; value: string; }) { const context = useContext(); if (context.selected !== props.value) { return null; } return (
); }