Skip to content

Commit 9ff7f75

Browse files
authored
[#118] iOS 17이하일 때 HomeView에서 시트 -> 얼럿 사이의 상태 변경에 따른 문제를 해결한다 (#121)
* refactor: todoKindPicker -> contentPicker * style: is 접두사 제거 * fix: iOS 17 이하에서 시트와 얼럿 간 플래그 상태 변경 사이에 딜레이 추가하기 * fix: Publishing 오류 해결 * refactor: gemini code assist 반영�
1 parent 2ba39fa commit 9ff7f75

2 files changed

Lines changed: 36 additions & 20 deletions

File tree

DevLog/Presentation/ViewModel/HomeViewModel.swift

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ final class HomeViewModel: Store {
1212
var todoKindPreferences = TodoKind.allCases.map { TodoKindPreference(kind: $0, isVisible: true) }
1313
var pinnedTodos: [PinnedTodoItem] = []
1414
var webPages: [WebPageItem] = []
15-
var showTodoKindPicker: Bool = false
15+
var showContentPicker: Bool = false
1616
var showTodoEditor: Bool = false
1717
var showSearchView: Bool = false
1818
var webPageURLInput: String = "https://"
@@ -57,7 +57,7 @@ final class HomeViewModel: Store {
5757
case deleteWebPage(String)
5858
case fetchPinnedTodos
5959
case fetchWebPages
60-
case showTodoEditorAfterDelay(Double)
60+
case showModalAfterDelay(ModalType)
6161
}
6262

6363
enum AlertType {
@@ -66,6 +66,11 @@ final class HomeViewModel: Store {
6666
case error
6767
}
6868

69+
enum ModalType {
70+
case todoEditor
71+
case urlInputAlert
72+
}
73+
6974
private let upsertTodoUseCase: UpsertTodoUseCase
7075
private let addWebPageUseCase: AddWebPageUseCase
7176
private let deleteWebPageUseCase: DeleteWebPageUseCase
@@ -166,10 +171,15 @@ final class HomeViewModel: Store {
166171
send(.setAlert(isPresented: true, type: .error))
167172
}
168173
}
169-
case .showTodoEditorAfterDelay(let delay):
174+
case .showModalAfterDelay(let type):
170175
Task {
171-
try? await Task.sleep(for: .seconds(delay))
172-
send(.setShowTodoEditor(true))
176+
try await Task.sleep(for: .seconds(0.1))
177+
switch type {
178+
case .todoEditor:
179+
send(.setShowTodoEditor(true))
180+
case .urlInputAlert:
181+
send(.setAlert(isPresented: true, type: .webPageInput))
182+
}
173183
}
174184
}
175185
}
@@ -181,23 +191,27 @@ private extension HomeViewModel {
181191
switch action {
182192
case .tapTodoKind(let kind):
183193
state.selectedTodoKind = kind
184-
state.showTodoKindPicker = false
185-
return [.showTodoEditorAfterDelay(0.1)]
194+
state.showContentPicker = false
195+
return [.showModalAfterDelay(.todoEditor)]
186196
case .orderTodoKindPreferences(let preferences):
187197
state.todoKindPreferences = preferences
188-
case .setReorderTodo(let isPresented):
189-
state.reorderTodo = isPresented
190-
case .setShowTodoEditor(let isPresented):
191-
state.showTodoEditor = isPresented
192-
if !isPresented { state.selectedTodoKind = nil }
193-
case .setShowContentPicker(let isPresented):
194-
state.showTodoKindPicker = isPresented
195-
case .setShowSearchView(let isPresented):
196-
state.showSearchView = isPresented
198+
case .setReorderTodo(let presented):
199+
state.reorderTodo = presented
200+
case .setShowTodoEditor(let presented):
201+
state.showTodoEditor = presented
202+
if !presented { state.selectedTodoKind = nil }
203+
case .setShowContentPicker(let presented):
204+
state.showContentPicker = presented
205+
case .setShowSearchView(let presented):
206+
state.showSearchView = presented
197207
case .updateWebPageURLInput(let text):
198208
state.webPageURLInput = text
199-
case .setAlert(let isPresented, let type):
200-
setAlert(&state, isPresented: isPresented, type: type)
209+
case .setAlert(let presented, let type):
210+
if presented && type == .webPageInput && state.showContentPicker {
211+
state.showContentPicker = false
212+
return [.showModalAfterDelay(.urlInputAlert)]
213+
}
214+
setAlert(&state, isPresented: presented, type: type)
201215
default:
202216
break
203217
}

DevLog/UI/Home/HomeView.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ struct HomeView: View {
6565
)
6666
}
6767
.sheet(isPresented: Binding(
68-
get: { viewModel.state.showTodoKindPicker },
68+
get: { viewModel.state.showContentPicker },
6969
set: { _, _ in }
7070
)) {
7171
contentPicker
@@ -334,7 +334,9 @@ struct HomeView: View {
334334

335335
Section {
336336
Button {
337-
viewModel.send(.setAlert(isPresented: true, type: .webPageInput))
337+
DispatchQueue.main.async {
338+
viewModel.send(.setAlert(isPresented: true, type: .webPageInput))
339+
}
338340
} label: {
339341
labelImage(
340342
text: "URL",

0 commit comments

Comments
 (0)