Use suggestions window controller in share options view
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 3 Apr 2024 12:46:01 +0000 (20:46 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 17 Apr 2024 08:39:04 +0000 (16:39 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareOptionsView.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareViewController.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/ShareeSuggestionsDataSource.swift

index 1a9d51fa81b50139aec0802afaadd89203e6f40a..893d6bb3ce9a02c776f0ab4216165185686b2c04 100644 (file)
@@ -35,6 +35,22 @@ class ShareOptionsView: NSView {
     @IBOutlet private weak var circleShare: NSMenuItem!
     @IBOutlet private weak var talkConversationShare: NSMenuItem!
 
+    var kit: NextcloudKit? {
+        didSet {
+            Logger.shareOptionsView.info("Setting up the kit.")
+            guard let kit = kit else {
+                Logger.shareOptionsView.error("Could not configure suggestions data source.")
+                return
+            }
+            suggestionsWindowController.dataSource = ShareeSuggestionsDataSource(kit: kit)
+            suggestionsWindowController.parentTextField = shareRecipientTextField
+
+            suggestionsTextFieldDelegate.suggestionsWindowController = suggestionsWindowController
+            shareRecipientTextField.delegate = suggestionsTextFieldDelegate
+
+            suggestionsWindowController.begin(for: shareRecipientTextField)
+        }
+    }
     var dataSource: ShareTableViewDataSource?
     var controller: ShareController? {
         didSet {
@@ -72,6 +88,8 @@ class ShareOptionsView: NSView {
         }
     }
     private var cancellable: AnyCancellable?
+    private var suggestionsWindowController = SuggestionsWindowController()
+    private var suggestionsTextFieldDelegate = SuggestionsTextFieldDelegate()
 
     private func update() {
         guard let share = controller?.share else {
@@ -161,7 +179,7 @@ class ShareOptionsView: NSView {
         expirationDatePicker.isHidden = expirationDateCheckbox.state == .off
     }
 
-    func setAllFields(enabled: Bool) {
+    private func setAllFields(enabled: Bool) {
         shareTypePicker.isEnabled = enabled
         shareRecipientTextField.isEnabled = enabled
         labelTextField.isEnabled = enabled
@@ -235,12 +253,12 @@ class ShareOptionsView: NSView {
                 Logger.shareOptionsView.info("Creating new share!")
 
                 guard let dataSource = dataSource,
-                      let kit = dataSource.kit,
+                      let kit = kit,
                       let itemServerRelativePath = dataSource.itemServerRelativePath
                 else {
                     Logger.shareOptionsView.error("Cannot create new share due to missing data.")
                     Logger.shareOptionsView.error("dataSource: \(self.dataSource)")
-                    Logger.shareOptionsView.error("kit: \(self.dataSource?.kit)")
+                    Logger.shareOptionsView.error("kit: \(self.kit)")
                     Logger.shareOptionsView.error(
                         "path: \(self.dataSource?.itemServerRelativePath ?? "")"
                     )
index d104e3360899d2c21bd50d0f6772d21be8cab9b1..3293328316dd56f6092ad8f990e8d9ef6af51b0c 100644 (file)
@@ -111,6 +111,8 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate {
     }
 
     @IBAction func createShare(_ sender: Any) {
+        guard let kit = shareDataSource.kit else { return }
+        optionsView.kit = kit
         optionsView.createMode = true
         tableView.deselectAll(self)
         if !splitView.arrangedSubviews.contains(optionsView) {
@@ -137,11 +139,11 @@ class ShareViewController: NSViewController, ShareViewDataSourceUIDelegate {
         }
         splitView.removeArrangedSubview(optionsView)
         optionsView.isHidden = true
-
     }
 
     func showOptions(share: NKShare) {
         guard let kit = shareDataSource.kit else { return }
+        optionsView.kit = kit
         optionsView.controller = ShareController(share: share, kit: kit)
         if !splitView.arrangedSubviews.contains(optionsView) {
             splitView.addArrangedSubview(optionsView)
index a8b247e9c3c2adca610c33bfaa76e308a08b60cf..66c637ab4b5ba8b883645a448bc021300e05d5aa 100644 (file)
@@ -8,11 +8,10 @@
 import Foundation
 import NextcloudKit
 import OSLog
-import SuggestionsTextFieldKit
 
 class ShareeSuggestionsDataSource: SuggestionsDataSource {
     let kit: NextcloudKit
-    var suggestions: [SuggestionsTextFieldKit.Suggestion] = []
+    var suggestions: [Suggestion] = []
     var inputString: String = "" {
         didSet { Task { await updateSuggestions() } }
     }