From a0f831bc47e45131a96dc7f6699d2e599da5c7a1 Mon Sep 17 00:00:00 2001 From: opficdev Date: Thu, 26 Feb 2026 22:21:21 +0900 Subject: [PATCH 1/3] style: PushNotification + ListView --- ...iewModel.swift => PushNotificationListViewModel.swift} | 8 ++++---- DevLog/UI/Common/MainView.swift | 2 +- ...ificationView.swift => PushNotificationListView.swift} | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) rename DevLog/Presentation/ViewModel/{PushNotificationViewModel.swift => PushNotificationListViewModel.swift} (98%) rename DevLog/UI/PushNotification/{PushNotificationView.swift => PushNotificationListView.swift} (98%) diff --git a/DevLog/Presentation/ViewModel/PushNotificationViewModel.swift b/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift similarity index 98% rename from DevLog/Presentation/ViewModel/PushNotificationViewModel.swift rename to DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift index ed6c29a..2648849 100644 --- a/DevLog/Presentation/ViewModel/PushNotificationViewModel.swift +++ b/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift @@ -1,5 +1,5 @@ // -// PushNotificationViewModel.swift +// PushNotificationListViewModel.swift // DevLog // // Created by 최윤진 on 11/22/25. @@ -7,7 +7,7 @@ import Foundation -final class PushNotificationViewModel: Store { +final class PushNotificationListViewModel: Store { struct State { var notifications: [PushNotification] = [] var showAlert: Bool = false @@ -157,7 +157,7 @@ final class PushNotificationViewModel: Store { } // MARK: - Reduce Methods -private extension PushNotificationViewModel { +private extension PushNotificationListViewModel { func reduceByUser(_ action: Action, state: inout State) -> [SideEffect] { switch action { case .deleteNotification(let item): @@ -252,7 +252,7 @@ private extension PushNotificationViewModel { } } -private extension PushNotificationViewModel { +private extension PushNotificationListViewModel { func setAlert( _ state: inout State, isPresented: Bool, diff --git a/DevLog/UI/Common/MainView.swift b/DevLog/UI/Common/MainView.swift index c4e30a3..3733932 100644 --- a/DevLog/UI/Common/MainView.swift +++ b/DevLog/UI/Common/MainView.swift @@ -23,7 +23,7 @@ struct MainView: View { Image(systemName: "house.fill") Text("홈") } - PushNotificationView(viewModel: PushNotificationViewModel( + PushNotificationListView(viewModel: PushNotificationListViewModel( fetchUseCase: container.resolve(FetchPushNotificationsUseCase.self), deleteUseCase: container.resolve(DeletePushNotificationUseCase.self), toggleReadUseCase: container.resolve(TogglePushNotificationReadUseCase.self), diff --git a/DevLog/UI/PushNotification/PushNotificationView.swift b/DevLog/UI/PushNotification/PushNotificationListView.swift similarity index 98% rename from DevLog/UI/PushNotification/PushNotificationView.swift rename to DevLog/UI/PushNotification/PushNotificationListView.swift index 0bd84b1..d2ec1af 100644 --- a/DevLog/UI/PushNotification/PushNotificationView.swift +++ b/DevLog/UI/PushNotification/PushNotificationListView.swift @@ -1,5 +1,5 @@ // -// PushNotificationView.swift +// PushNotificationListView.swift // DevLog // // Created by opfic on 5/14/25. @@ -7,9 +7,9 @@ import SwiftUI -struct PushNotificationView: View { +struct PushNotificationListView: View { @StateObject private var router = NavigationRouter() - @StateObject var viewModel: PushNotificationViewModel + @StateObject var viewModel: PushNotificationListViewModel @Environment(\.sceneWidth) private var sceneWidth @Environment(\.colorScheme) private var colorScheme @Environment(\.diContainer) private var container: DIContainer From 728f45a37eac86b0c84a6438686b575b3424c54a Mon Sep 17 00:00:00 2001 From: opficdev Date: Thu, 26 Feb 2026 23:50:08 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=ED=83=AD=ED=96=88=EC=9D=84=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9D=BD=EC=9D=80=20=EC=83=81=ED=83=9C=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModel/PushNotificationListViewModel.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift b/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift index 2648849..784dedc 100644 --- a/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift +++ b/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift @@ -197,8 +197,12 @@ private extension PushNotificationListViewModel { updateQueryUseCase.execute(state.query) state.nextCursor = nil return [.fetchNotifications(state.query, cursor: nil)] - case .tapNotification(let notification): - state.selectedTodoID = TodoIDItem(id: notification.todoID) + case .tapNotification(let item): + if let index = state.notifications.firstIndex(where: { $0.id == item.id }), !item.isRead { + state.selectedTodoID = TodoIDItem(id: item.todoID) + state.notifications[index].isRead.toggle() + return [.toggleRead(item.todoID)] + } default: break } From 7e42bce0bfaae76a513aed56a48666021393a446 Mon Sep 17 00:00:00 2001 From: opficdev Date: Fri, 27 Feb 2026 00:08:41 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=9D=B4=EB=AF=B8=20=EC=9D=BD?= =?UTF-8?q?=EC=9D=80=20=EC=95=8C=EB=A6=BC=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=ED=99=94=EB=A9=B4=EC=9D=B4=20=EC=95=88?= =?UTF-8?q?=EB=9C=A8=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/ViewModel/PushNotificationListViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift b/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift index 784dedc..a745180 100644 --- a/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift +++ b/DevLog/Presentation/ViewModel/PushNotificationListViewModel.swift @@ -198,8 +198,8 @@ private extension PushNotificationListViewModel { state.nextCursor = nil return [.fetchNotifications(state.query, cursor: nil)] case .tapNotification(let item): + state.selectedTodoID = TodoIDItem(id: item.todoID) if let index = state.notifications.firstIndex(where: { $0.id == item.id }), !item.isRead { - state.selectedTodoID = TodoIDItem(id: item.todoID) state.notifications[index].isRead.toggle() return [.toggleRead(item.todoID)] }