import {useEffect, useState} from 'react'; import {useInputStyles} from '.'; import {ChevronGlyph, EyeGlyph, SearchGlyph} from '../components/glyphs/Glyphs'; import {useTheme} from '../theme/ThemeProvider'; import type {IconProp, IconProps, inputProps} from '../types'; const HiddenPasswordGlyph = (props: IconProps) => ; const VisiblePasswordGlyph = (props: IconProps) => ; const ForwardGlyph = (props: IconProps) => ( ); export const useInput = ({ borderRadius, borderColor, type = 'filled', password, search, rightIcon, showPasswordIcon = HiddenPasswordGlyph, hidePasswordIcon = VisiblePasswordGlyph, label, onPress, }: inputProps) => { const {colors} = useTheme(); const [passwordVisible, setPasswordVisible] = useState(!password); const [isFocused, setIsFocused] = useState(false); useEffect(() => { setPasswordVisible(!password); }, [password]); const {inputStyle, titleStyle} = useInputStyles( type, isFocused, !!label, borderColor ?? colors.border, borderRadius, ); const getRightIcon = (): IconProp => { if (password) { return passwordVisible ? hidePasswordIcon : showPasswordIcon; } if (search) { return SearchGlyph; } return rightIcon ?? ForwardGlyph; }; const handleFocus = () => { setIsFocused(true); }; const handleBlur = () => { setIsFocused(false); }; const handlePress = () => { if (password) { setPasswordVisible(!passwordVisible); } else { onPress?.(); } }; return { getRightIcon, handleBlur, handleFocus, handlePress, inputStyle, passwordVisible, titleStyle, }; };