diff --git a/src/pages/Home/components/ShowShareAccessModal.tsx b/src/pages/Home/components/ShowShareAccessModal.tsx
index f66576e..e9c1dfa 100644
--- a/src/pages/Home/components/ShowShareAccessModal.tsx
+++ b/src/pages/Home/components/ShowShareAccessModal.tsx
@@ -61,6 +61,7 @@ const ShowShareAccessModal = ({ onClose }: ShowShareAccessModalProps) => {
className="text-gray-80 body-m flex h-10 w-full items-center justify-between gap-1 rounded-lg bg-white p-3"
key={proposal.shareProposalId}
onClick={() => handleNavigation(proposal.shareProposalId)}
+ aria-label="따숨님의 공유 요청"
>
{proposal.requesterZipCode}님의 공유 요청
diff --git a/src/pages/MyPage/index.tsx b/src/pages/MyPage/index.tsx
index 226eb36..de1bc97 100644
--- a/src/pages/MyPage/index.tsx
+++ b/src/pages/MyPage/index.tsx
@@ -8,6 +8,7 @@ import useMyPageStore from '@/stores/myPageStore';
import { TEMPERATURE_RANGE } from './constants';
import useToastStore from '@/stores/toastStore';
+import ModalOverlay from '@/components/ModalOverlay';
const MyPage = () => {
useEffect(() => {
@@ -15,7 +16,10 @@ const MyPage = () => {
}, []);
const { data, fetchMyPageInfo } = useMyPageStore();
+
const [isOpenModal, setIsOpenModal] = useState(false);
+ const [isOpenWarningModal, setIsOpenWarningModal] = useState(false);
+
const logout = useAuthStore((state) => state.logout);
const setToastActive = useToastStore((state) => state.setToastActive);
@@ -60,6 +64,19 @@ const MyPage = () => {
}}
/>
)}
+
+ {isOpenWarningModal && (
+ setIsOpenWarningModal(false)}>
+
+
+
+
경고 규칙
+
3회 경고: 서비스 이용 불가능
+
+
+
+ )}
+
{data.zipCode.split('').map((code, index) => (
@@ -109,11 +126,24 @@ const MyPage = () => {
{data.email}
+ {
+ setIsOpenWarningModal(true);
+ }}
+ >
+
경고 횟수
+
+ {data.warningCount}회
+
+
+
@@ -125,6 +155,7 @@ const MyPage = () => {
onClick={async () => {
setIsOpenModal(true);
}}
+ aria-label="탈퇴하기"
>
탈퇴하기
diff --git a/src/pages/Share/index.tsx b/src/pages/Share/index.tsx
index f2016c6..8a2fddf 100644
--- a/src/pages/Share/index.tsx
+++ b/src/pages/Share/index.tsx
@@ -71,6 +71,7 @@ const ShareApprovalPage = () => {
type="button"
className="body-m secondary-btn h-10 flex-1 basis-1/2"
onClick={() => handleProposalApproval('reject')}
+ aria-label="거부하기"
>
거부하기
@@ -79,6 +80,7 @@ const ShareApprovalPage = () => {
type="button"
className="primary-btn body-m h-10 flex-1 basis-1/2"
onClick={() => handleProposalApproval('approve')}
+ aria-label="승인하기"
>
승인하기
diff --git a/src/stores/incomingLettersStore.ts b/src/stores/incomingLettersStore.ts
index cde60af..6d34c40 100644
--- a/src/stores/incomingLettersStore.ts
+++ b/src/stores/incomingLettersStore.ts
@@ -51,7 +51,9 @@ export const useIncomingLettersStore = create((set) => ({
data: inProgressLetters,
});
- setInterval(() => {
+ if (inProgressLetters.length === 0) return;
+
+ const intervalId = setInterval(() => {
set((state) => {
const updatedLetters = state.data.map((letter: IncomingLetters) => {
const remainingTime = calculatingRemainingTime(letter.deliveryCompletedAt);
@@ -62,6 +64,10 @@ export const useIncomingLettersStore = create((set) => ({
(letter) => letter.remainingTime !== '00:00:00',
);
+ if (filteredLetters.length === 0) {
+ clearInterval(intervalId);
+ }
+
return {
data: filteredLetters,
};
diff --git a/src/stores/myPageStore.ts b/src/stores/myPageStore.ts
index 59730d0..dda344e 100644
--- a/src/stores/myPageStore.ts
+++ b/src/stores/myPageStore.ts
@@ -7,6 +7,7 @@ interface MyPageDataStore {
temperature: string;
social: string;
email: string;
+ warningCount: number;
}
interface MyPageStore {
@@ -21,6 +22,7 @@ const useMyPageStore = create((set) => ({
temperature: '',
social: '',
email: '',
+ warningCount: 0,
},
message: '',
setMyPageData: (newData) => set({ data: newData }),