diff --git a/src/components/rides/RideFilters.tsx b/src/components/rides/RideFilters.tsx index 86ecf36a..65bfccf9 100644 --- a/src/components/rides/RideFilters.tsx +++ b/src/components/rides/RideFilters.tsx @@ -13,6 +13,12 @@ import { FilterSection } from '@/components/filters/FilterSection'; import { FilterMultiSelectCombobox } from '@/components/filters/FilterMultiSelectCombobox'; import { MultiSelectOption } from '@/components/ui/multi-select-combobox'; import { Ride } from '@/types/database'; +import { useUnitPreferences } from '@/hooks/useUnitPreferences'; +import { + convertValueToMetric, + convertValueFromMetric, + getDisplayUnit +} from '@/lib/units'; export interface RideFilterState { categories: string[]; @@ -79,6 +85,9 @@ interface RideFiltersProps { } export function RideFilters({ filters, onFiltersChange, rides }: RideFiltersProps) { + const { preferences } = useUnitPreferences(); + const system = preferences.measurement_system; + // Fetch unique filter options const { data: locations } = useQuery({ queryKey: ['filter-locations'], @@ -221,6 +230,27 @@ export function RideFilters({ filters, onFiltersChange, rides }: RideFiltersProp { label: 'Other', value: 'other' }, ]; + // Calculate display ranges based on user preferences + const speedUnit = getDisplayUnit('km/h', system); + const heightUnit = getDisplayUnit('m', system); + const lengthUnit = getDisplayUnit('m', system); + + // Convert metric filter ranges to display units for sliders + const displaySpeedMin = Math.round(convertValueFromMetric(0, speedUnit, 'km/h')); + const displaySpeedMax = Math.round(convertValueFromMetric(200, speedUnit, 'km/h')); + const displayHeightMin = Math.round(convertValueFromMetric(0, heightUnit, 'm')); + const displayHeightMax = Math.round(convertValueFromMetric(150, heightUnit, 'm')); + const displayLengthMin = Math.round(convertValueFromMetric(0, lengthUnit, 'm')); + const displayLengthMax = Math.round(convertValueFromMetric(3000, lengthUnit, 'm')); + + // Convert current metric filter values to display units + const currentSpeedMin = Math.round(convertValueFromMetric(filters.minSpeed, speedUnit, 'km/h')); + const currentSpeedMax = Math.round(convertValueFromMetric(filters.maxSpeed, speedUnit, 'km/h')); + const currentHeightMin = Math.round(convertValueFromMetric(filters.minHeight, heightUnit, 'm')); + const currentHeightMax = Math.round(convertValueFromMetric(filters.maxHeight, heightUnit, 'm')); + const currentLengthMin = Math.round(convertValueFromMetric(filters.minLength, lengthUnit, 'm')); + const currentLengthMax = Math.round(convertValueFromMetric(filters.maxLength, lengthUnit, 'm')); + const resetFilters = () => { onFiltersChange(defaultRideFilters); }; @@ -382,30 +412,45 @@ export function RideFilters({ filters, onFiltersChange, rides }: RideFiltersProp