diff --git a/src/apis/incomingLetters.ts b/src/apis/incomingLetters.ts
index adde539..66a865e 100644
--- a/src/apis/incomingLetters.ts
+++ b/src/apis/incomingLetters.ts
@@ -1,13 +1,9 @@
import client from './client';
-export const getIncomingLetters = async (token: string) => {
+export const getIncomingLetters = async () => {
try {
- const { data } = await client.get('/api/letters?status=delivery', {
- headers: {
- Authorization: `Bearer ${token}`,
- },
- });
- console.log('불러온 데이터', data);
+ const { data } = await client.get('/api/letters?status=delivery');
+ console.log('오고있는 편지 데이터', data);
return data;
} catch (error) {
console.error('❌오고 있는 편지 목록을 불러오던 중 에러 발생', error);
diff --git a/src/apis/share.ts b/src/apis/share.ts
index 6b60bbf..15c97d2 100644
--- a/src/apis/share.ts
+++ b/src/apis/share.ts
@@ -21,7 +21,7 @@ export interface SharePost {
letters: ShareLetter[];
}
-// 페이징 포함
+// 공유 게시글 목록 조회 - 페이징 포함
export interface SharePostResponse {
content: SharePost[];
currentPage: number;
@@ -30,6 +30,15 @@ export interface SharePostResponse {
totalPages: number;
}
+// 편지 공유 요청 수신 조회
+export interface ShareProposal {
+ shareProposalId: number;
+ requesterZipCode: string;
+ recipientZipCode: string;
+ message: string;
+ status: 'REJECTED' | 'APPROVED' | 'PENDING';
+}
+
// 편지 공유 수락 / 거절
export interface SharePostApproval {
shareProposalId: number;
@@ -84,6 +93,19 @@ export const postShareProposals = async (
}
};
+// 편지 공유 요청 수신 조회
+export const getShareProposalList = async () => {
+ try {
+ const response = await client.get('/api/share-proposals/inbox');
+ console.log(`🌟공유 요청 목록`, response.data);
+
+ return response.data.data;
+ } catch (error) {
+ console.error('❌ 편지 공유 요청을 조회하던 중 에러가 발생했습니다', error);
+ throw error;
+ }
+};
+
// 편지 공유 수락 / 거절
export const postShareProposalApproval = async (
shareProposalId: number,
diff --git a/src/pages/Home/components/ShowDraftModal.tsx b/src/pages/Home/components/ShowDraftModal.tsx
index 3fb7257..5be9e9e 100644
--- a/src/pages/Home/components/ShowDraftModal.tsx
+++ b/src/pages/Home/components/ShowDraftModal.tsx
@@ -60,22 +60,26 @@ const ShowDraftModal = ({ onClose }: ShowDraftModalProps) => {
로그아웃 시 임시 저장된 편지는 사라집니다
- {draftLetters.map((draft) => (
-
handleNavigation(draft.letterId)}
- >
-
{draft.title}
+ {draftLetters.length > 0 ? (
+ draftLetters.map((draft) => (
handleDeleteDraftLetters(draft.letterId)}
+ className="text-gray-80 body-m flex h-10 w-full items-center justify-between gap-1 rounded-lg bg-white p-3"
+ key={draft.letterId}
+ // onClick={() => handleNavigation(draft.letterId)}
>
-
+
{draft.title}
+
handleDeleteDraftLetters(draft.letterId)}
+ >
+
+
-
- ))}
+ ))
+ ) : (
+
작성 중인 편지가 없어요
+ )}
diff --git a/src/pages/Home/components/ShowIncomingLettersModal.tsx b/src/pages/Home/components/ShowIncomingLettersModal.tsx
index 219015b..27513c9 100644
--- a/src/pages/Home/components/ShowIncomingLettersModal.tsx
+++ b/src/pages/Home/components/ShowIncomingLettersModal.tsx
@@ -29,15 +29,19 @@ const ShowIncomingLettersModal = ({ onClose }: ShowIncomingLettersModalProps) =>
시간은 실제 시간을 기반으로 책정됩니다.
- {data.map((letter) => (
-
-
{letter.title}
-
{letter.remainingTime}
-
- ))}
+ {data.length > 0 ? (
+ data.map((letter) => (
+
+
{letter.title}
+
{letter.remainingTime}
+
+ ))
+ ) : (
+
오고 있는 편지가 없어요
+ )}
diff --git a/src/pages/Home/components/ShowShareAccessModal.tsx b/src/pages/Home/components/ShowShareAccessModal.tsx
index 3c59749..3ed4179 100644
--- a/src/pages/Home/components/ShowShareAccessModal.tsx
+++ b/src/pages/Home/components/ShowShareAccessModal.tsx
@@ -1,8 +1,10 @@
import React, { useEffect, useState } from 'react';
import { useNavigate } from 'react-router';
-import { getSharePostDetail, getSharePostList } from '@/apis/share';
-import { SharePostResponse, SharePost } from '@/apis/share';
+import { getSharePostDetail } from '@/apis/share';
+import { getShareProposalList } from '@/apis/share';
+import { ShareProposal } from '@/apis/share';
+
import ModalBackgroundWrapper from '@/components/ModalBackgroundWrapper';
import ModalOverlay from '@/components/ModalOverlay';
@@ -14,35 +16,22 @@ interface ShowShareAccessModalProps {
const ShowShareAccessModal = ({ onClose }: ShowShareAccessModalProps) => {
const navigate = useNavigate();
- 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);
- }
- };
+ const [shareProposals, setShareProposals] = useState([]);
useEffect(() => {
- fetchPosts(currentPage);
- }, [currentPage]);
-
- const handleScroll = (e: React.UIEvent) => {
- const { scrollTop, scrollHeight, clientHeight } = e.currentTarget;
- if (scrollTop + clientHeight >= scrollHeight - 10 && hasMore) {
- setCurrentPage((prev) => prev + 1);
- }
- };
+ getShareProposalList()
+ .then((data) => {
+ setShareProposals(data || []);
+ })
+ .catch((error) => {
+ console.error('❌ 공유 요청 목록을 불러오는 데 실패했습니다.', error);
+ });
+ }, []);
- const handleNavigation = async (sharePostId: number) => {
+ const handleNavigation = async (shareProposalId: number) => {
try {
- const postDetail = await getSharePostDetail(sharePostId);
- navigate(`/board/letter/${sharePostId}`, {
+ const postDetail = await getSharePostDetail(shareProposalId);
+ navigate(`/board/letter/${shareProposalId}`, {
state: { postDetail, isShareLetterPreview: true },
});
} catch (error) {
@@ -65,19 +54,20 @@ const ShowShareAccessModal = ({ onClose }: ShowShareAccessModalProps) => {
허락 여부를 체크해주세요!
-
- {sharePosts?.map((post) => (
-
- ))}
+
+ {shareProposals.length > 0 ? (
+ shareProposals.map((proposal) => (
+
+ ))
+ ) : (
+
새로운 공유 요청이 없어요
+ )}
diff --git a/src/stores/incomingLettersStore.ts b/src/stores/incomingLettersStore.ts
index ecb34e7..cde60af 100644
--- a/src/stores/incomingLettersStore.ts
+++ b/src/stores/incomingLettersStore.ts
@@ -12,9 +12,6 @@ interface IncomingLetters {
interface IncomingLettersStore {
data: IncomingLetters[];
- arrivedCount: number;
- message: string;
- timestamp: string;
fetchIncomingLetters: () => void;
}
@@ -36,18 +33,12 @@ const calculatingRemainingTime = (deliveryCompletedAt: string): string => {
export const useIncomingLettersStore = create((set) => ({
data: [],
- arrivedCount: 0,
- message: '',
- timestamp: '',
fetchIncomingLetters: async () => {
try {
- const token = localStorage.getItem('token') || '';
- const data = await getIncomingLetters(token);
+ const data = await getIncomingLetters();
- let arrivedCount = 0;
const updatedLetters = data.data.map((letter: IncomingLetters) => {
const remainingTime = calculatingRemainingTime(letter.deliveryCompletedAt);
- if (remainingTime === '00:00:00') arrivedCount += 1; // 도착한 편지 카운트
return { ...letter, remainingTime };
});
@@ -55,12 +46,27 @@ export const useIncomingLettersStore = create((set) => ({
const inProgressLetters = updatedLetters.filter(
(letter: IncomingLetters) => letter.remainingTime !== '00:00:00',
);
+
set({
data: inProgressLetters,
- arrivedCount,
- message: data.message,
- timestamp: data.timestamp,
});
+
+ setInterval(() => {
+ set((state) => {
+ const updatedLetters = state.data.map((letter: IncomingLetters) => {
+ const remainingTime = calculatingRemainingTime(letter.deliveryCompletedAt);
+ return { ...letter, remainingTime };
+ });
+
+ const filteredLetters = updatedLetters.filter(
+ (letter) => letter.remainingTime !== '00:00:00',
+ );
+
+ return {
+ data: filteredLetters,
+ };
+ });
+ }, 1000);
} catch (error) {
console.error('❌오고 있는 편지 목록을 불러오던 중 에러 발생', error);
}