Newer
Older
import CalendarWeek2 from "../components/CalendarWeek2"
import { useLocation, useNavigate, useParams } from "react-router-dom";
const [availableSchedules, setAvailableSchedules] = useState(location.state.schedules);
const at = [];
for(let key of availableSchedules){
const date = new Date(key.availableDate) - 0;
for(let t of key.availableTimes){
at.push(date+t);
}
}
const [availableTimes, setAvailableTimes] = useState(at);
const {id} = useParams();
const [startTime, setStartTime] = useState(0);
const [endTime, setEndTime] = useState(10);
const [today, setToday] = useState(new Date(location.state.startDate));
const [startDate, setStartDate] = useState(new Date(location.state.startDate));
const [endDate, setEndDate] = useState(new Date(location.state.endDate));
const handleState1 = () => {
setState(true);
}
const handleState2 = () => {
setState(false);
}
const handleCalendar = (value) => {
console.log('Selected Date:', value);
};
const fetchData = async () => {
try {
const response = await axios.get(`http://localhost:3000/meetings/${id}/`);
const nd = response.data.startDate.split("-");
setStartDate(new Date(nd[0]-0,nd[1]-1,nd[2]-0));
setToday(startDate);
const ed = response.data.endDate.split("-");
setEndDate(new Date(ed[0]-0,ed[1]-1,ed[2]-0));
} catch (error) {
console.error(error);
}
};
const sat = [];
// state에 따라서 가능한 시간을 선택한 거라면 그냥 넘어가고
// 불가능한 시간을 선택한 거라면 전부 날짜 범위에 맞춰서 뒤집어줘야 한다.
// 여기 수정해야함
if(!state){
for(let day = startDate - 0; day <= endDate - 0; day+=((60*60*24*1000))){
for(let time = startTime; time < endTime; time++){
if(!availableTimes.includes(day+time)){
sat.push(day+time);
}
}
}
}
else{
sat.push(...availableTimes);
}
sat.sort();
console.log(state, sat);
const aa = [];
let t = [];
let l = availableTimes[0];
sat.forEach((em) => {
if(parseInt(l/100)!==parseInt(em/100)){
t=[];
}
const newDate = new Date(parseInt(em));
const availableDate = newDate.getFullYear() + '-' + (newDate.getMonth()+1) + '-' + newDate.getDate();
t.push(em%100);
aa.push({availableDate: availableDate, availableTimes: t})
});
const groupedData = aa.reduce((acc, item) => {
if (!acc[item.availableDate]) {
acc[item.availableDate] = { availableDate: item.availableDate, availableTimes: new Set(item.availableTimes) };
} else {
item.availableTimes.forEach(time => acc[item.availableDate].availableTimes.add(time));
}
return acc;
}, {});
const compressedData = Object.values(groupedData).map(item => {
return { availableDate: item.availableDate, availableTimes: [...item.availableTimes] };
});
setAvailableSchedules(compressedData);
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
if(location.state.schedules){
try {
const response = await axios.put(`http://localhost:3000/meetings/${id}/my/schedules/bulk`,{
schedules: compressedData
});
}
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);
}
}
}
else{
try {
const response = await axios.post(`http://localhost:3000/meetings/${id}/my/schedules/bulk`,{
schedules: compressedData
});
}
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);
}
}
}
}
const isContain = (value) => {
return availableTimes.includes(value);
}
return (
<div className="center-container">
<Button
type="button"
text="가능한 시간"
/>
<Button
type="button"
text="불가능한 시간"
<CalendarWeek2 state={state} startDate={startDate} endDate={endDate} startTime={startTime} endTime={endTime} today={today} availableSchedules={availableSchedules} availableTimes={availableTimes} setAvailableTimes={setAvailableTimes} isContain={isContain} />
<Button
type="submit"
text="시작하기"
onClick={handleAlert}
/>