Skip to content

Commit d350929

Browse files
committed
feat: TodoMutationEvent 기반 홈 화면 갱신
1 parent c60f6c6 commit d350929

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

Application/DevLogPresentation/Sources/Home/Home/HomeViewCoordinator.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ final class HomeViewCoordinator {
1818
private let container: DIContainer
1919
@ObservationIgnored
2020
private var cancellable: AnyCancellable?
21+
@ObservationIgnored
22+
private var mutationTask: Task<Void, Never>?
2123

2224
init(container: DIContainer) {
2325
self.container = container
@@ -34,10 +36,33 @@ final class HomeViewCoordinator {
3436
)
3537
}
3638

39+
deinit {
40+
mutationTask?.cancel()
41+
}
42+
3743
func fetchData() {
3844
viewModel.send(.fetchData)
3945
}
4046

47+
func refreshRecentTodos() {
48+
viewModel.send(.refreshRecentTodos)
49+
}
50+
51+
func bindTodoMutationEvent() {
52+
guard mutationTask == nil else { return }
53+
54+
let bus = container.resolve(TodoMutationEventBus.self)
55+
mutationTask = Task { [weak self] in
56+
let events = await bus.events()
57+
for await event in events {
58+
switch event {
59+
case .updated, .deleted, .restored:
60+
self?.refreshRecentTodos()
61+
}
62+
}
63+
}
64+
}
65+
4166
func bindWindowEvent(_ windowEvent: TodoEditorWindowEvent) {
4267
guard cancellable == nil else { return }
4368

Application/DevLogPresentation/Sources/Home/Home/HomeViewModel.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ final class HomeViewModel: StorePattern {
3636

3737
enum Action {
3838
case fetchData
39+
case refreshRecentTodos
3940
case networkStatusChanged(Bool)
4041
case setPresentation(Presentation, Bool)
4142
case setAlert(isPresented: Bool, type: AlertType? = nil)
@@ -136,7 +137,7 @@ final class HomeViewModel: StorePattern {
136137
switch action {
137138
case .networkStatusChanged(let isConnected):
138139
state.isNetworkConnected = isConnected
139-
case .fetchData, .setPresentation, .setAlert, .refreshWebPages,
140+
case .fetchData, .refreshRecentTodos, .setPresentation, .setAlert, .refreshWebPages,
140141
.tapTodoCategory, .orderTodoCategory, .updateWebPageURLInput,
141142
.addWebPage, .deleteWebPage, .undoDeleteWebPage, .finishDeleteWebPageToast:
142143
effects = reduceByView(action, state: &state)
@@ -252,6 +253,8 @@ private extension HomeViewModel {
252253
switch action {
253254
case .fetchData:
254255
return [.fetchTodoCategoryPreferences, .fetchRecentTodos, .fetchWebPages]
256+
case .refreshRecentTodos:
257+
return [.fetchRecentTodos]
255258
case .refreshWebPages:
256259
return [.fetchWebPages]
257260
case .setPresentation(let presentation, let isPresented):

Application/DevLogPresentation/Sources/Main/MainView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ struct MainView: View {
4848
.onAppear {
4949
coordinator.viewModel.send(.onAppear)
5050
homeViewCoordinator.bindWindowEvent(windowEvent)
51+
homeViewCoordinator.bindTodoMutationEvent()
5152
todoWindowCoordinator.bindWindowEvent(windowEvent)
5253
}
5354
.onChange(of: selectedTab, initial: true) { _, newValue in

0 commit comments

Comments
 (0)