Make the row checkbox select items instead of ticking them off
The checkbox was marking items done, but the intent was to gather items and act on them: tick several, then right-click to copy, copy as a list, move, merge or delete them all at once. Done is still available from the same menu, it is just no longer what the checkbox does.
This commit is contained in:
@@ -190,18 +190,49 @@ final class Store: ObservableObject {
|
||||
}
|
||||
|
||||
func delete(_ id: UUID) {
|
||||
delete(ids: [id])
|
||||
}
|
||||
|
||||
/// Deletes every item in `ids` in one pass, cleaning up their image files.
|
||||
func delete(ids: Set<UUID>) {
|
||||
guard !ids.isEmpty else { return }
|
||||
var removedAny = false
|
||||
for sectionIndex in sections.indices {
|
||||
if let itemIndex = sections[sectionIndex].items.firstIndex(where: { $0.id == id }) {
|
||||
let item = sections[sectionIndex].items[itemIndex]
|
||||
for item in sections[sectionIndex].items where ids.contains(item.id) {
|
||||
removedAny = true
|
||||
if case .image(let filename) = item.content {
|
||||
try? FileManager.default.removeItem(at: imagesDirectory.appendingPathComponent(filename))
|
||||
imageCache.removeObject(forKey: filename as NSString)
|
||||
}
|
||||
sections[sectionIndex].items.remove(at: itemIndex)
|
||||
save()
|
||||
return
|
||||
}
|
||||
sections[sectionIndex].items.removeAll { ids.contains($0.id) }
|
||||
}
|
||||
if removedAny { save() }
|
||||
}
|
||||
|
||||
func setDone(_ done: Bool, ids: Set<UUID>) {
|
||||
guard !ids.isEmpty else { return }
|
||||
for sectionIndex in sections.indices {
|
||||
for itemIndex in sections[sectionIndex].items.indices
|
||||
where ids.contains(sections[sectionIndex].items[itemIndex].id) {
|
||||
sections[sectionIndex].items[itemIndex].done = done
|
||||
}
|
||||
}
|
||||
save()
|
||||
}
|
||||
|
||||
/// Moves every item in `ids` into `targetSectionID`, keeping their order.
|
||||
func move(ids: Set<UUID>, to targetSectionID: UUID) {
|
||||
guard !ids.isEmpty,
|
||||
let targetIndex = sections.firstIndex(where: { $0.id == targetSectionID }) else { return }
|
||||
var moved: [PromptItem] = []
|
||||
for sectionIndex in sections.indices where sectionIndex != targetIndex {
|
||||
moved.append(contentsOf: sections[sectionIndex].items.filter { ids.contains($0.id) })
|
||||
sections[sectionIndex].items.removeAll { ids.contains($0.id) }
|
||||
}
|
||||
guard !moved.isEmpty else { return }
|
||||
sections[targetIndex].items.append(contentsOf: moved)
|
||||
save()
|
||||
}
|
||||
|
||||
func move(_ id: UUID, to targetSectionID: UUID) {
|
||||
|
||||
Reference in New Issue
Block a user