Skip to content

Commit 9a0d97b

Browse files
committed
Improve note editor activity title update
1 parent 2101643 commit 9a0d97b

File tree

4 files changed

+25
-3
lines changed

4 files changed

+25
-3
lines changed

Zotero/Scenes/Detail/DetailCoordinator.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,6 @@ extension DetailCoordinator: DetailNoteEditorCoordinatorDelegate {
10091009
// If indeed a new note is created inform open items controller about it.
10101010
if isCreated, let self, let openItemsController = controllers.userControllers?.openItemsController {
10111011
openItemsController.open(.note(libraryId: library.identifier, key: note.key), for: sessionIdentifier)
1012-
openItemsController.setOpenItemsUserActivity(from: navigationController, libraryId: library.identifier, title: note.title)
10131012
}
10141013

10151014
case .failure:

Zotero/Scenes/General/Models/NoteEditorState.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ struct NoteEditorState: ViewModelState {
3636
static let tags = Changes(rawValue: 1 << 0)
3737
static let save = Changes(rawValue: 1 << 1)
3838
static let openItems = Changes(rawValue: 1 << 2)
39+
static let displayTitle = Changes(rawValue: 1 << 3)
3940
}
4041

4142
struct TitleData {
@@ -55,6 +56,7 @@ struct NoteEditorState: ViewModelState {
5556
var tags: [Tag]
5657
var changes: Changes
5758
var openItemsCount: Int
59+
var displayTitle: String?
5860

5961
init(kind: Kind, library: Library, title: TitleData?, text: String, tags: [Tag], openItemsCount: Int) {
6062
self.kind = kind
@@ -64,6 +66,13 @@ struct NoteEditorState: ViewModelState {
6466
self.title = title
6567
changes = []
6668
self.openItemsCount = openItemsCount
69+
displayTitle = generateDisplayTitle()
70+
}
71+
72+
func generateDisplayTitle() -> String? {
73+
let parts = [title?.title, NotePreviewGenerator.preview(from: text)].compactMap({ $0 })
74+
guard !parts.isEmpty else { return nil }
75+
return parts.joined(separator: " / ")
6776
}
6877

6978
mutating func cleanup() {

Zotero/Scenes/General/ViewModels/NoteEditorActionHandler.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ struct NoteEditorActionHandler: ViewModelActionHandler, BackgroundDbProcessingAc
103103
state.kind = .edit(key: note.key)
104104
}
105105
saveCallback(note.key, .success((note: note, isCreated: true)))
106+
updateDisplayTitleIfNeeded()
106107

107108
case .failure(let error):
108109
DDLogError("NoteEditorActionHandler: can't create item note: \(error)")
@@ -120,9 +121,19 @@ struct NoteEditorActionHandler: ViewModelActionHandler, BackgroundDbProcessingAc
120121
saveCallback(key, .failure(error))
121122
} else {
122123
saveCallback(key, .success((note: note, isCreated: false)))
124+
updateDisplayTitleIfNeeded()
123125
}
124126
}
125127
}
128+
129+
func updateDisplayTitleIfNeeded() {
130+
let displayTitle = viewModel.state.generateDisplayTitle()
131+
guard displayTitle != viewModel.state.displayTitle else { return }
132+
update(viewModel: viewModel) { state in
133+
state.displayTitle = displayTitle
134+
state.changes = [.displayTitle]
135+
}
136+
}
126137
}
127138
}
128139
}

Zotero/Scenes/General/Views/NoteEditorViewController.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ final class NoteEditorViewController: UIViewController {
5252
override func viewDidLoad() {
5353
super.viewDidLoad()
5454

55-
openItemsController.setOpenItemsUserActivity(from: self, libraryId: viewModel.state.library.identifier, title: viewModel.state.title?.title)
55+
openItemsController.setOpenItemsUserActivity(from: self, libraryId: viewModel.state.library.identifier, title: viewModel.state.displayTitle)
5656

5757
if let data = viewModel.state.title {
5858
navigationItem.titleView = NoteEditorTitleView(type: data.type, title: data.title)
@@ -115,7 +115,7 @@ final class NoteEditorViewController: UIViewController {
115115
if changedCurrentItem {
116116
forceSaveIfNeeded()
117117
} else if openItemsChanged {
118-
openItemsController.setOpenItemsUserActivity(from: self, libraryId: viewModel.state.library.identifier, title: viewModel.state.title?.title)
118+
openItemsController.setOpenItemsUserActivity(from: self, libraryId: viewModel.state.library.identifier, title: viewModel.state.displayTitle)
119119
}
120120
}
121121
)
@@ -164,6 +164,9 @@ final class NoteEditorViewController: UIViewController {
164164
if state.changes.contains(.openItems) {
165165
setupNavbarItems(for: state)
166166
}
167+
if state.changes.contains(.displayTitle) {
168+
openItemsController.setOpenItemsUserActivity(from: self, libraryId: state.library.identifier, title: state.displayTitle)
169+
}
167170

168171
func debounceSave() {
169172
debounceDisposeBag = nil

0 commit comments

Comments
 (0)