summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks/auth/useSignUp.ts
blob: fae7c967d8dede6fa9d3d80408244f813ead797f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { useState, useCallback } from "react";
import { useRouter } from "next/navigation";
import { signUp, signIn } from "@opencut/auth/client";

export function useSignUp() {
	const router = useRouter();
	const [name, setName] = useState("");
	const [email, setEmail] = useState("");
	const [password, setPassword] = useState("");
	const [error, setError] = useState<string | null>(null);
	const [isEmailLoading, setIsEmailLoading] = useState(false);
	const [isGoogleLoading, setIsGoogleLoading] = useState(false);

	const handleSignUp = useCallback(async () => {
		setError(null);
		setIsEmailLoading(true);

		const { error } = await signUp.email({
			name,
			email,
			password,
		});

		if (error) {
			setError(error.message || "An unexpected error occurred.");
			setIsEmailLoading(false);
			return;
		}

		router.push("/login");
	}, [name, email, password, router]);

	const handleGoogleSignUp = useCallback(async () => {
		setError(null);
		setIsGoogleLoading(true);

		try {
			await signIn.social({
				provider: "google",
			});

			router.push("/editor");
		} catch (error) {
			setError("Failed to sign up with Google. Please try again.");
			setIsGoogleLoading(false);
		}
	}, [router]);

	const isAnyLoading = isEmailLoading || isGoogleLoading;

	return {
		name,
		setName,
		email,
		setEmail,
		password,
		setPassword,
		error,
		isEmailLoading,
		isGoogleLoading,
		isAnyLoading,
		handleSignUp,
		handleGoogleSignUp,
	};
}