diff --git a/src/components/Card.jsx b/src/components/Card.jsx index 63a2311d93ba7ec0cbb459daa8c1ec0beeccabf8..cc053133a87279e7cadbe34c4a563c402638bbcf 100644 --- a/src/components/Card.jsx +++ b/src/components/Card.jsx @@ -24,7 +24,7 @@ const cardVariants = cva( export default function Card({ meeting, theme = "black", - onClick, + onDetail, onJoin, onDelete, onClose, @@ -55,7 +55,7 @@ export default function Card({ const deadlineTime = convertIndexToTime(time_idx_deadline); return ( - <div className={cn(variantClass)} onClick={onClick} role="button"> + <div className={cn(variantClass)} onClick={onDetail}> <h3 className="mb-2 text-xl font-bold">{title}</h3> <Label size="sm" theme="black"> 장소: {location} diff --git a/src/components/CreateMeetingModal.jsx b/src/components/CreateMeetingModal.jsx index 2a1e76bb4e554a9358000b36677f7444e3ab1496..f10ed4b0ed93850f670eebd03a6ffef6599d7f28 100644 --- a/src/components/CreateMeetingModal.jsx +++ b/src/components/CreateMeetingModal.jsx @@ -15,9 +15,6 @@ const CreateMeetingModal = ({ isOpen, onClose, onMeetingCreated }) => { const [dayEnd, setDayEnd] = useState("월"); const [hourEnd, setHourEnd] = useState("0"); const [minuteEnd, setMinuteEnd] = useState("0"); - const [dayDeadline, setDayDeadline] = useState("월"); - const [hourDeadline, setHourDeadline] = useState("0"); - const [minuteDeadline, setMinuteDeadline] = useState("0"); const [maxNum, setMaxNum] = useState("1"); const minutes = ["0", "15", "30", "45"]; @@ -39,9 +36,9 @@ const CreateMeetingModal = ({ isOpen, onClose, onMeetingCreated }) => { parseInt(minuteEnd) ); const time_idx_deadline = convertTimeToIndex( - dayDeadline, - parseInt(hourDeadline), - parseInt(minuteDeadline) + dayStart, + parseInt(hourStart), + parseInt(minuteStart) ); const meetingData = { @@ -202,46 +199,6 @@ const CreateMeetingModal = ({ isOpen, onClose, onMeetingCreated }) => { </select> </div> </div> - <div> - <label className="block mb-2 font-semibold"> - 참가 마감 시간 (선택) - </label> - <div className="flex items-center gap-2"> - <select - value={dayDeadline} - onChange={(e) => setDayDeadline(e.target.value)} - className="p-2 border rounded" - > - {days.map((day) => ( - <option key={day} value={day}> - {day} - </option> - ))} - </select> - <select - value={hourDeadline} - onChange={(e) => setHourDeadline(e.target.value)} - className="p-2 border rounded" - > - {hours.map((hour) => ( - <option key={hour} value={hour}> - {hour}시 - </option> - ))} - </select> - <select - value={minuteDeadline} - onChange={(e) => setMinuteDeadline(e.target.value)} - className="p-2 border rounded" - > - {minutes.map((minute) => ( - <option key={minute} value={minute}> - {minute}분 - </option> - ))} - </select> - </div> - </div> <div> <label className="block mb-2 font-semibold">최대 참가 인원</label> <select diff --git a/src/pages/MeetingPage.jsx b/src/pages/MeetingPage.jsx index 2ec5b9a44ba35400973482be55acbe55a3d35118..1d28e38b2050934487406609d81118b956a211e8 100644 --- a/src/pages/MeetingPage.jsx +++ b/src/pages/MeetingPage.jsx @@ -112,13 +112,10 @@ const MeetingPage = () => { alert("번개 모임에 성공적으로 참가했습니다!"); // 최신 데이터 다시 가져오기 - if (activeTab === "all") { - const updatedData = await getAllMeetings(0, meetingPage * 20); - setMeetings(updatedData.content); - } else if (activeTab === "my") { - const updatedData = await getMyMeetings(0, myMeetingPage * 20); - setMyMeetings(updatedData.content); - } + const updatedAllMeetingData = await getAllMeetings(0, meetingPage * 20); + setMeetings(updatedAllMeetingData.content); + const updatedMyMeetingData = await getMyMeetings(0, myMeetingPage * 20); + setMyMeetings(updatedMyMeetingData.content); } catch (error) { alert("번개 모임 참가에 실패했습니다."); console.error("Error joining meeting:", error); @@ -143,13 +140,10 @@ const MeetingPage = () => { alert("번개 모임을 삭제했습니다!"); // 최신 데이터 다시 가져오기 - if (activeTab === "all") { - const updatedData = await getAllMeetings(0, meetingPage * 20); - setMeetings(updatedData.content); - } else if (activeTab === "my") { - const updatedData = await getMyMeetings(0, myMeetingPage * 20); - setMyMeetings(updatedData.content); - } + const updatedAllMeetingData = await getAllMeetings(0, meetingPage * 20); + setMeetings(updatedAllMeetingData.content); + const updatedMyMeetingData = await getMyMeetings(0, myMeetingPage * 20); + setMyMeetings(updatedMyMeetingData.content); } catch (error) { alert("번개 모임 삭제에 실패했습니다."); console.error("Error deleting meeting:", error); @@ -163,13 +157,10 @@ const MeetingPage = () => { alert("번개 모임을 나갔습니다!"); // 최신 데이터 다시 가져오기 - if (activeTab === "all") { - const updatedData = await getAllMeetings(0, meetingPage * 20); - setMeetings(updatedData.content); - } else if (activeTab === "my") { - const updatedData = await getMyMeetings(0, myMeetingPage * 20); - setMyMeetings(updatedData.content); - } + const updatedAllMeetingData = await getAllMeetings(0, meetingPage * 20); + setMeetings(updatedAllMeetingData.content); + const updatedMyMeetingData = await getMyMeetings(0, myMeetingPage * 20); + setMyMeetings(updatedMyMeetingData.content); } catch (error) { alert("번개 모임 나가기에 실패했습니다."); console.error("Error leaving meeting:", error); @@ -183,13 +174,10 @@ const MeetingPage = () => { alert("번개 모임을 마감했습니다!"); // 최신 데이터 다시 가져오기 - if (activeTab === "all") { - const updatedData = await getAllMeetings(0, meetingPage * 20); - setMeetings(updatedData.content); - } else if (activeTab === "my") { - const updatedData = await getMyMeetings(0, myMeetingPage * 20); - setMyMeetings(updatedData.content); - } + const updatedAllMeetingData = await getAllMeetings(0, meetingPage * 20); + setMeetings(updatedAllMeetingData.content); + const updatedMyMeetingData = await getMyMeetings(0, myMeetingPage * 20); + setMyMeetings(updatedMyMeetingData.content); } catch (error) { alert("번개 모임 마감에 실패했습니다."); console.error("Error closing meeting:", error); @@ -245,7 +233,7 @@ const MeetingPage = () => { key={meeting.id} meeting={meeting} theme="white" - onClick={() => handleCardClick(meeting.id)} + onDetail={() => handleCardClick(meeting.id)} onJoin={(e) => handleJoinButtonClick(e, meeting.id)} onClose={(e) => handleCloseButtonClick(e, meeting.id)} onDelete={(e) => handleDeleteButtonClick(e, meeting.id)} @@ -277,8 +265,11 @@ const MeetingPage = () => { key={meeting.id} meeting={meeting} theme="white" - onClick={() => handleCardClick(meeting.id)} + onDetail={() => handleCardClick(meeting.id)} onJoin={(e) => handleJoinButtonClick(e, meeting.id)} + onClose={(e) => handleCloseButtonClick(e, meeting.id)} + onDelete={(e) => handleDeleteButtonClick(e, meeting.id)} + onLeave={(e) => handleLeaveButtonClick(e, meeting.id)} /> ))} </div> diff --git a/src/pages/Mypage.jsx b/src/pages/Mypage.jsx index 4dc24392feb31740e69bb53ecd99b9143d0bbe1f..f0e96ff771b1f1e3d11e410e50c46f9ff6484b99 100644 --- a/src/pages/Mypage.jsx +++ b/src/pages/Mypage.jsx @@ -121,22 +121,19 @@ const MyPage = () => { const handleAcceptRequest = async (requesterId) => { try { await acceptFriendRequest(requesterId); + alert("친구 요청을 수락했습니다."); + + // 받은 요청 상태 업데이트 setReceivedRequests((prev) => prev.filter((request) => request.requester.id !== requesterId) ); - setIsLoading(true); - const response = await getAllFriends(page, 10); - - const content = Array.isArray(response?.content) ? response.content : []; - const nextPage = response?.hasNext ?? false; - setFriends((prev) => [...prev, ...content]); - setHasNext(nextPage); - setPage((prev) => prev + 1); + // 친구 목록 동기화 + const response = await getAllFriends(0, (page + 1) * 10); + setFriends(response.content); + setHasNext(response.hasNext); } catch (error) { console.error("Failed to accept request:", error); - } finally { - setIsLoading(false); } }; @@ -144,9 +141,17 @@ const MyPage = () => { const handleRejectRequest = async (requesterId) => { try { await rejectFriendRequest(requesterId); + alert("친구 요청을 거절했습니다."); + + // 받은 요청 상태 업데이트 setReceivedRequests((prev) => prev.filter((request) => request.requester.id !== requesterId) ); + + // 친구 목록 동기화 + const response = await getAllFriends(0, (page + 1) * 10); + setFriends(response.content); + setHasNext(response.hasNext); } catch (error) { console.error("Failed to reject request:", error); } @@ -156,10 +161,12 @@ const MyPage = () => { const handleDeleteFriend = async (friendId) => { try { await deleteFriend(friendId); - setFriends((prev) => - prev.filter((friend) => friend.friendInfo.id !== friendId) - ); - alert("성공적으로 삭제되었습니다."); + alert("친구를 삭제했습니다."); + + // 친구 목록 동기화 + const response = await getAllFriends(0, (page + 1) * 10); + setFriends(response.content); + setHasNext(response.hasNext); } catch (error) { console.error("Failed to delete friend:", error); }