view LazyBear/UI/ThemePicker.swift @ 203:ca0c3d07c6d5

Add ThemePicker
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Fri, 26 Feb 2021 20:01:28 +0000
parents
children cd9c72c3bc16
line wrap: on
line source

//
//  ThemePicker.swift
//  LazyBear
//
//  Created by Dennis Concepción Martín on 26/2/21.
//

import SwiftUI

struct ThemePicker: View {
    @Environment(\.managedObjectContext) private var moc
    @State var theme: String
    
    var body: some View {
        Picker("Themes", selection: $theme) {
            ForEach(themes, id: \.name) { theme in
                HStack {
                    RoundedRectangle(cornerRadius: 4)
                        .frame(width: 20, height: 20)
                        .foregroundColor(Color("\(theme.name.lowercased())Accent"))
                    
                    Text(theme.name)
                        .tag(theme.name)
                }
            }
        }
        .onChange(of: theme, perform: { theme in
            save(change: theme)
        })
    }
    
    private func save(change: Any) {
        let userSettings = UserSettings(context: moc)
        userSettings.changedAt = Date()
        userSettings.theme = change as? String
        do {
            try moc.save()
            print("Settings saved")
        } catch {
            print(error.localizedDescription)
        }
    }
}

struct ThemePicker_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView {
            Form {
                ThemePicker(theme: "Default")
            }
            .navigationBarHidden(true)
        }
    }
}