Skip to content

Commit a2ae719

Browse files
committed
refactor: AccountView를 TCA Store 주입으로 전환
1 parent cc8d747 commit a2ae719

5 files changed

Lines changed: 20 additions & 209 deletions

File tree

Application/DevLogPresentation/Sources/Main/MainView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ struct MainView: View {
375375
viewModel: profileViewCoordinator.makePushNotificationSettingsViewModel()
376376
)
377377
case .account:
378-
AccountView(viewModel: profileViewCoordinator.makeAccountViewModel())
378+
AccountView(store: profileViewCoordinator.makeAccountStore())
379379
}
380380
}
381381
}

Application/DevLogPresentation/Sources/Profile/ProfileView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ struct ProfileView: View {
172172
case .pushNotification:
173173
PushNotificationSettingsView(viewModel: coordinator.makePushNotificationSettingsViewModel())
174174
case .account:
175-
AccountView(viewModel: coordinator.makeAccountViewModel())
175+
AccountView(store: coordinator.makeAccountStore())
176176
}
177177
}
178178

Application/DevLogPresentation/Sources/Profile/ProfileViewCoordinator.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ final class ProfileViewCoordinator {
4444
viewModel.send(.fetchData)
4545
}
4646

47-
func makeAccountViewModel() -> AccountViewModel {
48-
AccountViewModel(
49-
fetchProvidersUseCase: container.resolve(FetchAuthProvidersUseCase.self),
50-
linkProviderUseCase: container.resolve(LinkAuthProviderUseCase.self),
51-
unlinkProviderUseCase: container.resolve(UnlinkAuthProviderUseCase.self)
52-
)
47+
func makeAccountStore() -> StoreOf<AccountFeature> {
48+
Store(initialState: AccountFeature.State()) {
49+
AccountFeature()
50+
} withDependencies: {
51+
$0.fetchAuthProvidersUseCase = self.container.resolve(FetchAuthProvidersUseCase.self)
52+
$0.linkAuthProviderUseCase = self.container.resolve(LinkAuthProviderUseCase.self)
53+
$0.unlinkAuthProviderUseCase = self.container.resolve(UnlinkAuthProviderUseCase.self)
54+
}
5355
}
5456

5557
func makePushNotificationSettingsViewModel() -> PushNotificationSettingsViewModel {

Application/DevLogPresentation/Sources/Settings/AccountView.swift

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,33 @@
66
//
77

88
import SwiftUI
9+
import ComposableArchitecture
910
import DevLogDomain
1011

1112
struct AccountView: View {
12-
@State var viewModel: AccountViewModel
13+
@Bindable var store: StoreOf<AccountFeature>
1314

1415
var body: some View {
1516
List {
1617
Section(String(localized: "account_current_section")) {
1718
HStack {
18-
if let provider = viewModel.state.currentProvider {
19+
if let provider = store.currentProvider {
1920
providerContent(provider)
2021
}
2122
}
2223
}
2324
Section(String(localized: "account_social_section")) {
24-
let providers = AuthProvider.allCases.filter { $0 != viewModel.state.currentProvider }
25+
let providers = AuthProvider.allCases.filter { $0 != store.currentProvider }
2526
ForEach(providers, id: \.self) { provider in
26-
let isConnected = viewModel.state.connectedProviders.contains(provider)
27+
let isConnected = store.connectedProviders.contains(provider)
2728
HStack {
2829
providerContent(provider)
2930
Spacer()
3031
Button {
3132
if isConnected {
32-
viewModel.send(.unlinkFromProvider(provider))
33+
store.send(.unlinkFromProvider(provider))
3334
} else {
34-
viewModel.send(.linkWithProvider(provider))
35+
store.send(.linkWithProvider(provider))
3536
}
3637
} label: {
3738
Text(isConnected
@@ -52,19 +53,10 @@ struct AccountView: View {
5253
.scrollDisabled(true)
5354
.listStyle(.insetGrouped)
5455
.navigationTitle(String(localized: "nav_account"))
55-
.onAppear {
56-
viewModel.send(.onAppear)
57-
}
58-
.alert(viewModel.state.alertTitle, isPresented: Binding(
59-
get: { viewModel.state.showAlert },
60-
set: { viewModel.send(.setAlert(isPresented: $0)) }
61-
)) {
62-
Button(String(localized: "common_close"), role: .cancel) { }
63-
} message: {
64-
Text(viewModel.state.alertMessage)
65-
}
56+
.onAppear { store.send(.onAppear) }
57+
.alert($store.scope(state: \.alert, action: \.alert))
6658
.overlay {
67-
if viewModel.state.isLoading {
59+
if store.isLoading {
6860
LoadingView()
6961
}
7062
}

Application/DevLogPresentation/Sources/Settings/AccountViewModel.swift

Lines changed: 0 additions & 183 deletions
This file was deleted.

0 commit comments

Comments
 (0)