Files
Gas-Tank-AR-App/GasTankAR/Views/Leads/Detail/LeadPDFPreview.swift

63 lines
2.4 KiB
Swift

import SwiftUI
import PDFKit
struct LeadPDFPreview: View {
let document: LeadDocument
let leadID: String
let salesCode: String
let repository: any LeadDetailRepository
let onLogout: () -> Void
var signedURL: URL? = nil
@State private var model = LeadFileViewModel()
@State private var retryID = 0
@State private var showsPreview = false
@Environment(\.dismiss) private var dismiss
var body: some View {
NavigationStack {
ZStack {
if let url = signedURL ?? model.url {
LeadPDFView(url: url)
.fullScreenCover(isPresented: $showsPreview) {
LeadDocumentPreview(url: url)
}
} else if let message = model.message {
ContentUnavailableView {
Label("PDF konnte nicht geöffnet werden", systemImage: "doc.badge.ellipsis")
} description: { Text(message) } actions: {
if model.needsLogin {
Button("Erneut anmelden", action: onLogout)
} else if model.allowsRetry {
Button("Erneut versuchen") { retryID += 1 }
}
}
} else {
ProgressView("PDF wird heruntergeladen …")
}
}
.navigationTitle(document.title)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button(role: .cancel) { dismiss() }
.labelStyle(.iconOnly)
}
ToolbarItem(placement: .topBarTrailing) {
Button("In Vorschau öffnen", systemImage: "arrow.up.left.and.arrow.down.right") {
showsPreview = true
}
.labelStyle(.iconOnly)
.disabled(signedURL == nil && model.url == nil)
}
}
.task(id: retryID) {
guard signedURL == nil else { return }
await model.load {
try await DownloadLeadDocumentUseCase(repository: repository)
.execute(document, leadID: leadID, salesCode: salesCode)
}
}
}
}
}