mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
create a mac specific nav card
This commit is contained in:
parent
c287eb4a59
commit
d84f41767f
4 changed files with 44 additions and 2 deletions
|
|
@ -3,6 +3,38 @@ import Services
|
|||
import SwiftUI
|
||||
import Views
|
||||
|
||||
struct MacFeedCardNavigationLink: View {
|
||||
@EnvironmentObject var dataService: DataService
|
||||
@EnvironmentObject var audioController: AudioController
|
||||
|
||||
let item: LinkedItem
|
||||
|
||||
@ObservedObject var viewModel: HomeFeedViewModel
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
NavigationLink(
|
||||
destination: LinkItemDetailView(
|
||||
linkedItemObjectID: item.objectID,
|
||||
isPDF: item.isPDF
|
||||
),
|
||||
tag: item.objectID,
|
||||
selection: $viewModel.selectedLinkItem
|
||||
) {
|
||||
EmptyView()
|
||||
}
|
||||
.opacity(0)
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
.onAppear {
|
||||
Task { await viewModel.itemAppeared(item: item, dataService: dataService, audioController: audioController) }
|
||||
}
|
||||
FeedCard(item: item) {
|
||||
viewModel.selectedLinkItem = item.objectID
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct FeedCardNavigationLink: View {
|
||||
@EnvironmentObject var dataService: DataService
|
||||
@EnvironmentObject var audioController: AudioController
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ import Views
|
|||
List {
|
||||
Section {
|
||||
ForEach(viewModel.items) { item in
|
||||
FeedCardNavigationLink(
|
||||
MacFeedCardNavigationLink(
|
||||
item: item,
|
||||
viewModel: viewModel
|
||||
)
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import Views
|
|||
@Published var showLoadingBar = false
|
||||
@Published var appliedSort = LinkedItemSort.newest.rawValue
|
||||
|
||||
@Published var selectedLinkItem: NSManagedObjectID? // used by mac app only
|
||||
@Published var selectedItem: LinkedItem?
|
||||
@Published var linkIsActive = false
|
||||
|
||||
|
|
@ -51,6 +52,7 @@ import Views
|
|||
selectedItem = nil
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
|
||||
self.selectedLinkItem = objectID
|
||||
self.selectedItem = dataService.viewContext.object(with: objectID) as? LinkedItem
|
||||
self.linkIsActive = true
|
||||
}
|
||||
|
|
@ -61,6 +63,7 @@ import Views
|
|||
#endif
|
||||
}
|
||||
} else {
|
||||
selectedLinkItem = objectID
|
||||
selectedItem = dataService.viewContext.object(with: objectID) as? LinkedItem
|
||||
linkIsActive = true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,12 @@ import SwiftUI
|
|||
import Utils
|
||||
|
||||
public struct FeedCard: View {
|
||||
let tapHandler: () -> Void
|
||||
@ObservedObject var item: LinkedItem
|
||||
|
||||
public init(item: LinkedItem) {
|
||||
public init(item: LinkedItem, tapHandler: @escaping () -> Void = {}) {
|
||||
self.item = item
|
||||
self.tapHandler = tapHandler
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
|
|
@ -76,6 +78,11 @@ public struct FeedCard: View {
|
|||
}
|
||||
}
|
||||
.padding(.top, 0)
|
||||
#if os(macOS)
|
||||
.onTapGesture {
|
||||
tapHandler()
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
.padding(.top, 0)
|
||||
|
|
|
|||
Loading…
Reference in a new issue