import { useCallback, useState } from 'react'; import DropdownButton from './DropdownButton'; import { SelectedSortType, SortType } from './SortAndFilterBar'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faAngleDown } from '@fortawesome/pro-regular-svg-icons'; type OwnProps = { sorts: SelectedSortType[]; setSorts: (sorts: SelectedSortType[]) => void; sortsAvailable: SortType[]; }; const options: Array['order']> = ['asc', 'desc']; export function SortDropdownButton({ sortsAvailable, setSorts, sorts, }: OwnProps) { const [isUnfolded, setIsUnfolded] = useState(false); const [isOptionUnfolded, setIsOptionUnfolded] = useState(false); const [selectedSortDirection, setSelectedSortDirection] = useState['order']>('asc'); const onSortItemSelect = useCallback( (sort: SortType) => { const newSorts = [{ ...sort, order: selectedSortDirection }]; setSorts(newSorts); }, [setSorts, selectedSortDirection], ); return ( 0} isUnfolded={isUnfolded} setIsUnfolded={setIsUnfolded} > {isOptionUnfolded ? options.map((option, index) => ( { setSelectedSortDirection(option); setIsOptionUnfolded(false); }} > {option === 'asc' ? 'Ascending' : 'Descending'} )) : [ setIsOptionUnfolded(true)} > {selectedSortDirection === 'asc' ? 'Ascending' : 'Descending'} , ...sortsAvailable.map((sort, index) => ( { setIsUnfolded(false); onSortItemSelect(sort); }} > {sort.icon && } {sort.label} )), ]} ); }