-
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
[FE] refactor: ReviewCard에서 강점 키워드를 표시하는 ReviewKeyword 컴포넌트 분리 및 불필요한 예시 제거 #1039
[FE] refactor: ReviewCard에서 강점 키워드를 표시하는 ReviewKeyword 컴포넌트 분리 및 불필요한 예시 제거 #1039
Conversation
@@ -7,11 +8,13 @@ interface KeywordSectionProps { | |||
} |
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.
배열이 아닌데 타입명이 Options로 되어있었네요
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.
@@ -7,11 +8,13 @@ interface KeywordSectionProps { | |||
} | |||
|
|||
const KeywordSection = ({ options }: KeywordSectionProps) => { |
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.
Keyword 라고 되어 있어서, 강점 키워드인줄 알았는데 선택된 객관식 답변이였네요.
컴포넌트명을 선택된 객관식 답변이라는 명으로 바뀌면 좋을 것 같아요.
(이건 쑤쑤에게 변경하라는 의미보다, 잊어먹을까봐 이런 것 변경해야겠다라는 식의 메모용으로 남기는 거니끼 부담가지 말아요!)
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.
ㅋㅋㅋㅋ저도 순간 왜 키워드 컴포넌트가 2개나 있지...? 싶었는데 덕분에 기존 키워드 컴포넌트인 걸 알았네요ㅋㅋㅋㅋ
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.
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.
- DetailedReviewPageContents.tsx
parsedDetailedReview.sections.map((section) =>
section.questions.map((question) => (
<S.ReviewContentContainer key={question.questionId}>
<ReviewSection question={question.content} answer={question.answer!} />
{question.questionType === 'CHECKBOX' && <KeywordSection options={question.optionGroup!.options} />}
</S.ReviewContentContainer>
)),
)}
- ReviewSection.tsx
<S.ReviewSection>
<ReviewSectionHeader text={question} />
{answer && (
<S.Answer>
<MultilineTextViewer text={answer} />
</S.Answer>
)}
</S.ReviewSection>
현재 리뷰 상세 페이지에서 질문-답변 구조가 이렇게 되어 있는데,
KeywordSection가 객관식 답변에 대한 컴포넌트에요. 첫번째 강점 질문에 대한 객관식 답변은 키워드가 될 수 있지만 꼬리 질문에서는 키워드가 될 수 없어요. 키워드보다는, 'MultilineTextViewer'라는 컴포넌트명 처럼 객관식 답변이라는 명칭이 네이밍에 들어가는게 헷갈리지 않을 것 같아요.
추가적으로 객관식 답변과 주관식 답변이 다른 컴포넌트에 있다보니 구조가 헷갈려서, 객관식 답변도 ReviewSection안으로 옮긴다면 ReviewSection이 '질문-답'을 보여주는 컴포넌트로서의 역할이라는 점이 더 명확해질 것 같아요.
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.
|
||
import media from '@/utils/media'; | ||
|
||
export const KeywordList = styled.div` |
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, span 태그를 사용한 이유가 있을까요?
스타일 컴포넌트 네이밍명은 list, item이고 시멘틱 구조 사 ul, li 좋을 것 같아서요.
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, span으로 했네요... 수정하겠습니다!
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.
겸사겸사 카드 디자인까지 구현해줬군요!! 전보다 더 깔끔해져서 좋아요~~~
다만 저도 Card의 border 색상은 조금 더 진하게 해야 할 것 같다고 생각합니다. 색상이 많이 빠지니까 구분감을 주는 게 border 하나만 남은지라 더 눈에 잘 띄게 해야할 것 같아요!
쑤쑤 말대로 Card 컴포넌트는 이곳저곳에서 재활용하니 공통으로 빼야할 것 같아요. 정확한 구현 방식은 정한 바 없지만 합성 스타일로 만들면 사용할 때 편할 것 같다는 생각이 듭니다!
border 외에는 수정할 게 없다고 생각해서 먼저 어프루브할게요~!
{ optionId: 2, content: '💡 문제 해결 능력', isChecked: false }, | ||
{ | ||
optionId: 1, | ||
content: '🗣️커뮤니케이션, 협업 능력 (예: 팀원간의 원활한 정보 공유, 명확한 의사소통)', |
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.
목데이터와 실제 데이터가 같아졌네요! 헷갈렸는데 좋네요~~
@@ -7,11 +8,13 @@ interface KeywordSectionProps { | |||
} | |||
|
|||
const KeywordSection = ({ options }: KeywordSectionProps) => { |
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.
ㅋㅋㅋㅋ저도 순간 왜 키워드 컴포넌트가 2개나 있지...? 싶었는데 덕분에 기존 키워드 컴포넌트인 걸 알았네요ㅋㅋㅋㅋ
@@ -0,0 +1,14 @@ | |||
const formattedCategories = <T extends { optionId: number; content: string }>(categories: T[]) => { |
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.
객체가 이렇게 사용될 때의 컨벤션은 없지만 리뷰미에서 객체 리터럴로 타입을 표시하지 않고 인터페이스를 선언하는 기조라 여기도 별도의 타입이 선언된다면 통일성이 더 좋아지지 않을까 싶습니다!
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.
통일성을 고려한다면 인터페이스를 선언하는게 좋겠네요!!
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.
리팩토링에 디자인 수정까지 많은 작업을 했네요👍🏻디테일한 부분까지 챙겨준 덕분에 더 예쁜 UI가 된 것 같아요.
상세 보기 페이지에서 버그를 발견해서 코멘트 남겨두었습니다!
<S.MultipleChoiceAnswerList> | ||
{answerList.map(({ optionId, content }) => ( | ||
<MultipleChoiceAnswer key={optionId} answer={content} /> | ||
))} | ||
</S.MultipleChoiceAnswerList> |
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.
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.
변경 사항 확인했어요! 고생했어요😊
@@ -0,0 +1,9 @@ | |||
const formatKeyword = (content: string) => { | |||
const contentWithoutExample = Array.from(content.split(' (예: ')[0]); |
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.
우선은 키워드 항목인지 여부를 이렇게 판단해도 괜찮겠네요👍🏻
|
||
const QuestionAnswerSection = ({ question, questionType, answer, options }: QuestionAnswerProps) => { | ||
return ( | ||
<S.QuestionAnswerSection> |
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.
👍 주관식,객관식 답변이 한 군데 있으니까 구조 파악하기에 더 좋네요
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.
기존 리뷰 목록,상세 페이지까지 고치느라 고생했어요
🚀 어떤 기능을 구현했나요 ?
ReviewKeyword
컴포넌트로 분리하여 적용했습니다. 그리고 겸사겸사 목록 페이지 ReviewCard와 상세 페이지 디자인도 같이 수정했습니다. (피그마 토대로)(예: ~~
부분을 제거하고 이모지와 키워드만 표시되도록 수정했습니다. (목록, 상세 페이지 둘 다)🔥 어떻게 해결했나요 ?
실제 API 응답에서는
(예: ~~
부분이 포함되는데, 목 데이터에서는 해당 부분이 누락되어 있었습니다. 그래서 목록 페이지와 상세 페이지의 목 데이터를 실제 서버 응답과 일치시켰습니다. 그리고 강점 키워드 포맷팅 함수를 유틸로 분리해서 목록 페이지, 상세 페이지 모두 사용하도록 했습니다.📝 어떤 부분에 집중해서 리뷰해야 할까요?
목록 페이지
,리뷰 링크 관리 페이지
,작성한 리뷰 확인 페이지
에서 각각 사용되고 있습니다. 각 페이지에서 프로젝트 이름, 리뷰이 이름 유무 등 자잘한 차이가 존재하지만, 이거를 옵셔널로 각 페이지에 필요한 내용만 전달할 수 있게끔Reviewcard
를 공통 컴포넌트로 리팩토링하는 것이 좋을 것 같습니다.📚 참고 자료, 할 말