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

[Feature] SearchBar 컴포넌트 구현 #83

Merged
merged 10 commits into from
Jul 26, 2024
Merged

Conversation

SeieunYoo
Copy link
Collaborator

@SeieunYoo SeieunYoo commented Jul 17, 2024

🎉 변경 사항

  • 서치바 컴포넌트를 구현합니다.
  1. useFormControl 훅 추가
  • 텍스트필드랑 비슷한 부분이 많아서 Base 컴포넌트를 만들까,,훅을 만들까,, 고민을 하다가 텍필은 textarea 이기도 하고 추후에다른 input 컴포넌트가 생길 수도 있을 것 같아서 value 와 variant 를 핸들링 할 수 있는 useFormControl 훅을 만들어봐씀당

  • 기본 variant 타입은 "default" | "typing" | "typed" 이고 컴포넌트에서 base variant type 을 확장해서 쓸 수 있도록 지원합니다.

type CustomVariantType = BaseVariantType | "disabled";

const {
      value,
      variant,
      setVariant,
      handleChange,
      handleBlur,
      handleFocus,
    } = useFormControl<CustomVariantType>({props });

🚩 관련 이슈

#84

🙏 여기는 꼭 봐주세요!

Copy link
Contributor

Copy link
Member

@hamo-o hamo-o left a comment

Choose a reason for hiding this comment

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

수고하셨어요!!
키보드 입력에 따라 값이 계속해서 달라지는 SearchBar 같은 경우에는 제어 컴포넌트와 비제어 컴포넌트 양쪽으로 사용될 수 있을 것 같은데요! (자동완성 지원 여부나 유효성 검사 여부에 따라..) 이러한 경우를 대비해서 value 값의 존재여부로 제어되고 있는지 체크하고 그렇지 않으면 아예 상태 업데이트를 막는것도 괜찮을 것 같아요.
그런데 이게 다른 컴포넌트에서도 마찬가지일 것 같은데.. 제가 정확한 개념을 몰라서 지금까지 이 점을 고려 못한 것 같네요....?! 텍스트필드에서도 고려해야 할 부분인 것 같은데 다른 분들 어떻게 생각하시나용
@eugene028 @ghdtjgus76

packages/wow-ui/src/components/SearchBar/index.tsx Outdated Show resolved Hide resolved
packages/wow-ui/src/components/SearchBar/index.tsx Outdated Show resolved Hide resolved
Copy link
Contributor

@SeieunYoo
Copy link
Collaborator Author

찾아보니 다른 라이브러리도 value 에 따라 isControlled 라는 불리언으로 controlled 상태인지 확인하는 로직이 들어가있는 것 같아용
value 값이 들어가있지 않으면(=비제어 컴포넌트면) onChange 같은 함수에 대한 처리가 필요없고 제어 컴포넌트라면 내부 value 상태에 대한 업데이트는 필요하지 않을 것 같네요 🤔

Copy link
Contributor

Copy link
Member

@hamo-o hamo-o 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
Collaborator

@ghdtjgus76 ghdtjgus76 left a comment

Choose a reason for hiding this comment

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

굿굿 수고하셨어요!
근데 해당 컴포넌트명이 SearchBar보다는 input이 조금 더 어울릴 거 같긴 하네요..

* @param {(value: string) => void} [onChange] 외부 활성 상태가 변경될 때 호출될 콜백 함수.
* @param {() => void} [onBlur] 서치바가 포커스를 잃을 때 호출될 콜백 함수.
* @param {() => void} [onFocus] 서치바가 포커스됐을 때 호출될 콜백 함수.
* @param {InputHTMLAttributes<HTMLInputElement>} [inputProps] 서치바에 전달할 추가 textarea 속성.
Copy link
Collaborator

Choose a reason for hiding this comment

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

p5;
textarea 부분만 수정 부탁드려요~

Comment on lines 106 to 107
onFocus={handleFocus}
{...rest}
Copy link
Collaborator

Choose a reason for hiding this comment

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

p3;
rest 부분이 input이 아니라 가장 바깥에 있는 Flex에 적용되어야 하지 않을까 합니다,,

Copy link
Collaborator

@eugene028 eugene028 left a comment

Choose a reason for hiding this comment

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

수고하셨어요! 리뷰 한번만 확인 부탁드림동~ 😃

const [variant, setVariant] = useState<VariantType | BaseVariantType>(
"default"
);

Copy link
Collaborator

Choose a reason for hiding this comment

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

P3;
제어 컴포넌트로 조금 더 활용하기 위해서는 외부에서 새로운 valueProp이 들어와 props가 변경되었을때 이를 value라는 state에 반영해줄 수 있어야 할 것 같아요!

Suggested change
useEffect(() => {
if (valueProp !== undefined) {
setValue(valueProp);
}
}, [valueProp]);

그래야 요런 것도 가능할것 같습니다용
Jul-24-2024 16-18-29

Copy link
Collaborator Author

@SeieunYoo SeieunYoo Jul 24, 2024

Choose a reason for hiding this comment

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

비제어/제어 에 따라 비제어일 때는 내부 상태 관리 value 값으로, 제어일 때는 외부에서 전달받은 value 값으로만 제어되도록 수정해두면서 요 부분도 해결되었습니다! be6712e

Copy link
Collaborator

Choose a reason for hiding this comment

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

좋아요옹 🥰

@@ -0,0 +1,144 @@
import { fireEvent, render, waitFor } from "@testing-library/react";
Copy link
Collaborator

Choose a reason for hiding this comment

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

P5;
rtl에서 fireEvent보다는 userEvent를 추천하고 있어서 조금 더 정확한 테스트를 위해서는 userEvent로 마이그레이션 하는 것을 추천드려용 >.<

관련 설명 링크

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

굿굿 userEvent 로 마이그레이션 해두었어요~!

Copy link
Contributor

Copy link
Contributor

@SeieunYoo
Copy link
Collaborator Author

근데 해당 컴포넌트명이 SearchBar보다는 input이 조금 더 어울릴 거 같긴 하네요..

맞아욥 왼쪽이나 오른쪽에 텍스트나 다른 아이콘 같은 옵션이 올 수 있도록 열린다면 Input 도 좋을 것 같아서 디자이너분께 여쭈어볼게요!

코드 리뷰들은 반영해두었습니당~! @eugene028 @ghdtjgus76

@ghdtjgus76 ghdtjgus76 linked an issue Jul 26, 2024 that may be closed by this pull request
3 tasks
@SeieunYoo
Copy link
Collaborator Author

추가적으로 스펙이 수정된다면 다른 PR 에서 반영 해볼게요 요건 머지하겠습니다!

@SeieunYoo SeieunYoo merged commit cbfa7b6 into main Jul 26, 2024
3 checks passed
@SeieunYoo SeieunYoo deleted the feature/search-bar-component branch July 26, 2024 10:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] SearchBar 컴포넌트 구현
4 participants