import React, { useState, useRef, useEffect } from 'react'; import { Plus, Cross } from 'shared/icons'; import useOnOutsideClick from 'shared/hooks/onOutsideClick'; import { Container, Wrapper, Placeholder, AddIconWrapper, ListNameEditor, ListAddControls, CancelAdd, AddListButton, ListNameEditorWrapper, } from './Styles'; type NameEditorProps = { onSave: (listName: string) => void; onCancel: () => void; }; const NameEditor: React.FC = ({ onSave, onCancel }) => { const $editorRef = useRef(null); const [listName, setListName] = useState(''); useEffect(() => { if ($editorRef && $editorRef.current) { $editorRef.current.focus(); } }); const onKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault(); onSave(listName); setListName(''); if ($editorRef && $editorRef.current) { $editorRef.current.focus(); } } }; return ( <> ) => setListName(e.currentTarget.value)} placeholder="Enter a title for this list..." /> { onSave(listName); setListName(''); if ($editorRef && $editorRef.current) { $editorRef.current.focus(); } }} > Save onCancel()}> ); }; type AddListProps = { onSave: (listName: string) => void; }; const AddList: React.FC = ({ onSave }) => { const [editorOpen, setEditorOpen] = useState(false); const $wrapperRef = useRef(null); const onOutsideClick = () => { setEditorOpen(false); }; useOnOutsideClick($wrapperRef, editorOpen, onOutsideClick, null); return ( { if (!editorOpen) { setEditorOpen(true); } }} > {editorOpen ? ( setEditorOpen(false)} onSave={onSave} /> ) : ( Add another list )} ); }; export default AddList;