Files
omnivore/apple/OmnivoreKit/Sources/App/Views/PDFContainerView.swift
Jackson Harper 067e3a8976 Add missing files
2024-02-06 11:43:44 +08:00

67 lines
1.5 KiB
Swift

import Combine
import Models
import SwiftUI
import Utils
import Services
@MainActor final class PDFContainerViewModel: ObservableObject {
func trackReadEvent(item: Models.LibraryItem, reader: String) {
let itemID = item.unwrappedID
let slug = item.unwrappedSlug
let originalArticleURL = item.unwrappedPageURLString
EventTracker.track(
.linkRead(
linkID: itemID,
slug: slug,
reader: reader,
originalArticleURL: originalArticleURL
)
)
}
}
struct PDFContainerView: View {
let item: Models.LibraryItem
let pdfItem: PDFItem?
@EnvironmentObject var dataService: DataService
@StateObject private var viewModel = PDFContainerViewModel()
init(item: Models.LibraryItem) {
self.item = item
self.pdfItem = PDFItem.make(item: item)
}
var body: some View {
NavigationView {
pdfContainerView
.navigationBarBackButtonHidden(false)
}
.navigationViewStyle(.stack)
.ignoresSafeArea(.all, edges: .bottom)
.onAppear {
viewModel.trackReadEvent(item: item, reader: "PDF")
}
}
@ViewBuilder private var pdfContainerView: some View {
if let pdfItem = pdfItem, let pdfURL = pdfItem.pdfURL {
#if os(iOS)
PDFViewer(viewModel: PDFViewerViewModel(pdfItem: pdfItem))
.navigationBarTitleDisplayMode(.inline)
#elseif os(macOS)
PDFWrapperView(pdfURL: pdfURL)
#endif
} else {
HStack(alignment: .center) {
Spacer()
Text("Loading")
Spacer()
}
}
}
}