커뮤니티 리스트 최신순, 좋아요순 정렬
- 기존 api 수정 - 외래키로 연결된 likes 테이블의 post_id 가져오는 로직 추가하기
export const getCommunityList = async () => {
const { data: communityList, error } = await supabase
.from("community_posts")
.select(`*, users(display_name, profile_img), likes(post_id)`);
if (error) {
console.log("error", error);
throw error;
}
return communityList;
};
- useQuery로 가져온 communityList를 가지고 정렬 구성하기
const {
data: communityList,
isLoading,
isError,
} = useQuery({
queryKey: [QUERY_KEY_COMMUNITYLIST],
queryFn: getCommunityList,
});
const sortedLatestCommunityList = communityList?.slice().sort((a, b) => {
return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();
});
const communityListWithLikesCount = communityList?.map((post) => {
return {
...post,
likes_count: post.likes.length,
};
});
const sortedLikesCommunityList = communityListWithLikesCount?.sort(
(a, b) => b.likes_count - a.likes_count,
);
- 페이지 렌더링시 + '최신순' 클릭시 - sortedLatestCommunityList를 map,
'좋아요순' 클릭시 - sortedLikesCommunityList를 map
const [selectedKeys, setSelectedKeys] = React.useState<Selection>(
new Set(["정렬"]),
);
const selectedValue = React.useMemo(
() => Array.from(selectedKeys).join(", ").replaceAll("_", " "),
[selectedKeys],
);
{}
{selectedValue === "정렬" || selectedValue === "최신순(기본)"
? sortedLatestCommunityList?.map((communityPost) => (
<CommunityListPost
key={communityPost.id}
communityPost={communityPost}
mode="community"
/>
))
: sortedLikesCommunityList?.map((communityPost) => (
<CommunityListPost
key={communityPost.id}
communityPost={communityPost}
mode="community"
/>
))}