Select Git revision
HomeParticipateForm.js 6.94 KiB
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(
`/meetings/${id}/participants/?name=${name}`
);
return false;
} catch (err) {
return true;
}
};
const handleSubmit = async (event) => {
event.preventDefault();
if (name === "") {
alert("이름을 입력하세요");
} else {
let checkParticipant = await checkParticipantExistence();
console.log(checkParticipant);
if (checkParticipant) {
// DB에 해당 이름이 존재하지 않으면
try {
const response = await axios.post(`/meetings/${id}/participants`, {
name: name,
password: password,
email: email,
});
try {
const response = await axios.post(
`/meetings/${id}/entry`,
{
name: name,
password: password,
},
{
withCredentials: true,
}
);
try {
const response = await axios.get(`/meetings/${id}/`);
console.log(response);
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(
`/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 {
// 이미 DB에 참여자가 존재하는 경우
try {
await axios.post(
`/meetings/${id}/entry`,
{
name: name,
password: password,
},
{
withCredentials: true,
}
);
const response = await axios.get(`/meetings/${id}/my/schedules`); //투표 여부 확인을 위해
console.log(response);
const schedules = response.data.schedules;
if (schedules.length) {
// 투표를 진행하였으면 결과 페이지로 이동
navigate(`/result/${id}`);
} else {
// 투표를 안했으면 투표페이지로 이동
try {
// 쿠키 재생성
try {
const response = await axios.get(`/meetings/${id}/`);
console.log(response);
const startDate = response.data.startDate;
const endDate = response.data.endDate;
const startTime = response.data.availableVotingStartTime;
const endTime = response.data.availableVotingEndTime;
navigate("UserTimeInfo", {
state: {
id: id,
startTime: startTime,
endTime: endTime,
startDate: startDate,
endDate: endDate,
schedules: schedules,
},
});
} 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) {
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>
<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={handleSubmit} />
</div>
</form>
);
}
export default HomeParticipateForm;