import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { RadioTower } from "lucide-react"; import { useCreateReading } from "@/hooks/use-readings"; import { useToast } from "@/hooks/use-toast"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; const formSchema = z.object({ ph: z.coerce.number().min(0).max(14), turbidity: z.coerce.number().min(0), temperature: z.coerce.number(), hardness: z.coerce.number().min(0), }); type FormData = z.infer; export function CreateReadingDialog({ sensorId }: { sensorId: string }) { const [open, setOpen] = useState(false); const create = useCreateReading(); const { toast } = useToast(); const form = useForm({ resolver: zodResolver(formSchema) as any, defaultValues: { ph: 7.0, turbidity: 2.5, temperature: 20.0, hardness: 80.0 }, }); const onSubmit = (data: FormData) => { // API expects number values for numeric columns const payload = { sensorId, ph: data.ph, turbidity: data.turbidity, temperature: data.temperature, hardness: data.hardness, }; create.mutate(payload, { onSuccess: () => { toast({ title: "Telemetry Injected", description: `Data transmitted to ${sensorId}.`, }); setOpen(false); form.reset(); }, onError: (error) => { toast({ variant: "destructive", title: "Transmission Failed", description: error.message, }); } }); }; return ( Manual Data Override
); }