UNPKG

@findify/react-components

Version:
32 lines (31 loc) 1.7 kB
/** * @module components/autocomplete/Suggestions */ import cx from 'classnames'; import MapArray from 'components/common/MapArray'; import SuggestionItem from 'components/autocomplete/SuggestionItem'; import styles from 'components/autocomplete/Suggestions/styles.css'; import { useQuery, useSuggestions } from '@findify/react-connect'; import useTranslations from 'helpers/useTranslations'; import Title from 'components/autocomplete/BlockTitle'; export default ({ theme = styles, config, isTrendingSearches, highlightedItem, registerItems, }) => { const { suggestions } = useSuggestions(); const { query } = useQuery(); const translate = useTranslations(); registerItems(suggestions, config.get('limit')); return (<div className={theme.root} display-if={suggestions.size}> <Title> {isTrendingSearches ? translate('autocomplete.trendingSearches') : translate('autocomplete.suggestionsTitle')} </Title> <ul display-if={suggestions && query} className={cx(theme.list, theme[config.get('template')])} tabIndex={0} id="FindifyAutocompleteSuggestions" role="listbox" aria-label="Search suggestions" aria-live="assertive"> <MapArray array={suggestions} factory={SuggestionItem} limit={config.get('limit')} tabIndex={0} template={config.get('template')} icon={isTrendingSearches && 'Fire'} isTrendingSearches={isTrendingSearches} query={query} mapProps={(item) => ({ highlighted: highlightedItem && item.hashCode() === highlightedItem.hashCode(), })}/> </ul> <span style={{ display: 'none' }} id="FindifyAutocompleteDescription"> {translate('suggestions.accessibleTitle')} </span> </div>); };