2024-07-02 09:56:27 +00:00
|
|
|
import SwiftUI
|
|
|
|
import UIKit
|
|
|
|
|
2024-09-03 15:13:58 +00:00
|
|
|
struct FilesPickerView: View {
|
|
|
|
@Environment(\.router) var router
|
|
|
|
@EnvironmentObject var attachments: AttachmentsStore
|
2024-07-10 13:00:54 +00:00
|
|
|
|
2024-07-02 09:56:27 +00:00
|
|
|
var body: some View {
|
2024-07-10 13:00:54 +00:00
|
|
|
DocumentPicker(
|
2024-07-16 18:05:15 +00:00
|
|
|
completion: { dataArray, extensionsArray in
|
2024-09-03 15:13:58 +00:00
|
|
|
attachments.sendDocuments(dataArray, extensionsArray)
|
|
|
|
router.dismissEnvironment()
|
2024-07-10 13:00:54 +00:00
|
|
|
},
|
|
|
|
cancel: {
|
2024-09-03 15:13:58 +00:00
|
|
|
router.dismissEnvironment()
|
2024-07-10 13:00:54 +00:00
|
|
|
}
|
|
|
|
)
|
2024-07-02 09:56:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct DocumentPicker: UIViewControllerRepresentable {
|
2024-07-16 18:05:15 +00:00
|
|
|
let completion: ([Data], [String]) -> Void
|
2024-07-10 13:00:54 +00:00
|
|
|
let cancel: () -> Void
|
|
|
|
|
2024-07-02 09:56:27 +00:00
|
|
|
func makeUIViewController(context: UIViewControllerRepresentableContext<DocumentPicker>) -> UIDocumentPickerViewController {
|
2024-07-04 11:45:39 +00:00
|
|
|
let picker: UIDocumentPickerViewController
|
|
|
|
picker = UIDocumentPickerViewController(forOpeningContentTypes: [.item], asCopy: true)
|
2024-07-02 09:56:27 +00:00
|
|
|
picker.delegate = context.coordinator
|
|
|
|
picker.allowsMultipleSelection = true
|
|
|
|
return picker
|
|
|
|
}
|
|
|
|
|
|
|
|
func updateUIViewController(_: UIDocumentPickerViewController, context _: UIViewControllerRepresentableContext<DocumentPicker>) {}
|
|
|
|
|
|
|
|
func makeCoordinator() -> Coordinator {
|
|
|
|
Coordinator(self)
|
|
|
|
}
|
|
|
|
|
|
|
|
class Coordinator: NSObject, UIDocumentPickerDelegate {
|
|
|
|
var parent: DocumentPicker
|
|
|
|
|
|
|
|
init(_ parent: DocumentPicker) {
|
|
|
|
self.parent = parent
|
|
|
|
}
|
|
|
|
|
2024-07-10 14:48:18 +00:00
|
|
|
func documentPicker(_: UIDocumentPickerViewController, didPickDocumentsAt: [URL]) {
|
|
|
|
var dataArray = [Data]()
|
2024-07-16 18:05:15 +00:00
|
|
|
var extensionArray = [String]()
|
2024-07-10 14:48:18 +00:00
|
|
|
for url in didPickDocumentsAt {
|
|
|
|
do {
|
|
|
|
let data = try Data(contentsOf: url)
|
|
|
|
dataArray.append(data)
|
2024-07-16 18:05:15 +00:00
|
|
|
extensionArray.append(url.pathExtension)
|
2024-07-10 14:48:18 +00:00
|
|
|
} catch {
|
|
|
|
print("Unable to load data from \(url): \(error)")
|
|
|
|
}
|
|
|
|
}
|
2024-07-16 18:05:15 +00:00
|
|
|
parent.completion(dataArray, extensionArray)
|
2024-07-02 09:56:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func documentPickerWasCancelled(_: UIDocumentPickerViewController) {
|
2024-07-10 13:00:54 +00:00
|
|
|
parent.cancel()
|
2024-07-02 09:56:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|