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

[SP2] 블로그 드롭다운 및 무한스크롤 #244

Merged
merged 30 commits into from
Oct 28, 2023

Conversation

f0rever0
Copy link
Contributor

@f0rever0 f0rever0 commented Oct 28, 2023

Summary

블로그 드롭다운에 API를 연결하고, 무한스크롤을 구현했습니다.
그리고 새로고침 시 드롭다운 데이터가 날라가는걸 막기 위해 useStorage훅을 사용해 sessionStorage에 값을 저장합니다.
sessionStorage를 사용한 이유는 브라우저를 닫으면 정보가 없어져야하기 때문입니다!

Screenshot

[sessionStorage에 드롭다운 값 저장]
image

Comment

구현 과정에서 드롭다운의 스타일과 파라미터 타입을 변경했습니다.
BlogPost, BlogPostList 컴포넌트의 스타일도 수정하였습니다.

이후 작업할 내용은 다음과 같습니다.

  1. 새로고침 시 무한스크롤 유지
  2. 플그에 솝티클 등록하기에 연결되어있는 공홈 링크 수정
  3. 컨텐츠 없을 때 보여주는 디자인
  4. baseURL dev -> main URL 로 바꾸기

@f0rever0 f0rever0 self-assigned this Oct 28, 2023
Comment on lines +22 to +28
'blogfiles.pstatic.net',
'dthumb-phinf.pstatic.net',
'postfiles.pstatic.net',
'images.velog.io',
'media.disquiet.io',
'scontent-ssn1-1.xx.fbcdn.net',
'storep-phinf.pstatic.net',
Copy link
Contributor Author

Choose a reason for hiding this comment

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

이미지 경로입니다.
논의한 것 처럼 서버에서 S3 에 이미지를 올리고 해당 url을 전달받는 식으로 변경하면 좋을 것 같아요!

Comment on lines 9 to 11
display: flex;
flex-direction: column;
row-gap: 50px;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

footer를 항상 하단에 고정하기 위해 전체 레이아웃 스타일을 변경했습니다.

Comment on lines 9 to +11
baseLabel: string;
selectedValue: T;
setSelectedValue: React.Dispatch<React.SetStateAction<T>>;
setSelectedValue: (newValue: T) => void;
Copy link
Contributor Author

Choose a reason for hiding this comment

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

드롭다운 값은 항상 sessionStorage에 저장하기 때문에, useStorage hook에서 사용하는 타입으로 바꿨습니다!

cursor: pointer;
position: relative;
width: 110px;
width: ${({ selectedValue }) => (selectedValue === 'ANDROID' ? '132px' : '110px')};
Copy link
Contributor Author

Choose a reason for hiding this comment

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

안드로이드 값일때 width가 달라져야합니다.

Comment on lines +3 to +15
export const activeGenerationCategoryList: number[] = [0];

for (let i = 31; i >= 24; i--) {
activeGenerationCategoryList.push(i);
}

export const generationCategoryLabel: Record<number, string> = {
[0]: '전체',
};

for (let i = 31; i >= 24; i--) {
generationCategoryLabel[i] = `${i}기`;
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

기수 드롭다운에 대한 타입입니다.
24~31기 까지 있으며, 전체는 0 입니다.

Comment on lines -40 to 49
href={review.link}
href={review.url}
onClick={() => track('click_main_review_detail')}
>
<article className={styles.card} role="presentation">
<h4 className={styles.cardTitle}>{review.title}</h4>
<div className={styles.descWrapper}>
<p className={styles.desc}>
{parsePartToKorean(review.part)}파트 {review.semester}기{'\n'}
<strong className={styles.descName}>{review.reviewer}</strong>
{parsePartToKorean(review.part)}파트 {review.generation}기{'\n'}
<strong className={styles.descName}>{review.author}</strong>
</p>
Copy link
Contributor Author

Choose a reason for hiding this comment

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

reivew API가 변경되면서 메인페이지에서의 활동후기를 랜덤으로 불러오는 컴포넌트에서
파라미터 값을 수정했습니다.

selectedMajorCategory: generation,
selectedSubCategory: part,
}: useFetchProps) => {
const tabAPI = selectedTab === 'review' ? 'reviewAPI' : 'sopticleAPI';
Copy link
Contributor Author

Choose a reason for hiding this comment

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

하나의 폴더에서 사용자가 선택한 탭 정보에 따라 API를 불러옵니다.

Comment on lines +22 to +26
useEffect(() => {
if (!isLoading) {
setHasUnObserved();
}
}, [isLoading]);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

src/views/BlogPage/hooks/useFetch.ts 에서
image

데이터가 받아오기 전에는 loading = true, 데이터 받아온 후 loading = false 입니다.

무한스크롤 훅에서 만약 isLoading이 false일때 관찰을 중단합니다. 이때, 페이지 count를 증가합니다.
페이지 count가 증가하면 hasObserved를 true로 바꿉니다.

Copy link
Member

@solar3070 solar3070 left a comment

Choose a reason for hiding this comment

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

스크린샷 2023-10-28 오후 3 57 58

이렇게 뜨는데 확인해주실 수 있나요?

그리고 저는 두 API 모두 리스펀스 변경 전 형태로 값이 내려오고 있는데 우영이는 잘 내려와지나요?

@f0rever0
Copy link
Contributor Author

f0rever0 commented Oct 28, 2023

아 그게 백엔드랑 API 논의하는 스레드를 확인했을때, 데브 서버에서 응답값을 바꾼 상태여서
.env 파일에 NEXT_PUBLIC_BASE_URL을 수정해야해요!!!
슬랙에 데브 서버 주소 보내드렸습니다!

스크린샷 2023-10-28 오후 4 03 14

Comment on lines 52 to 65
<S.Thumbnail
src={
blogPost.thumbnailUrl.charAt(0) !== 'h'
? `https:${blogPost.thumbnailUrl}`
: error
? img_blog_default
: blogPost.thumbnailUrl
}
alt="게시물 썸네일"
width={239}
height={160}
loading="lazy"
onError={onThumbnailError}
/>
Copy link
Member

Choose a reason for hiding this comment

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

썸네일 뜨는 게 오래 걸려서 그 부분이 텅 비어 있는 게 별로 좋은 것 같아 보이지 않네요..!

placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mPU0zOtBwACNQES9P3nGQAAAABJRU5ErkJggg=="

placeholder를 이용해서 썸네일이 들어갈 자리라는 걸 보여주는 게 어떨까요?
blurDataURL 같은 경우는 여기 사이트에서 만들 수 있는데 저희 썸네일 디폴트 이미지의 배경색을 이용하면 좋을 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

오 좋습니다!

Copy link
Member

@solar3070 solar3070 left a comment

Choose a reason for hiding this comment

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

image

피그마 보니까 푸터와 게시글 리스트 사이에 108px 정도 공간이 있는 것 같은데 반영이 되어 있지 않은 것 같습니다!

@f0rever0
Copy link
Contributor Author

아티클/활동후기에 데이터가 없을때의 화면을 구현하였습니다.

2023-10-28.6.36.04.mov

@f0rever0 f0rever0 merged commit 6b3b84e into develop Oct 28, 2023
1 check failed
@f0rever0 f0rever0 deleted the feat/#233-blog-dropdown-and-infinite-scroll branch October 28, 2023 12:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants