"use client" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Search, X, Calendar, Tag, SlidersHorizontal } from "lucide-react" import { useCategories } from "@/lib/queries" interface FilterBarProps { activeCategory: string onFilter: (category: string) => void searchText: string onSearchChange: (search: string) => void sortBy: string onSortChange: (sort: string) => void selectedTags: string[] onTagToggle: (tag: string) => void onClearFilters?: () => void } export function FilterBar({ activeCategory, onFilter, searchText, onSearchChange, sortBy, onSortChange, selectedTags, onTagToggle, onClearFilters }: FilterBarProps) { const { data: dynamicCategories = [] } = useCategories() const [showAdvanced, setShowAdvanced] = useState(false) // 静态分类作为备选 const staticCategories = [ { id: "all", name: "全部作品" }, { id: "urban", name: "城市风光" }, { id: "nature", name: "自然风景" }, { id: "portrait", name: "人像摄影" }, { id: "street", name: "街头摄影" }, { id: "architecture", name: "建筑摄影" }, { id: "macro", name: "微距摄影" }, ] // 使用动态分类,如果为空则使用静态分类 const categories = [ { id: "all", name: "全部作品" }, ...dynamicCategories.map(cat => ({ id: cat, name: cat })) ] // 常用标签 const availableTags = [ "风景", "人像", "黑白", "彩色", "夜景", "日出", "日落", "建筑", "街头", "自然", "艺术", "纪实" ] // 排序选项 const sortOptions = [ { value: "date_desc", label: "最新发布" }, { value: "date_asc", label: "最早发布" }, { value: "title_asc", label: "标题 A-Z" }, { value: "title_desc", label: "标题 Z-A" }, { value: "category", label: "按分类" }, ] // 检查是否有任何活动过滤器 const hasActiveFilters = activeCategory !== "all" || searchText.trim() !== "" || selectedTags.length > 0 || sortBy !== "date_desc" const handleClearSearch = () => { onSearchChange("") } const handleClearAll = () => { onFilter("all") onSearchChange("") onSortChange("date_desc") selectedTags.forEach(tag => onTagToggle(tag)) onClearFilters?.() } return (
{/* 搜索栏 */}
onSearchChange(e.target.value)} className="pl-10 pr-10" /> {searchText && ( )}
{/* 分类过滤 */}
{categories.map((category) => ( ))}
{/* 高级筛选 */} {showAdvanced && (
标签筛选
{availableTags.map((tag) => ( onTagToggle(tag)} > {tag} {selectedTags.includes(tag) && ( )} ))}
)} {/* 已选择的过滤器 */} {hasActiveFilters && (
当前筛选: {activeCategory !== "all" && ( 分类: {categories.find(c => c.id === activeCategory)?.name} onFilter("all")} /> )} {searchText.trim() && ( 搜索: "{searchText.trim()}" )} {selectedTags.map((tag) => ( {tag} onTagToggle(tag)} /> ))} {sortBy !== "date_desc" && ( 排序: {sortOptions.find(s => s.value === sortBy)?.label} onSortChange("date_desc")} /> )}
)}
) }