Redesign filter panel with range sliders, separated visualization card, and backend filter support

Simplify the filter UI to show only essential filters (type toggle, price/bedroom
range sliders, min size) by default, with advanced filters collapsed. Extract
visualization controls (color-by metric, POI travel mode) into a separate
VisualizationCard component. Wire up previously ignored backend filters: max_sqm,
min/max_price_per_sqm, and district_names now work end-to-end.
This commit is contained in:
Viktor Barzin 2026-02-08 18:50:06 +00:00
parent 1f4a3f858c
commit 743e018668
No known key found for this signature in database
GPG key ID: 0EB088298288D958
11 changed files with 422 additions and 588 deletions

View file

@ -191,6 +191,20 @@ class ListingRepository:
)
if query_parameters.min_sqm is not None:
query = query.where(model.square_meters >= query_parameters.min_sqm)
if query_parameters.max_sqm is not None:
query = query.where(model.square_meters <= query_parameters.max_sqm)
if query_parameters.min_price_per_sqm is not None:
query = query.where(
model.square_meters.is_not(None),
model.square_meters > 0,
(model.price / model.square_meters) >= query_parameters.min_price_per_sqm,
)
if query_parameters.max_price_per_sqm is not None:
query = query.where(
model.square_meters.is_not(None),
model.square_meters > 0,
(model.price / model.square_meters) <= query_parameters.max_price_per_sqm,
)
if query_parameters.furnish_types and model == RentListing:
query = query.where(model.furnish_type.in_(query_parameters.furnish_types))
if (