// // SharedNoteEditor.swift // Peered // // Created by Oskar Chybowski on 07/10/2025. // import SwiftUI struct SharedNoteEditor: View { @State var note: String? @State var remoteNote: String? = nil @State var invitation: NoteInvitation @Bindable var noteClient: NoteEditingSessionClient init( invitation: NoteInvitation, noteClient: NoteEditingSessionClient ) { self._invitation = .init(initialValue: invitation) self._noteClient = .init(noteClient) } var body: some View { ZStack { if let note = Binding($note) { NoteTextEditor(text: note, remoteText: remoteNote) } else { ProgressView { Text("Fetching note...") } } } .onReceive(noteClient.noteChangesEmitter) { message in guard message.senderID != noteClient.ownPeer.displayName else { return } remoteNote = message.content } .task(id: note) { try? await Task.sleep(nanoseconds: 500_000_000) guard !Task.isCancelled, let note else { return } noteClient.send(note: note, to: invitation.invitatorID) } .onAppear { invitation.accept() note = invitation.note.noteSnapshot } } }