diff options
| author | muhammed sinan <muhammedsinan7749@gmail.com> | 2025-06-27 10:46:35 +0530 |
|---|---|---|
| committer | muhammed sinan <muhammedsinan7749@gmail.com> | 2025-06-27 10:46:35 +0530 |
| commit | 8934cc610f192a7a9e9aac59457b6c2e8d5ebbb4 (patch) | |
| tree | 518e913332d584adc682af3d03487c7c3b0cb62d /apps/web/src/hooks/auth | |
| parent | cdfb5ea7b07bf150eefcfcfa7c9890a5e1f41218 (diff) | |
| download | opencut-8934cc610f192a7a9e9aac59457b6c2e8d5ebbb4.tar.gz | |
refactor: added auth hooks for handling sign and signup logics
Diffstat (limited to 'apps/web/src/hooks/auth')
| -rw-r--r-- | apps/web/src/hooks/auth/useLogin.ts | 60 | ||||
| -rw-r--r-- | apps/web/src/hooks/auth/useSignUp.ts | 65 |
2 files changed, 125 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, + }; +} diff --git a/apps/web/src/hooks/auth/useSignUp.ts b/apps/web/src/hooks/auth/useSignUp.ts new file mode 100644 index 00000000..4cd2850a --- /dev/null +++ b/apps/web/src/hooks/auth/useSignUp.ts @@ -0,0 +1,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, + }; +}
\ No newline at end of file |
