-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat: 내 일정 페이지 추가 구현 #41
Conversation
); | ||
}; | ||
|
||
export default ContentFilter; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위의 코드 패치는 리액트 컴포넌트인 ContentFilter를 정의하고 있습니다. 기능적으로 보면, 일정 제목 입력과 모집 기간 필터링을 위한 달력 선택이 가능합니다. 몇 가지 개선사항은 다음과 같습니다:
- 주석은 소유자를 이해하기 쉽도록 한국어로 작성되었으나, 주석을 영어로 작성하는 것이 코드를 사용하는 많은 사람들에게 더 이해하기 쉬울 수 있습니다.
- 변수 및 함수 이름은 의미를 잘 전달하지만, 조금 더 자세하게 설명하는 것이 이해하기 더 쉬울 수 있습니다. 예를 들어,
handleCalendarClick
대신handleCalendarClickType
으로 이름을 변경하는 것이 좋습니다. - CSS 클래스 이름은 비슷한 스타일을 공유하는 항목들끼리 그룹화하는 것이 좋습니다. 또한 마진과 여백을 설정할 때 통일된 방식을 사용하는 것이 일관성을 유지하는 데 도움이 될 수 있습니다.
<button>
요소에 함께 사용되는 스타일을 외부 CSS 파일로 추출하여 재사용 가능한 구성 요소로 분리하는 것도 고려해 볼 수 있습니다.- 현재 코드에서는 변수 타입에 대한 주석이 명시되지 않았습니다. TypeScript를 사용하는 것이 변수와 함수 규격을 명확하게 설정하고 잘못된 타입 사용을 방지하는 데 도움이 될 수 있습니다.
일반적으로 코드 패치는 기능적으로 올바른 것처럼 보이며, 주요한 버그 리스크는 추론하기 어렵습니다. 추가 테스트와 리뷰를 통해 코드의 안정성과 성능을 확인하는 것이 좋습니다.
width={13} | ||
height={13} | ||
/> | ||
</div> | ||
</div> | ||
{visible && ( | ||
<div className="absolute top-[38px] left-0 z-30"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 코드 패치의 문제점과 개선 제안은 다음과 같습니다:
-
첫째,
InputCalender
컴포넌트에서placeholder
를 사용하기 위해props
로 전달되는 것으로 보입니다. 그러나 수정된 코드에서는placeholder
속성이 전혀 사용되지 않고 있습니다.placeholder
를 적절히 활용하도록 수정해야 합니다. -
둘째,
<input>
요소에cursor-pointer
클래스가 중복되어 있습니다. 하나의 클래스만 사용하면 됩니다. -
셋째,
defaultValue
속성을 사용하여<input>
요소의 초기 값을 설정하고 있습니다. 그러나 사용자가 날짜를 선택하면 입력 값이 갱신되어야 합니다. 따라서value
속성을 사용하여 실제 날짜를 표시하고 변경 가능하도록 해야 합니다. -
넷째, 일부 스타일 클래스 이름이 수정되었습니다. 예를 들어,
w-[145px]
에서w-[10%]
로 변경되었습니다. 스타일 클래스의 변경에 대한 이유와 의도를 확인하고, 스타일 반영 여부를 결정해야 합니다. -
마지막으로, 코드 패치에서는
visible
상태 변수에 따라 달력을 표시하는 부분이 제거되었습니다. 이 부분도 살펴봐야 합니다. 달력을 표시해야 하는 로직이 제대로 작동하는지 확인해야 합니다.
위의 문제들을 확인하고 수정하여 코드를 개선하시기 바랍니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인했습니다~ 코멘트 확인 부탁드려요~
src/schedule/context/TabContext.ts
Outdated
@@ -0,0 +1,3 @@ | |||
import { createContext } from "react"; | |||
|
|||
export const TabContext = createContext<string | null>(null); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Lv1] TabContext
는 어떻게 사용되나요?? TabContext를 사용하는곳이 CardStatus
밖에 안보이는데 이부분은 추후 작업 예정인건가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
페이지 내의 tab이 변경 될 때 마다, useEffect의 의존성 배열에 사용해서 CardStatus를 변경하려고 TabContext를 도입하긴 했는데... 이 부분이 제가 생각하는데로 동작을 하지 않네요. 제가 알기로는 이렇게 tab을 context에서 불러왔을 때, tab이 변경될 때 마다 useEffect가 실행되야할 것 같은데, 그렇게 동작을 안하고 있는 상태입니다. 그래서 현재 CardStatus 컴포넌트 useEffect의 의존성 배열에 여러 인자들이 들어가 있는데, 그냥 tab도 props로 내리는 게 좋을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
말씀하신 내용이 좀 헷갈리는데 context에서 tab을 가져왔을때 useEffect가 실행되지않나요?? 이부분 한번 정리해서 리뷰해주실수있으면 좋겠습니다!
); | ||
}; | ||
|
||
export default RecruitManage; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 코드 패치는 React 컴포넌트인 RecruitManage
를 정의하는 것으로 보입니다. 해당 컴포넌트는 신청자 관리를 위한 기능을 담고 있습니다. 주요 기능은 다음과 같습니다:
RecruitManageProps
인터페이스: 컴포넌트의 속성(props)을 정의하고 있습니다.useState
훅: 상태를 관리하기 위해 사용되고,defaultApplicants
와selectedIds
등의 상태를 초기화하고 업데이트합니다.- 이벤트 핸들러 함수: 체크박스와 선택 상태를 처리하기 위한
handleSelectAll
,handleSelect
함수가 정의되어 있습니다. - useEffect 훅: 필터링 옵션에 따라 신청자 리스트를 업데이트합니다.
이 코드 패치는 주요한 버그나 오류 위험이 보이지 않습니다. 그러나 몇 가지 개선 제안은 다음과 같습니다:
- 중복된 코드 줄이기: 동일한 로직을 반복하는 부분이 있는데, 이를 함수로 분리하여 재사용성을 높이고 코드 가독성을 개선할 수 있습니다.
- 변수명 개선: 일부 변수 이름은 명확하지 않은 경우가 있는데, 변수명을 좀 더 명시적으로 변경하면 이해하기 쉬워집니다.
- 상수 사용: "전체," "승인," "대기중"과 같은 문자열 값들은 상수로 정의하는 것이 좋습니다.
- CSS 클래스명 개선: 현재는 클래스명에 다양한 요소가 섞여 있어 가독성이 떨어집니다. 클래스명을 의미 있는 이름으로 변경하여 스타일링을 관리하기 쉽게 합니다.
코드 품질과 유지보수 측면에서 위 개선 사항을 고려해 보시기 바랍니다. 하지만 전체적인 코드 구조와 기능은 잘 구현되어 있는 것으로 보입니다.
); | ||
}; | ||
|
||
export default MyScheduleContent; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위의 코드 조각은 React 컴포넌트인 MyScheduleContent
를 정의하는 것 같습니다. 이 컴포넌트는 일정 목록을 가져와서 화면에 렌더링합니다.
코드 리뷰 및 개선 사항:
getMainSchedule
함수가 어디에서 정의되는지 알 수 없기 때문에 해당 함수의 구현 내용과 리턴 값 등을 확인해야 합니다.catch
블록이try
블록 바깥에 위치하고 있어서 실제로 오류가 발생할 경우 캐치할 수 없습니다.then
메서드 체인 내부에서 오류를 캐치하는 방식으로 수정해야 합니다.const onClickDelete
함수는 현재 주석 처리되어 있으므로 기능을 구현해야 합니다.setTemporarayCardList
의 오타를setTemporaryCardList
로 수정해야 합니다.cardType
prop을TitleCardContainer
로 전달하지 않고 있습니다. 필요에 따라 수정해야 할 수도 있습니다.w-3/5
는 하드 코딩된 스타일 클래스입니다. 유동적인 크기 조정이 필요한 경우 다른 방법을 사용해야 합니다.
이 외에도 코드의 세부 사항에 따라 추가적인 개선이 필요할 수 있습니다. 제시된 코드 조각에서는 그 외의 오류나 위험 요소를 확인할 수 없습니다.
); | ||
}; | ||
|
||
export default ScheduleWrapper; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위의 코드 패치를 간단하게 검토해드리겠습니다.
- PropsWithChildren은 불필요한 것 같습니다. interface ScheduleWrapperProps {}로 충분합니다.
-
태그 안에 있는 className="flex justify-center pt-32"는 CSS 클래스 이름으로 추정됩니다. 이 클래스들이 적절한지, 어떤 스타일을 적용하는지 확인해보세요.
- ScheduleHeader 컴포넌트는 어디에서 가져오는지 알 수 없으니, 해당 파일이 존재하고 import 구문이 올바른지 확인해주세요.
- 코드상 큰 문제는 없어 보입니다. 추가적인 기능이나 개선사항이 필요한지는 호출하는 곳에서 보완해야 합니다.
); | ||
}; | ||
|
||
export default TemporaryCard; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 코드 패치는 Next.js 및 React를 사용하여 임시 저장된 일정 정보를 보여주는 카드 컴포넌트입니다. 아래는 코드 리뷰와 개선 제안입니다:
-
이미지 임포트:
Image
를 Next.js의next/image
에서 임포트하고 있습니다. -
프로퍼티 타입:
TemporaryCardProps
인터페이스에scheduleType
이라는 타입이 들어있는데, 이 타입이 어디에서 온 것인지 명확하게 알 수 없습니다. 해당 타입을 작성한 곳이 있다면 인터페이스 정의 부분과 동일한 파일에서 가져오는 것이 좋습니다. -
클래스 네임: 카드의 className으로 특정 CSS 클래스들이 동적으로 결정되고 있습니다. 이런 경우에는 조건부 클래스 이름을 적용하는 대신 CSS-in-JS 라이브러리(예: styled-components)를 사용하는 것이 유지보수성과 확장성 면에서 더 좋을 수 있습니다.
-
이미지 렌더링:
img.length
를 확인한 후에 조건에 따라 이미지를 렌더링하거나 대체 텍스트를 표시하고 있습니다. 그러나,img
가공 여부와 상관없이img
속성을 항상<Image>
컴포넌트에 전달하고 있습니다. 대신,img
속성을 조건부로<Image>
컴포넌트에 전달하는 방식으로 변경해 불필요한 렌더링을 피할 수 있습니다. -
TODO 주석: 마지막으로, 코드 중간에 "TODO: 일정 만들기로 라우팅" 주석이 있습니다. 이 부분을 완성하여 프로덕션 코드에서 사용되도록 처리하거나, 주석을 삭제하는 것이 좋습니다.
이외에는 보안상의 버그나 위험한 코드 리스크를 찾을 수는 없었습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
변경사항
- 스크랩 페이지 추가
- MSW로 데이터 요청
- 코드 리뷰 사항들 반영
다시 확인해주시면 감사하겠습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인했습니다! 코멘트 달아놓은 부분만 반영 부탁드릴게용. 고생하셨습니다!
</div> | ||
</div> | ||
)} | ||
{/* 사진 및 테마 */} | ||
<div | ||
className={`w-[260px] h-[225px] bg-stone-300 border-b border-zinc-400 relatvie`} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Lv3] 이부분 클래스네임 오타나있습니다!
className={`w-[260px] h-[225px] bg-stone-300 border-b border-zinc-400 relatvie`} | |
className={`w-[260px] h-[225px] bg-stone-300 border-b border-zinc-400 relative`} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인완료했습니다! 캐러셀 부분은 삭제 부분 msw 연동 후 확인 부탁드립니다!
isDeleteToggle={isDeleteToggle} | ||
handleDeleteToggle={handleDeleteToggle} | ||
onClickDelete={onClickDelete} | ||
/> | ||
); | ||
}; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 코드 패치를 요약하면 다음과 같습니다:
RecruitManage
에서 가져온RecruitManageProps
를 import합니다.getApplicantsList
를 임포트하여 API에 대한 정보를 얻을 수 있습니다.useModal
훅을 사용하여 모달 기능을 추가합니다.CardStatus
,scheduleType
,TemporaryCard
컴포넌트 등이 새로 추가되었습니다.cardType
및Applicant
상호 작용을 포함하는 인터페이스가 정의되었습니다.handleDelete
가handleDeleteToggle
로 변경되었습니다.handleModal
함수가 추가되었으며, 해당 일정에 대한 신청자 목록을 가져와 모달을 엽니다.- 카드 유형과 조건에 따라 다른 컨텐츠를 렌더링하도록 수정되었습니다.
버그 위험성은 주어지지 않았고, 개선 제안 사항은 코드 리뷰 및 개발자 의사에 따라 달라질 수 있습니다.
); | ||
}; | ||
|
||
export default TemporaryCard; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위 코드는 TemporaryCard라는 컴포넌트입니다. 주요 리뷰 포인트는 다음과 같습니다:
import Image from "next/image";
: 이 부분은 이미지를 다루기 위해 Next.js의 Image 모듈을 가져오고 있습니다.interface TemporaryCardProps
: TemporaryCard 컴포넌트의 props를 정의하고 있습니다. 타입을 명확히 정의하여 props 사용에 도움이 됩니다.const TemporaryCard = ({ ... }) => { ... }
: TemporaryCard 함수 컴포넌트를 정의하고 있습니다. props를 전달받아 컴포넌트를 렌더링합니다.- CSS 클래스와 조건부 스타일링: JSX 엘리먼트에 동적으로 CSS 클래스를 지정하거나 조건부 스타일링을 적용하는 방법이 사용되고 있습니다. 이를 통해 컴포넌트의 외관과 동작을 다양하게 조절할 수 있습니다.
- 삭제 기능: 카드 위에 마우스를 올리면 삭제 버튼이 나타나는 로직이 구현되어 있습니다.
handleDeleteToggle
과onClickDelete
함수를 호출하고, 상태를 업데이트하여 UI를 변경합니다. - 이미지 출력:
img
prop이 비어있지 않으면 이미지를 보여주고, 그렇지 않으면 이미지가 없음을 나타내는 메시지를 표시합니다. - 제목, 위치, 내용 및 기간 출력: 각각의 정보를 받아와 카드에 출력합니다.
- "일정 만들기 바로가기" 영역: 이 부분은 주석으로 처리되어 있으며, 일정 만들기로의 라우팅을 위한 기능이 추가될 예정입니다.
버그 리스크나 개선 제안은 보이지 않습니다. 하지만 성능 개선이 필요한 경우, 이미지 로딩 관련 설정에 주의해야 합니다.
구현사항
테스트
TODO
추가