import { useState } from "react"; import { z } from "zod"; import type { UseMutationResult } from "@tanstack/react-query"; import { FormModal } from "@/components/shared/FormModal"; const schema = z.object({ observer: z.string().min(1, "Observer peer ID is required"), observed: z.string().optional(), session_id: z.string().optional(), }); interface Props { open: boolean; workspaceId: string; onClose: () => void; mutation: UseMutationResult< void, Error, { observer: string; observed?: string | null; dream_type: "omni"; session_id?: string | null } >; } export function ScheduleDreamModal({ open, onClose, mutation }: Props) { const [observer, setObserver] = useState(""); const [observed, setObserved] = useState(""); const [sessionId, setSessionId] = useState(""); const [validationError, setValidationError] = useState(""); const reset = () => { setObserver(""); setObserved(""); setSessionId(""); setValidationError(""); }; const handleSubmit = async (e: React.SyntheticEvent) => { e.preventDefault(); const result = schema.safeParse({ observer, observed: observed || undefined, session_id: sessionId || undefined }); if (!result.success) { setValidationError(result.error.errors[0].message); return; } await mutation.mutateAsync({ observer: result.data.observer, observed: result.data.observed ?? null, dream_type: "omni", session_id: result.data.session_id ?? null, }); reset(); onClose(); }; return ( { reset(); onClose(); }}>
{ setObserver(e.target.value); setValidationError(""); }} placeholder="peer_id" className="theme-input w-full text-sm px-3 py-2 rounded-lg" />
setObserved(e.target.value)} placeholder="peer_id" className="theme-input w-full text-sm px-3 py-2 rounded-lg" />
setSessionId(e.target.value)} placeholder="session_id" className="theme-input w-full text-sm px-3 py-2 rounded-lg" />
{validationError && (

{validationError}

)} {mutation.error && (

{mutation.error.message}

)}
); }