import { useCallback, useState } from 'react'; import DropdownButton from './DropdownButton'; import { SelectedSortType, SortType } from './interface'; type OwnProps = { sorts: SelectedSortType[]; setSorts: (sorts: SelectedSortType[]) => void; availableSorts: SortType[]; }; const options: Array['order']> = ['asc', 'desc']; export function SortDropdownButton({ availableSorts, 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], ); const resetState = useCallback(() => { setIsOptionUnfolded(false); setSelectedSortDirection('asc'); }, []); return ( 0} isUnfolded={isUnfolded} setIsUnfolded={setIsUnfolded} resetState={resetState} > {isOptionUnfolded ? options.map((option, index) => ( { setSelectedSortDirection(option); setIsOptionUnfolded(false); }} > {option === 'asc' ? 'Ascending' : 'Descending'} )) : [ setIsOptionUnfolded(true)} > {selectedSortDirection === 'asc' ? 'Ascending' : 'Descending'} , ...availableSorts.map((sort, index) => ( { setIsUnfolded(false); onSortItemSelect(sort); }} > {sort.icon} {sort.label} )), ]} ); }