Multi select improvements

This commit is contained in:
Balazs Perlaki-Horvath 2025-04-10 23:27:21 +02:00
parent a289dbc9da
commit 909043d38f
3 changed files with 21 additions and 9 deletions

View File

@ -44,8 +44,27 @@ enum LibraryState {
}
final class LibraryViewModel: ObservableObject {
@Published var selectedZimFile: ZimFile?
@Published var multiSelectedZimFiles = Set<ZimFile>()
@Published var selectedZimFile: ZimFile? {
didSet {
if let selectedZimFile {
multiSelectedZimFiles = Set([selectedZimFile])
} else {
multiSelectedZimFiles.removeAll()
}
}
}
@Published var multiSelectedZimFiles = Set<ZimFile>() {
didSet {
switch multiSelectedZimFiles.count {
case 0 where selectedZimFile != nil:
selectedZimFile = nil
case 1 where selectedZimFile == nil:
selectedZimFile = multiSelectedZimFiles.first
default:
break
}
}
}
@MainActor @Published private(set) var error: Error?
/// Note: due to multiple instances of LibraryViewModel,
/// this `state` should not be changed directly, modify the `process.state` instead

View File

@ -149,9 +149,6 @@ struct LibraryZimFileContext<Content: View>: View {
content
.gesture(TapGesture().modifiers(.command).onEnded({ value in
viewModel.toggleMultiSelect(of: zimFile)
if viewModel.multiSelectedZimFiles.count > 0 {
viewModel.selectedZimFile = nil
}
}))
.gesture(TapGesture().onEnded({ _ in
viewModel.selectedZimFile = zimFile

View File

@ -63,10 +63,6 @@ struct ZimFilesOpened: View {
}
.onChange(of: zimFiles.count) { _ in
viewModel.selectedZimFile = zimFiles.first // makes sure we also nil out, if all ZIMs were unlinked
viewModel.multiSelectedZimFiles.removeAll()
}
.onDisappear {
viewModel.multiSelectedZimFiles.removeAll()
}
// not using OpenFileButton here, because it does not work on iOS/iPadOS 15 when this view is in a modal
.fileImporter(