diff --git a/src/common/apis/blog.tsx b/src/common/apis/blog.tsx index e5057cb..c10a69f 100644 --- a/src/common/apis/blog.tsx +++ b/src/common/apis/blog.tsx @@ -5,5 +5,8 @@ import {postListMemberRequestToParameter} from "../util/url.tsx"; export const getMemberPosts = (postListMemberRequest: PostListMemberRequest) => axiosApi.get(`/post/member${postListMemberRequestToParameter(postListMemberRequest)}`); +export const getMemberFolders = (username: string) => + axiosApi.get(`/folders/${username}`); + export const saveAndUpdateFolder = (folderRequestList: FolderRequest[]) => axiosApi.put("/folders", folderRequestList); \ No newline at end of file diff --git a/src/common/types/blog.tsx b/src/common/types/blog.tsx index 87de640..3ac1a2e 100644 --- a/src/common/types/blog.tsx +++ b/src/common/types/blog.tsx @@ -9,6 +9,7 @@ export interface FolderRequest { export interface FolderType { id: string, title: string, + postCount: number, subFolders: FolderType[], } @@ -18,6 +19,7 @@ export interface FolderResponse { depth: number, orderIndex: number, parentFolderId: string | null, + postCount: number, } export const toFolderTypeList = (folderResponseList: FolderResponse[]) => { @@ -44,6 +46,7 @@ const toFolderType = (folderResponse: FolderResponse) => { return { id: folderResponse.folderId, title: folderResponse.title, + postCount: folderResponse.postCount, subFolders: [], }; } diff --git a/src/components/blog/BlogSideBar.tsx b/src/components/blog/BlogSideBar.tsx index d7b67cd..8286839 100644 --- a/src/components/blog/BlogSideBar.tsx +++ b/src/components/blog/BlogSideBar.tsx @@ -63,18 +63,31 @@ function BlogFolderList({depth = 0, folders, setSelectedFolder}: { setSelectedFolder: (folder: FolderType) => void, }) { + const getPostCount = (folder: FolderType) => { + let resultCount = folder.postCount; + + if (folder.subFolders) { + folder.subFolders.forEach(subFolder => { + resultCount += getPostCount(subFolder); + }) + } + + return resultCount; + } + return (
{folders.map(folder =>
{depth === 0 &&
} {depth === 0 &&
} - 프로필 설정 + 설정
diff --git a/src/components/common/PaginationButton.tsx b/src/components/common/PaginationButton.tsx index 992ae3a..eec7241 100644 --- a/src/components/common/PaginationButton.tsx +++ b/src/components/common/PaginationButton.tsx @@ -68,36 +68,6 @@ function PaginationButton({pageInfo, setPage}: { - //
- // - // {pageList.map((page) => ( - // - // ))} - // - //
); diff --git a/src/components/folder/FolderCardList.tsx b/src/components/folder/FolderCardList.tsx index 74dabab..a801cf3 100644 --- a/src/components/folder/FolderCardList.tsx +++ b/src/components/folder/FolderCardList.tsx @@ -117,10 +117,11 @@ function FolderCard({
:
-
+
-

{folder.title}

+

{folder.title}

+

({folder.postCount})

{depth !== 2 && diff --git a/src/components/folder/FolderSelectBox.tsx b/src/components/folder/FolderSelectBox.tsx index fb7cb8a..451dc1f 100644 --- a/src/components/folder/FolderSelectBox.tsx +++ b/src/components/folder/FolderSelectBox.tsx @@ -74,9 +74,10 @@ function FolderSelectCard({folder, depth, selectedFolder, setTargetFolder, setFo
{getFolderTitle(folder.title, depth)} +

({folder.postCount})

- {folder.subFolders.length > 0 && + {folder.subFolders && folder.subFolders.map((subFolder =>

- {dateToKorean(comment.createdAt)} + {fullDateToKorean(comment.createdAt)}

diff --git a/src/pages/blog/BlogPage.tsx b/src/pages/blog/BlogPage.tsx index ecb6345..776c9ef 100644 --- a/src/pages/blog/BlogPage.tsx +++ b/src/pages/blog/BlogPage.tsx @@ -1,15 +1,14 @@ import BasicLayout from "../../layout/BasicLayout.tsx"; import {useNavigate, useParams} from "react-router-dom"; -import {faker} from "@faker-js/faker/locale/ko"; import PostCard from "../../components/post/PostCard.tsx"; import {useEffect, useRef, useState} from "react"; import {MdMenu, MdOutlineExitToApp} from "react-icons/md"; import PaginationButton from "../../components/common/PaginationButton.tsx"; -import {FolderType} from "../../common/types/blog.tsx"; +import {FolderType, toFolderTypeList} from "../../common/types/blog.tsx"; import BlogSideBar from "../../components/blog/BlogSideBar.tsx"; import IconButton from "../../components/common/IconButton.tsx"; import {PageResponse} from "../../common/types/common.tsx"; -import {getMemberPosts} from "../../common/apis/blog.tsx"; +import {getMemberFolders, getMemberPosts} from "../../common/apis/blog.tsx"; import {PostResponse} from "../../common/types/post.tsx"; import {MemberProfileResponse} from "../../common/types/member.tsx"; import {getProfileByUsername} from "../../common/apis/member.tsx"; @@ -28,72 +27,6 @@ function BlogPage() { }); const [posts, setPosts] = useState([]); const [member, setMember] = useState({username: username || "", profileUrl: null}); - const folderData: FolderType[] = [ - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [ - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [ - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - ], - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - ] - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [ - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - ], - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [ - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - { - id: crypto.randomUUID(), - title: faker.lorem.words(), - subFolders: [], - }, - ] - }, - ]; const [folders, setFolders] = useState([]); const [isOpen, setIsOpen] = useState(false); @@ -135,12 +68,6 @@ function BlogPage() { return folderIds; } - useEffect(() => { - // todo: 내 게시글 불러오기 api - console.log(page, setPageInfo.toString()); - setFolders(folderData); - }, []); - useEffect(() => { document.addEventListener('mousedown', handleClickOutside); document.title = username || "DIGLOG"; @@ -179,6 +106,11 @@ function BlogPage() { setMember(res.data); }) .catch(error => alert(error.response.data.message)); + + getMemberFolders(username) + .then(res => { + setFolders(toFolderTypeList(res.data)); + }); }, [username]); useEffect(() => { @@ -193,7 +125,6 @@ function BlogPage() { size: pageInfo.size, }) .then((res) => { - console.log(res.data.page); setPosts(res.data.content); setPageInfo(res.data.page); }) @@ -236,7 +167,7 @@ function BlogPage() {