diff --git a/crawler/frontend/src/App.tsx b/crawler/frontend/src/App.tsx index e736633..a793ba0 100644 --- a/crawler/frontend/src/App.tsx +++ b/crawler/frontend/src/App.tsx @@ -38,6 +38,14 @@ function App() { if (parameters.max_price) { queryString.append("max_price", parameters.max_price.toString()); } + if (parameters.min_bedrooms) { + queryString.append('min_bedrooms', parameters.min_bedrooms.toString()); + } + if (parameters.max_bedrooms) { + queryString.append('max_bedrooms', parameters.max_bedrooms.toString()) + } + + try { const response = await fetch("/api/listing_geojson?" + queryString, { diff --git a/crawler/frontend/src/components/Parameters.tsx b/crawler/frontend/src/components/Parameters.tsx index e46f5dd..61f0eb9 100644 --- a/crawler/frontend/src/components/Parameters.tsx +++ b/crawler/frontend/src/components/Parameters.tsx @@ -24,6 +24,8 @@ export enum ListingType { export interface ParameterValues { metric: Metric listing_type: ListingType + min_bedrooms?: number + max_bedrooms?: number max_price?: number } @@ -41,12 +43,16 @@ export function Parameters( const formSchema = z.object({ metric: z.nativeEnum(Metric, { required_error: "Metric is required" }), listing_type: z.nativeEnum(ListingType, { required_error: "Listing Type is required" }), + min_bedrooms: z.number().min(1).max(10).optional(), + max_bedrooms: z.number().min(1).max(10).optional(), max_price: z.number().optional(), }) const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { metric: Metric.qmprice, + min_bedrooms: 1, + max_bedrooms: 3, max_price: 3000, }, }) @@ -118,6 +124,34 @@ export function Parameters( )} /> + ( + + Minimum number of bedrooms + + field.onChange(Number(e.target.value))} /> + + + + + )} + /> + ( + + Maximum number of bedrooms + + field.onChange(Number(e.target.value))} /> + + + + + )} + />