import { zodResolver } from "@hookform/resolvers/zod"; import { DialogTitle } from "@radix-ui/react-dialog"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { Button } from "./ui/button"; import { Dialog, DialogContent, DialogTrigger } from "./ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "./ui/form"; import { Input } from "./ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select"; export enum Metric { qmprice = 'qmprice', rooms = 'rooms', qm = 'qm', price = 'total_price', } export enum ListingType { RENT = 'RENT', BUY = 'BUY' } export interface ParameterValues { metric: Metric listing_type: ListingType max_price?: number } export function Parameters( props: { isOpen: boolean, onSubmit: (fromValues: ParameterValues) => void, } ) { const { register, } = useForm() // const onSubmit: SubmitHandler = (data) => console.log(data) const formSchema = z.object({ metric: z.nativeEnum(Metric, { required_error: "Metric is required" }), listing_type: z.nativeEnum(ListingType, { required_error: "Listing Type is required" }), max_price: z.number().optional(), }) const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { metric: Metric.qmprice, max_price: 3000, }, }) // 2. Define a submit handler. function onSubmit(values: z.infer) { // Do something with the form values. // ✅ This will be type-safe and validated. console.log(values) props.onSubmit(values) } return <> Visualization Parameters
( Metric to visualize )} /> ( Listing Type )} /> ( Max price field.onChange(Number(e.target.value))} /> )} />
}