Skip to content

Commit 5cb3825

Browse files
committed
feat: initialize button states on "Check for new data"
1 parent ce75623 commit 5cb3825

1 file changed

Lines changed: 23 additions & 13 deletions

File tree

Scribe/InstallationTab/DownloadDataScreen.swift

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import SwiftUI
66

77
struct RadioCircle: View {
88
@Binding var isSelected: Bool
9+
var onSelect: () -> Void
910

1011
var body: some View {
1112
ZStack {
@@ -23,13 +24,15 @@ struct RadioCircle: View {
2324
.onTapGesture {
2425
withAnimation(.spring()) {
2526
isSelected.toggle()
27+
if isSelected { onSelect() }
2628
}
2729
}
2830
}
2931
}
3032

3133
struct UpdateDataCardView: View {
3234
var languages: [Section]
35+
var onInitializeStates: () -> Void
3336
private let title = NSLocalizedString(
3437
"i18n.app.download.menu_ui.update_data",
3538
value: "Update data",
@@ -63,7 +66,9 @@ struct UpdateDataCardView: View {
6366

6467
Spacer()
6568

66-
RadioCircle(isSelected: $isCheckNew)
69+
RadioCircle(isSelected: $isCheckNew, onSelect: {
70+
onInitializeStates()
71+
})
6772
}
6873
Divider()
6974
}
@@ -186,11 +191,12 @@ struct LanguageListView: View {
186191

187192
private var allLanguagesState: ButtonState {
188193
let states = stateManager.downloadStates.values
189-
if states.allSatisfy({ $0 == .downloading }) { return .downloading }
190194
if states.allSatisfy({ $0 == .updated }) { return .updated }
191-
if states.contains(.update) { return .update }
195+
if states.allSatisfy({ $0 == .downloading }) { return .downloading }
196+
let actionable = states.filter({ $0 != .updated })
197+
if actionable.allSatisfy({ $0 == .update }) { return .update }
192198
return .ready
193-
}
199+
}
194200

195201
var body: some View {
196202
ZStack {
@@ -298,25 +304,29 @@ struct DownloadDataScreen: View {
298304
@State private var languages = SettingsTableData.getInstalledKeyboardsSections()
299305
@StateObject private var stateManager = DownloadStateManager.shared
300306

307+
private func initializeLanguageStates() {
308+
// Extract language abbreviations from sections.
309+
let languageKeys = languages.compactMap { section -> String? in
310+
if case .specificLang(let abbreviation) = section.sectionState {
311+
return abbreviation.lowercased()
312+
}
313+
return nil
314+
}
315+
stateManager.initializeStates(languages: languageKeys)
316+
}
317+
301318
var body: some View {
302319
ScrollView {
303320
VStack(spacing: 20) {
304-
UpdateDataCardView(languages: languages)
321+
UpdateDataCardView(languages: languages, onInitializeStates: initializeLanguageStates)
305322
LanguageListView(onNavigateToTranslationSource: onNavigateToTranslationSource, languages: languages)
306323
}
307324
.padding()
308325
.background(Color(UIColor.scribeAppBackground))
309326
}
310327
.toast(manager: stateManager)
311328
.onAppear {
312-
// Extract language abbreviations from sections.
313-
let languageKeys = languages.compactMap { section -> String? in
314-
if case .specificLang(let abbreviation) = section.sectionState {
315-
return abbreviation.lowercased() // Convert to lowercase for API calls
316-
}
317-
return nil
318-
}
319-
stateManager.initializeStates(languages: languageKeys)
329+
initializeLanguageStates()
320330
}
321331
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
322332
// Refresh when returning from Settings

0 commit comments

Comments
 (0)