diff options
| author | Dustin Mierau <dustin@mierau.me> | 2024-01-03 15:40:24 -0800 |
|---|---|---|
| committer | Dustin Mierau <dustin@mierau.me> | 2024-01-03 15:40:24 -0800 |
| commit | 64368ad8690f0a071f2490e8429c0437694133ee (patch) | |
| tree | 2e0eac2130ff39498ccab2fa8f6abf905f7c5a4d /Hotline/macOS/SettingsView.swift | |
| parent | 4d31accad9d6bf901928f4293f29cb62f6f77260 (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.swift | 33 |
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() |