import React, { useCallback, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import TextareaAutosize from 'react-textarea-autosize'; import { Button, Form, TextArea } from 'semantic-ui-react'; import { useDidUpdate, useToggle } from '../../lib/hooks'; import { useClosableForm, useForm } from '../../hooks'; import styles from './CardAdd.module.scss'; const DEFAULT_DATA = { name: '', }; const CardAdd = React.memo(({ isOpened, onCreate, onClose }) => { const [t] = useTranslation(); const [data, handleFieldChange, setData] = useForm(DEFAULT_DATA); const [selectNameFieldState, selectNameField] = useToggle(); const nameField = useRef(null); const submit = useCallback(() => { const cleanData = { ...data, name: data.name.trim(), }; if (!cleanData.name) { nameField.current.ref.current.select(); return; } onCreate(cleanData); setData(DEFAULT_DATA); selectNameField(); }, [onCreate, data, setData, selectNameField]); const handleFieldKeyDown = useCallback( (event) => { switch (event.key) { case 'Enter': event.preventDefault(); submit(); break; case 'Escape': onClose(); break; default: } }, [onClose, submit], ); const [handleFieldBlur, handleControlMouseOver, handleControlMouseOut] = useClosableForm(onClose); const handleSubmit = useCallback(() => { submit(); }, [submit]); useEffect(() => { if (isOpened) { nameField.current.ref.current.focus(); } }, [isOpened]); useDidUpdate(() => { nameField.current.ref.current.focus(); }, [selectNameFieldState]); return (