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() }