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 : 리스트 생성 페이지 구현 및 API 연결 #16

Merged
merged 7 commits into from
Feb 4, 2024
Merged

Feat : 리스트 생성 페이지 구현 및 API 연결 #16

merged 7 commits into from
Feb 4, 2024

Conversation

Eugene-A-01
Copy link
Contributor

@Eugene-A-01 Eugene-A-01 commented Feb 4, 2024

개요

  • 리스트 생성 페이지 리액트쿼리 적용만 제외하고 모두 완료하였습니다.
  • 컴포넌트 분리를 완료하였습니다.
  • API 연결도 완료하였습니다.

작업 사항

  • 리스트 생성 페이지 컴포넌트 분리
  • 콜라보레이터 검색을 위한 전체 유저 조회도 mock이 아닌 API로 연결
  • 카테고리도 API로 조회
  • 리스트 생성 API 연결 완료 (리액트 쿼리 미적용 상태)
  • 이 리스트 템플릿으로 바로 리스트 생성하기 기능 구현
  • 이미지 presigned url 요청을 위한 리액트 훅폼 데이터 분리

스크린샷

image image

리뷰어에게

  • 1차 MVP 배포를 위해 merge되어야해서 먼저 approve 부탁드립니다!
  • 시간여유가 있으실때 천천히 코드리뷰 부탁드려요 :)
  • 코드가 좀 많습니다ㅠㅠ 개선할점이 많을텐데 주저없이 조언 많이 해주세요!!

Copy link
Contributor

@seoyoung-min seoyoung-min left a comment

Choose a reason for hiding this comment

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

유진님,,, 300자 넘는 코드의 컴포넌트화를 기깔나게 하셨군요,,,!
보면서 이렇게 컴포넌트화 하는 거구나 100번 깨달았습니다!

제거 유진님꺼 처럼 다 갈아엎고 싶지만, 시간 관계상 마지막 주차쯤 리팩토링 시간 있기를 바라며 넘겨야겠어요ㅠㅠ

너무너무 수고 많으셨습니다!!


export const container = style({
display: 'flex',
flexDirection: 'row',
Copy link
Contributor

Choose a reason for hiding this comment

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

flex Direction default값이 'row'라 제외해도 좋을 것 같습니다!

});

export const button = style({
width: '',
Copy link
Contributor

Choose a reason for hiding this comment

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

빈값 발견! (혹시 의미가 있는걸까요??)

Comment on lines +11 to +19
/**
* ButtonSelector 컴포넌트:
* 사용자가 좌우스크롤로 이동하며 클릭을 통해
* 카테고리를 선택할 수 있는 컴포넌트
*
* @param list - 버튼으로 보여줄 목록
* @param onClick - 버튼을 클릭했을때 동작시킬 함수
* @param defaultValue - 기본으로 선택되어있는 요소
*/
Copy link
Contributor

Choose a reason for hiding this comment

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

헉 까먹을뻔 했어요!!
설명이 있으니 너무 좋네요! 감사합니다🙇‍♀️💗

width: '50px',
height: '50px',

appearance: 'none',
Copy link
Contributor

Choose a reason for hiding this comment

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

appearance란 CSS 속성이 있는줄도 몰랐네요!! 배워갑니다💗


export const headerNextButton = style({
fontSize: '1.6rem',
color: '#8d8d8d',
Copy link
Contributor

Choose a reason for hiding this comment

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

피그마에 있는 색 중 #AFB1B6을 쓰면 어떨까요??

또, 비활성화 상태에서는 호버해도 마우스 모양이 클릭으로 변하지 않도록
cursor: 'default', 속성 추가해도 좋을 것 같습니다! :)

Comment on lines +41 to +61
useEffect(() => {
const closeDropdown = (event: MouseEvent) => {
if (
dropdownRef.current &&
inputRef.current &&
listRef.current &&
!dropdownRef.current.contains(event.target as Node) &&
!inputRef.current.contains(event.target as Node) &&
!listRef.current.contains(event.target as Node)
) {
setIsDropDownOpen(false);
}
};
document.addEventListener('click', closeDropdown);

fetchData();

return () => {
document.removeEventListener('click', closeDropdown);
};
}, []);
Copy link
Contributor

Choose a reason for hiding this comment

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

여기는 useOnClickOutside 훅으로 줄여볼 수 있을 것도 같은데, 테스트를 안해봤네요! 다음에 한 번 시도해보겠습니다~!

function MemberSelector({ placeholder, members = [], fetchData, onClickAdd, onClickDelete }: MemberSelectorProps) {
const [input, setInput] = useState('');
const [selectedList, setSelectedList] = useState<UserProfileType[]>([]);
const [isDropDownOpen, setIsDropDownOpen] = useState(false);
Copy link
Contributor

Choose a reason for hiding this comment

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

별 차이는 없겠지만, useBooleanOutput 훅을 사용해 볼 수 있을 것 같아요!

Suggested change
const [isDropDownOpen, setIsDropDownOpen] = useState(false);
const { handleSetOn, handleSetOff, isOn } = useBooleanOutput(false)
//...

Comment on lines +10 to +15
* Section 컴포넌트:
* 리액트 생성 페이지의 영역을 나누는 레이아웃용 컴포넌트
*
* @param props.title - 영역의 이름
* @param props.isRequired - 필수 입력 영역, 빨간 *가 표시된다.
* @param props.children - 영역 안에 포함될 tsx 내용
Copy link
Contributor

Choose a reason for hiding this comment

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

오오 너무 좋은데요?!?

import * as styles from './SimpleInput.css';

interface SimpleInputProps {
type: 'simple' | 'long';
Copy link
Contributor

Choose a reason for hiding this comment

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

지극히 개인적인 의견을 남겨보자면,
컴포넌트 이름이 SimpleInput이다 보니, 'input' | 'textarea'로 구분한다면, 두 타입의 차이가 잘 드러날 것 같다는 생각이 듭니다!!

Comment on lines +9 to +17
rules: {
required?: {
errorMessage: string;
};
maxLength?: {
length: number;
errorMessage: string;
};
};
Copy link
Contributor

Choose a reason for hiding this comment

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

룰은 string으로 받고,
string에 따라 formInputValidation 상수 파일에서 빼서 쓰는 것도 좋을 것 같아요!

ex.

 //import
 import * as inputRules from '@/lib/constants/formInputValidation'
  //타입
  rules: string 
  //적용
  <textarea {...register(name, {required: inputRules[rules]}/>

@seoyoung-min
Copy link
Contributor

@Eugene-A-01
Screenshot 2024-02-04 at 22 16 25

현재 파일 이름인 globalStyles가 아니라 GlobalStyles로 되어있어 빌드에러가 생긴것같습니다!
GlobalStyles로 파일명이 바뀌거나, globalStyles로 임포트 해야할 것 같습니당!!

Copy link
Contributor

@Nahyun-Kang Nahyun-Kang left a comment

Choose a reason for hiding this comment

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

이것이 리액트 훅 폼이다🔥 리액트 훅 폼 이렇게까지 써 본 적 없는데 정말 잘 쓰시는게 느껴져요...🫢 코드량도 엄청 많은데 깔끔하게 잘 정돈되어 있네요..짱짱 👍
사정이 있어 지금 자세하게 코드 리뷰는 못 드리지만 내일 꼼꼼히 읽어보겠습니다💕

@ParkSohyunee
Copy link
Contributor

유진님 많은 부분 구현하시느라 너무 고생많으셨습니다!! 😭👍
시간 관계상 자세히 확인하지 못하고 approve 먼저 남겼습니다!! 나중에 천천히 봐야할 것 같습니당..🥹 감사합니다.🥰

@Eugene-A-01 Eugene-A-01 merged commit 62ae89d into 8-Sprinters:dev Feb 4, 2024
1 check passed
@Eugene-A-01 Eugene-A-01 deleted the feature/create-list-page branch April 20, 2024 12:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feat 구현
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants