"use client"; import { useState } from "react"; interface PropertyFiltersProps { onFilterChange: (filters: FilterState) => void; } export interface FilterState { search: string; type: string; budgetMin: string; budgetMax: string; bhk: string; sortBy: string; } export default function PropertyFilters({ onFilterChange }: PropertyFiltersProps) { const [filters, setFilters] = useState({ search: "", type: "all", budgetMin: "", budgetMax: "", bhk: "all", sortBy: "popularity" }); const [showFilters, setShowFilters] = useState(false); const handleFilterUpdate = (key: keyof FilterState, value: string) => { const newFilters = { ...filters, [key]: value }; setFilters(newFilters); onFilterChange(newFilters); }; const clearFilters = () => { const defaultFilters: FilterState = { search: "", type: "all", budgetMin: "", budgetMax: "", bhk: "all", sortBy: "popularity" }; setFilters(defaultFilters); onFilterChange(defaultFilters); }; const hasActiveFilters = filters.search || filters.type !== "all" || filters.budgetMin || filters.budgetMax || filters.bhk !== "all" || filters.sortBy !== "popularity"; return (
{/* Main Filter Bar */}
{/* Search */}
handleFilterUpdate("search", e.target.value)} className="w-full pl-10 pr-4 py-3 border border-gray-300 dark:border-gray-700 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent bg-white dark:bg-gray-800 text-foreground" />
{/* Type Dropdown */} {/* Budget Dropdown */} {/* More Filters */} {/* Sort By */} {/* Clear Filters Button */} {hasActiveFilters && ( )} {/* Help Me Decide CTA */}
{/* Expanded Filters */} {showFilters && (
handleFilterUpdate("budgetMin", e.target.value)} className="w-full px-4 py-2 border border-gray-300 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900 text-foreground" />
handleFilterUpdate("budgetMax", e.target.value)} className="w-full px-4 py-2 border border-gray-300 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900 text-foreground" />
)}
); }