Skip to content

Commit f854e18

Browse files
committed
ui: 메뉴 대신 Section을 재활용하여 계정 연동을 하도록 수정
1 parent 307733c commit f854e18

2 files changed

Lines changed: 39 additions & 48 deletions

File tree

DevLog/Resource/Localizable.xcstrings

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,6 @@
266266
},
267267
"검색어를 입력해 저장한 앱 컨텐츠를 찾아보세요." : {
268268

269-
},
270-
"계정 삭제" : {
271-
272269
},
273270
"계정 연동" : {
274271

@@ -323,9 +320,6 @@
323320
},
324321
"상태 설정" : {
325322

326-
},
327-
"새 계정 연동" : {
328-
329323
},
330324
"생성일" : {
331325

@@ -338,6 +332,9 @@
338332
},
339333
"설정에서의 푸시 알람 설정과 별개입니다." : {
340334

335+
},
336+
"소셜 계정" : {
337+
341338
},
342339
"수정" : {
343340

@@ -351,10 +348,13 @@
351348
"알림" : {
352349

353350
},
354-
"연도" : {
351+
"연결" : {
355352

356353
},
357-
"연동된 계정" : {
354+
"연결 해제" : {
355+
356+
},
357+
"연도" : {
358358

359359
},
360360
"오늘" : {

DevLog/UI/Setting/AccountView.swift

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,58 +16,40 @@ struct AccountView: View {
1616
Section("현재 계정") {
1717
HStack {
1818
if let provider = viewModel.state.currentProvider {
19-
let formattedProvider = formattedProviderName(provider)
20-
Image(formattedProvider)
21-
.resizable()
22-
.scaledToFit()
23-
.frame(width: UIFont.labelFontSize)
24-
Text(formattedProvider)
19+
providerContent(provider)
2520
}
2621
}
2722
}
28-
Section("연동된 계정") {
29-
ForEach(viewModel.state.connectedProviders, id: \.self) { provider in
23+
Section("소셜 계정") {
24+
let providers = AuthProvider.allCases.filter { $0 != viewModel.state.currentProvider }
25+
ForEach(providers, id: \.self) { provider in
26+
let isConnected = viewModel.state.connectedProviders.contains(provider)
3027
HStack {
31-
let formattedProvider = formattedProviderName(provider)
32-
Image(formattedProvider)
33-
.resizable()
34-
.scaledToFit()
35-
.frame(width: UIFont.labelFontSize)
36-
Text(formattedProvider)
37-
}
38-
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
39-
Button(role: .destructive, action: {
40-
viewModel.send(.unlinkFromProvider(provider))
41-
}) {
42-
Label("계정 삭제", systemImage: "trash")
28+
providerContent(provider)
29+
Spacer()
30+
Button {
31+
if isConnected {
32+
viewModel.send(.unlinkFromProvider(provider))
33+
} else {
34+
viewModel.send(.linkWithProvider(provider))
35+
}
36+
} label: {
37+
Text(isConnected ? "연결 해제" : "연결")
38+
.font(.caption.weight(.semibold))
39+
.foregroundStyle(.white)
40+
.padding(.horizontal, 12)
41+
.padding(.vertical, 6)
42+
.background(isConnected ? Color.red : .blue)
43+
.clipShape(.capsule)
4344
}
45+
.buttonStyle(.plain)
4446
}
4547
}
4648
}
4749
}
4850
.scrollDisabled(true)
4951
.listStyle(.insetGrouped)
5052
.navigationTitle("계정 연동")
51-
.toolbar {
52-
ToolbarItem(placement: .topBarTrailing) {
53-
Menu("새 계정 연동", systemImage: "plus") {
54-
ForEach(viewModel.state.disconnectedProviders, id: \.self) { provider in
55-
Button(action: {
56-
viewModel.send(.linkWithProvider(provider))
57-
}) {
58-
HStack {
59-
let formattedProvider = formattedProviderName(provider)
60-
Image(formattedProvider)
61-
.resizable()
62-
.scaledToFit()
63-
.frame(width: UIFont.systemFontSize, height: UIFont.systemFontSize)
64-
Text(formattedProvider)
65-
}
66-
}
67-
}
68-
}
69-
}
70-
}
7153
.onAppear {
7254
viewModel.send(.onAppear)
7355
}
@@ -98,4 +80,13 @@ struct AccountView: View {
9880
let providerSuffix = rawValue.dropFirst().prefix(while: { $0 != "." })
9981
return providerPrefix + providerSuffix
10082
}
83+
84+
@ViewBuilder
85+
private func providerContent(_ provider: AuthProvider) -> some View {
86+
Image(formattedProviderName(provider))
87+
.resizable()
88+
.scaledToFit()
89+
.frame(width: UIFont.labelFontSize)
90+
Text(formattedProviderName(provider))
91+
}
10192
}

0 commit comments

Comments
 (0)