mikebarkmin
10/15/2021, 8:53 PMXzeta
10/15/2021, 8:55 PMconst { loading, error, data, fetchSupa } = useSupa();
const onSubmit = (e) => {
e.preventDefault();
fetchSupa(() => signIn(form));
};
const errorForm = error ? <small className="text-danger">{error}</small> : "";
if (data) {
return <Redirect to="/" />;
}
return ( ...
Xzeta
10/15/2021, 8:56 PMimport { useState } from "react";
const useSupa = () => {
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const [loading, setLoading] = useState(false);
const fetchSupa = async (supaFun) => {
setLoading(true);
try {
const response = await supaFun();
const { error } = response;
if (error) throw error;
setData(response);
} catch (error) {
setError(error.message);
setData(null);
} finally {
setLoading(false);
}
};
return { loading, error, data, fetchSupa };
};
export default useSupa;
Xzeta
10/15/2021, 8:57 PMexport const signIn = (login) => supabase.auth.signIn(login);
Xzeta
10/15/2021, 8:59 PMmikebarkmin
10/15/2021, 9:08 PMmikebarkmin
10/15/2021, 9:10 PMmikebarkmin
10/15/2021, 9:10 PMXzeta
10/15/2021, 9:11 PMXzeta
10/15/2021, 9:11 PMmikebarkmin
10/15/2021, 9:12 PMXzeta
10/15/2021, 9:13 PMXzeta
10/15/2021, 9:14 PMmikebarkmin
10/15/2021, 9:14 PMjs
const onSubmit = (e) => {
e.preventDefault();
fetchSupa(() => signIn(form)).then(() => router.push("/"));
};
But this would only work if you throw the error instead of setting it as a state.
So maybe just keep it 🙂mikebarkmin
10/15/2021, 9:18 PMjs
const handleSubmit: SubmitHandler<{ email: string; password: string }> = ({
email,
password,
}) => {
setState("signing-in");
let redirect = "/dashboard";
if (typeof router.query.redirect === "string") {
redirect = router.query.redirect;
}
signIn(email, password)
.then(() => {
router.push(redirect);
})
.catch(() => {
notify.error(t("error-invalid-credentials"));
setState("default");
});
};