53 lines
1.6 KiB
Swift
53 lines
1.6 KiB
Swift
import SwiftUI
|
|
import QuickLook
|
|
|
|
/// Native full-screen PDF reading, including zoom, page navigation and system open-in actions.
|
|
struct LeadDocumentPreview: View {
|
|
let url: URL
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
LeadQuickLookView(url: url)
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .confirmationAction) {
|
|
Button(role: .confirm) { dismiss() }
|
|
.labelStyle(.iconOnly)
|
|
.accessibilityLabel("Zurück zur Unterschrift")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private struct LeadQuickLookView: UIViewControllerRepresentable {
|
|
let url: URL
|
|
|
|
func makeUIViewController(context: Context) -> QLPreviewController {
|
|
let controller = QLPreviewController()
|
|
controller.dataSource = context.coordinator
|
|
return controller
|
|
}
|
|
|
|
func updateUIViewController(_ controller: QLPreviewController, context: Context) {
|
|
guard context.coordinator.url != url else { return }
|
|
context.coordinator.url = url
|
|
controller.reloadData()
|
|
}
|
|
|
|
func makeCoordinator() -> Coordinator { Coordinator(url: url) }
|
|
|
|
final class Coordinator: NSObject, QLPreviewControllerDataSource {
|
|
var url: URL
|
|
|
|
init(url: URL) { self.url = url }
|
|
|
|
func numberOfPreviewItems(in controller: QLPreviewController) -> Int { 1 }
|
|
|
|
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> any QLPreviewItem {
|
|
url as NSURL
|
|
}
|
|
}
|
|
}
|