import { useEffect, useRef, useState } from 'react' import { ArrowDown, ArrowUp, ArrowUpDown, Check } from 'lucide-react' import { LIBRARY_LIST_SORT_OPTIONS, type LibraryListSortField, type LibraryListSortOption, type LibraryListSortOrder, } from '../utils/libraryListSort' type LibraryListSortDropdownProps = { value: LibraryListSortField order: LibraryListSortOrder onChange: (field: LibraryListSortField, order: LibraryListSortOrder) => void className?: string } export function LibraryListSortDropdown({ value, order, onChange, className = '', }: LibraryListSortDropdownProps) { const [isOpen, setIsOpen] = useState(false) const dropdownRef = useRef(null) const currentOption = LIBRARY_LIST_SORT_OPTIONS.find((opt) => opt.id === value) ?? LIBRARY_LIST_SORT_OPTIONS[0] useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false) } } if (isOpen) { document.addEventListener('mousedown', handleClickOutside) } return () => { document.removeEventListener('mousedown', handleClickOutside) } }, [isOpen]) const handleSelect = (option: LibraryListSortOption) => { if (value === option.id) { onChange(option.id, order === 'asc' ? 'desc' : 'asc') } else { onChange(option.id, option.defaultOrder) } setIsOpen(false) } return (
{isOpen && (
排序方式
{LIBRARY_LIST_SORT_OPTIONS.map((option) => { const isSelected = value === option.id return ( ) })}
)}
) }