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

[Feat] Button 컴포넌트 구현 #162

Closed
wants to merge 3 commits into from
Closed

[Feat] Button 컴포넌트 구현 #162

wants to merge 3 commits into from

Conversation

smilehae
Copy link
Member

@smilehae smilehae commented Jul 19, 2022

📌 PR 설명

디자인시스템을 적용한 + 확장성이 있는 버튼 컴포넌트를 구현했습니다.

  • 7.13 컴포넌트 회의 내용을 기반으로, 사용성을 강화하는 방향으로 변수명을 일부 수정하였습니다.
  • CheQuiz 프로젝트에서 사용하는 버튼이 buttonlink 가 있어, 양쪽 모두 사용할 수 있도록 컴포넌트를 별도 정의하였습니다.
  • DX를 위해, 약간의 값을 넣으면 적절한 사이즈 & 테마로 설정해주는 strict 버전과, 개발자가 상세히 설정할 수 있는 custom 버전 2개를 구현해 두었습니다.
  • strict 버전은 colorTheme, borderTheme size disable 을 받습니다.
    • 색상에 맞는 배경 & 보더 & 글자색 & hover 색이 자동 설정됩니다.

만든 모습 미리 보기

image

  • 해당 모습은 /test/design 으로 들어가시면 보실 수 있습니다.
  • 스토리북 도입이 확정되지 않았던 것 같아, 정환님과 회의 후 일단 이렇게 관련 페이지를 만들기로 하였습니다. 스토리북 도입 시, 해당 페이지 제거 예정입니다.

💻 요구 사항과 구현 내용

03c7b3b 기본 버튼 시스템을 구현했습니다.
029fec6 구현한 버튼 관련 테스트 화면을 제작했습니다.
dea2c5b Link로도 버튼과 같은 스타일로 동작하도록 추가했습니다.

✔️ PR 포인트 & 궁금한 점

@smilehae smilehae self-assigned this Jul 19, 2022
@smilehae smilehae changed the title [feat] Button 컴포넌트 구현 [Feat] Button 컴포넌트 구현 Jul 19, 2022
Copy link
Collaborator

@loopy-dev loopy-dev left a comment

Choose a reason for hiding this comment

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

미해님 고생하셨습니다. 아래 드린 리뷰 사항은 당장 반영할 필요는 없고, 앞으로 리팩토링 하면서 반영하면 좋을 듯 하여 우선 approve 드립니다. :)

cf. 인수님이랑 함께 봤습니다.

} from '@/foundations/colors';
import { BORDER_RADIUS_STYLE, BORDER_STYLE } from '@/foundations/border';

interface ButtonProps {
Copy link
Collaborator

Choose a reason for hiding this comment

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

p2) 바뀐 rule에 의하면 interface Props { 로 이름을 붙여줘야 할 것 같은데 어떠신가요??

Copy link
Member Author

Choose a reason for hiding this comment

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

아 그렇네요..! 리뷰 받기 전에 바꾼다는게 계속되는 야근으로 바꾸지 못했습니다 ㅠㅠ 바꿔둘게요!! 감사합니다

Comment on lines +18 to +22
const backgroundMapper = {
brand: BRAND_COLOR,
primary: PRIMARY,
secondary: SECONDARY,
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

p2) 현재는 brand, primary, secondary 프로퍼티를 이용하여 객체를 만드셨는데, brand 환경에서 사용할 기본 컬러와 hover 컬러를 묶어서 하나의 객체로 만들고, 같은 방법으로 다른 환경에서 사용 가능한 컬러를 묶어서 객체로 만드는 방법을 생각해 보았는데 어떠실까용??

Copy link
Member Author

Choose a reason for hiding this comment

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

제가 이해한 바로는, 객체끼리 묶을 때 현재 배경색 / hover색 // 이런 식으로 묶인 상태인데 brand/primary 등 theme 기준으로 나누는 것에 대한 의견인 것으로 이해했습니다..! 맞을까요? 이전 코드를 다시 보니까 한눈에 들어오기 어려운 부분인 것 같네요 ㅠㅠ 준혁님이 말씀하신 방법을 포함해서 다양하게 고민해보겠습니다!

Comment on lines +47 to +48
border: ${BORDER_STYLE} ${GRAY_800};
border-style: ${({ borderTheme }) => borderTheme};
Copy link
Collaborator

Choose a reason for hiding this comment

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

p3) 현재 하나는 리터럴, 하나는 함수형으로 변수에 접근을 해서 다소 깨끗하다는 느낌이 들지는 않으나, 오브젝트형으로 style 컴포넌트를 작성한다면, 해결될 문제일 것 같습니다. :)

Comment on lines +66 to +76
interface CustomButtonProps {
width?: string;
backgroundColor?: string;
hoverBackgroundColor?: string;
hoverTextColor?: string;

color?: string;
borderTheme?: 'none' | 'dashed'; // 추후 dashed 추가될 수 있음. 기본 solid
isSquare?: boolean;
disable?: boolean;
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

p2) 현재 Button과 CustomButton, 그리고 LinkButton 세 가지 컴포넌트를 정의해 주셨는데, 제 개인적인 의견으로는 Button 컴포넌트 하나만 있으면 될 것 같아요.

  • 일단, 링크 버튼 같은 경우는
<Button>
  <Link to="/">바로가기</Link>
</Button>

형식 처럼 children을 받아서 작성할 수 있을 것 같고,

  • CustomButton의 경우, 개발자에게 너무 많은 자율성을 주게 된다면, 디자인 적으로 오히려 통일감을 해칠 수 있다는 생각이 들어요. 필요한 경우가 더 많이 생긴다면, 그 때 커스텀 버튼을 기존 버튼에서 style을 extends 하는 방향으로 작성해 보는 것도 좋을 것 같아요.

Copy link
Member Author

Choose a reason for hiding this comment

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

이 부분 구현할 때는, 제가 버튼 구현할 때 기존 CheQuiz에 있는 모든 버튼 모양을 반영하지 않았어서 custom을 두었었습니다. 저도 준혁님 의견에 동의합니다! customButton은 제거하고, 조금 정돈된 공통 버튼 스타일을 추가해보겠습니다.

Comment on lines +147 to +148
opacity: ${({ disable }) => (disable ? `0.8` : `1`)};
cursor: ${({ disable }) => (disable ? `not-allowed` : `pointer`)};
Copy link
Collaborator

Choose a reason for hiding this comment

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

p2) 해당 프로퍼티들이 각 컴포넌트에서 모두 확인할 수 있는데, 이 부분을 공통적인 스타일로 빼면 어떨까요?

const style = css`
  opacity: ${({ disable }) => (disable ? `0.8` : `1`)};
  cursor: ${({ disable }) => (disable ? `not-allowed` : `pointer`)};
`

하는 방식은 어떨까요?

이런 방식으로 사용할 경우, 다음과 같이 사용할 수 있어요.
참고

Copy link
Member Author

@smilehae smilehae Sep 11, 2022

Choose a reason for hiding this comment

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

보내주신 링크 봤는데, 정말 깔끔하고 이해하기 편하네요....! 역시 준혁님 팀 👍 이 코드를 보고 제 코드를 보니까 수정해야 할 부분이 많이 보이는 것 같아요.. 전반적으로 준혁님의 리뷰의 방향성 & 내용을 보니까 수정해야 할 부분을 많이 알 수 있었습니다. DX 부분을 많이 개선해보도록 할게요! 링크 감사합니다 + 추석 때 일이 있어 답변이 늦어졌습니다 ㅠㅠ 리팩토링 때 반영될 부분인 것 같아 그때까지 느리지만 더 쓰기 좋게 고쳐볼게요..!

Copy link
Collaborator

@chmini chmini left a comment

Choose a reason for hiding this comment

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

저도 일단 확인했습니다!
리팩터링 천천히 진행하면서 한 번 고쳐보는 걸로 해요 :)

Copy link
Member

@padd60 padd60 left a comment

Choose a reason for hiding this comment

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

고생하셨습니다. 저도 다른분들의 리뷰 이외에는 이견이 없습니다. 야근 힘내시고 ... 파이팅해봐요 ㅎㅎ

@smilehae smilehae closed this Sep 18, 2022
@chmini chmini deleted the feature/155 branch November 2, 2022 03:54
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.

[Feat] Button 컴포넌트 구현
4 participants