mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
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.
This commit is contained in:
parent
c1a7ec7772
commit
c385eae0c7
1 changed files with 48 additions and 37 deletions
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue