"use client"; import { ReactNode, useCallback } from "react"; import { useRouter, usePathname, useSearchParams } from "next/navigation"; interface FormHandlerProps { children: ReactNode; onSubmit: () => Promise; } export default function FormHandler({ children, onSubmit }: FormHandlerProps) { const router = useRouter(); const searchParams = useSearchParams(); const pathname = usePathname(); const updateParams = useCallback( (updates: Record) => { const params = new URLSearchParams(searchParams.toString()); Object.entries(updates).forEach(([key, value]) => { if (value === null) params.delete(key); else params.set(key, value); }); router.push(`${pathname}?${params.toString()}`); }, [searchParams, router, pathname] ); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { await onSubmit(); } catch (err: any) { updateParams({ error: String(err) }); } }; return
{children}
; }