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;