mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Implement macOS share button
This commit is contained in:
56
Multiplatform/macOS/Article/SharingServiceView.swift
Normal file
56
Multiplatform/macOS/Article/SharingServiceView.swift
Normal file
@@ -0,0 +1,56 @@
|
||||
//
|
||||
// SharingServiceView.swift
|
||||
// Multiplatform macOS
|
||||
//
|
||||
// Created by Maurice Parker on 7/14/20.
|
||||
// Copyright © 2020 Ranchero Software. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import AppKit
|
||||
import Articles
|
||||
|
||||
class SharingServiceController: NSViewController {
|
||||
|
||||
var sharingServicePickerDelegate: SharingServicePickerDelegate? = nil
|
||||
var articles = [Article]()
|
||||
var completion: (() -> Void)? = nil
|
||||
|
||||
override func loadView() {
|
||||
view = NSView()
|
||||
}
|
||||
|
||||
override func viewDidAppear() {
|
||||
guard let anchor = view.superview?.superview else { return }
|
||||
|
||||
sharingServicePickerDelegate = SharingServicePickerDelegate(self.view.window, completion: completion)
|
||||
|
||||
let sortedArticles = articles.sortedByDate(.orderedAscending)
|
||||
let items = sortedArticles.map { ArticlePasteboardWriter(article: $0) }
|
||||
|
||||
let sharingServicePicker = NSSharingServicePicker(items: items)
|
||||
sharingServicePicker.delegate = sharingServicePickerDelegate
|
||||
|
||||
sharingServicePicker.show(relativeTo: anchor.bounds, of: anchor, preferredEdge: .minY)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
struct SharingServiceView: NSViewControllerRepresentable {
|
||||
|
||||
var articles: [Article]
|
||||
@Binding var showing: Bool
|
||||
|
||||
func makeNSViewController(context: Context) -> SharingServiceController {
|
||||
let controller = SharingServiceController()
|
||||
controller.articles = articles
|
||||
controller.completion = {
|
||||
showing = false
|
||||
}
|
||||
return controller
|
||||
}
|
||||
|
||||
func updateNSViewController(_ nsViewController: SharingServiceController, context: Context) {
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user