From d84f41767fbaed061946702e46482a4c5abdb01f Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 12 Oct 2022 09:00:13 -0700 Subject: [PATCH] create a mac specific nav card --- .../Components/FeedCardNavigationLink.swift | 32 +++++++++++++++++++ .../App/Views/Home/HomeFeedViewMac.swift | 2 +- .../App/Views/Home/HomeFeedViewModel.swift | 3 ++ .../Views/FeedItem/HomeFeedCardView.swift | 9 +++++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift b/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift index 74dce21f2..fecbcc478 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/Components/FeedCardNavigationLink.swift @@ -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 diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift index 17b800db9..c2b824287 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewMac.swift @@ -38,7 +38,7 @@ import Views List { Section { ForEach(viewModel.items) { item in - FeedCardNavigationLink( + MacFeedCardNavigationLink( item: item, viewModel: viewModel ) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index c301d7aff..8b3b1dda2 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -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 } diff --git a/apple/OmnivoreKit/Sources/Views/FeedItem/HomeFeedCardView.swift b/apple/OmnivoreKit/Sources/Views/FeedItem/HomeFeedCardView.swift index 1ff78a853..4eea19217 100644 --- a/apple/OmnivoreKit/Sources/Views/FeedItem/HomeFeedCardView.swift +++ b/apple/OmnivoreKit/Sources/Views/FeedItem/HomeFeedCardView.swift @@ -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)