changeset 201:5c7a662c2d4e

Add languages settings
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Fri, 26 Feb 2021 20:01:03 +0000
parents 6055ff3d400c
children addb06622ec8
files LazyBear/Local data/newsLanguages.json LazyBear/Models/NewsLanguageModel.swift LazyBear/UI/NewsLanguagePicker.swift
diffstat 3 files changed, 94 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/Local data/newsLanguages.json	Fri Feb 26 20:01:03 2021 +0000
@@ -0,0 +1,37 @@
+[
+    {
+        "name": "English", 
+        "code": "en",
+        "flag": "🇺🇸"
+    },
+    {
+        "name": "Spanish",
+        "code": "es",
+        "flag": "🇪🇸"
+    },
+    {
+        "name": "Italian",
+        "code": "it",
+        "flag": "🇮🇹"
+    },
+    {
+        "name": "French",
+        "code": "fr",
+        "flag": "🇫🇷"
+    },
+    {
+        "name": "German",
+        "code": "de",
+        "flag": "🇩🇪"
+    },
+    {
+        "name": "Portuguese",
+        "code": "pt",
+        "flag": "🇵🇹"
+    },
+    {
+        "name": "Russian",
+        "code": "ru",
+        "flag": "🇷🇺"
+    }
+]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/Models/NewsLanguageModel.swift	Fri Feb 26 20:01:03 2021 +0000
@@ -0,0 +1,14 @@
+//
+//  NewsLanguageModel.swift
+//  LazyBear
+//
+//  Created by Dennis Concepción Martín on 26/2/21.
+//
+
+import SwiftUI
+
+struct NewsLanguageModel: Codable, Hashable {
+    var name: String
+    var code: String
+    var flag: String
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/UI/NewsLanguagePicker.swift	Fri Feb 26 20:01:03 2021 +0000
@@ -0,0 +1,43 @@
+//
+//  NewsLanguagePicker.swift
+//  LazyBear
+//
+//  Created by Dennis Concepción Martín on 26/2/21.
+//
+
+import SwiftUI
+
+struct NewsLanguagePicker: View {
+    @Environment(\.managedObjectContext) private var moc
+    @State var language: String
+    
+    var body: some View {
+        Picker("News language", selection: $language) {
+            ForEach(newsLanguages, id: \.self) { language in
+                Text("\(language.flag) \(language.name)")
+                    .tag(language.code)
+            }
+        }
+        .onChange(of: language, perform: { language in
+            save(change: language)
+        })
+    }
+    
+    private func save(change: Any) {
+        let userSettings = UserSettings(context: moc)
+        userSettings.changedAt = Date()
+        userSettings.newsLanguage = change as? String
+        do {
+            try moc.save()
+            print("Settings saved")
+        } catch {
+            print(error.localizedDescription)
+        }
+    }
+}
+
+struct NewsLanguagePicker_Previews: PreviewProvider {
+    static var previews: some View {
+        NewsLanguagePicker(language: "en")
+    }
+}