Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ excluded:
- Widget/DevLogWidgetCore/Project.swift
- Widget/DevLogWidgetExtension/Project.swift

line_length: 200

disabled_rules:
- nesting
- multiple_closures_with_trailing_closure
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ private extension AppGraph {
fetchReferenceItemsUseCase: todoGraphSet.todoUseCaseGraph.fetchReferenceItemsUseCase,
upsertTodoUseCase: todoGraphSet.todoUseCaseGraph.upsertTodoUseCase
)
TodoDependencyPreparation.prepareListQuery(
HomePresentationDependencyPreparation.prepareTodoListQuery(
&dependencies,
fetchTodosUseCase: todoGraphSet.todoUseCaseGraph.fetchTodosUseCase,
fetchTodoByIdUseCase: todoGraphSet.todoUseCaseGraph.fetchTodoByIdUseCase,
Expand All @@ -116,7 +116,7 @@ private extension AppGraph {
.todoCategoryUseCaseGraph
.fetchTodoCategoryPreferencesUseCase
)
TodoDependencyPreparation.prepareListMutation(
HomePresentationDependencyPreparation.prepareTodoListMutation(
&dependencies,
upsertTodoUseCase: todoGraphSet.todoUseCaseGraph.upsertTodoUseCase,
deleteTodoUseCase: todoGraphSet.todoUseCaseGraph.deleteTodoUseCase,
Expand Down
11 changes: 10 additions & 1 deletion Application/Presentation/HomeTab/Sources/Home/HomeView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,16 @@ public struct HomeView: View {
.safeAreaInset(edge: .top, spacing: 0) { topBar }
.background(Color.appBackground)
.toolbarVisibility(.hidden, for: .navigationBar)
.navigationDestination(for: HomeRoute.self, destination: destinationView)
.navigationDestination(
for: HomeRoute.self,
interactivePop: {
switch $0 {
case .category: true
case .todo: false
}
},
destination: destinationView
)
}
.onAppear { store.send(.view(.startObserving)) }
.onChange(of: isSelected, initial: true) { _, isSelected in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,32 @@ public enum HomeDependencyPreparation {
dependencies.homeNetworkConnectivityUseCase = networkConnectivityUseCase
}

public static func prepareTodoListQuery(
_ dependencies: inout DependencyValues,
fetchTodosUseCase: FetchTodosUseCase,
fetchTodoByIdUseCase: FetchTodoByIdUseCase,
fetchReferenceItemsUseCase: FetchReferenceItemsUseCase,
fetchTodoCategoryPreferencesUseCase: FetchTodoCategoryPreferencesUseCase
) {
dependencies.todoListFetchTodosUseCase = fetchTodosUseCase
dependencies.fetchTodoByIdUseCase = fetchTodoByIdUseCase
dependencies.fetchReferenceItemsUseCase = fetchReferenceItemsUseCase
dependencies.fetchTodoCategoryPreferencesUseCase = fetchTodoCategoryPreferencesUseCase
}

public static func prepareTodoListMutation(
_ dependencies: inout DependencyValues,
upsertTodoUseCase: UpsertTodoUseCase,
deleteTodoUseCase: DeleteTodoUseCase,
undoDeleteTodoUseCase: UndoDeleteTodoUseCase,
trackAnalyticsEventUseCase: TrackAnalyticsEventUseCase
) {
dependencies.upsertTodoUseCase = upsertTodoUseCase
dependencies.todoListDeleteTodoUseCase = deleteTodoUseCase
dependencies.todoListUndoDeleteTodoUseCase = undoDeleteTodoUseCase
dependencies.trackAnalyticsEventUseCase = trackAnalyticsEventUseCase
}

public static func prepareSearch(
_ dependencies: inout DependencyValues,
fetchRecentSearchQueriesUseCase: FetchRecentSearchQueriesUseCase,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ private struct SearchField: View {
localized: "search_prompt",
bundle: PresentationResources.bundle)
)
.foregroundColor(Color.secondary),
.foregroundStyle(Color.secondary),
)
.focused($isFocused)
.onSubmit {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// TodoListFeature+Effects.swift
// PresentationShared
// HomeTab
//
// Created by opfic on 6/12/26.
//
Expand All @@ -9,29 +9,9 @@ import ComposableArchitecture
import Core
import Domain
import Foundation
import PresentationShared

extension TodoListFeature {
func searchEffect(
_ keyword: String,
category: TodoCategory
) -> Effect<Action> {
.run { [fetchTodosUseCase] send in
do {
let query = TodoQuery(categoryId: category.storageValue, keyword: keyword)
let page = try await fetchTodosUseCase.execute(query, cursor: nil)
try Task.checkCancellation()
await send(.store(.fetchSearchResults(page.items.compactMap(TodoListItem.init(from:)))))
await send(.loading(.end(target: .default, mode: .immediate)))
} catch is CancellationError {
return
} catch {
await send(.store(.setAlert(true)))
await send(.loading(.end(target: .default, mode: .immediate)))
}
}
.cancellable(id: CancelID.request, cancelInFlight: true)
}

func toggleCompletedEffect(_ item: TodoListItem) -> Effect<Action> {
.concatenate(
.send(.loading(.begin(target: .default, mode: .delayed))),
Expand Down Expand Up @@ -147,9 +127,5 @@ extension TodoListFeature {
if let todoIndex = state.todos.firstIndex(where: { $0.id == todoId }) {
state.todos[todoIndex].isHidden = isHidden
}

if let searchResultIndex = state.searchResults.firstIndex(where: { $0.id == todoId }) {
state.searchResults[searchResultIndex].isHidden = isHidden
}
}
}
Loading
Loading