Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/common/apis/blog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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);
3 changes: 3 additions & 0 deletions src/common/types/blog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export interface FolderRequest {
export interface FolderType {
id: string,
title: string,
postCount: number,
subFolders: FolderType[],
}

Expand All @@ -18,6 +19,7 @@ export interface FolderResponse {
depth: number,
orderIndex: number,
parentFolderId: string | null,
postCount: number,
}

export const toFolderTypeList = (folderResponseList: FolderResponse[]) => {
Expand All @@ -44,6 +46,7 @@ const toFolderType = (folderResponse: FolderResponse) => {
return {
id: folderResponse.folderId,
title: folderResponse.title,
postCount: folderResponse.postCount,
subFolders: [],
};
}
Expand Down
15 changes: 14 additions & 1 deletion src/components/blog/BlogSideBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<div className="w-full flex flex-col gap-y-1">
{folders.map(folder =>
<div key={folder.id} className={`flex flex-col gap-y-2`}>
{depth === 0 && <div className="h-2"/>}
<button
className={`flex justify-start items-center hover:opacity-50 hover:cursor-pointer
className={`flex justify-start items-center hover:opacity-50 hover:cursor-pointer gap-x-2
${depth === 0 && "font-bold"}
${depth > 0 && `text-gray-500`}`}
onClick={() => setSelectedFolder(folder)}>
{depth === 2 && <div className="w-8"/>}
{getFolderTitle(folder.title, depth)}
<p className="text-xs font-light">({getPostCount(folder)})</p>
</button>
{depth === 0 && <hr className="text-gray-400"/>}
<BlogFolderList
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ function Header() {
</Link>
<Link to={`/setting/profile`}
className="w-full block px-4 py-2 text-gray-700 hover:bg-gray-100">
프로필 설정
설정
</Link>
</div>
<div className="py-1">
Expand Down
30 changes: 0 additions & 30 deletions src/components/common/PaginationButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,36 +68,6 @@ function PaginationButton({pageInfo, setPage}: {
<MdKeyboardDoubleArrowRight size={16}/>
</button>
</nav>
// <div className="flex justify-center space-x-1">
// <button
// onClick={() => {
// if (startPage !== 0) {
// setStartPage(startPage - paginationSize);
// }
// }}
// className="rounded-full py-2 px-3 text-center text-sm transition-all shadow-sm hover:shadow-lg text-slate-600 hover:text-white hover:bg-lime-400 hover:border-lime-400 hover:cursor-pointer ml-2">
// <MdArrowLeft className="size-6"/>
// </button>
// {pageList.map((page) => (
// <button
// key={page}
// onClick={() => {
// setPage(page)
// }}
// className={`${pageInfo.number === page ? "bg-lime-400" : ""} min-w-9 rounded-full bg-white py-2 px-3.5 border border-transparent text-center text-sm transition-all shadow-md hover:shadow-lg focus:bg-lime-400 focus:shadow-none active:bg-lime-400 hover:bg-lime-400 active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none hover:cursor-pointer ml-2`}>
// {page + 1}
// </button>
// ))}
// <button
// onClick={() => {
// if (pageInfo.totalPages > startPage + paginationSize) {
// setStartPage(startPage + paginationSize);
// }
// }}
// className="min-w-9 rounded-full py-2 px-3 text-center text-sm transition-all shadow-sm hover:shadow-lg text-slate-600 hover:text-white hover:bg-lime-400 hover:border-lime-400 hover:cursor-pointer ml-2">
// <MdArrowRight className="size-6"/>
// </button>
// </div>
);


Expand Down
5 changes: 3 additions & 2 deletions src/components/folder/FolderCardList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,11 @@ function FolderCard({
</div>
</div>
: <div className="w-full flex justify-between items-center ">
<div className="flex items-center gap-x-4">
<div className="flex items-center gap-x-2">
<MdOutlineMenu {...attributes} {...listeners}
className="hover:cursor-pointer text-gray-600"/>
<p>{folder.title}</p>
<p className="ml-2">{folder.title}</p>
<p className="text-xs font-light">({folder.postCount})</p>
</div>
<div className="flex justify-end items-center">
{depth !== 2 &&
Expand Down
3 changes: 2 additions & 1 deletion src/components/folder/FolderSelectBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,10 @@ function FolderSelectCard({folder, depth, selectedFolder, setTargetFolder, setFo
<div className={`flex items-center gap-x-1 ${depth === 0 && "font-bold text-black"}`}>
<div className={`w-${depth * 4}`}/>
{getFolderTitle(folder.title, depth)}
<p className="text-xs font-light">({folder.postCount})</p>
</div>
</button>
{folder.subFolders.length > 0 &&
{folder.subFolders &&
folder.subFolders.map((subFolder =>
<FolderSelectCard
key={subFolder.id}
Expand Down
4 changes: 2 additions & 2 deletions src/components/post/CommentCard.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {dateToKorean} from "../../common/util/date.tsx";
import {fullDateToKorean} from "../../common/util/date.tsx";
import {MdOutlineAddComment, MdOutlineComment, MdOutlinePerson} from "react-icons/md";
import {ChangeEvent, useState} from "react";
import CommentTextField from "./CommentTextField.tsx";
Expand Down Expand Up @@ -76,7 +76,7 @@ function CommentCard({comment, handleLoadMoreSubComment, handleCommentSubmit, pa
{comment.member.username}
</p>
<p className="text-gray-400 text-sm">
{dateToKorean(comment.createdAt)}
{fullDateToKorean(comment.createdAt)}
</p>
</div>
<div className="mt-4 text-gray-900 flex items-center gap-x-2">
Expand Down
85 changes: 8 additions & 77 deletions src/pages/blog/BlogPage.tsx
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -28,72 +27,6 @@ function BlogPage() {
});
const [posts, setPosts] = useState<PostResponse[]>([]);
const [member, setMember] = useState<MemberProfileResponse>({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<FolderType[]>([]);

const [isOpen, setIsOpen] = useState(false);
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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(() => {
Expand All @@ -193,7 +125,6 @@ function BlogPage() {
size: pageInfo.size,
})
.then((res) => {
console.log(res.data.page);
setPosts(res.data.content);
setPageInfo(res.data.page);
})
Expand Down Expand Up @@ -236,7 +167,7 @@ function BlogPage() {
</div>
</div>
<div ref={sideBarRef}
className={`${isOpen ? "translate-x-0 overflow-y-scroll" : "translate-x-full overflow-y-hidden"} absolute top-0 right-0 w-96 flex-col
className={`${isOpen ? "block translate-x-0 overflow-y-scroll" : "hidden translate-x-full overflow-y-hidden"} !bg-orange-400 absolute top-0 right-0 w-96 flex-col
transform transition-transform duration-300 ease-out z-20`}>
<button className="absolute top-4 right-[calc(320px)] hover:cursor-pointer"
onClick={() => setIsOpen(false)}>
Expand Down
Loading