Skip to content
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

변경된 등급 이미지 적용 #151

Merged
merged 2 commits into from
Dec 23, 2024
Merged

변경된 등급 이미지 적용 #151

merged 2 commits into from
Dec 23, 2024

Conversation

DaleSeo
Copy link
Contributor

@DaleSeo DaleSeo commented Dec 20, 2024

변경된 6단계 등급에 대한 이미지를 카드와 사이드바 컴포넌트에 적용하였습니다. 추가로 카드와 사이드바 간에 중복 코드가 있길래 별도 이미지 컴포넌트로 뽑아내서 깔끔하게 정리해보았습니다. 자세한 내용은 인라인 코멘트 참고 바랍니다.

image

체크리스트

Comment on lines -102 to +135
const userName = faker.internet.userName();
const userName = faker.internet.username();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테스트를 실행했더니 다음과 같은 depreaction waring이 뜨고 있어서 조치하였습니다.

[@faker-js/faker]: faker.internet.userName() is deprecated since v9.1.0 and will be removed in v10.0.0. Please use faker.internet.username() instead.

@DaleSeo DaleSeo changed the title 새로운 등급 이미지 적용 변경된 등급 이미지 적용 Dec 21, 2024
> img {
width: 105px;
height: 128px;
object-fit: fill;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

object-fit의 기본값은 fill이기 때문에 GradeImage 컴포넌트로 가져오지 않았습니다.

Comment on lines -18 to -25
const imageTable = {
SEED: Seed,
SPROUT: Sprout,
LEAF: Sprout,
BRANCH: Sprout,
FRUIT: YoungTree,
TREE: LargeTree,
};
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제일 위에 등급 이미지를 import하는 부분과 여기에 있는 맵핑 로직이 Card 컴포넌트에도 있고 Sidebar 컴포넌트에도 있길래 GradeImage 컴포넌트로 뽑아내었습니다.

@@ -93,9 +81,7 @@ export default function Sidebar({
</section>

<section className={styles.currentStatus}>
<figure>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기에 사용된 <figure>는 별다른 역할이 없는 것 같아서 GradeImage 컴포넌트로 가져오지 않았습니다.

Copy link
Contributor Author

@DaleSeo DaleSeo Dec 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops 😓 알고보니 Chromatic의 UI Tests 결과를 보니 <figure>에 브라우저 디폴트 스타일시트가 먹고 있었네요. @SamTheKorean 님, 의도하신 것인지 확인 부탁드립니다. 의도하셨다면 부모 요소인 <section>의 스타일을 좀 조정해야겠네요.

Shot 2024-12-20 at 19 19 34

Shot 2024-12-20 at 19 22 27

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아닙니다! 의도한게 아닌데 figure에 스타일을 따로 줬어야했는데 놓쳤군요...! 이 부분에 어떻게 해결하면 될까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SamTheKorean 그럼 달라진 UI를 Accept 하도록 하겠습니다. 기존 UI와 피그마 디자인�을 대조해보니 <figure> 요소 때문에 위 아래로 불필요하게 16px의 공백이 더 들어있네요.

Shot 2024-12-21 at 20 52 06

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shot 2024-12-20 at 19 15 42

스토리북에서 grade prop을 정확히 입력해야되서 다른 등급의 카드를 보기가 어렵더라고요. 그래서 등급 별로 스토리를 나누었습니다.

Shot.2024-12-20.at.19.15.03.mp4

@DaleSeo DaleSeo marked this pull request as ready for review December 21, 2024 00:24
@DaleSeo DaleSeo requested a review from a team as a code owner December 21, 2024 00:24
grade: Grade.SEED,
width: 105,
height: 128,
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
},
argTypes: {
grade: {
options: [
Grade.SEED,
Grade.SPROUT,
Grade.LEAF,
Grade.BRANCH,
Grade.FRUIT,
Grade.TREE,
],
control: { type: "select" },
},
},

미팅에서 input으로 핸들링하는게 보기 좀 그렇다고 하셨는데, select로 핸들링하는 방법은 어떨까요?
storybook controls

Copy link
Contributor Author

@DaleSeo DaleSeo Dec 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 방법은 순수 자바스크립트 프로젝트에서는 유용한데요. 타입스크립트를 쓰는 프로젝트에서는 이상적인 접근이 아닌 것 같아요. 스토리북에 자동으로 grade의 argTypes를 추론할 수 있어야 하는데, 하필 grade가 enum 타입이라서 문자열로 잘못 추론되고 있어요. grade의 타입을 union으로 변경해주면 굳이 이렇게 스토리만을 위해서 argTypes을 따로 명시하고 관리하지 않아도 해결이 될텐데 어떻게 생각하세용?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오호 options의 타입이 any[] | undefined 로 추론되는군요..?
@DaleSeo님 코멘트보고 union타입으로 GradeImageProps의 grade타입을 유니온으로 변경해봤는데 동일하게 any[] | undefined로 추론되는걸 확인했어요.
그런점에서 타입추론이 되지않는 argTypes를 사용해야하는 의문점과 argTypes는 자바스크립트에서 유용하다는건 새롭게 깨닫게 됐어요!
저는 현재 상황에서 typesafe하게 사용하려면 각 grade에 따른 스토리를 작성해야한다고 생각해요.

그런데 여러개의 컴포넌트를 합성하여 새로운 컴포넌트를 만들어 스토리를 만드는 경우는 다를거 같아요.
각 컴포넌트의 타입에 따른 경우의수와 다른 컴포넌트와 조합이 됐을 때 경우의수는 방대해지기에 타입추론이 되지 않는 argTypes를 사용해야하는 날은 올거 같다는 개인적인 의견입니다.😶

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 유니온이라면 혹시 배열로 나열하는것을 의미하는 걸 까요?
그에 대안이라면 Object.keys를 사용하는건 어떨까요?

argTypes: {
    grade: {
      control: "select",
      options: Object.keys(Grade),
    },
  },

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그런데 여러개의 컴포넌트를 합성하여 새로운 컴포넌트를 만들어 스토리를 만드는 경우는 다를거 같아요.
각 컴포넌트의 타입에 따른 경우의수와 다른 컴포넌트와 조합이 됐을 때 경우의수는 방대해지기에 타입추론이 되지 않는 argTypes를 사용해야하는 날은 올거 같다는 개인적인 의견입니다.😶

네네, 충분히 일리가 있는 의견이십니다. 그런 날이 오면 다시 얘기해보시죠 😉

아 유니온이라면 혹시 배열로 나열하는것을 의미하는 걸 까요?
그에 대안이라면 Object.keys를 사용하는건 어떨까요?

에궁... 제 설명이 제대로 전달이 안 된 것 같습니다. 요점은 스토리북이 추론해주는 argTypes를 덮어쓰는 것은 가급적 피하는 것이 좋다는 것입니다. 덮어쓰는 순간 컴포넌트 함수의 입력 타입과 스토리의 argTypes가 일치된 상태로 유지해야하는 오버헤드가 발생하거든요.

원래 티켓의 목표에서 벗어나는 주제로 PR 쓰레드가 너무 길어지고 있는 것 같아서 본 PR은 병합을 하도록 할께요. 그 다음, 제가 이상적이라고 생각하는 방식으로 코드를 수정해서 별도의 PR을 한번 올리고 리뷰 요청을 드리겠습니다.

Copy link
Contributor Author

@DaleSeo DaleSeo Dec 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위 논의와 관련하여 티켓 #157 을 생성하였습니다.

Copy link
Contributor

@SamTheKorean SamTheKorean left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변경된 등급을 적용해주셔서 감사합니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

리더보드 UI에 변경된 등급 체계 적용
3 participants