diff --git a/src/api/myProjectList.api.ts b/src/api/myProjectList.api.ts index 798eda6b..1cd347b3 100644 --- a/src/api/myProjectList.api.ts +++ b/src/api/myProjectList.api.ts @@ -5,7 +5,7 @@ import type { import { httpClient } from './http.api'; export const getMyProjectLists = async () => { - const response = await httpClient.get(`/project/my`); + const response = await httpClient.get(`/user/project`); return response.data; }; diff --git a/src/api/mypage.api.ts b/src/api/mypage.api.ts index 594a2593..ea03a835 100644 --- a/src/api/mypage.api.ts +++ b/src/api/mypage.api.ts @@ -55,7 +55,9 @@ export const patchMyProfileImg = async (file: File) => { export const getMyJoinedProjectList = async () => { try { - const response = await httpClient.get('/user/project'); + const response = await httpClient.get( + '/user/joinProject' + ); return response.data; } catch (error) { diff --git a/src/assets/line.svg b/src/assets/line.svg new file mode 100644 index 00000000..f805946b --- /dev/null +++ b/src/assets/line.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/admin/mainCard/MainCard.styled.ts b/src/components/admin/mainCard/MainCard.styled.ts new file mode 100644 index 00000000..44e6d803 --- /dev/null +++ b/src/components/admin/mainCard/MainCard.styled.ts @@ -0,0 +1,39 @@ +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; + +export const Container = styled.div` + display: flex; + flex-direction: column; + border: 1px solid #ccc; + border-radius: ${({ theme }) => theme.borderRadius.primary}; +`; + +export const CardHeader = styled.div` + min-height: 50px; + display: flex; + justify-content: space-between; + align-items: center; +`; + +export const Title = styled.h3` + margin-left: 20px; +`; + +export const ShowAllArea = styled(Link)` + display: flex; + margin-left: 10px; + margin-right: 10px; +`; + +export const ShowAllButton = styled.span` + font-size: 13px; + margin-right: 6px; +`; + +export const ArrowRight = styled.img``; + +export const Line = styled.hr``; + +export const Wrapper = styled.div``; + +export const MainContent = styled.div``; diff --git a/src/components/admin/mainCard/MainCard.tsx b/src/components/admin/mainCard/MainCard.tsx new file mode 100644 index 00000000..6fa48641 --- /dev/null +++ b/src/components/admin/mainCard/MainCard.tsx @@ -0,0 +1,31 @@ +import * as S from './MainCard.styled'; +import arrowRight from '../../../assets/ArrowRight.svg'; +import React from 'react'; + +interface MainCardProps { + title: string; + moreLink?: string; + children: React.ReactNode; +} + +const MainCard = ({ title, moreLink, children }: MainCardProps) => { + return ( + + + {title} + {moreLink && ( + + 전체 보기 + + + )} + + + + {children} + + + ); +}; + +export default MainCard; diff --git a/src/components/admin/mainCard/graphCard/GraphCard.styled.ts b/src/components/admin/mainCard/graphCard/GraphCard.styled.ts new file mode 100644 index 00000000..c3389834 --- /dev/null +++ b/src/components/admin/mainCard/graphCard/GraphCard.styled.ts @@ -0,0 +1,3 @@ +import styled from 'styled-components'; + +export const Container = styled.div``; diff --git a/src/components/admin/mainCard/graphCard/GraphCard.tsx b/src/components/admin/mainCard/graphCard/GraphCard.tsx new file mode 100644 index 00000000..0ceef919 --- /dev/null +++ b/src/components/admin/mainCard/graphCard/GraphCard.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import * as S from './GraphCard.styled'; + +const GraphCard = () => { + return GraphCard Component; +}; + +export default GraphCard; diff --git a/src/components/admin/previewComponent/allUserPreview/AllUserPreview.styled.ts b/src/components/admin/previewComponent/allUserPreview/AllUserPreview.styled.ts new file mode 100644 index 00000000..c3389834 --- /dev/null +++ b/src/components/admin/previewComponent/allUserPreview/AllUserPreview.styled.ts @@ -0,0 +1,3 @@ +import styled from 'styled-components'; + +export const Container = styled.div``; diff --git a/src/components/admin/previewComponent/allUserPreview/AllUserPreview.tsx b/src/components/admin/previewComponent/allUserPreview/AllUserPreview.tsx new file mode 100644 index 00000000..fba6c2f3 --- /dev/null +++ b/src/components/admin/previewComponent/allUserPreview/AllUserPreview.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import * as S from './AllUserPreview.styled'; + +const AllUserPreview = () => { + return AllUserPreview Component; +}; + +export default AllUserPreview; diff --git a/src/components/admin/previewComponent/inquiresPreview/InquiresPreview.styled.ts b/src/components/admin/previewComponent/inquiresPreview/InquiresPreview.styled.ts new file mode 100644 index 00000000..c3389834 --- /dev/null +++ b/src/components/admin/previewComponent/inquiresPreview/InquiresPreview.styled.ts @@ -0,0 +1,3 @@ +import styled from 'styled-components'; + +export const Container = styled.div``; diff --git a/src/components/admin/previewComponent/inquiresPreview/InquiresPreview.tsx b/src/components/admin/previewComponent/inquiresPreview/InquiresPreview.tsx new file mode 100644 index 00000000..25aba453 --- /dev/null +++ b/src/components/admin/previewComponent/inquiresPreview/InquiresPreview.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import * as S from './InquiresPreview.styled'; + +const InquiresPreview = () => { + return InquiresPreview Component; +}; + +export default InquiresPreview; diff --git a/src/components/admin/previewComponent/noticePreview/NoticePreview.styled.ts b/src/components/admin/previewComponent/noticePreview/NoticePreview.styled.ts new file mode 100644 index 00000000..be3dbe3e --- /dev/null +++ b/src/components/admin/previewComponent/noticePreview/NoticePreview.styled.ts @@ -0,0 +1,22 @@ +import styled from 'styled-components'; + +export const Container = styled.div` + display: flex; + flex-direction: column; + padding: 20px; +`; + +export const Wrapper = styled.div` + display: flex; +`; + +export const Dot = styled.img` + margin-right: 7px; +`; + +export const NoticeTitle = styled.p` + font-size: 18px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +`; diff --git a/src/components/admin/previewComponent/noticePreview/NoticePreview.tsx b/src/components/admin/previewComponent/noticePreview/NoticePreview.tsx new file mode 100644 index 00000000..a5efc202 --- /dev/null +++ b/src/components/admin/previewComponent/noticePreview/NoticePreview.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import * as S from './NoticePreview.styled'; +import { useGetNotice } from '../../../../hooks/user/useGetNotice'; +import line from '../../../../assets/line.svg'; + +const NoticePreview = () => { + const { noticeData } = useGetNotice({ keyword: '', page: 1 }); + + return ( + + {noticeData?.notices.map((notice) => ( + + + {notice.title} + + ))} + + ); +}; + +export default NoticePreview; diff --git a/src/components/admin/previewComponent/reportsPreview/ReportsPreview.styled.ts b/src/components/admin/previewComponent/reportsPreview/ReportsPreview.styled.ts new file mode 100644 index 00000000..c3389834 --- /dev/null +++ b/src/components/admin/previewComponent/reportsPreview/ReportsPreview.styled.ts @@ -0,0 +1,3 @@ +import styled from 'styled-components'; + +export const Container = styled.div``; diff --git a/src/components/admin/previewComponent/reportsPreview/ReportsPreview.tsx b/src/components/admin/previewComponent/reportsPreview/ReportsPreview.tsx new file mode 100644 index 00000000..d3964ed7 --- /dev/null +++ b/src/components/admin/previewComponent/reportsPreview/ReportsPreview.tsx @@ -0,0 +1,8 @@ +import React from 'react'; +import * as S from './ReportsPreview.styled'; + +const ReportsPreview = () => { + return ReportsPreview Component; +}; + +export default ReportsPreview; diff --git a/src/components/common/header/Notification/Notification.styled.ts b/src/components/common/header/Notification/Notification.styled.ts index d703886f..a5d6e4c8 100644 --- a/src/components/common/header/Notification/Notification.styled.ts +++ b/src/components/common/header/Notification/Notification.styled.ts @@ -6,8 +6,6 @@ export const Container = styled.div` overflow: hidden; display: flex; flex-direction: column; - justify-content: center; - align-items: center; padding: 3px; `; @@ -40,6 +38,12 @@ export const Arrow = styled.img` margin-bottom: 3px; `; +export const NoAlarmContainer = styled.div` + display: flex; + justify-content: center; + align-items: center; +`; + export const NonContentsMessage = styled.p` display: flex; justify-content: center; diff --git a/src/components/common/header/Notification/Notification.tsx b/src/components/common/header/Notification/Notification.tsx index 8265e347..25a262ad 100644 --- a/src/components/common/header/Notification/Notification.tsx +++ b/src/components/common/header/Notification/Notification.tsx @@ -13,9 +13,9 @@ const Notification = () => { if (!AlarmData) { return ( - + 알림이 없습니다. - + ); } diff --git a/src/components/common/header/Notification/NotificationItem/NotificationItem.styled.ts b/src/components/common/header/Notification/NotificationItem/NotificationItem.styled.ts index ce92af65..e243f3f8 100644 --- a/src/components/common/header/Notification/NotificationItem/NotificationItem.styled.ts +++ b/src/components/common/header/Notification/NotificationItem/NotificationItem.styled.ts @@ -1,13 +1,12 @@ import styled, { css } from 'styled-components'; export const Container = styled.div` - padding: 8px 0; + padding: 10px; font-size: 14px; `; export const TypeArea = styled.div` display: flex; - margin-left: 6px; `; export const Type = styled.p``; @@ -22,13 +21,11 @@ export const ItemContent = styled.p` white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - margin-left: 6px; `; export const Time = styled.span` color: #999; font-size: 12px; - margin-left: 6px; margin-right: 5px; `; diff --git a/src/components/common/header/Notification/NotificationItem/NotificationItem.tsx b/src/components/common/header/Notification/NotificationItem/NotificationItem.tsx index 11cd27d5..9c9b7c9c 100644 --- a/src/components/common/header/Notification/NotificationItem/NotificationItem.tsx +++ b/src/components/common/header/Notification/NotificationItem/NotificationItem.tsx @@ -16,7 +16,7 @@ const NotificationItem = ({ item }: NotificationItemProps) => { return ( - {item.content} + {item.content} | {timeAgo(item.createdAt)} diff --git a/src/components/user/evaluation/EvaluationContent.styled.ts b/src/components/user/evaluation/EvaluationContent.styled.ts index ca40c6c3..0955b21a 100644 --- a/src/components/user/evaluation/EvaluationContent.styled.ts +++ b/src/components/user/evaluation/EvaluationContent.styled.ts @@ -177,10 +177,10 @@ export const CompletedButton = styled.button<{ $active?: boolean }>` color: ${({ $active }) => ($active ? '#fff' : '#999')}; border: none; border-radius: 4px; - cursor: ${({ $active }) => ($active ? 'pointer' : 'default')}; + cursor: pointer; transition: background-color 0.2s; &:hover { - background-color: ${({ $active }) => ($active ? '#2f4a6b' : '#e0e0e0')}; + background-color: '#e0e0e0'; } `; diff --git a/src/components/user/evaluation/EvaluationContent.tsx b/src/components/user/evaluation/EvaluationContent.tsx index f66f1c14..c428ce41 100644 --- a/src/components/user/evaluation/EvaluationContent.tsx +++ b/src/components/user/evaluation/EvaluationContent.tsx @@ -7,19 +7,23 @@ interface EvaluationContentProps { projectId: number; projectName: string; memberList: MemberList[]; + isAllEvaluated: boolean; } const EvaluationContent = ({ projectId, projectName, memberList, + isAllEvaluated, }: EvaluationContentProps) => { const { step, notDone, + completedMember, handleClickLeftUser, handleClickOption, handleNextStep, + handleCompletedMember, currentScores, isNotFill, } = useEvaluationStep({ projectId, memberList }); @@ -42,18 +46,26 @@ const EvaluationContent = ({ - {notDone[step]?.nickname}님 평가하기 - - 제출하기 - + + {isAllEvaluated + ? '평가가 완료 되었습니다. ' + : completedMember + ? `${completedMember.nickname}님 평가 결과` + : `${notDone[step]?.nickname}님 평가하기`} + + {!completedMember && ( + + 제출하기 + + )} - {isNotFill && ( + {isNotFill && !completedMember && ( 모든 질문에 답변해주세요. )} @@ -78,6 +90,7 @@ const EvaluationContent = ({ handleClickOption(questionNumber, optionValue) } value={optionValue + 1} + disabled={!!completedMember} /> {optionValue + 1} {label} @@ -94,7 +107,16 @@ const EvaluationContent = ({ {memberList .filter((memberData) => memberData.evaluated) .map((memberData) => ( - + + handleCompletedMember( + memberData.userId, + memberData.nickname, + memberData.scores + ) + } + > {memberData.nickname} ))} diff --git a/src/components/user/manageProjects/Card.styled.ts b/src/components/user/manageProjects/Card.styled.ts index 5afca4a2..3b883a43 100644 --- a/src/components/user/manageProjects/Card.styled.ts +++ b/src/components/user/manageProjects/Card.styled.ts @@ -91,11 +91,12 @@ export const RecruitmentEnd = styled.span` font-weight: 800; `; -export const EvaluateButton = styled(Link)` +export const EvaluateButton = styled(Link)<{ $isCompleted: boolean }>` display: inline-flex; flex-shrink: 0; padding: 0.2rem 0.65rem; - background-color: #3e5879; + background-color: ${({ $isCompleted }) => + $isCompleted ? `#2ADE1D` : `#3e5879`}; font-size: 0.9rem; color: ${({ theme }) => theme.color.white}; border-radius: 10px; diff --git a/src/components/user/manageProjects/Card.tsx b/src/components/user/manageProjects/Card.tsx index 10da8a64..a1690221 100644 --- a/src/components/user/manageProjects/Card.tsx +++ b/src/components/user/manageProjects/Card.tsx @@ -22,8 +22,10 @@ function Card({ project }: CardProps) { - 평가하기 + {project.isAllEvaluated ? '평가완료' : '평가하기'} )} {project.isDone && 모집 종료} diff --git a/src/components/user/mypage/joinedProject/Project.styled.ts b/src/components/user/mypage/joinedProject/Project.styled.ts index db2726d1..960b02d6 100644 --- a/src/components/user/mypage/joinedProject/Project.styled.ts +++ b/src/components/user/mypage/joinedProject/Project.styled.ts @@ -144,11 +144,12 @@ export const SkillArea = styled.div` } `; -export const EvaluateButton = styled(Link)` +export const EvaluateButton = styled(Link)<{ $isCompleted: boolean }>` display: inline-flex; flex-shrink: 0; padding: 0.2rem 0.65rem; - background-color: #3e5879; + background-color: ${({ $isCompleted }) => + $isCompleted ? `#2ADE1D` : `#3e5879`}; font-size: 0.9rem; color: ${({ theme }) => theme.color.white}; border-radius: 10px; diff --git a/src/components/user/mypage/joinedProject/Project.tsx b/src/components/user/mypage/joinedProject/Project.tsx index 5dac04cc..859d6e2b 100644 --- a/src/components/user/mypage/joinedProject/Project.tsx +++ b/src/components/user/mypage/joinedProject/Project.tsx @@ -43,8 +43,10 @@ const Project = ({ project, canEvaluate }: ProjectProps) => { - 평가하기 + {project.isAllEvaluated ? '평가완료' : '평가하기'} )} diff --git a/src/constants/admin/mainItems.ts b/src/constants/admin/mainItems.ts new file mode 100644 index 00000000..d83a2a41 --- /dev/null +++ b/src/constants/admin/mainItems.ts @@ -0,0 +1,45 @@ +import GraphCard from '../../components/admin/mainCard/graphCard/GraphCard'; +import AllUserPreview from '../../components/admin/previewComponent/allUserPreview/AllUserPreview'; +import InquiresPreview from '../../components/admin/previewComponent/inquiresPreview/InquiresPreview'; +import NoticePreview from '../../components/admin/previewComponent/noticePreview/NoticePreview'; +import ReportsPreview from '../../components/admin/previewComponent/reportsPreview/ReportsPreview'; +import { ADMIN_ROUTE } from '../routes'; + +export interface CardItem { + key: string; + title: string; + link?: string; + Component: React.FC; +} + +export const cardList: CardItem[] = [ + { + key: 'notice', + title: '공지사항', + link: `${ADMIN_ROUTE.notice}`, + Component: NoticePreview, + }, + { + key: 'inquires', + title: '문의 확인', + link: `${ADMIN_ROUTE.inquiries}`, + Component: InquiresPreview, + }, + { + key: 'reports', + title: '신고 검토', + link: `${ADMIN_ROUTE.reports}`, + Component: ReportsPreview, + }, + { + key: 'allUsers', + title: '전체 회원 조회', + link: `${ADMIN_ROUTE.allUser}`, + Component: AllUserPreview, + }, + { + key: 'Graph', + title: '방문자 현황', + Component: GraphCard, + }, +]; diff --git a/src/hooks/user/evaluationHooks/useEvaluationStep.ts b/src/hooks/user/evaluationHooks/useEvaluationStep.ts index 3292496b..22e7b18c 100644 --- a/src/hooks/user/evaluationHooks/useEvaluationStep.ts +++ b/src/hooks/user/evaluationHooks/useEvaluationStep.ts @@ -17,6 +17,11 @@ const useEvaluationStep = ({ const [notDone, setNotDone] = useState([]); const [progress, setProgress] = useState[]>([]); const [isNotFill, setIsNotFill] = useState(false); + const [completedMember, setCompletedMember] = useState<{ + userId: number; + nickname: string; + scores: number[]; + } | null>(null); const { createEvaluation } = usePostEvaluation(projectId); @@ -33,6 +38,7 @@ const useEvaluationStep = ({ setStep(0); setIsNotFill(false); + setCompletedMember(null); }, [memberList, questionLength]); const user = notDone[step]?.userId; @@ -43,6 +49,10 @@ const useEvaluationStep = ({ }; const handleClickOption = (questionNumber: number, optionValue: number) => { + if (completedMember) { + return; + } + const realValue = optionValue + 1; setProgress((prev) => @@ -57,7 +67,12 @@ const useEvaluationStep = ({ ) ); }; + const handleNextStep = () => { + if (completedMember) { + return; + } + if (user == null) return; const record = progress.find((r) => user in r); @@ -78,16 +93,30 @@ const useEvaluationStep = ({ } }; + const handleCompletedMember = ( + userId: number, + nickname: string, + scores: number[] + ) => { + setCompletedMember({ userId, nickname, scores }); + }; + const currentScores = useMemo(() => { + if (completedMember) { + return completedMember.scores; + } + const record = progress.find((r) => user in r); return record ? record[user] : Array(questionLength).fill(0); - }, [progress, questionLength, user]); + }, [progress, questionLength, user, completedMember]); return { step, + completedMember, handleClickLeftUser, handleClickOption, handleNextStep, + handleCompletedMember, notDone, currentScores, isNotFill, diff --git a/src/hooks/user/useNotification.ts b/src/hooks/user/useNotification.ts index c0980469..4416d107 100644 --- a/src/hooks/user/useNotification.ts +++ b/src/hooks/user/useNotification.ts @@ -45,7 +45,6 @@ const useNotification = () => { const event = e as MessageEvent; try { const eventData: AlarmLive = JSON.parse(event.data); - console.log(eventData); if (eventData) { queryClient.invalidateQueries({ @@ -56,11 +55,13 @@ const useNotification = () => { setSignal(eventData); showToast(eventData, 3000); } catch (error) { - console.error(error); + + console.error('SSE 메시지 파싱 실패:', error); } }); eventSource.onerror = (e) => { - console.error(e); + console.error('SSE 연결 오류:', e); + }; } diff --git a/src/models/auth.ts b/src/models/auth.ts index 458676e5..bd5787a2 100644 --- a/src/models/auth.ts +++ b/src/models/auth.ts @@ -20,6 +20,7 @@ export interface UserData { email: string; nickname: string; admin: boolean; + hasRequiredTags: boolean; } export interface ApiOauth extends ApiCommonType { diff --git a/src/models/evaluation.ts b/src/models/evaluation.ts index 239114e0..36247dd3 100644 --- a/src/models/evaluation.ts +++ b/src/models/evaluation.ts @@ -12,5 +12,6 @@ export interface apiMemberList { export interface MemberList { userId: number; nickname: string; + scores: number[]; evaluated: boolean; } diff --git a/src/models/manageMyProject.ts b/src/models/manageMyProject.ts index c546b866..249eea34 100644 --- a/src/models/manageMyProject.ts +++ b/src/models/manageMyProject.ts @@ -20,6 +20,7 @@ export interface ManagedProject { positions: PositionTag[]; skills: SkillTag[]; canEvaluate: boolean; + isAllEvaluated: boolean; } export interface MethodType { diff --git a/src/models/userProject.ts b/src/models/userProject.ts index da9d676f..d2c67097 100644 --- a/src/models/userProject.ts +++ b/src/models/userProject.ts @@ -10,6 +10,7 @@ export interface JoinedProject { totalMember: number; skills: Omit[]; canEvaluate: boolean; + isAllEvaluated: boolean; } export interface ApiJoinedProject extends ApiCommonType { diff --git a/src/pages/admin/adminInquiries/AdminInquiries.tsx b/src/pages/admin/adminInquiries/AdminInquiries.tsx index 2d180680..09a40280 100644 --- a/src/pages/admin/adminInquiries/AdminInquiries.tsx +++ b/src/pages/admin/adminInquiries/AdminInquiries.tsx @@ -1,4 +1,4 @@ -import * as S from './AdminInquires.styled'; +import * as S from './AdminInquiries.styled'; export default function AdminInquires() { return ; diff --git a/src/pages/admin/adminMain/AdminMain.styled.ts b/src/pages/admin/adminMain/AdminMain.styled.ts new file mode 100644 index 00000000..39d65d55 --- /dev/null +++ b/src/pages/admin/adminMain/AdminMain.styled.ts @@ -0,0 +1,19 @@ +import styled from 'styled-components'; + +export const Container = styled.div` + padding: 50px; + min-height: 100vh; +`; + +export const Wrapper = styled.div` + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-auto-rows: minmax(350px, auto); + gap: 20px; + + @media (max-width: 768px) { + grid-template-columns: 1fr; + } +`; + +export const GraphArea = styled.div``; diff --git a/src/pages/admin/adminMain/AdminMain.tsx b/src/pages/admin/adminMain/AdminMain.tsx index c0ccc4cf..85afe1dc 100644 --- a/src/pages/admin/adminMain/AdminMain.tsx +++ b/src/pages/admin/adminMain/AdminMain.tsx @@ -1,3 +1,26 @@ -export default function AdminMain() { - return
; -} +import React from 'react'; +import * as S from './AdminMain.styled'; +import MainCard from '../../../components/admin/mainCard/MainCard'; +import { cardList } from '../../../constants/admin/mainItems'; + +const Main = () => { + return ( + + + {cardList.map(({ key, title, link, Component }) => ( + + {title === '방문자 현황' ? ( + + + + ) : ( + + )} + + ))} + + + ); +}; + +export default Main; diff --git a/src/pages/user/evaluation/Evaluation.tsx b/src/pages/user/evaluation/Evaluation.tsx index a3f12145..d52fa1e2 100644 --- a/src/pages/user/evaluation/Evaluation.tsx +++ b/src/pages/user/evaluation/Evaluation.tsx @@ -1,4 +1,4 @@ -import { useParams } from 'react-router-dom'; +import { useLocation, useParams } from 'react-router-dom'; import * as S from './Evaluation.styled'; import useGetCompletedEvaluation from '../../../hooks/user/evaluationHooks/useGetEvaluation'; import LoadingSpinner from '../../../components/common/loadingSpinner/LoadingSpinner'; @@ -9,6 +9,10 @@ import { useModal } from '../../../hooks/useModal'; const Evaluation = () => { const { projectId: projectIdParam } = useParams(); const projectId = Number(projectIdParam); + const location = useLocation(); + const isAllEvaluated = + typeof location.state === 'boolean' ? location.state : false; + const { isOpen, message, handleModalOpen, handleModalClose, handleConfirm } = useModal(); @@ -28,6 +32,7 @@ const Evaluation = () => { projectId={projectId} projectName={memberList.projectName} memberList={memberList.userData!} + isAllEvaluated={isAllEvaluated} />