From 9bd48005fda1d94a526e36bec256b56add65b28d Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Fri, 28 Oct 2022 00:23:40 +0300 Subject: use `react-hook-form` and fix tests --- vnext/src/ui/Input.css | 8 ------- vnext/src/ui/Input.js | 23 ------------------- vnext/src/ui/Login.js | 26 ++++++++-------------- vnext/src/ui/SearchBox.js | 17 +++++++------- .../ui/__tests__/__snapshots__/Avatar.test.js.snap | 2 +- .../__tests__/__snapshots__/UserLink.test.js.snap | 3 +-- 6 files changed, 20 insertions(+), 59 deletions(-) delete mode 100644 vnext/src/ui/Input.css delete mode 100644 vnext/src/ui/Input.js (limited to 'vnext/src/ui') diff --git a/vnext/src/ui/Input.css b/vnext/src/ui/Input.css deleted file mode 100644 index 6a1e659f..00000000 --- a/vnext/src/ui/Input.css +++ /dev/null @@ -1,8 +0,0 @@ -.input { - background: #FFF; - border: 1px solid #ccc; - outline: none !important; - padding: 4px; - appearance: none; - border-radius: 0; -} diff --git a/vnext/src/ui/Input.js b/vnext/src/ui/Input.js deleted file mode 100644 index 2f01f0c6..00000000 --- a/vnext/src/ui/Input.js +++ /dev/null @@ -1,23 +0,0 @@ -import { memo } from 'react'; - -import './Input.css'; - -/** - * @typedef {Object} InputProps - * @property {string} name - * @property {string} value - * @property {string=} placeholder - * @property {React.CSSProperties=} rest - */ - -/** - * Input component - * @param {InputProps} props - */ -function Input({ name, value, ...rest }) { - return ( - - ); -} - -export default memo(Input); diff --git a/vnext/src/ui/Login.js b/vnext/src/ui/Login.js index 774664c0..fc3922c8 100644 --- a/vnext/src/ui/Login.js +++ b/vnext/src/ui/Login.js @@ -3,8 +3,7 @@ import { useLocation, useHistory } from 'react-router-dom'; import Icon from './Icon'; import Button from './Button'; -import Input from './Input'; -import { useFormState } from 'react-use-form-state'; +import { useForm } from 'react-hook-form'; import { me, facebookLink, vkLink, appleLink } from '../api'; @@ -33,14 +32,11 @@ function Login({ visitor, onAuth }) { } }, [history, location.state, visitor]); - const [formState, { text, password }] = useFormState(); + const { register, handleSubmit, formState: { errors }, } = useForm(); - /** - * @param {React.SyntheticEvent} event - */ - let onSubmit = (event) => { - event.preventDefault(); - me(formState.values.username, formState.values.password) + /** @type { import('react-hook-form').SubmitHandler } */ + let onSubmit = (values) => { + me(values.username, values.password) .then(response => { onAuth(response); } @@ -63,14 +59,10 @@ function Login({ visitor, onAuth }) {

Already registered?

-
-
-
- + +
+
+
diff --git a/vnext/src/ui/SearchBox.js b/vnext/src/ui/SearchBox.js index c79c9e8f..e6085fdc 100644 --- a/vnext/src/ui/SearchBox.js +++ b/vnext/src/ui/SearchBox.js @@ -1,4 +1,4 @@ -import { useFormState } from 'react-use-form-state'; +import { useForm } from 'react-hook-form'; /** * @typedef {Object} SearchBoxPropsFields @@ -13,15 +13,16 @@ import { useFormState } from 'react-use-form-state'; * @param {SearchBoxProps} props */ function SearchBox({ onSearch }) { - let onSubmit = (/** @type React.FormEvent */ event) => { - event.preventDefault(); - onSearch(formState.values.search); + const { register, handleSubmit, formState: { errors }, } = useForm(); + /** @type { import('react-hook-form').SubmitHandler } */ + let onSubmit = ( values ) => { + onSearch(values.search); }; - const [formState, { text }] = useFormState(); return ( -
- + + +
); } diff --git a/vnext/src/ui/__tests__/__snapshots__/Avatar.test.js.snap b/vnext/src/ui/__tests__/__snapshots__/Avatar.test.js.snap index 47614f5a..a28b4036 100644 --- a/vnext/src/ui/__tests__/__snapshots__/Avatar.test.js.snap +++ b/vnext/src/ui/__tests__/__snapshots__/Avatar.test.js.snap @@ -19,7 +19,7 @@ exports[`Avatar renders correctly 1`] = `
- , ] `; -- cgit v1.2.3