// // SettingsView.swift // Feels // // Created by Trey Tartt on 1/8/22. // import SwiftUI struct SettingsView: View { @Environment(\.dismiss) var dismiss @AppStorage("notificationDate") private var notificationDate = Date() { didSet { if self.showReminder { LocalNotification.scheduleReminder(atTime: self.notificationDate) } } } @AppStorage("showReminder") private var showReminder: Bool = false var body: some View { ZStack { Color(UIColor.secondarySystemBackground) VStack { closeButtonView .padding() notificationCell randomShitCell addTestDataCell clearDB whyBackgroundMode Spacer() } .padding() } } private var closeButtonView: some View { HStack{ Spacer() Button(action: { dismiss() }, label: { Text("Exit") .font(.body) .foregroundColor(Color(UIColor.systemBlue)) }) } } private var notificationCell: some View { ZStack { Color(UIColor.systemBackground) VStack { Toggle("Would you like to be reminded?", isOn: $showReminder) .onChange(of: showReminder, perform: { value in self.maybeNotificaiotns(areEnabled: value) }) .padding() DatePicker("", selection: $notificationDate, displayedComponents: .hourAndMinute) .onChange(of: notificationDate, perform: { value in self.updateNotificationTimes(toDate: value) }) .disabled(showReminder == false) .padding() } } .fixedSize(horizontal: false, vertical: true) .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) } private var randomShitCell: some View { ZStack { Color(UIColor.systemBackground) VStack { Button(action: { }, label: { Text("Special thanks to") }) .padding() } } .fixedSize(horizontal: false, vertical: true) .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) } private var addTestDataCell: some View { ZStack { Color(UIColor.systemBackground) Button(action: { PersistenceController.shared.populateTestData() }, label: { Text("Add test data") }) .padding() } .fixedSize(horizontal: false, vertical: true) .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) } private var clearDB: some View { ZStack { Color(UIColor.systemBackground) Button(action: { PersistenceController.shared.clearDB() }, label: { Text("Clear DB") }) .padding() } .fixedSize(horizontal: false, vertical: true) .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) } private var whyBackgroundMode: some View { ZStack { Color(UIColor.systemBackground) Text("we do bg mode b/c we can") .padding() } .fixedSize(horizontal: false, vertical: true) .clipShape(RoundedRectangle(cornerRadius: 25, style: .continuous)) } private func updateNotificationTimes(toDate date: Date) { LocalNotification.removeNotificaiton() LocalNotification.scheduleReminder(atTime: date) } private func maybeNotificaiotns(areEnabled: Bool) { if areEnabled { LocalNotification.testIfEnabled(completion: { result in switch result{ case .success(_): LocalNotification.scheduleReminder(atTime: self.notificationDate) case .failure(let error): print(error) // show error break } }) } else { LocalNotification.removeNotificaiton() } } } struct SettingsView_Previews: PreviewProvider { static var previews: some View { SettingsView() SettingsView() .preferredColorScheme(.dark) } }