@@ -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 }
0 commit comments