import { useState, useEffect, useRef, ChangeEvent, SyntheticEvent } from 'react'; import { connect } from 'react-redux'; import { addApp, updateApp } from '../../../store/actions'; import { App, NewApp } from '../../../interfaces'; import ModalForm from '../../UI/Forms/ModalForm/ModalForm'; import InputGroup from '../../UI/Forms/InputGroup/InputGroup'; import Button from '../../UI/Buttons/Button/Button'; interface ComponentProps { modalHandler: () => void; addApp: (formData: NewApp) => any; updateApp: (id: number, formData: NewApp) => any; app?: App; } const AppForm = (props: ComponentProps): JSX.Element => { const [formData, setFormData] = useState({ name: '', url: '', icon: '' }); const inputRef = useRef(null); useEffect(() => { if (inputRef.current) { inputRef.current.focus(); } }, [inputRef]) useEffect(() => { if (props.app) { setFormData({ name: props.app.name, url: props.app.url, icon: props.app.icon }) } else { setFormData({ name: '', url: '', icon: '' }) } }, [props.app]) const inputChangeHandler = (e: ChangeEvent): void => { setFormData({ ...formData, [e.target.name]: e.target.value }) } const formSubmitHandler = (e: SyntheticEvent): void => { e.preventDefault(); if (!props.app) { props.addApp(formData); } else { props.updateApp(props.app.id, formData); props.modalHandler(); } setFormData({ name: '', url: '', icon: '' }) } return ( inputChangeHandler(e)} ref={inputRef} /> inputChangeHandler(e)} /> {' '}Check supported URL formats inputChangeHandler(e)} /> Use icon name from MDI. {' '}Click here for reference {!props.app ? : } ) } export default connect(null, { addApp, updateApp })(AppForm);