Skip to content

Commit 83a37e5

Browse files
authored
[#114] 시트와 풀스크린 타이밍 개선 (#116)
* fix: Publishing changes from within view updates is not allowed, this will cause undefined behavior. 오류 해결 * fix: 0.1초 딜레이 추가해서 시트가 내려간 이후에 풀스크린이 뜨도록 개선 * style: 위치 옮김
1 parent 2bd93aa commit 83a37e5

3 files changed

Lines changed: 14 additions & 6 deletions

File tree

DevLog/Presentation/ViewModel/HomeViewModel.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import Foundation
99

1010
final class HomeViewModel: Store {
11-
struct State {
11+
struct State: Equatable {
1212
var todoKindPreferences = TodoKind.allCases.map { TodoKindPreference(kind: $0, isVisible: true) }
1313
var pinnedTodos: [PinnedTodoItem] = []
1414
var webPages: [WebPageItem] = []
@@ -57,6 +57,7 @@ final class HomeViewModel: Store {
5757
case deleteWebPage(String)
5858
case fetchPinnedTodos
5959
case fetchWebPages
60+
case showTodoEditorAfterDelay(Double)
6061
}
6162

6263
enum AlertType {
@@ -103,7 +104,7 @@ final class HomeViewModel: Store {
103104
effects = reduceByRun(action, state: &state)
104105
}
105106

106-
self.state = state
107+
if self.state != state { self.state = state }
107108
return effects
108109
}
109110

@@ -165,6 +166,11 @@ final class HomeViewModel: Store {
165166
send(.setAlert(isPresented: true, type: .error))
166167
}
167168
}
169+
case .showTodoEditorAfterDelay(let delay):
170+
Task {
171+
try? await Task.sleep(for: .seconds(delay))
172+
send(.setShowTodoEditor(true))
173+
}
168174
}
169175
}
170176
}
@@ -176,7 +182,7 @@ private extension HomeViewModel {
176182
case .tapTodoKind(let kind):
177183
state.selectedTodoKind = kind
178184
state.showTodoKindPicker = false
179-
state.showTodoEditor = true
185+
return [.showTodoEditorAfterDelay(0.1)]
180186
case .orderTodoKindPreferences(let preferences):
181187
state.todoKindPreferences = preferences
182188
case .setReorderTodo(let isPresented):

DevLog/Presentation/ViewModel/TodoListViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ final class TodoListViewModel: Store {
6565
case togglePinned(TodoListItem)
6666
}
6767

68+
@Published private(set) var state: State
6869
private let fetchTodosByKindUseCase: FetchTodosByKindUseCase
6970
private let fetchTodoByIDUseCase: FetchTodoByIDUseCase
7071
private let upsertTodoUseCase: UpsertTodoUseCase
7172
private let deleteTodoUseCase: DeleteTodoUseCase
72-
@Published private(set) var state: State
7373
private let pageSize = 20
7474

7575
init(

DevLog/UI/Home/HomeView.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ struct HomeView: View {
6666
}
6767
.sheet(isPresented: Binding(
6868
get: { viewModel.state.showTodoKindPicker },
69-
set: { viewModel.send(.setShowContentPicker($0)) }
69+
set: { _, _ in }
7070
)) {
7171
contentPicker
7272
}
@@ -316,7 +316,9 @@ struct HomeView: View {
316316
ForEach(preferences, id: \.id) { preference in
317317
let kind = preference.kind
318318
Button {
319-
viewModel.send(.tapTodoKind(kind))
319+
DispatchQueue.main.async {
320+
viewModel.send(.tapTodoKind(kind))
321+
}
320322
} label: {
321323
labelImage(
322324
text: kind.localizedName,

0 commit comments

Comments
 (0)