diff --git a/Multiplatform/Shared/Article/ArticleContainerView.swift b/Multiplatform/Shared/Article/ArticleContainerView.swift index 2fa4838bd..01330a3dc 100644 --- a/Multiplatform/Shared/Article/ArticleContainerView.swift +++ b/Multiplatform/Shared/Article/ArticleContainerView.swift @@ -12,10 +12,9 @@ import Articles struct ArticleContainerView: View { @EnvironmentObject private var sceneModel: SceneModel - var articles: [Article] @ViewBuilder var body: some View { - ArticleView(sceneModel: sceneModel, articles: articles) + ArticleView(sceneModel: sceneModel) .modifier(ArticleToolbarModifier()) } diff --git a/Multiplatform/Shared/Timeline/TimelineView.swift b/Multiplatform/Shared/Timeline/TimelineView.swift index 73182412a..f1a48eda5 100644 --- a/Multiplatform/Shared/Timeline/TimelineView.swift +++ b/Multiplatform/Shared/Timeline/TimelineView.swift @@ -36,7 +36,7 @@ struct TimelineView: View { .help(timelineModel.isReadFiltered ?? false ? "Show Read Articles" : "Filter Read Articles") } ZStack { - NavigationLink(destination: ArticleContainerView(articles: timelineModel.selectedArticles), isActive: $navigate) { + NavigationLink(destination: ArticleContainerView(), isActive: $navigate) { EmptyView() }.hidden() List(timelineModel.timelineItems, selection: $timelineModel.selectedArticleIDs) { timelineItem in diff --git a/Multiplatform/macOS/Article/ArticleView.swift b/Multiplatform/macOS/Article/ArticleView.swift index 640d2e579..96e287a82 100644 --- a/Multiplatform/macOS/Article/ArticleView.swift +++ b/Multiplatform/macOS/Article/ArticleView.swift @@ -12,17 +12,14 @@ import Articles struct ArticleView: NSViewControllerRepresentable { var sceneModel: SceneModel - var articles: [Article] func makeNSViewController(context: Context) -> WebViewController { let controller = WebViewController() controller.sceneModel = sceneModel - controller.articles = articles return controller } - func updateNSViewController(_ uiViewController: WebViewController, context: Context) { - + func updateNSViewController(_ controller: WebViewController, context: Context) { } } diff --git a/Multiplatform/macOS/Article/WebViewController.swift b/Multiplatform/macOS/Article/WebViewController.swift index a493a1781..7fefe51f8 100644 --- a/Multiplatform/macOS/Article/WebViewController.swift +++ b/Multiplatform/macOS/Article/WebViewController.swift @@ -7,6 +7,7 @@ // import AppKit +import Combine import RSCore import Articles @@ -46,7 +47,15 @@ class WebViewController: NSViewController { var sceneModel: SceneModel? weak var delegate: WebViewControllerDelegate? - var articles: [Article]? + var articles: [Article]? { + didSet { + if oldValue != articles { + loadWebView() + } + } + } + + private var selectedArticlesCancellable: AnyCancellable? override func loadView() { view = NSView() @@ -71,7 +80,9 @@ class WebViewController: NSViewController { statusBarView.heightAnchor.constraint(equalToConstant: 20) ]) - loadWebView() + selectedArticlesCancellable = sceneModel?.timelineModel.$selectedArticles.sink { [weak self] articles in + self?.articles = articles + } } // MARK: Notifications @@ -235,6 +246,8 @@ private extension WebViewController { sceneModel?.webViewProvider?.dequeueWebView() { webView in // Add the webview + self.webView = webView + webView.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(webView, positioned: .below, relativeTo: self.statusBarView) NSLayoutConstraint.activate([