Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
4 changes: 3 additions & 1 deletion Application/DevLogPresentation/Sources/Main/MainView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ struct MainView: View {
@State private var coordinator: MainViewCoordinator
@State private var homeViewCoordinator: HomeViewCoordinator
@State private var todayViewCoordinator: TodayViewCoordinator
@State private var profileViewCoordinator: ProfileViewCoordinator
@Binding var selectedTab: MainTab

init(
Expand All @@ -23,6 +24,7 @@ struct MainView: View {
self._coordinator = State(initialValue: MainViewCoordinator(container: container))
self._homeViewCoordinator = State(initialValue: HomeViewCoordinator(container: container))
self._todayViewCoordinator = State(initialValue: TodayViewCoordinator(container: container))
self._profileViewCoordinator = State(initialValue: ProfileViewCoordinator(container: container))
self._selectedTab = selectedTab
}

Expand Down Expand Up @@ -316,7 +318,7 @@ struct MainView: View {
}

private var profileView: some View {
ProfileView(viewModel: coordinator.profileViewModel)
ProfileView(coordinator: profileViewCoordinator)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import DevLogDomain
final class MainViewCoordinator {
let mainViewModel: MainViewModel
let pushNotificationListViewModel: PushNotificationListViewModel
let profileViewModel: ProfileViewModel
var todoIdToPresent: TodoIdItem?
private let diContainer: DIContainer
@ObservationIgnored
Expand All @@ -35,14 +34,6 @@ final class MainViewCoordinator {
fetchQueryUseCase: container.resolve(FetchPushNotificationQueryUseCase.self),
updateQueryUseCase: container.resolve(UpdatePushNotificationQueryUseCase.self)
)
self.profileViewModel = ProfileViewModel(
fetchUserDataUseCase: container.resolve(FetchUserDataUseCase.self),
fetchTodosUseCase: container.resolve(FetchTodosUseCase.self),
upsertStatusMessageUseCase: container.resolve(UpsertStatusMessageUseCase.self),
networkConnectivityUseCase: container.resolve(ObserveNetworkConnectivityUseCase.self),
fetchHeatmapActivityTypesUseCase: container.resolve(FetchHeatmapActivityTypesUseCase.self),
updateHeatmapActivityTypesUseCase: container.resolve(UpdateHeatmapActivityTypesUseCase.self)
)
}

func todoListViewModel(category: TodoCategory) -> TodoListViewModel {
Expand Down
197 changes: 102 additions & 95 deletions Application/DevLogPresentation/Sources/Profile/ProfileView.swift

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
//
// ProfileViewCoordinator.swift
// DevLogPresentation
//
// Created by opfic on 5/21/26.
//

import Foundation
import DevLogCore
import DevLogDomain

@MainActor
@Observable
final class ProfileViewCoordinator {
let viewModel: ProfileViewModel
let settingViewModel: SettingViewModel
var router = NavigationRouter<ProfileRoute>()
private let container: DIContainer

init(container: DIContainer) {
self.container = container
self.viewModel = ProfileViewModel(
fetchUserDataUseCase: container.resolve(FetchUserDataUseCase.self),
fetchTodosUseCase: container.resolve(FetchTodosUseCase.self),
upsertStatusMessageUseCase: container.resolve(UpsertStatusMessageUseCase.self),
networkConnectivityUseCase: container.resolve(ObserveNetworkConnectivityUseCase.self),
fetchHeatmapActivityTypesUseCase: container.resolve(FetchHeatmapActivityTypesUseCase.self),
updateHeatmapActivityTypesUseCase: container.resolve(UpdateHeatmapActivityTypesUseCase.self)
)
self.settingViewModel = SettingViewModel(
deleteAuthUseCase: container.resolve(DeleteAuthUseCase.self),
signOutUseCase: container.resolve(SignOutUseCase.self),
networkConnectivityUseCase: container.resolve(ObserveNetworkConnectivityUseCase.self),
systemThemeUseCase: container.resolve(ObserveSystemThemeUseCase.self),
updateSystemThemeUseCase: container.resolve(UpdateSystemThemeUseCase.self),
fetchWebPageImageDirSizeUseCase: container.resolve(FetchWebPageImageDirSizeUseCase.self),
clearWebPageImageDirectoryUseCase: container.resolve(ClearWebPageImageDirectoryUseCase.self)
)
}

func makeAccountViewModel() -> AccountViewModel {
AccountViewModel(
fetchProvidersUseCase: container.resolve(FetchAuthProvidersUseCase.self),
linkProviderUseCase: container.resolve(LinkAuthProviderUseCase.self),
unlinkProviderUseCase: container.resolve(UnlinkAuthProviderUseCase.self)
)
}

func makePushNotificationSettingsViewModel() -> PushNotificationSettingsViewModel {
PushNotificationSettingsViewModel(
fetchPushSettingsUseCase: container.resolve(FetchPushSettingsUseCase.self),
updatePushSettingsUseCase: container.resolve(UpdatePushSettingsUseCase.self)
)
}

func makeTodoDetailViewModel(todoId: String) -> TodoDetailViewModel {
TodoDetailViewModel(
fetchTodoUseCase: container.resolve(FetchTodoByIdUseCase.self),
fetchReferenceItemsUseCase: container.resolve(FetchReferenceItemsUseCase.self),
upsertUseCase: container.resolve(UpsertTodoUseCase.self),
todoId: todoId,
showEditButton: false
)
}
Comment thread
opficdev marked this conversation as resolved.
}
30 changes: 0 additions & 30 deletions Application/DevLogPresentation/Sources/Setting/SettingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@
//

import SwiftUI
import DevLogCore
import DevLogDomain

struct SettingView: View {
@Environment(\.diContainer) var container: DIContainer
@Environment(NavigationRouter<ProfileRoute>.self) private var router
@State var viewModel: SettingViewModel

Expand Down Expand Up @@ -112,34 +110,6 @@ struct SettingView: View {
}
.navigationTitle(String(localized: "nav_settings"))
.navigationBarTitleDisplayMode(.inline)
.navigationDestination(for: ProfileRoute.self) { path in
switch path {
case .theme:
ThemeView(
theme: Binding(
get: { viewModel.state.theme },
set: { viewModel.send(.setTheme($0)) }
)
)
case .pushNotification:
PushNotificationSettingsView(
viewModel: PushNotificationSettingsViewModel(
fetchPushSettingsUseCase: container.resolve(FetchPushSettingsUseCase.self),
updatePushSettingsUseCase: container.resolve(UpdatePushSettingsUseCase.self)
)
)
case .account:
AccountView(
viewModel: AccountViewModel(
fetchProvidersUseCase: container.resolve(FetchAuthProvidersUseCase.self),
linkProviderUseCase: container.resolve(LinkAuthProviderUseCase.self),
unlinkProviderUseCase: container.resolve(UnlinkAuthProviderUseCase.self)
)
)
case .settings, .activity:
EmptyView()
}
}
.alert(
viewModel.state.alertTitle,
isPresented: Binding(
Expand Down