Implementation: fix checking the username so it won't generate undefined behavior during ui rendering
This commit is contained in:
@@ -17,17 +17,19 @@ struct ContentView: View {
|
||||
@State private var notesClient: NoteEditingSessionClient?
|
||||
@State private var ownPeer: OwnPeer?
|
||||
|
||||
var isUsernameValid: Bool {
|
||||
username != "fallback_user" && !username.isEmpty
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
List {
|
||||
Section("Your notes") {
|
||||
ForEach(notes) { note in
|
||||
NavigationLink(note.name) {
|
||||
let peer = ownPeer ?? .init(peer: .init(displayName: username))
|
||||
if ownPeer == nil {
|
||||
ownPeer = peer
|
||||
if let ownPeer {
|
||||
NoteEditorScreen(note: note, peer: ownPeer)
|
||||
}
|
||||
return NoteEditorScreen(note: note, peer: peer)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,15 +55,26 @@ struct ContentView: View {
|
||||
}
|
||||
.onAppear {
|
||||
notes = NotesStorage().loadNotes()
|
||||
if notesClient == nil {
|
||||
notesClient = .init(peer: .init(displayName: username))
|
||||
if isUsernameValid {
|
||||
setupSession()
|
||||
}
|
||||
notesClient?.startBrowsingForNotes()
|
||||
}
|
||||
.sheet(isPresented: .constant(username == "fallback_user" || username.isEmpty)) {
|
||||
.onChange(of: username) { _, newUsername in
|
||||
guard isUsernameValid else { return }
|
||||
setupSession()
|
||||
}
|
||||
.sheet(isPresented: .constant(!isUsernameValid)) {
|
||||
SetUserNameBottomSheetView(username: $username)
|
||||
}
|
||||
}
|
||||
|
||||
private func setupSession() {
|
||||
notesClient?.stopBrowsingForNotes()
|
||||
let peer = OwnPeer(peer: .init(displayName: username))
|
||||
ownPeer = peer
|
||||
notesClient = .init(peer: peer.peer)
|
||||
notesClient?.startBrowsingForNotes()
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
|
||||
Reference in New Issue
Block a user