summaryrefslogtreecommitdiff
path: root/src/lib/auth/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/auth/hooks')
-rw-r--r--src/lib/auth/hooks/useLogin.js74
-rw-r--r--src/lib/auth/hooks/useRegister.js80
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