create a mac specific nav card

This commit is contained in:
Satindar Dhillon 2022-10-12 09:00:13 -07:00
parent c287eb4a59
commit d84f41767f
4 changed files with 44 additions and 2 deletions

View file

@ -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

View file

@ -38,7 +38,7 @@ import Views
List {
Section {
ForEach(viewModel.items) { item in
FeedCardNavigationLink(
MacFeedCardNavigationLink(
item: item,
viewModel: viewModel
)

View file

@ -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
}

View file

@ -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)