Files
praca_inzynierska/Implementation/Peered/NoteEditor/SharedNoteEditor.swift
T
2026-05-16 13:58:38 +02:00

48 lines
1.1 KiB
Swift

//
// 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
}
}
}