Neon-Vision-Editor/Neon Vision Editor/UI/ProjectFolderPicker.swift

46 lines
1.4 KiB
Swift

#if canImport(UIKit)
import SwiftUI
import UniformTypeIdentifiers
import UIKit
struct ProjectFolderPicker: UIViewControllerRepresentable {
let onPick: (URL) -> Void
let onCancel: () -> Void
func makeCoordinator() -> Coordinator {
Coordinator(onPick: onPick, onCancel: onCancel)
}
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let picker = UIDocumentPickerViewController(forOpeningContentTypes: [.folder], asCopy: false)
picker.allowsMultipleSelection = false
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {
}
final class Coordinator: NSObject, UIDocumentPickerDelegate {
private let onPick: (URL) -> Void
private let onCancel: () -> Void
init(onPick: @escaping (URL) -> Void, onCancel: @escaping () -> Void) {
self.onPick = onPick
self.onCancel = onCancel
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
onCancel()
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
if let url = urls.first {
onPick(url)
} else {
onCancel()
}
}
}
}
#endif