-
Notifications
You must be signed in to change notification settings - Fork 0
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 : create aside component #81
base: main
Are you sure you want to change the base?
Conversation
11940ef
to
8c365cf
Compare
8c365cf
to
3a717e3
Compare
실제 데이터 연결까지 완료한 상황입니다! 다만 progress test가 깨져서 공유를 위해 draft pr로 전환하고 푸시했습니다! |
3a717e3
to
bedb21c
Compare
aeb3650
to
85719e5
Compare
9ac1093
to
0a73e43
Compare
c5642e2
to
34d57b1
Compare
공유해주신 피드백 반영하고 pr다시 오픈했습니다! 시간내어 피드백주셔서 감사드립니다! |
|
||
export const HighProgress: StoryObj<typeof meta> = { | ||
args: { | ||
...Default.args, |
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.
https://github.com/DaleStudy/leaderboard/pull/72/files#r1845802404
달레님 리뷰개선안인데요. meta에서 args를 선언해주면 매번 초기화를 안할 수 있어요!
const { | ||
easy: easyProblemsCount, | ||
medium: mediumProblemsCount, | ||
hard: hardProblemsCount, | ||
} = problemCounts; | ||
|
||
const solvedCounts = member.solvedProblems.reduce( | ||
(acc, problem) => { | ||
acc[problem.difficulty] = (acc[problem.difficulty] || 0) + 1; | ||
acc.total += 1; | ||
return acc; | ||
}, | ||
{ easy: 0, medium: 0, hard: 0, total: 0 }, | ||
); | ||
|
||
const { | ||
easy: easySolved, | ||
medium: mediumSolved, | ||
hard: hardSolved, | ||
total: totalSolved, | ||
} = solvedCounts; | ||
|
||
const easyProgress = `${easySolved}/${easyProblemsCount}`; | ||
const mediumProgress = `${mediumSolved}/${mediumProblemsCount}`; | ||
const hardProgress = `${hardSolved}/${hardProblemsCount}`; |
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.
저는 개인적으로 이 로직은 aside에서만 사용하기에 aside에 있어야한다고 생각해요.
왜냐하면 Progress에서 easyProgress, mediumProgress등은 다른 컴포넌트에서 사용하지 않기 때문에 Progress에서 관리할 필요가 없다고 생각합니다. sam님이 보시기엔 어떠신가요??
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.
피드백 감사합니다! 저는 member를 넘겨주고 aside에 다시 member를 위한 인터페이스를 만들고 또 prop으로 받아서 데이터를 정제해서 사용하는 것보단 member를 page 래밸에서 받아서 필요한 정보들을 내려주는게 더 간단하다고 생각했습니다. Progress 페이지에서 진행상황에 관련된 로직을 처리해주고 aside는 유저 프로필 정보들을 표출하는 것에 초점을 맞춰도 문맥에 어색하지 않다고 느껴집니다.
선재님 말씀대로 각각 컴포넌트들이 필요한 로직들을 전부 처리하는게 로직이 분리되고 progress 페이지가 간소화되고 프로젝트가 커진다면 분리가 필연적이라고 생각합니다! 다만 현재 프로젝트 요구사항 범위를 볼 때는 아직은 조금이라도 간단한 구현이 이득이라고 판단했습니다!
추가적으로 아까 테스트 작성의 간편함을 근거로 제시해서 로직을 옮기는 걸 추천해주셨는데 어떤 측면에서 테스트가 용이해지는 막상 코드를 작성하려다 보니 이해가 안됩니다..! 혹시 제가 놓치는게 있다면 피드백 부탁드리겠습니다!
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.
@SamTheKorean 님 정성스런 코멘트 답변 감사합니다.
저도 항상 컴포넌트 내부에서 데이터를 다룰지 여부를 많이 고민하는데요. 정답은 없는거 같더라구요... sam님께서 작성해주신 이유라면 저역시 동의합니다!
저의 의도는 find가 완료된 member자체를 props로 받아서 처리해보는건 어떨까요?
라는 질문의도였는데요.
type정의는 기존 api 타입을 prop로 받으면 되는 부분이며 테스트는 member 단일 목데이터를 추가하면 테스트가 용이하다고 생각해요.
테스트 항목은 문제 표기(current/total)을 member만 넣으면 잘 표기되는지를 확인하자였습니다. 그러면 정제되지 않는 데이터가 컴포넌트를 통해 출력을 테스트할 수 있다고 생각해요.
여기까지가 저의 의도였는데, 코멘트달면서 member.solvedProblem의 방대한 목데이터 어떻게 만들지?라고 생각드네요. 현재 sam님께서 작성한 방법이 옳다고 생각합니다!
수고하셨습니다!
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.
넵 말씀하신대로 type은 그대로 받으면 되는데 solvedProblem의 목데이터들을 만드는게 번거롭게 느껴지는 것 같아서 제차 질문 드렸습니다! 덕분에 설계에 대해서 다시 한 번 생각해볼 수 있었습니다! 시간내어 피드백 내어 주셔서 감사합니다!
export const problemCounts = problems.reduce( | ||
(acc, problem) => { | ||
acc[problem.difficulty] += 1; | ||
return acc; | ||
}, | ||
{ easy: 0, medium: 0, hard: 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.
👍
34d57b1
to
13e9c8b
Compare
13e9c8b
to
546f0cb
Compare
546f0cb
to
4a6a66c
Compare
4a6a66c
to
62cd576
Compare
62cd576
to
aa4d1ad
Compare
참고 사항
여러 곳곳 스타일에 손봐야할 곳이 많지만 데모를 위해 틀만 잡아놓았고 데이터 연결까지 완료한 뒤에 재방문하여 적용할 예정입니다!. 인터페이스 설계도 임의로 했는데 실제 훅과 연결하면서 리팩토링할 예정입니다.
데모 사진
데모 영상
Screen.Recording.2024-11-25.at.11.18.55.PM.mov
체크리스트