@@ -6,6 +6,7 @@ import SwiftUI
66
77struct 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
3133struct 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