diff --git a/src/apis/draftLetters.ts b/src/apis/draftLetters.ts
index 424853e..5622592 100644
--- a/src/apis/draftLetters.ts
+++ b/src/apis/draftLetters.ts
@@ -16,18 +16,30 @@ export interface DraftLetter {
matched: boolean;
}
-export const getDraftLetters = async () // token: string
-: Promise => {
+export const getDraftLetters = async (): Promise => {
try {
- const { data } = await client.get('/api/letters?status=draft', {
- // headers: {
- // Authorization: `Bearer ${token}`,
- // },
- });
+ const { data } = await client.get('/api/letters?status=draft', {});
console.log('임시저장된 편지 데이터', data);
return data.data;
} catch (error) {
- console.error(`❌임시저장된 편지를 불러오던 중 에러가 발생했습니다`, error);
+ console.error('❌임시저장된 편지를 불러오던 중 에러가 발생했습니다', error);
throw new Error('임시저장된 편지 불러오기 실패');
}
};
+
+export const deleteDraftLetters = async (letterId: number) => {
+ try {
+ const { data } = await client.delete(`/api/letters/${letterId}/temporary-save`);
+
+ if (data.data?.letterId) {
+ console.log('삭제된 임시저장 편지 ID:', data.data.letterId);
+ } else {
+ console.error('❌서버 응답에 letterId가 존재하지 않습니다.');
+ }
+
+ return data.data.letterId;
+ } catch (error) {
+ console.error('❌임시저장된 편지를 삭제하던 중 에러가 발생했습니다:', error);
+ throw error;
+ }
+};
diff --git a/src/pages/Home/components/ShowDraftModal.tsx b/src/pages/Home/components/ShowDraftModal.tsx
index 3cb9060..3fb7257 100644
--- a/src/pages/Home/components/ShowDraftModal.tsx
+++ b/src/pages/Home/components/ShowDraftModal.tsx
@@ -2,7 +2,7 @@ import DeleteOutlineRoundedIcon from '@mui/icons-material/DeleteOutlineRounded';
import React, { useEffect, useState } from 'react';
// import { useNavigate } from 'react-router';
-import { DraftLetter, getDraftLetters } from '@/apis/draftLetters';
+import { DraftLetter, getDraftLetters, deleteDraftLetters } from '@/apis/draftLetters';
import ModalBackgroundWrapper from '@/components/ModalBackgroundWrapper';
import ModalOverlay from '@/components/ModalOverlay';
@@ -22,7 +22,7 @@ const ShowDraftModal = ({ onClose }: ShowDraftModalProps) => {
// });
// };
- useEffect(() => {
+ const handleGetDraftLetters = () => {
getDraftLetters()
.then((data) => {
setDraftLetters(data || []);
@@ -30,6 +30,21 @@ const ShowDraftModal = ({ onClose }: ShowDraftModalProps) => {
.catch((error) => {
console.error('❌ 임시저장된 편지를 불러오는데 실패했습니다', error);
});
+ };
+
+ const handleDeleteDraftLetters = async (letterId: number) => {
+ //TODO: 정말로 삭제하시겠습니까? 모달창
+ try {
+ await deleteDraftLetters(letterId);
+ setDraftLetters((prev) => prev.filter((letter) => letter.letterId !== letterId));
+ console.log(`letterId는 `, letterId);
+ } catch (error) {
+ console.error(`❌임시저장된 편지를 삭제하던 중 에러가 발생했습니다.`, error);
+ }
+ };
+
+ useEffect(() => {
+ handleGetDraftLetters();
}, [onClose]);
return (
@@ -52,7 +67,11 @@ const ShowDraftModal = ({ onClose }: ShowDraftModalProps) => {
// onClick={() => handleNavigation(draft.letterId)}
>
{draft.title}
-
+
handleDeleteDraftLetters(draft.letterId)}
+ >
diff --git a/src/pages/Home/components/ShowShareAccessModal.tsx b/src/pages/Home/components/ShowShareAccessModal.tsx
index e1e40df..3c59749 100644
--- a/src/pages/Home/components/ShowShareAccessModal.tsx
+++ b/src/pages/Home/components/ShowShareAccessModal.tsx
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
import { getSharePostDetail, getSharePostList } from '@/apis/share';
-import { SharePostResponse } from '@/apis/share';
+import { SharePostResponse, SharePost } from '@/apis/share';
import ModalBackgroundWrapper from '@/components/ModalBackgroundWrapper';
import ModalOverlay from '@/components/ModalOverlay';
@@ -14,20 +14,30 @@ interface ShowShareAccessModalProps {
const ShowShareAccessModal = ({ onClose }: ShowShareAccessModalProps) => {
const navigate = useNavigate();
- const [sharePosts, setSharePosts] = useState();
+ const [sharePosts, setSharePosts] = useState([]);
+ const [currentPage, setCurrentPage] = useState(1);
+ const [hasMore, setHasMore] = useState(true);
+
+ const fetchPosts = async (page: number) => {
+ try {
+ const data: SharePostResponse = await getSharePostList(page, 10);
+ setSharePosts((prev) => [...prev, ...data.content]);
+ setHasMore(page < data.totalPages);
+ } catch (error) {
+ console.error('❌ 게시글 목록을 불러오는 데 실패했습니다.', error);
+ }
+ };
useEffect(() => {
- const fetchPosts = async () => {
- try {
- const data = await getSharePostList(1, 10);
- setSharePosts(data);
- } catch (error) {
- console.error('❌ 게시글 목록을 불러오는 데 실패했습니다.', error);
- }
- };
+ fetchPosts(currentPage);
+ }, [currentPage]);
- fetchPosts();
- }, []);
+ const handleScroll = (e: React.UIEvent) => {
+ const { scrollTop, scrollHeight, clientHeight } = e.currentTarget;
+ if (scrollTop + clientHeight >= scrollHeight - 10 && hasMore) {
+ setCurrentPage((prev) => prev + 1);
+ }
+ };
const handleNavigation = async (sharePostId: number) => {
try {
@@ -55,8 +65,11 @@ const ShowShareAccessModal = ({ onClose }: ShowShareAccessModalProps) => {
허락 여부를 체크해주세요!
-
- {sharePosts?.content.map((post) => (
+
+ {sharePosts?.map((post) => (