mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 10:29:58 +02:00
fix(apple): make "Choose files" work on iOS/macOS < 27
The send flow stacked two .fileImporter modifiers on the same view (one for files, one for folders). On iOS/macOS before 27, SwiftUI can't have two presentation modifiers of the same kind on one view — the second shadows the first, so toggling the files importer presented nothing and "Choose files" appeared to do nothing. macOS/iOS 27 changed presentation handling, which is why it worked there. Collapse the two importers into a single .fileImporter that switches its allowedContentTypes and allowsMultipleSelection based on whether a file or folder pick is pending. Behavior is unchanged on 27 and now works on 26 and earlier.
This commit is contained in:
@@ -31,20 +31,27 @@ struct SendPickers: ViewModifier {
|
|||||||
@ObservedObject var model: SendModel
|
@ObservedObject var model: SendModel
|
||||||
|
|
||||||
func body(content: Content) -> some View {
|
func body(content: Content) -> some View {
|
||||||
|
// A single .fileImporter, switched between files and folders. Stacking two
|
||||||
|
// .fileImporter modifiers on one view silently breaks on iOS/macOS < 27:
|
||||||
|
// the second shadows the first, so "Choose files" never presents.
|
||||||
content
|
content
|
||||||
.fileImporter(
|
.fileImporter(
|
||||||
isPresented: Binding(get: { model.pendingFilePick }, set: { model.pendingFilePick = $0 }),
|
isPresented: Binding(
|
||||||
allowedContentTypes: [.item],
|
get: { model.pendingFilePick || model.pendingFolderPick },
|
||||||
allowsMultipleSelection: true
|
set: { presented in
|
||||||
) { result in
|
if !presented {
|
||||||
handleShareSelection(result, isDirectory: false)
|
model.pendingFilePick = false
|
||||||
|
model.pendingFolderPick = false
|
||||||
}
|
}
|
||||||
.fileImporter(
|
}
|
||||||
isPresented: Binding(get: { model.pendingFolderPick }, set: { model.pendingFolderPick = $0 }),
|
),
|
||||||
allowedContentTypes: [.folder],
|
allowedContentTypes: model.pendingFolderPick ? [.folder] : [.item],
|
||||||
allowsMultipleSelection: false
|
allowsMultipleSelection: !model.pendingFolderPick
|
||||||
) { result in
|
) { result in
|
||||||
handleShareSelection(result, isDirectory: true)
|
let isDirectory = model.pendingFolderPick
|
||||||
|
model.pendingFilePick = false
|
||||||
|
model.pendingFolderPick = false
|
||||||
|
handleShareSelection(result, isDirectory: isDirectory)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user