import React, { ReactElement, useContext } from 'react'; import { StyledGroupedFilterContent } from './StyledFilters'; import FiltersContext, { useChangeGroupFilter, useGroupDirtyCheck, } from './FiltersContext'; import FilterDropdown from './FilterDropdown'; import { getDefaultValue } from './utils'; import { FilterValues } from './types'; import { FilterProps } from './Filter'; const GroupedFilter = ({ label, filters, }: { filters: ReactElement>[]; label: string; }) => { const keys = filters.map(filter => filter.props.filterKey); const dirty = useGroupDirtyCheck(keys); const clearableFilters = filters.filter( filter => filter.props.clearable !== false ); const clearableKeys = clearableFilters.map(filter => filter.props.filterKey); const [changeAndSaveGroup] = useChangeGroupFilter(clearableKeys); const { values } = useContext(FiltersContext); const resetValues = () => { const defaultValues = clearableFilters.map(filter => { const { filterKey, defaultValue } = filter.props; return ( defaultValue ?? (getDefaultValue((values as T)[filterKey]) as T[K]) ); }); changeAndSaveGroup(defaultValues); }; const onGroupedClearButtonClick = clearableKeys.length > 0 ? resetValues : undefined; return ( {filters} } buttonText={label} onClearButtonClick={onGroupedClearButtonClick} data-test-id="grouped-filter-dropdown" /> ); }; export default GroupedFilter;