From c385eae0c79e9cc55a4f7f8511707cedd19b2c29 Mon Sep 17 00:00:00 2001 From: SSylvain1989 Date: Tue, 3 Mar 2026 21:27:46 +0100 Subject: [PATCH] Save note content when editor disappears Extract persistNote() from saveNote() to allow saving without closing the editor. Call persistNote() from onDisappear (when notch retracts) and cancelEdit() so user changes are never silently discarded. Empty new notes (no title, no content, no image) are skipped. --- .../components/Notch/NotchNotesView.swift | 85 +++++++++++-------- 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/DynamicIsland/components/Notch/NotchNotesView.swift b/DynamicIsland/components/Notch/NotchNotesView.swift index d78a1b8..177b3d9 100644 --- a/DynamicIsland/components/Notch/NotchNotesView.swift +++ b/DynamicIsland/components/Notch/NotchNotesView.swift @@ -102,6 +102,9 @@ struct NotchNotesView: View { updateLayoutState() } .onDisappear { + if isEditingNewNote || selectedNoteId != nil { + persistNote() + } coordinator.notesLayoutState = .list } .onChange(of: isEditingNewNote) { _, _ in @@ -197,48 +200,55 @@ struct NotchNotesView: View { isEditingNewNote = false } - private func saveNote() { + private func persistNote() { + guard let id = editorNoteId else { return } + + let isExistingNote = savedNotes.contains(where: { $0.id == id }) + if !isExistingNote && editorTitle.isEmpty && editorContent.isEmpty && editorImageData == nil { + return + } + var notes = savedNotes let now = Date() - - if let id = editorNoteId { - // Priority: Save image to disk if it exists - var fileName: String? = nil - if let data = editorImageData { - let name = "note_image_\(id.uuidString).png" - let fileURL = NoteItem.noteImageDataDirectory.appendingPathComponent(name) - try? data.write(to: fileURL) - fileName = name + + var fileName: String? = nil + if let data = editorImageData { + let name = "note_image_\(id.uuidString).png" + let fileURL = NoteItem.noteImageDataDirectory.appendingPathComponent(name) + try? data.write(to: fileURL) + fileName = name + } + + if let index = notes.firstIndex(where: { $0.id == id }) { + // Update + if let oldFileName = notes[index].imageFileName, oldFileName != fileName { + let oldFileURL = NoteItem.noteImageDataDirectory.appendingPathComponent(oldFileName) + try? FileManager.default.removeItem(at: oldFileURL) } - if let index = notes.firstIndex(where: { $0.id == id }) { - // Update - // If there was an old image and it's being replaced or removed, delete old file - if let oldFileName = notes[index].imageFileName, oldFileName != fileName { - let oldFileURL = NoteItem.noteImageDataDirectory.appendingPathComponent(oldFileName) - try? FileManager.default.removeItem(at: oldFileURL) - } - - notes[index].title = editorTitle - notes[index].content = editorContent - notes[index].imageFileName = fileName - notes[index].colorIndex = editorColorIndex - } else { - // Create - let newNote = NoteItem( - id: id, - title: editorTitle.isEmpty ? "Untitled Note" : editorTitle, - content: editorContent, - creationDate: now, - colorIndex: editorColorIndex, - isPinned: false, - imageFileName: fileName - ) - notes.insert(newNote, at: 0) - } - savedNotes = notes // Persistence fix: save back to @Default + notes[index].title = editorTitle + notes[index].content = editorContent + notes[index].imageFileName = fileName + notes[index].colorIndex = editorColorIndex + } else { + // Create + let newNote = NoteItem( + id: id, + title: editorTitle.isEmpty ? "Untitled Note" : editorTitle, + content: editorContent, + creationDate: now, + colorIndex: editorColorIndex, + isPinned: false, + imageFileName: fileName + ) + notes.insert(newNote, at: 0) } - + + savedNotes = notes + } + + private func saveNote() { + persistNote() closeEditor() } @@ -311,6 +321,7 @@ struct NotchNotesView: View { } private func cancelEdit() { + persistNote() closeEditor() }