successful login with react query

This commit is contained in:
Guillaume Dorce 2022-09-02 19:37:33 +02:00
parent e0939994b8
commit 1b819b7b21
1 changed files with 37 additions and 14 deletions

View File

@ -1,21 +1,40 @@
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import logo from '@assets/images/logo.svg'; import logo from '@assets/images/logo.svg';
import { useQuery, useMutation, useQueryClient, QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useState } from 'react';
export default () => { export default () => {
// Access the client const [email, setEmail] = useState('');
const queryClient = useQueryClient(); const [password, setPassword] = useState('');
const mutation = useMutation(formData => { const { refetch } = useQuery(
return fetch('/api/auth/login', { ['login'],
method: 'POST', async () => {
body: formData, const response = await fetch('/api/auth/login', {
}); method: 'POST',
}) body: JSON.stringify({ email, password }),
const onSubmit = event => { mode: 'cors',
event.preventDefault() headers: {
const formData = new FormData(event.target) 'Content-Type': 'application/json',
mutation.mutate({email: formData.get('email'), password: formData.get('password')}) },
});
return response.json();
},
{
onSuccess: (data) => {
console.log(data);
},
onError: (error) => {
console.log(error);
},
enabled: false,
refetchOnWindowFocus: false,
}
);
const onSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
await refetch();
} }
return ( return (
@ -25,7 +44,7 @@ export default () => {
<img className="mx-auto h-20 pb-2 w-auto" src={logo} alt="Groupomania" /> <img className="mx-auto h-20 pb-2 w-auto" src={logo} alt="Groupomania" />
</div> </div>
<div className="w-full max-w-md bg-grey rounded-lg p-5"> <div className="w-full max-w-md bg-grey rounded-lg p-5">
<form className="m-6 mb-3" action="#" method="POST" onSubmit={onSubmit}> <form className="m-6 mb-3" action="#" method="POST" onSubmit={(e) => onSubmit(e)}>
<div className="-space-y-px rounded-md shadow-sm"> <div className="-space-y-px rounded-md shadow-sm">
<div> <div>
<label htmlFor="email" className="sr-only"> <label htmlFor="email" className="sr-only">
@ -39,6 +58,8 @@ export default () => {
required required
className="relative block w-full appearance-none rounded-lg border px-3 py-2 my-2 placeholder-grey-light focus:z-10 focus:border-red focus:outline-none focus:ring-red sm:text-sm" className="relative block w-full appearance-none rounded-lg border px-3 py-2 my-2 placeholder-grey-light focus:z-10 focus:border-red focus:outline-none focus:ring-red sm:text-sm"
placeholder="Adresse e-mail" placeholder="Adresse e-mail"
value={email}
onChange={(e) => setEmail(e.target.value)}
/> />
</div> </div>
<div> <div>
@ -53,6 +74,8 @@ export default () => {
required required
className="relative block w-full appearance-none rounded-lg border px-3 py-2 my-2 placeholder-grey-light focus:z-10 focus:border-red focus:outline-none focus:ring-red sm:text-sm" className="relative block w-full appearance-none rounded-lg border px-3 py-2 my-2 placeholder-grey-light focus:z-10 focus:border-red focus:outline-none focus:ring-red sm:text-sm"
placeholder="Mot de passe" placeholder="Mot de passe"
value={password}
onChange={(e) => setPassword(e.target.value)}
/> />
</div> </div>
</div> </div>