From 4194321954a61626418c5991352bda014d3eea50 Mon Sep 17 00:00:00 2001 From: Jeong Ha Seung <88266129+HA-SEUNG-JEONG@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:16:17 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=95=8C=EB=A6=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=8B=9C=20=EC=9D=BD=EC=9D=8C=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(service)/(my)/notification/page.tsx | 12 ++++++++++- src/components/lists/notification-list.tsx | 13 ++++++++---- .../modals/notification-dropdown.tsx | 21 +++++++++++++------ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/app/(service)/(my)/notification/page.tsx b/src/app/(service)/(my)/notification/page.tsx index ffa3e4a7..cc99c2d1 100644 --- a/src/app/(service)/(my)/notification/page.tsx +++ b/src/app/(service)/(my)/notification/page.tsx @@ -2,6 +2,7 @@ import { useState } from 'react'; +import { MemberNotificationResponse } from '@/api/openapi'; import type { GetMemberNotificationsTopicTypeEnum } from '@/api/openapi/api/notification-api'; import NotificationList from '@/components/lists/notification-list'; import Button from '@/components/ui/button'; @@ -61,6 +62,12 @@ export default function NotificationPage() { readNotifications(ids); }; + const handleNotificationClick = (notification: MemberNotificationResponse) => { + if (!notification.isRead) { + readNotifications([notification.id]); + } + }; + return (
{/* Header */} @@ -104,7 +111,10 @@ export default function NotificationPage() {
- + {/* Pagination */}
diff --git a/src/components/lists/notification-list.tsx b/src/components/lists/notification-list.tsx index 5670b155..dcc54a2a 100644 --- a/src/components/lists/notification-list.tsx +++ b/src/components/lists/notification-list.tsx @@ -25,17 +25,20 @@ const getBadgeColor = ( interface NotificationListProps { notifications?: MemberNotificationResponse[]; + onNotificationClick?: (notification: MemberNotificationResponse) => void; } export default function NotificationList({ notifications, + onNotificationClick, }: NotificationListProps) { return (
    {notifications?.map((notification) => (
  • onNotificationClick?.(notification)} >
    - - {format(notification.createdAt, 'yyyy.MM.dd HH:mm')} - +
    + + {format(notification.createdAt, 'yyyy.MM.dd HH:mm')} + +
  • ))}
diff --git a/src/components/modals/notification-dropdown.tsx b/src/components/modals/notification-dropdown.tsx index 53245faa..8a32181c 100644 --- a/src/components/modals/notification-dropdown.tsx +++ b/src/components/modals/notification-dropdown.tsx @@ -3,11 +3,12 @@ import { DotIcon } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; +import { MemberNotificationResponse } from '@/api/openapi'; import NotificationList from '@/components/lists/notification-list'; import { useGetNotifications, - useHasNewNotification, + useReadNotifications, } from '@/hooks/queries/notification-api'; import NotiIcon from 'public/icons/notifications_none.svg'; import { @@ -30,9 +31,14 @@ export default function NotificationDropdown() { size: 5, hasRead: false, }); - const { data: newData } = useHasNewNotification(); - const isRead = newData?.isRead; + const { mutate: readNotifications } = useReadNotifications(); + + const handleNotificationClick = (notification: MemberNotificationResponse) => { + if (!notification.isRead) { + readNotifications([notification.id]); + } + }; const notifications = mode === 'all' @@ -48,8 +54,8 @@ export default function NotificationDropdown() {
- {!isRead && ( - + {totalUnreadCount !== undefined && totalUnreadCount > 0 && ( + )}
@@ -87,7 +93,10 @@ export default function NotificationDropdown() {

) : ( - + )} From 6c518d34b0feb7fe1e29f9faecc645590a7e3b95 Mon Sep 17 00:00:00 2001 From: Jeong Ha Seung <88266129+HA-SEUNG-JEONG@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:18:46 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EC=95=8C=EB=A6=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=ED=95=B8=EB=93=A4=EB=9F=AC=20=EB=B0=8F=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(service)/(my)/notification/page.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/(service)/(my)/notification/page.tsx b/src/app/(service)/(my)/notification/page.tsx index cc99c2d1..7c1c3f30 100644 --- a/src/app/(service)/(my)/notification/page.tsx +++ b/src/app/(service)/(my)/notification/page.tsx @@ -62,7 +62,9 @@ export default function NotificationPage() { readNotifications(ids); }; - const handleNotificationClick = (notification: MemberNotificationResponse) => { + const handleNotificationClick = ( + notification: MemberNotificationResponse, + ) => { if (!notification.isRead) { readNotifications([notification.id]); } @@ -90,10 +92,10 @@ export default function NotificationPage() {
From a4c56fb0be52f812ca17e6815788aac82acdb356 Mon Sep 17 00:00:00 2001 From: Jeong Ha Seung <88266129+HA-SEUNG-JEONG@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:31:45 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=95=8C=EB=A6=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=ED=95=B8=EB=93=A4=EB=9F=AC=20=EB=B0=8F=20JSX=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7=ED=8C=85=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/modals/notification-dropdown.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/modals/notification-dropdown.tsx b/src/components/modals/notification-dropdown.tsx index 8a32181c..33fc3ddc 100644 --- a/src/components/modals/notification-dropdown.tsx +++ b/src/components/modals/notification-dropdown.tsx @@ -34,7 +34,9 @@ export default function NotificationDropdown() { const { mutate: readNotifications } = useReadNotifications(); - const handleNotificationClick = (notification: MemberNotificationResponse) => { + const handleNotificationClick = ( + notification: MemberNotificationResponse, + ) => { if (!notification.isRead) { readNotifications([notification.id]); } @@ -94,9 +96,9 @@ export default function NotificationDropdown() {
) : ( + notifications={notifications} + onNotificationClick={handleNotificationClick} + /> )}