139 lines
4.1 KiB
Swift
139 lines
4.1 KiB
Swift
import App
|
|
import Services
|
|
import SwiftUI
|
|
import Utils
|
|
import Views
|
|
|
|
#if os(iOS)
|
|
import UIKit
|
|
|
|
@objc(ShareExtensionViewController)
|
|
final class ShareExtensionViewController: UIViewController, UIGestureRecognizerDelegate {
|
|
let labelsViewModel = LabelsViewModel()
|
|
let viewModel = ShareExtensionViewModel()
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
view.backgroundColor = UIColor(white: 1.0, alpha: 0.001)
|
|
view.isUserInteractionEnabled = true
|
|
|
|
let dismissGesture = UITapGestureRecognizer(target: self, action: #selector(self.viewTapped(_:)))
|
|
dismissGesture.delegate = self
|
|
view.addGestureRecognizer(dismissGesture)
|
|
|
|
if !viewModel.services.authenticator.isLoggedIn,
|
|
!viewModel.services.dataService.appEnvironment.environmentConfigured
|
|
{
|
|
embed(
|
|
childViewController: UIViewController.makeLoggedOutShareExtensionController(extensionContext: extensionContext),
|
|
heightRatio: 0.60
|
|
)
|
|
return
|
|
}
|
|
|
|
NotificationCenter.default.addObserver(
|
|
forName: Notification.Name("ShowAddNoteSheet"),
|
|
object: nil,
|
|
queue: OperationQueue.main
|
|
) { _ in
|
|
self.openSheet(AnyView(AddNoteSheet(viewModel: self.viewModel)))
|
|
}
|
|
|
|
NotificationCenter.default.addObserver(
|
|
forName: Notification.Name("ShowEditLabelsSheet"),
|
|
object: nil,
|
|
queue: OperationQueue.main
|
|
) { _ in
|
|
self.openSheet(AnyView(EditLabelsSheet(viewModel: self.viewModel, labelsViewModel: self.labelsViewModel)))
|
|
}
|
|
|
|
NotificationCenter.default.addObserver(
|
|
forName: Notification.Name("ShowEditInfoSheet"),
|
|
object: nil,
|
|
queue: OperationQueue.main
|
|
) { _ in
|
|
self.openSheet(AnyView(EditInfoSheet(viewModel: self.viewModel)))
|
|
}
|
|
|
|
embed(
|
|
childViewController: UIViewController.makeShareExtensionController(
|
|
viewModel: viewModel,
|
|
labelsViewModel: labelsViewModel,
|
|
extensionContext: extensionContext
|
|
),
|
|
heightRatio: 0.60
|
|
)
|
|
}
|
|
|
|
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
|
|
return touch.view == gestureRecognizer.view
|
|
}
|
|
|
|
@objc func viewTapped(_ panGesture: UIGestureRecognizer) {
|
|
viewModel.dismissExtension(extensionContext: extensionContext)
|
|
}
|
|
|
|
func openSheet(_ rootView: AnyView) {
|
|
let hostingController = UIHostingController(rootView: rootView)
|
|
|
|
present(hostingController, animated: true, completion: nil)
|
|
}
|
|
}
|
|
|
|
#elseif os(macOS)
|
|
|
|
import Cocoa
|
|
|
|
class ShareViewController: NSViewController {
|
|
let labelsViewModel = LabelsViewModel()
|
|
let viewModel = ShareExtensionViewModel()
|
|
|
|
override func loadView() {
|
|
view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 300))
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
NotificationCenter.default.addObserver(
|
|
forName: Notification.Name("ShowAddNoteSheet"),
|
|
object: nil,
|
|
queue: OperationQueue.main
|
|
) { _ in
|
|
self.openSheet(AnyView(AddNoteSheet(viewModel: self.viewModel)))
|
|
}
|
|
|
|
NotificationCenter.default.addObserver(
|
|
forName: Notification.Name("ShowEditLabelsSheet"),
|
|
object: nil,
|
|
queue: OperationQueue.main
|
|
) { _ in
|
|
self.openSheet(AnyView(EditLabelsSheet(viewModel: self.viewModel, labelsViewModel: self.labelsViewModel)))
|
|
}
|
|
|
|
NotificationCenter.default.addObserver(
|
|
forName: Notification.Name("ShowEditInfoSheet"),
|
|
object: nil,
|
|
queue: OperationQueue.main
|
|
) { _ in
|
|
self.openSheet(AnyView(EditInfoSheet(viewModel: self.viewModel)))
|
|
}
|
|
|
|
embed(
|
|
childViewController: NSViewController.makeShareExtensionController(
|
|
viewModel: viewModel,
|
|
labelsViewModel: labelsViewModel,
|
|
extensionContext: extensionContext
|
|
)
|
|
)
|
|
}
|
|
|
|
func openSheet(_ rootView: AnyView) {
|
|
let hostingController = PlatformHostingController(rootView: rootView)
|
|
|
|
presentAsSheet(hostingController)
|
|
}
|
|
}
|
|
|
|
#endif
|