// // ForayCoordinator.swift // foray // // Created by Nicholas Tay on 21/3/2022. // import Foundation import UIKit import LinkPresentation class ForayCoordinator: Coordinator { var childCoordinators = [Coordinator]() var window: UIWindow? var navigationController: UINavigationController var loadingOverlay: ForayLoadingOverlay init(window: UIWindow?, navigationController: UINavigationController) { self.window = window self.navigationController = navigationController self.loadingOverlay = ForayLoadingOverlay(viewController: navigationController) } func start() { push(vc: ForayTableViewController(), animated: false) } let detailViewController = ForayDetailViewController() func showDetails(item: PenguinItemViewModel) { detailViewController.setDetails(item: item) push(vc: detailViewController) } func showLoading() { loadingOverlay.show() } func hideLoading() { loadingOverlay.hide() } func share(item: PenguinItemViewModel) { let itemSource = ForayLinkPresentationSource(title: "\(item.name) (#\(item.id))", shareURL: URL(string: "https://nick.tay.blue/")!, image: item.icon) let activity = UIActivityViewController(activityItems: [itemSource], applicationActivities: nil) navigationController.present(activity, animated: true) } } class ForayLinkPresentationSource: NSObject, UIActivityItemSource { private let metadata: LPLinkMetadata func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { return metadata } func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { guard let url = metadata.originalURL else { return "" } return url.absoluteURL } func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { return metadata.originalURL } init(title: String, shareURL: URL, image: UIImage? = nil) { metadata = LPLinkMetadata() metadata.iconProvider = NSItemProvider(object: image ?? UIImage.fromAsset(.spy)) metadata.originalURL = shareURL metadata.url = shareURL metadata.title = title } }