import React from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { X, Check, ChevronDown } from 'lucide-react'; import * as Popover from '@radix-ui/react-popover'; import { mockSceneOptions, mockCharacterOptions } from '@/app/model/enums'; interface FilterBarProps { selectedScenes: string[]; selectedCharacters: string[]; onScenesChange: (scenes: string[]) => void; onCharactersChange: (characters: string[]) => void; onReset: () => void; } const MultiSelect: React.FC<{ label: string; options: { id: string; name: string }[]; selected: string[]; onChange: (values: string[]) => void; }> = ({ label, options, selected, onChange }) => { return (
{options.map((option) => ( { const newSelected = selected.includes(option.id) ? selected.filter(id => id !== option.id) : [...selected, option.id]; onChange(newSelected); }} className="relative w-full flex items-center px-8 py-2 rounded-md text-sm text-gray-200 hover:bg-white/5 cursor-pointer outline-none" whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} > {selected.includes(option.id) && ( )} {option.name} ))}
); }; const FilterBar: React.FC = ({ selectedScenes, selectedCharacters, onScenesChange, onCharactersChange, onReset, }) => { const sceneOptions = mockSceneOptions.map(scene => ({ id: scene.sceneId, name: scene.name, })); const characterOptions = mockCharacterOptions.map(char => ({ id: char.characterId, name: char.name, })); return (
{/* 当前筛选条件 */} {(selectedScenes.length > 0 || selectedCharacters.length > 0) && ( {selectedScenes.map((sceneId) => { const scene = mockSceneOptions.find(s => s.sceneId === sceneId); return scene && ( 场景:{scene.name} ); })} {selectedCharacters.map((charId) => { const char = mockCharacterOptions.find(c => c.characterId === charId); return char && ( 角色:{char.name} ); })} )}
); }; export default FilterBar;