Skip to content

Commit a5838ac

Browse files
committed
fix: AccountView 로딩 표시 조정
1 parent f8e7817 commit a5838ac

3 files changed

Lines changed: 29 additions & 17 deletions

File tree

Application/DevLogPresentation/Sources/Settings/AccountFeature.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ struct AccountFeature {
1717
var currentProvider: AuthProvider?
1818
var connectedProviders: [AuthProvider] = []
1919
var disconnectedProviders: [AuthProvider] = []
20+
var activeLoadingProvider: AuthProvider?
2021
var loading = LoadingFeature.State()
2122

2223
var isLoading: Bool {
@@ -56,8 +57,12 @@ struct AccountFeature {
5657
case .onAppear:
5758
return fetchProvidersEffect()
5859
case .linkWithProvider(let provider):
60+
guard !state.isLoading else { return .none }
61+
state.activeLoadingProvider = provider
5962
return linkProviderEffect(provider)
6063
case .unlinkFromProvider(let provider):
64+
guard !state.isLoading else { return .none }
65+
state.activeLoadingProvider = provider
6166
return unlinkProviderEffect(provider)
6267
case .setAlert(let type):
6368
state.alert = Self.alertState(for: type)
@@ -67,7 +72,9 @@ struct AccountFeature {
6772
state.disconnectedProviders = AuthProvider.allCases
6873
.filter { !allProviders.contains($0) }
6974
case .loading:
70-
break
75+
if !state.isLoading {
76+
state.activeLoadingProvider = nil
77+
}
7178
}
7279
return .none
7380
}

Application/DevLogPresentation/Sources/Settings/AccountView.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,29 @@ struct AccountView: View {
2828
HStack {
2929
providerContent(provider)
3030
Spacer()
31-
Button {
32-
if isConnected {
33-
store.send(.unlinkFromProvider(provider))
34-
} else {
35-
store.send(.linkWithProvider(provider))
36-
}
37-
} label: {
38-
Text(isConnected
39-
? String(localized: "account_disconnect")
40-
: String(localized: "account_connect"))
31+
if store.isLoading && store.activeLoadingProvider == provider {
32+
ProgressView()
33+
.id(UUID())
34+
} else {
35+
Button {
36+
if isConnected {
37+
store.send(.unlinkFromProvider(provider))
38+
} else {
39+
store.send(.linkWithProvider(provider))
40+
}
41+
} label: {
42+
Text(isConnected
43+
? String(localized: "account_disconnect")
44+
: String(localized: "account_connect"))
4145
.font(.caption.weight(.semibold))
4246
.foregroundStyle(.white)
4347
.padding(.horizontal, 12)
4448
.padding(.vertical, 6)
4549
.background(isConnected ? Color.red : .blue)
4650
.clipShape(.capsule)
51+
}
52+
.buttonStyle(.plain)
4753
}
48-
.buttonStyle(.plain)
4954
}
5055
}
5156
}
@@ -55,11 +60,6 @@ struct AccountView: View {
5560
.navigationTitle(String(localized: "nav_account"))
5661
.onAppear { store.send(.onAppear) }
5762
.alert($store.scope(state: \.alert, action: \.alert))
58-
.overlay {
59-
if store.isLoading {
60-
LoadingView()
61-
}
62-
}
6363
}
6464

6565
private func formattedProviderName(_ provider: AuthProvider) -> String {

Application/DevLogPresentation/Tests/Settings/AccountFeatureTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ struct AccountFeatureTests {
110110
}
111111

112112
#expect(driver.isLoading)
113+
#expect(driver.activeLoadingProvider == .github)
113114

114115
linkSpy.resume()
115116

@@ -252,6 +253,10 @@ private struct AccountTestDriver {
252253
feature.state.isLoading
253254
}
254255

256+
var activeLoadingProvider: AuthProvider? {
257+
feature.state.activeLoadingProvider
258+
}
259+
255260
var alert: AlertState<Never>? {
256261
feature.state.alert
257262
}

0 commit comments

Comments
 (0)