import * as React from 'react'; import { View, SafeAreaView, TextInput, Text, TextInputProps, Image, ImageBackground } from 'react-native'; import { useDispatch } from 'react-redux'; import { RematchDispatch, Models } from '@rematch/core'; import { Button } from '@ant-design/react-native'; import Form, { Field, useForm } from 'rc-field-form'; import { InternalFieldProps } from 'rc-field-form/es/Field'; import WhenFocusStatusBar from '../../components/WhenFocusStatusBar'; import CaiNiao from '../../icon/CaiNiao'; import { AppContext, AppContextProps } from '../../navigation'; import { hasError } from '../../shared/utils'; import { color } from '../../constants'; import styles from './style'; interface InputProps { name: string; icon: string; props: TextInputProps; options: InternalFieldProps; } interface LoginItemProps { data: InputProps; onFocusStateChange:(name:string, type:string) => void; onChange?: (value: string) => void; } const inputPropsMap: InputProps[] = [ { name: 'username', icon: 'yonghu', props: { placeholder: '请输入用户名' }, options: { rules: [ { required: true, message: '请输入用户名', validateTrigger: 'onChange' } ], } }, { name: 'password', icon: 'suoding', props: { placeholder: '请输入密码' }, options: { rules: [ { required: true, message: '请输入密码', validateTrigger: 'onChange' } ], } } ] const LoginItem:React.FC = (props) => { const { data, onChange, onFocusStateChange } = props; const [ visible, setVisible ] = React.useState(false); const textInputRef = React.useRef(); const handleToggleVisible = React.useCallback(() => { data.name==='password' && textInputRef.current.blur(); setVisible(!visible); },[visible,textInputRef]); const input = React.useMemo(() => ( <> onFocusStateChange(data.name, 'focus')} onBlur={() => onFocusStateChange(data.name, 'blur')} {...data.props} /> { data.name==='password' && } ), [data,visible]) return input }; type Focuses = { [key: string]: boolean; } const focuses:Focuses = { 'username': false, 'password': false } export default ():React.ReactElement => { const { user } = useDispatch>(); const [isFocuses, setFocuses] = React.useState(focuses) const { forceNavigationUpdate } = React.useContext(AppContext); const [ form ] = useForm(); const { validateFields, getFieldsError, isFieldsTouched } = form; const handleLoginSubmit = React.useCallback(async () => { try { const values = await validateFields(); user.login({ ...values, callback(token:string) { forceNavigationUpdate(token) } }); //user.login() } catch(e) {} }, [user]); const handleFocusChange = React.useCallback((name, type) => { const newIsFocuses = {...isFocuses} newIsFocuses[name] = type === 'focus'; setFocuses(newIsFocuses); }, [isFocuses, setFocuses]); return ( ) }