'use client'
import { useRef, useState } from 'react'
import { useAxios } from '@/hooks/useAxios'
import { useRouter } from 'next/navigation'
import { useMessage } from '@/hooks/useMessage'
import Cookies from 'js-cookie'
import { isObjectNotEmpty, inputTelNumberCheck, inputNumberCheck } from '@/util/common-utils'
import GlobalSpinner from '@/components/common/spinner/GlobalSpinner'
export default function Join() {
const [isLoading, setIsLoading] = useState(false)
const { getMessage } = useMessage()
const { promisePost } = useAxios()
const router = useRouter()
const storeQcastNmRef = useRef()
const storeQcastNmKanaRef = useRef()
const postCdRef = useRef()
const addrRef = useRef()
const telNoRef = useRef()
const faxRef = useRef()
const bizNoRef = useRef()
const userNmRef = useRef()
const userNmKanaRef = useRef()
const userIdRef = useRef()
const emailRef = useRef()
const userTelNoRef = useRef()
const userFaxRef = useRef()
// 가입 신청 유효성 검사
const joinValidation = (formData) => {
// 판매대리점 정보 - 판매대리점명
const storeQcastNm = formData.get('storeQcastNm')
if (!isObjectNotEmpty(storeQcastNm)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub1.storeQcastNm')]))
storeQcastNmRef.current.focus()
return false
}
// 판매대리점 정보 - 판매대리점명 후리가나
const storeQcastNmKana = formData.get('storeQcastNmKana')
if (!isObjectNotEmpty(storeQcastNmKana)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub1.storeQcastNmKana')]))
storeQcastNmKanaRef.current.focus()
return false
}
// 판매대리점 정보 - 우편번호
const postCd = formData.get('postCd')
if (!isObjectNotEmpty(postCd)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub1.postCd')]))
postCdRef.current.focus()
return false
}
// 판매대리점 정보 - 주소
const addr = formData.get('addr')
if (!isObjectNotEmpty(addr)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub1.addr')]))
addrRef.current.focus()
return false
}
// 판매대리점 정보 - 전화번호
const telNo = formData.get('telNo')
if (!isObjectNotEmpty(telNo)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub1.telNo')]))
telNoRef.current.focus()
return false
}
const bizNo = formData.get('bizNo')
if (!isObjectNotEmpty(bizNo)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub1.bizNo')]))
bizNoRef.current.focus()
return false
}
// 담당자 정보 - 담당자명
const userNm = formData.get('userNm')
if (!isObjectNotEmpty(userNm)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub2.userNm')]))
userNmRef.current.focus()
return false
}
// 담당자 정보 - 담당자명 후리가나
const userNmKana = formData.get('userNmKana')
if (!isObjectNotEmpty(userNmKana)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub2.userNmKana')]))
userNmKanaRef.current.focus()
return false
}
// 담당자 정보 - 신청 ID
const userId = formData.get('userId')
if (!isObjectNotEmpty(userId)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub2.userId')]))
userIdRef.current.focus()
return false
}
// 담당자 정보 - 이메일 주소
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
const email = formData.get('email')
if (!isObjectNotEmpty(email)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub2.email')]))
emailRef.current.focus()
return false
} else {
// 이메일 정규식 검사
if (!emailRegex.test(email)) {
alert(getMessage('join.validation.check1', [getMessage('join.sub2.email')]))
emailRef.current.focus()
return false
}
}
// 담당자 정보 - 전화번호
const userTelNo = formData.get('userTelNo')
if (!isObjectNotEmpty(userTelNo)) {
alert(getMessage('common.message.required.data', [getMessage('join.sub2.telNo')]))
userTelNoRef.current.focus()
return false
}
return true
}
// 가입 신청
const joinProcess = async (e) => {
e.preventDefault()
const formData = new FormData(e.target)
if (joinValidation(formData)) {
if (confirm(getMessage('join.complete.save.confirm'))) {
const param = {
storeQcastNm: formData.get('storeQcastNm'),
storeQcastNmKana: formData.get('storeQcastNmKana'),
postCd: formData.get('postCd'),
addr: formData.get('addr'),
telNo: formData.get('telNo'),
fax: formData.get('fax'),
bizNo: formData.get('bizNo'),
userInfo: {
userId: formData.get('userId'),
userNm: formData.get('userNm'),
userNmKana: formData.get('userNmKana'),
telNo: formData.get('userTelNo'),
fax: formData.get('userFax'),
email: formData.get('email'),
category: formData.get('category'),
},
}
setIsLoading(true)
await promisePost({ url: '/api/login/v1.0/user/join', data: param })
.then((res) => {
if (res) {
if (res.data.result.resultCode == 'S') {
Cookies.set('joinEmail', formData.get('email'), { expires: 1 })
router.push('/join/complete')
} else {
alert(res.data.result.resultMsg)
}
}
setIsLoading(false)
})
.catch((error) => {
setIsLoading(false)
alert(error.response.data.message)
})
}
}
}
return (
<>
{isLoading &&