aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/SettingsView.swift
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2024-01-03 15:40:24 -0800
committerDustin Mierau <dustin@mierau.me>2024-01-03 15:40:24 -0800
commit64368ad8690f0a071f2490e8429c0437694133ee (patch)
tree2e0eac2130ff39498ccab2fa8f6abf905f7c5a4d /Hotline/macOS/SettingsView.swift
parent4d31accad9d6bf901928f4293f29cb62f6f77260 (diff)
Fix issue with username saving to server with each change in username textfield.
Diffstat (limited to 'Hotline/macOS/SettingsView.swift')
-rw-r--r--Hotline/macOS/SettingsView.swift33
1 files changed, 27 insertions, 6 deletions
diff --git a/Hotline/macOS/SettingsView.swift b/Hotline/macOS/SettingsView.swift
index 54710d1..350c70f 100644
--- a/Hotline/macOS/SettingsView.swift
+++ b/Hotline/macOS/SettingsView.swift
@@ -2,12 +2,17 @@ import SwiftUI
struct GeneralSettingsView: View {
@Environment(Prefs.self) private var preferences: Prefs
+
+ @State private var username: String = ""
+ @State private var usernameChanged: Bool = false
+
+ let saveTimer = Timer.publish(every: 5, on: .main, in: .common).autoconnect()
var body: some View {
@Bindable var preferences = preferences
Form {
- TextField("Your Name", text: $preferences.username, prompt: Text("guest"))
+ TextField("Your Name", text: $username, prompt: Text("guest"))
Toggle("Refuse private messages", isOn: $preferences.refusePrivateMessages)
Toggle("Refuse private chat", isOn: $preferences.refusePrivateChat)
Toggle("Automatic Response", isOn: $preferences.enableAutomaticMessage)
@@ -15,13 +20,31 @@ struct GeneralSettingsView: View {
TextField("", text: $preferences.automaticMessage, prompt: Text("Write a response message"))
.lineLimit(2)
.multilineTextAlignment(.leading)
-// .fixedSize(horizontal: true, vertical: false)
.frame(maxWidth: .infinity)
-// .lineLimit(2, reservesSpace: true)
+ .onSubmit(of: .text) {
+ preferences.username = self.username
+ }
}
}
.padding(20)
.frame(width: 350)
+ .onAppear {
+ self.username = preferences.username
+ self.usernameChanged = false
+ }
+ .onDisappear {
+ preferences.username = self.username
+ self.usernameChanged = false
+ }
+ .onChange(of: username) { oldValue, newValue in
+ self.usernameChanged = true
+ }
+ .onReceive(saveTimer) { _ in
+ if self.usernameChanged {
+ self.usernameChanged = false
+ preferences.username = self.username
+ }
+ }
}
}
@@ -30,8 +53,6 @@ struct IconSettingsView: View {
@State private var hoveredUserIconID: Int = -1
-// @AppStorage(Prefs.userIconID) private var userIconID: Int = Prefs.defaultIconID
-
var body: some View {
@Bindable var preferences = preferences
@@ -94,7 +115,7 @@ struct SettingsView: View {
TabView {
GeneralSettingsView()
.tabItem {
- Label("General", systemImage: "gear")
+ Label("General", systemImage: "person.text.rectangle")
}
.tag(Tabs.general)
IconSettingsView()