diff options
Diffstat (limited to 'src/lib/auth/hooks')
| -rw-r--r-- | src/lib/auth/hooks/useLogin.js | 74 | ||||
| -rw-r--r-- | src/lib/auth/hooks/useRegister.js | 80 |
2 files changed, 154 insertions, 0 deletions
diff --git a/src/lib/auth/hooks/useLogin.js b/src/lib/auth/hooks/useLogin.js new file mode 100644 index 00000000..bef36053 --- /dev/null +++ b/src/lib/auth/hooks/useLogin.js @@ -0,0 +1,74 @@ +import Link from '@/core/components/elements/Link/Link' +import { setAuth } from '@/core/utils/auth' +import { useRouter } from 'next/router' +import { useRef, useState } from 'react' +import loginApi from '../api/loginApi' + +const useLogin = () => { + const router = useRouter() + const [isLoading, setIsLoading] = useState(false) + const [alert, setAlert] = useState(null) + const [isValid, setIsValid] = useState(false) + + const emailRef = useRef(null) + const passwordRef = useRef(null) + + const inputVal = () => ({ + email: emailRef.current.value, + password: passwordRef.current.value + }) + + const handleChangeInput = () => { + const { email, password } = inputVal() + const isValidInput = email && password + setIsValid(isValidInput) + } + + const handleSubmit = async (e) => { + e.preventDefault() + setAlert(null) + setIsLoading(true) + const { email, password } = inputVal() + const login = await loginApi({ email, password }) + setIsLoading(false) + + if (login.isAuth) { + setAuth(login.user) + router.push('/') + return + } + switch (login.reason) { + case 'NOT_FOUND': + setAlert({ + children: 'Email atau password tidak cocok', + type: 'info' + }) + break + case 'NOT_ACTIVE': + setAlert({ + children: ( + <> + Email belum diaktivasi, + <Link className='text-gray-900' href={`/activate?email=${email}`}> + aktivasi sekarang + </Link> + </> + ), + type: 'info' + }) + break + } + } + + return { + handleChangeInput, + handleSubmit, + isLoading, + isValid, + alert, + emailRef, + passwordRef + } +} + +export default useLogin diff --git a/src/lib/auth/hooks/useRegister.js b/src/lib/auth/hooks/useRegister.js new file mode 100644 index 00000000..7642a666 --- /dev/null +++ b/src/lib/auth/hooks/useRegister.js @@ -0,0 +1,80 @@ +import axios from 'axios' +import { useRef, useState } from 'react' +import registerApi from '../api/registerApi' + +const useRegister = () => { + const [isLoading, setIsLoading] = useState(false) + const [alert, setAlert] = useState(null) + const [isValid, setIsValid] = useState(false) + + const fullnameRef = useRef(null) + const emailRef = useRef(null) + const passwordRef = useRef(null) + const companyNameRef = useRef(null) + + const inputVal = () => ({ + fullname: fullnameRef.current.value, + email: emailRef.current.value, + password: passwordRef.current.value, + companyName: companyNameRef.current.value + }) + + const handleChangeInput = () => { + const { fullname, email, password } = inputVal() + const isValidInput = email && password && fullname + setIsValid(isValidInput) + } + + const resetInput = () => { + fullnameRef.current.value = '' + emailRef.current.value = '' + passwordRef.current.value = '' + companyNameRef.current.value = '' + } + + const handleSubmit = async (e) => { + e.preventDefault() + setAlert(null) + setIsLoading(true) + const { fullname, email, password, companyName } = inputVal() + + const isRegistered = await registerApi({ + name: fullname, + company: companyName, + email, + password + }) + setIsLoading(false) + if (isRegistered.register) { + await axios.post(`${process.env.NEXT_PUBLIC_SELF_HOST}/api/activation-request`, { email }) + setAlert({ + children: 'Berhasil mendaftarkan akun anda, cek email untuk melakukan aktivasi akun', + type: 'success' + }) + resetInput() + } else { + switch (isRegistered.reason) { + case 'EMAIL_USED': + setAlert({ + children: 'Email telah digunakan', + type: 'info' + }) + break + } + } + } + + return { + handleChangeInput, + handleSubmit, + isLoading, + isValid, + alert, + companyNameRef, + fullnameRef, + emailRef, + passwordRef + } +} + +export default useRegister |
