"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { useAtomValue } from "jotai"; import { useTranslations } from "next-intl"; import { useState } from "react"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { createSearchSpaceMutationAtom } from "@/atoms/search-spaces/search-space-mutation.atoms"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Spinner } from "@/components/ui/spinner"; import { trackSearchSpaceCreated } from "@/lib/posthog/events"; const formSchema = z.object({ name: z.string().min(1, "Name is required"), description: z.string().optional(), }); type FormValues = z.infer; interface CreateSearchSpaceDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } export function CreateSearchSpaceDialog({ open, onOpenChange }: CreateSearchSpaceDialogProps) { const t = useTranslations("searchSpace"); const tCommon = useTranslations("common"); const [isSubmitting, setIsSubmitting] = useState(false); const { mutateAsync: createSearchSpace } = useAtomValue(createSearchSpaceMutationAtom); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { name: "", description: "", }, }); const handleSubmit = async (values: FormValues) => { setIsSubmitting(true); try { const result = await createSearchSpace({ name: values.name, description: values.description || "", }); trackSearchSpaceCreated(result.id, values.name); // Hard redirect to ensure fresh state window.location.href = `/dashboard/${result.id}/onboard`; } catch (error) { console.error("Failed to create search space:", error); setIsSubmitting(false); } }; const handleOpenChange = (newOpen: boolean) => { if (!newOpen) { form.reset(); } onOpenChange(newOpen); }; return (
{t("create_title")} {t("create_description")}
( {t("name_label")} )} /> ( {t("description_label")}{" "} ({tCommon("optional")}) )} />
); }