Skip to content
Snippets Groups Projects
Commit eab6aed7 authored by 석찬 윤's avatar 석찬 윤
Browse files

feat: 스케줄 페이지 api 적용 (#8)

parent 6349e1e5
Branches feat/#8
No related tags found
1 merge request!6[#8] 스케줄 페이지 개발
import React, { useEffect, useState } from "react";
import Label from "../components/Label";
// import { createSchedule, deleteSchedule, fetchAllSchedules } from "./api"; // API 호출 주석 유지
import {
createSchedule,
deleteSchedule,
fetchScheduleByTimeIndex,
fetchAllSchedules,
updateSchedule,
} from "../api/schedule";
const generateTimeSlots = () => {
const timeSlots = [];
......@@ -16,26 +22,26 @@ const generateTimeSlots = () => {
const days = ["", "", "", "", "", "", ""];
const dummySchedules = [
{
id: 1,
user_id: 1,
title: "알고리즘 스터디",
is_fixed: true,
time_indices: [36, 37, 38, 39],
createdAt: "2024-12-02T09:52:00.000Z",
updatedAt: "2024-12-02T09:52:00.000Z",
},
{
id: 5,
user_id: 1,
title: "웹시설 팀플",
is_fixed: true,
time_indices: [165, 166, 167, 255, 256, 257],
createdAt: "2024-12-02T09:54:53.000Z",
updatedAt: "2024-12-02T09:54:53.000Z",
},
];
// const dummySchedules = [
// {
// id: 1,
// user_id: 1,
// title: "알고리즘 스터디",
// is_fixed: true,
// time_indices: [36, 37, 38, 39],
// createdAt: "2024-12-02T09:52:00.000Z",
// updatedAt: "2024-12-02T09:52:00.000Z",
// },
// {
// id: 5,
// user_id: 1,
// title: "웹시설 팀플",
// is_fixed: true,
// time_indices: [165, 166, 167, 255, 256, 257],
// createdAt: "2024-12-02T09:54:53.000Z",
// updatedAt: "2024-12-02T09:54:53.000Z",
// },
// ];
const SchedulePage = () => {
const timeSlots = generateTimeSlots();
......@@ -48,53 +54,54 @@ const SchedulePage = () => {
const [isFixed, setIsFixed] = useState(true);
useEffect(() => {
// const initializeSchedules = async () => {
// try {
// const data = await fetchAllSchedules();
// setSchedules(data);
// } catch (error) {
// console.error("Failed to load schedules", error);
// }
// };
// API
const initializeSchedules = async () => {
try {
const data = await fetchAllSchedules();
setSchedules(data);
} catch (error) {
console.error("Failed to load schedules", error);
}
};
// initializeSchedules();
initializeSchedules();
// 현재는 더미 데이터로 초기화
setSchedules(dummySchedules);
// 임시 코드
// setSchedules(dummySchedules);
}, []);
const handleSlotClick = async (timeIdx) => {
if (!isEditMode) return;
// API 호출 준비가 되었을 때 사용:
// try {
// const response = await fetchScheduleByTimeIndex(timeIdx);
// if (response && response.data && response.data.schedule) {
// setSelectedSchedule(response.data.schedule); // API로 가져온 스케줄 설정
// } else {
// console.error("No schedule found for time index:", timeIdx);
// }
// } catch (error) {
// console.error("Failed to fetch schedule for time index:", timeIdx, error);
// }
//임시 코드
const slotInSchedule = schedules.find((s) =>
s.time_indices.includes(timeIdx)
);
if (slotInSchedule) {
if (selectedSlots.length === 0) {
setSelectedSchedule(slotInSchedule);
// API
try {
const response = await fetchScheduleByTimeIndex(timeIdx);
if (response && response.data && response.data.schedule) {
setSelectedSchedule(response.data.schedule); // API로 가져온 스케줄 설정
} else {
console.error("No schedule found for time index:", timeIdx);
}
return;
} catch (error) {
console.error("Failed to fetch schedule for time index:", timeIdx, error);
}
if (selectedSlots.includes(timeIdx)) {
setSelectedSlots((prev) => prev.filter((idx) => idx !== timeIdx));
} else {
setSelectedSlots((prev) => [...prev, timeIdx]);
}
// 임시 코드
// const slotInSchedule = schedules.find((s) =>
// s.time_indices.includes(timeIdx)
// );
// if (slotInSchedule) {
// if (selectedSlots.length === 0) {
// setSelectedSchedule(slotInSchedule);
// }
// return;
// }
// if (selectedSlots.includes(timeIdx)) {
// setSelectedSlots((prev) => prev.filter((idx) => idx !== timeIdx));
// } else {
// setSelectedSlots((prev) => [...prev, timeIdx]);
// }
};
const handleCancelSchedule = () => {
......@@ -122,16 +129,16 @@ const SchedulePage = () => {
is_fixed: isFixed,
time_indices: selectedSlots,
};
// API 호출 부분 (주석 처리)
// const newSchedule = await updateSchedule(scheduleData);
// 임시로 더미 데이터에 추가
const newSchedule = {
...scheduleData,
id: Date.now(),
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
// API
const newSchedule = await updateSchedule(scheduleData);
// 임시 코드
// const newSchedule = {
// ...scheduleData,
// id: Date.now(),
// createdAt: new Date().toISOString(),
// updatedAt: new Date().toISOString(),
// };
setSchedules((prev) => [...prev, newSchedule]);
setSelectedSchedule(newSchedule);
......@@ -155,16 +162,16 @@ const SchedulePage = () => {
time_indices: selectedSlots,
};
// API 호출 부분 (주석 처리)
// const newSchedule = await createSchedule(scheduleData);
// API
const newSchedule = await createSchedule(scheduleData);
// 임시로 더미 데이터에 추가
const newSchedule = {
...scheduleData,
id: Date.now(),
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
// 임시코드
// const newSchedule = {
// ...scheduleData,
// id: Date.now(),
// createdAt: new Date().toISOString(),
// updatedAt: new Date().toISOString(),
// };
setSchedules((prev) => [...prev, newSchedule]);
setSelectedSlots([]);
......@@ -184,15 +191,15 @@ const SchedulePage = () => {
const body = { title: selectedSchedule.title };
// API 호출 준비가 되었을 때 사용:
// await deleteSchedule(body);
await deleteSchedule(body);
// const updatedSchedules = await fetchAllSchedules();
// setSchedules(updatedSchedules);
const updatedSchedules = await fetchAllSchedules();
setSchedules(updatedSchedules);
// 임시로 삭제 처리
setSchedules((prev) =>
prev.filter((s) => s.title !== selectedSchedule.title)
);
// 임시코드
// setSchedules((prev) =>
// prev.filter((s) => s.title !== selectedSchedule.title)
// );
setSelectedSchedule(null);
alert("스케줄이 삭제되었습니다.");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment