import * as React from 'react'; import { Image, NativeSyntheticEvent, Platform, TextInput, TextInputFocusEventData, TextInputSubmitEditingEventData, TouchableWithoutFeedback, View, } from 'react-native'; import { colorGuide, typographyGuide } from '../../primitives'; import { isEmpty } from '../../utils'; import { Cross } from '../Helpers'; import InputField from '../InputField'; import useStyles from './styles'; import { SearchBarProps } from './types'; const SearchBar: React.FC = ({ colorConfig, colorMode = 'dark', icon, inputFieldColorConfig, onSearchInput, onSubmit, placeholder = 'search', textStyle = typographyGuide.searchBar.input, }) => { const [searchText, setSearchText] = React.useState(''); const [isActive, setIsActive] = React.useState(false); const inputRef = React.useRef(null); const handleChange = (event: NativeSyntheticEvent) => { const value = event.nativeEvent.text; setSearchText(value); onSearchInput(value); }; const handleSubmit = ( event: | React.FormEvent | NativeSyntheticEvent, ) => { event.preventDefault(); inputRef?.current?.blur(); onSubmit?.(); }; const handleClearData = () => { setSearchText(''); onSearchInput(''); }; const defaultColorConfig = colorMode === 'dark' ? colorGuide.darkComponents.searchBar : colorGuide.lightComponents.searchBar; const defaultInputFieldColorConfig = colorMode === 'dark' ? colorGuide.darkComponents.inputFields : colorGuide.lightComponents.inputFields; const colors = isEmpty(colorConfig) ? defaultColorConfig : colorConfig ?? defaultColorConfig; const inputFieldColors = isEmpty(inputFieldColorConfig) ? defaultInputFieldColorConfig : inputFieldColorConfig ?? defaultInputFieldColorConfig; const styles = useStyles({ colorConfig: colors, }); const inputField = ( ); return ( setIsActive(false)} onPress={() => setIsActive(true)} > {icon && } {Platform.OS === 'web' ? (
{inputField}
) : ( React.cloneElement(inputField, { onSubmitEditing: handleSubmit, }) )}
{!!searchText && }
); }; export default SearchBar;