summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks/auth/useLogin.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/hooks/auth/useLogin.ts')
-rw-r--r--apps/web/src/hooks/auth/useLogin.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/apps/web/src/hooks/auth/useLogin.ts b/apps/web/src/hooks/auth/useLogin.ts
new file mode 100644
index 00000000..3737deb3
--- /dev/null
+++ b/apps/web/src/hooks/auth/useLogin.ts
@@ -0,0 +1,60 @@
+import { useCallback, useState } from "react";
+import { useRouter } from "next/navigation";
+import { signIn } from "@opencut/auth/client";
+
+export function useLogin() {
+ const router = useRouter();
+ 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 handleLogin = useCallback(async () => {
+ setError(null);
+ setIsEmailLoading(true);
+
+ const { error } = await signIn.email({
+ email,
+ password,
+ });
+
+ if (error) {
+ setError(error.message || "An unexpected error occurred.");
+ setIsEmailLoading(false);
+ return;
+ }
+
+ router.push("/editor");
+ }, [router, email, password]);
+
+ const handleGoogleLogin = async () => {
+ setError(null);
+ setIsGoogleLoading(true);
+
+ try {
+ await signIn.social({
+ provider: "google",
+ callbackURL: "/editor",
+ });
+ } catch (error) {
+ setError("Failed to sign in with Google. Please try again.");
+ setIsGoogleLoading(false);
+ }
+ };
+
+ const isAnyLoading = isEmailLoading || isGoogleLoading;
+
+ return {
+ email,
+ setEmail,
+ password,
+ setPassword,
+ error,
+ isEmailLoading,
+ isGoogleLoading,
+ isAnyLoading,
+ handleLogin,
+ handleGoogleLogin,
+ };
+}