Skip to content

Commit 3a7dd8a

Browse files
committed
feat(user-signup): [next-ts-middle-out] 🔵 extract logic to useSignUp hook
1 parent 89b85f3 commit 3a7dd8a

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

exercises/user_signup/solutions/codely_next-typescript-middle-out/src/components/SignUpForm.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
1-
import React, { useState } from "react";
2-
import { signUpUser } from "../services/signUpUser";
31
import { Input } from "./Input";
4-
5-
type FormStatus = "success" | "error" | "initial"
2+
import { useSignUpUser } from "./useSignUpUser";
63

74
export function SignUpForm() {
8-
const [formStatus, setFormStatus] = useState<FormStatus>("initial")
5+
const {formStatus, signUp} = useSignUpUser();
96

107
async function handleSubmit(ev: React.FormEvent) {
118
ev.preventDefault()
129
const data = new FormData(ev.target as HTMLFormElement);
1310
const entries = Object.fromEntries(data.entries()) as { [key: string]: string };
1411

15-
return signUpUser({name: entries.name, email: entries.email})
16-
.then(() => {
17-
setFormStatus("success");
18-
})
19-
.catch(() => {
20-
setFormStatus("error");
21-
});
12+
return signUp({name: entries.name, email: entries.email});
2213
}
2314

2415
if (formStatus === "success") {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { useState } from "react";
2+
import { signUpUser } from "../services/signUpUser";
3+
4+
type FormStatus = "success" | "error" | "initial"
5+
6+
export function useSignUpUser() {
7+
const [formStatus, setFormStatus] = useState<FormStatus>("initial")
8+
9+
function signUp({name, email}: {name: string; email: string;}) {
10+
return signUpUser({name, email})
11+
.then(() => {
12+
setFormStatus("success");
13+
})
14+
.catch(() => {
15+
setFormStatus("error");
16+
});
17+
}
18+
19+
return {
20+
signUp,
21+
formStatus
22+
}
23+
}

0 commit comments

Comments
 (0)