Preview diagram and PDF before sharing (iOS + Android)
iOS: route exports through QLPreviewController so users can inspect before sharing. Android: add a zoomable full-screen diagram preview with a share button; PDF still goes straight to the share sheet. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -29,7 +29,8 @@ struct LoadsView: View {
|
||||
@State private var overviewExportRequested = false
|
||||
@State private var diagramExportRequested = false
|
||||
@State private var isExportingOverview = false
|
||||
@State private var overviewShareItem: OverviewShareItem?
|
||||
@State private var previewURL: URL?
|
||||
@State private var previewTempURL: URL?
|
||||
@State private var overviewExportError: OverviewExportError?
|
||||
|
||||
let system: ElectricalSystem
|
||||
@@ -219,11 +220,12 @@ struct LoadsView: View {
|
||||
}
|
||||
)
|
||||
}
|
||||
.sheet(item: $overviewShareItem, onDismiss: {
|
||||
cleanupOverviewShareItem()
|
||||
ReviewPrompt.registerSuccessfulExport()
|
||||
}) { item in
|
||||
ShareSheet(items: item.shareItems)
|
||||
.quickLookPreview($previewURL)
|
||||
.onChange(of: previewURL) { _, newValue in
|
||||
if newValue == nil {
|
||||
cleanupPreview()
|
||||
ReviewPrompt.registerSuccessfulExport()
|
||||
}
|
||||
}
|
||||
.alert(
|
||||
String(localized: "overview.share.error.title", defaultValue: "Export Failed"),
|
||||
@@ -1106,12 +1108,6 @@ struct LoadsView: View {
|
||||
|
||||
// MARK: - PDF Export
|
||||
|
||||
private struct OverviewShareItem: Identifiable {
|
||||
let id = UUID()
|
||||
let shareItems: [Any]
|
||||
let tempURL: URL?
|
||||
}
|
||||
|
||||
private struct OverviewExportError: Identifiable {
|
||||
let message: String
|
||||
var id: String { message }
|
||||
@@ -1134,7 +1130,8 @@ struct LoadsView: View {
|
||||
"system": snapshot.systemName,
|
||||
])
|
||||
await MainActor.run {
|
||||
overviewShareItem = OverviewShareItem(shareItems: [url], tempURL: url)
|
||||
previewURL = url
|
||||
previewTempURL = url
|
||||
isExportingOverview = false
|
||||
}
|
||||
} catch {
|
||||
@@ -1164,7 +1161,8 @@ struct LoadsView: View {
|
||||
AnalyticsTracker.log("Diagram Image Shared", properties: [
|
||||
"system": snapshot.systemName,
|
||||
])
|
||||
overviewShareItem = OverviewShareItem(shareItems: [url], tempURL: url)
|
||||
previewURL = url
|
||||
previewTempURL = url
|
||||
} else {
|
||||
overviewExportError = OverviewExportError(
|
||||
message: String(localized: "overview.share.diagram.error", defaultValue: "Could not generate diagram. Check your internet connection.")
|
||||
@@ -1284,11 +1282,10 @@ struct LoadsView: View {
|
||||
)
|
||||
}
|
||||
|
||||
private func cleanupOverviewShareItem() {
|
||||
guard let item = overviewShareItem else { return }
|
||||
overviewShareItem = nil
|
||||
if let url = item.tempURL {
|
||||
private func cleanupPreview() {
|
||||
if let url = previewTempURL {
|
||||
try? FileManager.default.removeItem(at: url)
|
||||
previewTempURL = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user