import React from 'react'; import Icon from '../../../shared/components/icon'; import { TypeaheadOption } from '../../types'; import Spinner from '../../../search-results/components/spinner/spinner'; interface SearchInputProps { onChange: (input: string) => void; searchResults: TypeaheadOption[]; onOptionSelect: (val: TypeaheadOption) => void; highlightTarget: string; label: string; isSecondInput?: boolean; isDoubleInput?: boolean; isDisabled?: boolean; isLoading?: boolean; } const SearchInput: React.FC = ({ searchResults, onOptionSelect, highlightTarget, label, isSecondInput, isDoubleInput, isDisabled, isLoading }) => { if (isDisabled) { return null; } const highlightMatch = (option: TypeaheadOption, highlight: string) => { if (!highlight) { return option.value; } const parts = option.value.split(new RegExp(`(${highlight})`, 'gi')); return ( {parts.map((part, index) => part.toLowerCase() === highlight.toLowerCase() ? ( {part} ) : ( part ) )} ); }; // if (searchResults.length === 0) { // return null; // } return (
{isLoading && } {searchResults.map((option, index) => (
{ e.preventDefault(); e.stopPropagation(); }} onClick={(e) => { e.stopPropagation(); onOptionSelect(option); }} role="option" aria-selected={false}>
{highlightMatch(option, highlightTarget)} {option.country && {option.country}}
{option.iataCode && [{option.iataCode}]}
))}
); }; export default SearchInput;