import jdu from 'jdu'; import React, { SyntheticEvent, useCallback, useState } from 'react'; import { ChangeEvent, SuggestionsFetchRequestedParams, } from 'react-autosuggest'; import { InputChanged } from 'typings/inputs'; import AutoSuggestInput from './AutoSuggestInput'; export interface AutoCompleteInputProps { name: string; readOnly?: boolean; value?: string; values: string[]; onChange: (change: InputChanged) => unknown; } function AutoCompleteInput({ name, value = '', values, onChange, ...otherProps }: AutoCompleteInputProps) { const [suggestions, setSuggestions] = useState([]); const getSuggestionValue = useCallback((item: string) => { return item; }, []); const renderSuggestion = useCallback((item: string) => { return item; }, []); const handleInputChange = useCallback( (_event: SyntheticEvent, { newValue }: ChangeEvent) => { onChange({ name, value: newValue, }); }, [name, onChange] ); const handleInputBlur = useCallback(() => { setSuggestions([]); }, [setSuggestions]); const handleSuggestionsFetchRequested = useCallback( ({ value: newValue }: SuggestionsFetchRequestedParams) => { const lowerCaseValue = jdu.replace(newValue).toLowerCase(); const filteredValues = values.filter((v) => { return jdu.replace(v).toLowerCase().includes(lowerCaseValue); }); setSuggestions(filteredValues); }, [values, setSuggestions] ); const handleSuggestionsClearRequested = useCallback(() => { setSuggestions([]); }, [setSuggestions]); return ( ); } export default AutoCompleteInput;