From ff9c277bb1a0312e683b8e816ba971c36c15e62c Mon Sep 17 00:00:00 2001 From: judymoody59 Date: Mon, 21 Apr 2025 22:06:22 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=EB=AC=B4=ED=95=9C=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/home/home.js | 7 +++++-- src/app/mypage/approve_modal.js | 12 +++++------- src/app/mypage/leader_modal.js | 6 +++++- src/app/task/task.js | 9 +++++++-- src/app/team/team.js | 26 ++++++++++++++++++++++---- 5 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/app/home/home.js b/src/app/home/home.js index 68457f8..6fc0bce 100644 --- a/src/app/home/home.js +++ b/src/app/home/home.js @@ -81,8 +81,11 @@ export default function Home() { setHasMore(false); } else { // 기존 목록 + 새로 가져온 목록 - setCards((prev) => [...prev, ...newContent]); - + setCards((prev) => { + const existingIds = new Set(prev.map((team) => team.teamId)); + const uniqueNewContent = newContent.filter((team) => !existingIds.has(team.teamId)); + return [...prev, ...uniqueNewContent]; + }); // 마지막 아이템의 teamId를 nextLastId로 const nextLastId = newContent[newContent.length - 1].teamId; setLastTeamId(nextLastId); diff --git a/src/app/mypage/approve_modal.js b/src/app/mypage/approve_modal.js index 9c52b16..cb13142 100644 --- a/src/app/mypage/approve_modal.js +++ b/src/app/mypage/approve_modal.js @@ -75,12 +75,6 @@ const RejectButton = styled.button` cursor: pointer; `; - -// <--------------------여기부터 더미데이터 ------------------------> - - - -// <--------------------여기까지 더미데이터 ------------------------> export default function ApproveModal({ isOpen, onClose, projectId }) { const [projectInfo, setProjectInfo] = useState(null); const [requestList, setRequestList] = useState([]); @@ -166,7 +160,11 @@ export default function ApproveModal({ isOpen, onClose, projectId }) { setHasMore(false); } else { //기존 목록 + 새로 가져온 목록 - setRequestList((prev) => [...prev, ...newContent]); + setRequestList((prev) => { + const existingIds = new Set(prev.map((r) => r.registrationId)); + const uniqueNew = newContent.filter((r) => !existingIds.has(r.registrationId)); + return [...prev, ...uniqueNew]; + }); const nextLastId = newContent[newContent.length - 1].registrationId; setLastTeamId(nextLastId); diff --git a/src/app/mypage/leader_modal.js b/src/app/mypage/leader_modal.js index b762f12..bc06b25 100644 --- a/src/app/mypage/leader_modal.js +++ b/src/app/mypage/leader_modal.js @@ -121,7 +121,11 @@ export default function LeaderModal({ isOpen, onClose, projectId, currentMemberI // 응답 구조: { data: { content: [...], last: true/false, ... } } const newParticipants = res.data.data.content || []; // 기존 목록에 합치기 - setParticipants((prev) => [...prev, ...newParticipants]); + setParticipants((prev) => { + const existingIds = new Set(prev.map((p) => p.projectParticipantId)); + const uniqueNew = newParticipants.filter((p) => !existingIds.has(p.projectParticipantId)); + return [...prev, ...uniqueNew]; + }); if (newParticipants.length > 0) { const nextLastId = newParticipants[newParticipants.length - 1].projectParticipantId; setLastParticipantId(nextLastId); diff --git a/src/app/task/task.js b/src/app/task/task.js index 462a719..d1dd254 100644 --- a/src/app/task/task.js +++ b/src/app/task/task.js @@ -59,8 +59,13 @@ export default function Task({ projectId }) { if (content.length === 0) { setHasMore(false); } else { - setTasks((prev) => [...prev, ...content]); - setLastTaskId(content[content.length - 1].taskId); + setTasks((prev) => { + const existingIds = new Set(prev.map((t) => t.taskId)); + const uniqueNew = content.filter((t) => !existingIds.has(t.taskId)); + return [...prev, ...uniqueNew]; + }); + + setLastTaskId(content[content.length - 1].taskId); } if (data.last || content.length < TASK_PAGE_SIZE) { diff --git a/src/app/team/team.js b/src/app/team/team.js index d9e2e8d..efa5fea 100644 --- a/src/app/team/team.js +++ b/src/app/team/team.js @@ -183,8 +183,17 @@ export default function Team({ teamId }) { role: "member", })); - setTeamMembers((prev) => [...prev, ...formattedMembers]); - setDisplayedMembers((prev) => [...prev, ...formattedMembers]); + setTeamMembers((prev) => { + const existingIds = new Set(prev.map((m) => m.id)); + const uniqueNew = formattedMembers.filter((m) => !existingIds.has(m.id)); + return [...prev, ...uniqueNew]; + }); + + setDisplayedMembers((prev) => { + const existingIds = new Set(prev.map((m) => m.id)); + const uniqueNew = formattedMembers.filter((m) => !existingIds.has(m.id)); + return [...prev, ...uniqueNew]; + }); if (formattedMembers.length > 0) { const nextLastId = formattedMembers[formattedMembers.length - 1].id; @@ -264,8 +273,17 @@ export default function Team({ teamId }) { } }); - setMyProjects(prev => [...prev, ...newMyProjects]); - setOtherProjects(prev => [...prev, ...newOtherProjects]); + setMyProjects((prev) => { + const existingIds = new Set(prev.map(p => p.projectInfo.projectId)); + const uniqueNew = newMyProjects.filter(p => !existingIds.has(p.projectInfo.projectId)); + return [...prev, ...uniqueNew]; + }); + + setOtherProjects((prev) => { + const existingIds = new Set(prev.map(p => p.projectInfo.projectId)); + const uniqueNew = newOtherProjects.filter(p => !existingIds.has(p.projectInfo.projectId)); + return [...prev, ...uniqueNew]; + }); const last = content[content.length - 1]; setLastProjectId(last.projectInfo.projectId); From a188c06608994efd37d17e0b15148bcb70574375 Mon Sep 17 00:00:00 2001 From: judymoody59 Date: Mon, 21 Apr 2025 22:12:29 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20Task=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EC=9D=BC=20=EB=95=8C=20=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/task/task.js | 5 +++++ src/app/task/task_s.js | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/app/task/task.js b/src/app/task/task.js index d1dd254..18068cc 100644 --- a/src/app/task/task.js +++ b/src/app/task/task.js @@ -263,6 +263,11 @@ export default function Task({ projectId }) { )} + {isCompleted && ( + + {task.dueDt} + + )} {isNotStarted && ( { diff --git a/src/app/task/task_s.js b/src/app/task/task_s.js index 6f63866..ed3e0e2 100644 --- a/src/app/task/task_s.js +++ b/src/app/task/task_s.js @@ -286,5 +286,13 @@ export const SButton = styled.button` } `; +export const CompletedDate = styled.p` + font-size: 13px; + color: #666; + text-align: right; + margin-right: 10px; + margin-top: 4px; +`; +