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: 마이리스트, 콜라보리스트 페이지 팔로우 기능 구현 #26

Merged
merged 19 commits into from
Feb 15, 2024

Conversation

ParkSohyunee
Copy link
Contributor

@ParkSohyunee ParkSohyunee commented Feb 12, 2024

개요

  • 마이리스트, 콜라보리스트 페이지에서 팔로우/팔로잉 기능을 구현했습니다.

작업 사항

  • 사용자 프로필에서 [팔로우] 버튼을 클릭하면 해당 사용자를 팔로잉하게 됩니다.
  • 이미 팔로잉한 사용자라면 [팔로우 취소] 버튼이 보이고, 버튼을 클릭하면 해당 사용자 팔로우를 취소하게 됩니다.
  • 로그인한 상태가 아니라면 [팔로우] 버튼만 보이고, 버튼을 클릭하면 로그인 페이지로 이동하게 됩니다. (+. 토스트 메세지)
  • 위의 3가지 상태에 따른 프로필 상태 UI 반영
  • 팔로잉 여부에 따른 본인 프로필, 팔로우 한 사용자 프로필 count update
  • 팔로우 요청 제한 설정(최대 1천명) (*팔로워는 제한 x) (+. 토스트 메세지)
  • 본인 리스트 접근 시에는 [팔로우] 버튼 대신 설정(마이페이지 이동) 아이콘이 보임
  • 리스트 목록 중 아이템 리스폰스 타입 수정 (ranking -> rank)

참고 사항 (optional)

  • 리스트 조회 페이지에서 사용자 프로필 조회시, 팔로우된 상태 여부를 리스폰스로 받아옵니다.
    ㄴ 현재 팔로우 요청이 정상적으로 들어간 이후에도 사용자에게 반영되지 않은 상태라서, 백엔드의 수정이 필요한 부분입니다. (완료)
    ㄴ 내일까지 수정 요청 드릴 예정이며, 이후 스크린샷 첨부하도록 하겠습니다.

스크린샷

  • 내일 api 수정 후 반영하여 스크린샷 첨부하도록 하겠습니다. 📸 (첨부 완료)
    Feb-14-2024 11-23-09

리뷰어에게

  • 위의 참고사항 내용 확인 및 반영 후에 최종 merge 예정입니다. (완료)
  • 코드 자체는 큰 수정이 없을 것 같아서 PR 먼저 올립니다. 리뷰는 시간나실 때 천천히 부탁드립니다. 감사합니다. ❤️‍🔥

@ParkSohyunee ParkSohyunee added Feat 구현 Design UI 수정 Style 코드 스타일 변경 labels Feb 12, 2024
@ParkSohyunee ParkSohyunee self-assigned this Feb 12, 2024
Copy link

vercel bot commented Feb 12, 2024

@ParkSohyunee is attempting to deploy a commit to the Eujin Ahn's projects Team on Vercel.

A member of the Team first needs to authorize it.

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.

소현님께서 항상 먼저 구현해주셔서 저는 잘 짜여진 코드로 기능 구현을 할 수 있어서 너무 행복해요...👀🩷 고생하셨습니다..! !👍LGTM!👍

items: ListItemsType[];
collaborators: CollaboratorType[];
items: ItemType[];
collaborators: UserProfileType[];
ownerNickname: string;
}
Copy link
Contributor Author

@ParkSohyunee ParkSohyunee Feb 14, 2024

Choose a reason for hiding this comment

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

@Nahyun-Kang
나현님, dev branch에서 listType 수정에 따른 CI/CD 배포 오류가 발생하여 해당 PR에서 Footer 컴포넌트의 타입을 위와 같이 수정하였습니다. 참고 부탁드립니다!!

+. 나현님, 이부분 외에도 관련 타입 에러가 발생하여 더이상 수정하지 않고 merge 진행하려고 합니다, 참고 부탁드립니다!!

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.

소현님, 역시나 배우는게 많은 즐겁고 감사한 코드리뷰 시간이었습니다!
덕분에 주요한 기능인 팔로우/팔로우취소가 멋지게 구현된 것 같아요😻👍

Comment on lines +28 to +32
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [QUERY_KEYS.userOne, userId],
});
},
Copy link
Contributor

Choose a reason for hiding this comment

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

이렇게 다시 불러올 수 있는거군요...!
와 저 프로필 설정에서 '저장' 버튼 누른다음에 다시 fetch 해올때 딱 이 방법이 필요했어요! 지금은 수정사항 발생시 true로 바뀌었던 'isDirty'를 '저장' 버튼을 누르면 false로 바꾸는 식으로 구현했거든요! 당장 코드 바꾸러 갑니다 🙇‍♀️

Comment on lines 85 to 89
<span className={styles.count}>{data?.followingCount.toLocaleString('ko-KR')}</span>
<span>팔로잉</span>
</div>
<div className={styles.text} onClick={onClickMoveToPage(`/user/${userId}/followers`)}>
<span className={styles.count}>{data?.followerCount}</span>
<span className={styles.count}>{data?.followerCount.toLocaleString('ko-KR')}</span>
Copy link
Contributor

Choose a reason for hiding this comment

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

소현님, 저희가 숫자의 경우 축약형을 사용하기로 했는데, 공용정책 중 '숫자'를 IA에만 적어두고 피그마로 안 옮겼네요! 소현님 덕분에 발견하여, 급하게 추가했습니다!

Screenshot 2024-02-14 at 19 51 47

팔로워도 축약형으로 나타내고, hover시 정확한 숫자 나오게 하거나 '팔로잉/팔로워' 목록에서 정확한 숫자 나오게 하는 식은 어떨까요??

+) toLocaleString('ko-KR') 얻어갑니다 👍🙇‍♀️

Copy link
Contributor Author

@ParkSohyunee ParkSohyunee Feb 14, 2024

Choose a reason for hiding this comment

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

그렇네요 서영님!! 정책대로 축약형으로 나타내는 것으로 수정하겠습니다! (+.공통 유틸로 분리해 놓겠습니다.)

+. 생각해보니 천이상 ~ 만, 십만, 백만까지가 축약이 많이된 것 같아서 다음과 같이 변경해도 괜찮을 것 같은데.. 서영님 생각은 어떠신가요?

  • 백 이하 : 그대로 ~ 999
  • 1만 이하: 그대로 1,000 ~ 9,999
  • 만 이상: 축양형 10k, 10.1k 10.8k 15k ~ (버림x)
  • 백만 이상: 축약형 1M, 1.1M ~ (버림x)

Copy link
Contributor

@seoyoung-min seoyoung-min Feb 14, 2024

Choose a reason for hiding this comment

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

[KO]
천 이하: 0~9,999
1만 이상: 1만, 11.1만, 510만, ~ (소숫점 한 자리까지 노출 - 천 단위의 버림)

[ENG]
천 이하: 0~9,999
1만 이상: 10.5k, 111k, / 5.1M, ~ (소숫점 한 자리까지 노출)

K: 1,000
M:1,000,000

@@ -43,7 +43,7 @@ export default function FollowButton({ isFollowed, userId }: FollowButtonProps)
},
onError: (error: AxiosError) => {
if (error.response?.status === 401) {
toasting({ type: 'warning', txt: '로그인이 필요한 기능입니다.' });
toasting({ type: 'warning', txt: '로그인이 필요해요.' });
Copy link
Contributor

Choose a reason for hiding this comment

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

토스트 메시지 상수파일(src/lib/constants/toastMessage.ts) 이 있어서, 그 파일에 넣고 꺼내쓰면 좋을 것 같아요~!

Comment on lines 62 to 72
const handleFollowUser = (isFollowed: boolean) => () => {
if (userMeData && userMeData?.followingCount >= MAX_FOLLOWING) {
toasting({ type: 'warning', txt: '최대 1,000명까지 팔로우할 수 있어요.' });
return;
}

const handleFollowUser = () => {
// 1. follow 하는 api 요청 + update
if (isFollowed) {
deleteFollowingUser.mutate();
} else {
followUser.mutate();
}
Copy link
Contributor

@seoyoung-min seoyoung-min Feb 14, 2024

Choose a reason for hiding this comment

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

혹시 팔로잉 1000명이지만 '팔로우 취소' 버튼은 클릭할 수 있게 하려면,
코드 순서가 아래와 같이 바뀌는게 맞을까요??

 if (isFollowed) {
      deleteFollowingUser.mutate();
    } else {
        if (userMeData && userMeData?.followingCount >= MAX_FOLLOWING) {
          toasting({ type: 'warning', txt: '최대 1,000명까지 팔로우할 수 있어요.' });
          return;
         }
      followUser.mutate();
    }

Copy link
Contributor Author

Choose a reason for hiding this comment

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

서영님! 그렇네요!! 반대의 경우는 생각하지 못했네요 ㅋㅋㅋ🤣 상세하게 확인해 주셔서 감사합니다.
작성해주신 코드 바탕으로 수정하겠습니다!! 😊

Comment on lines +8 to +19
if (lang === 'ko') {
const formattedNumKo = Math.trunc((num / unit) * 10) / 10;
return formattedNumKo + '만';
} else {
const formattedNumEn = Math.trunc((num / unit) * 10);
if (formattedNumEn < 1000) {
return formattedNumEn + 'K';
} else {
const formattedMillion = Math.trunc((formattedNumEn / 1000) * 10) / 10;
return formattedMillion + 'M';
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

와,,감사합니다🙇‍♀️👏

@ParkSohyunee ParkSohyunee merged commit ca45024 into 8-Sprinters:dev Feb 15, 2024
0 of 2 checks passed
@ParkSohyunee ParkSohyunee deleted the feature/feed-follow branch August 3, 2024 02:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Design UI 수정 Feat 구현 Style 코드 스타일 변경
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants