import { useState, useEffect } from "react"; import Input from "./Input"; import Button from "./Button"; import { useNavigate, useParams } from "react-router-dom"; import axios from "axios"; function HomeParticipateForm() { const [name, setName] = useState(""); const [password, setPassword] = useState(""); const [email, setEmail] = useState(""); const navigate = useNavigate(); const { id } = useParams(); const handleName = (event) => { setName(event.target.value); } const handlePassword = (event) => { setPassword(event.target.value); } const handleEmail = (event) => { setEmail(event.target.value); } const checkParticipantExistence = async()=>{ try{ const response = await axios.get(`http://localhost:3000/meetings/${id}/participants/?name=${name}`); return false; } catch(err){ return true; } } const newHandleSubmit = async (event) => { event.preventDefault(); if (name === "") { alert('이름을 입력하세요') } else { let checkParticipant = await checkParticipantExistence(); if(checkParticipant){ try { const response = await axios.post(`http://localhost:3000/meetings/${id}/participants`, { name: name, password: password, email: email }); try { const response = await axios.post(`http://localhost:3000/meetings/${id}/entry`,{ name : name, password : password }, { withCredentials: true }); try{ const response = await axios.get(`http://localhost:3000/meetings/${id}/`); const startDate = response.data.startDate; const endDate = response.data.endDate; const startTime = response.data.availableVotingStartTime; const endTime = response.data.availableVotingEndTime; try{ const response = await axios.get(`http://localhost:3000/meetings/${id}/my/schedules`); // console.log(startDate, endDate); navigate('UserTimeInfo', { state: { id:id, startTime:startTime, endTime:endTime, startDate: startDate, endDate: endDate, schedules:response.data.schedules }}); } catch(e){ console.log(e); } } catch(e){ console.log(e); } } catch (error) { if (error.response) { if (error.response.status === 401) { alert('Password를 잘못 입력하였습니다'); } else if (error.response.status === 404) { alert('해당하는 이름이 존재하지 않습니다'); } else if(error.response.status === 400){ alert("비밀번호를 설정하셨습니다. 비밀번호를 입력해주세요") } else { alert(`Unexpected status code: ${error.response.status}`); } } else { console.error(error); } } } catch (error) { console.error(error); } } else{ alert('이미 존재하는 이름입니다.'); } } }; const oldHandleSubmit = async (event) => { event.preventDefault(); if (name === "") { alert('이름을 입력하세요') } else { try { const response = await axios.post(`http://localhost:3000/meetings/${id}/entry`,{ name : name, password : password }, { withCredentials: true }); try{ const response = await axios.get(`http://localhost:3000/meetings/${id}/`); const startDate = response.data.startDate; const endDate = response.data.endDate; const startTime = response.data.availableVotingStartTime; const endTime = response.data.availableVotingEndTime; try{ const response = await axios.get(`http://localhost:3000/meetings/${id}/my/schedules`); // console.log(startDate, endDate); navigate('UserTimeInfo', { state: { id:id, startTime:startTime, endTime:endTime, startDate: startDate, endDate: endDate, schedules:response.data.schedules }}); } catch(e){ console.log(e); } } catch(e){ console.log(e); } } catch (error) { if (error.response) { if (error.response.status === 401) { alert('Password를 잘못 입력하였습니다'); } else if (error.response.status === 404) { alert('해당하는 이름이 존재하지 않습니다'); } else if(error.response.status === 400){ alert("비밀번호를 설정하셨습니다. 비밀번호를 입력해주세요") } else { alert(`Unexpected status code: ${error.response.status}`); } } else { console.error(error); } } } }; return ( <form> <div> <h1>투표에 참여하기</h1> {console.log({id})} <Input type="text" value={name} onChange={handleName} placeholder="이름" /> <Input type="password" value={password} onChange={handlePassword} placeholder="Password(선택)" /> <Input type="text" value={email} onChange={handleEmail} placeholder="이메일(선택)" /> <Button type='submit' text='신규참여' onClick={newHandleSubmit} /> <Button type='submit' text='재참여' onClick={oldHandleSubmit} /> </div> </form> ); } export default HomeParticipateForm;