mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-11-09 21:20:07 +01:00
✨ Add search functionality
This commit is contained in:
@@ -10,14 +10,18 @@ import Cocoa
|
||||
import HotKey
|
||||
import Carbon
|
||||
|
||||
class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
||||
class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource, NSTextFieldDelegate {
|
||||
|
||||
// MARK: - Outlets
|
||||
|
||||
@IBOutlet weak var textFieldSearch: NSTextField!
|
||||
|
||||
@IBOutlet weak var tableView: NSTableView!
|
||||
|
||||
public var editorAvailability: [String] = []
|
||||
|
||||
public var sites: [Valet.Site] = []
|
||||
|
||||
// MARK: - Display
|
||||
|
||||
public static func show(delegate: NSWindowDelegate? = nil) {
|
||||
@@ -47,6 +51,7 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
||||
if (Shell.fileExists("/Applications/PhpStorm.app/Contents/Info.plist")) {
|
||||
self.editorAvailability.append("phpstorm")
|
||||
}
|
||||
self.sites = Valet.shared.sites
|
||||
}
|
||||
|
||||
override func viewWillAppear() {}
|
||||
@@ -56,13 +61,13 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
||||
// MARK: - Table View
|
||||
|
||||
func numberOfRows(in tableView: NSTableView) -> Int {
|
||||
return Valet.shared.sites.count
|
||||
return self.sites.count
|
||||
}
|
||||
|
||||
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
|
||||
guard let userCell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "siteItem"), owner: self) as? SiteListCell else { return nil }
|
||||
|
||||
let item = Valet.shared.sites[row]
|
||||
let item = self.sites[row]
|
||||
|
||||
/// Make sure to show the TLD
|
||||
userCell.labelSiteName.stringValue = "\(item.name).\(Valet.shared.config.tld)"
|
||||
@@ -88,13 +93,13 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
||||
func tableViewSelectionDidChange(_ notification: Notification) {
|
||||
let menu = NSMenu()
|
||||
|
||||
let site = Valet.shared.sites[self.tableView.selectedRow]
|
||||
|
||||
if self.tableView.selectedRow == -1 {
|
||||
tableView.menu = nil
|
||||
return
|
||||
}
|
||||
|
||||
let site = self.sites[self.tableView.selectedRow]
|
||||
|
||||
menu.addItem(
|
||||
withTitle: site.secured
|
||||
? "site_list.unsecure".localized
|
||||
@@ -147,28 +152,46 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
||||
// MARK: Open with IDE / Editor
|
||||
|
||||
@objc public func openWithPhpStorm() {
|
||||
let site = Valet.shared.sites[self.tableView.selectedRow]
|
||||
let site = self.sites[self.tableView.selectedRow]
|
||||
Shell.run("open -a /Applications/PhpStorm.app \(site.absolutePath)")
|
||||
}
|
||||
|
||||
@objc public func openWithVSCode() {
|
||||
let site = Valet.shared.sites[self.tableView.selectedRow]
|
||||
let site = self.sites[self.tableView.selectedRow]
|
||||
Shell.run("/usr/local/bin/code \(site.absolutePath)")
|
||||
}
|
||||
|
||||
// MARK: Open in Browser & Finder
|
||||
|
||||
@objc public func openInBrowser() {
|
||||
let site = Valet.shared.sites[self.tableView.selectedRow]
|
||||
let site = self.sites[self.tableView.selectedRow]
|
||||
let prefix = site.secured ? "https://" : "http://"
|
||||
let url = "\(prefix)\(site.name).\(Valet.shared.config.tld)"
|
||||
NSWorkspace.shared.open(URL(string: url)!)
|
||||
}
|
||||
|
||||
@objc public func openInFinder() {
|
||||
let site = Valet.shared.sites[self.tableView.selectedRow]
|
||||
let site = self.sites[self.tableView.selectedRow]
|
||||
Shell.run("open \(site.absolutePath)")
|
||||
}
|
||||
|
||||
// MARK: - (Search) Text Field Delegate
|
||||
|
||||
func controlTextDidChange(_ obj: Notification) {
|
||||
let searchString = self.textFieldSearch.stringValue.lowercased()
|
||||
|
||||
if searchString.isEmpty {
|
||||
self.sites = Valet.shared.sites
|
||||
tableView.reloadData()
|
||||
return
|
||||
}
|
||||
|
||||
self.sites = Valet.shared.sites.filter({ site in
|
||||
return site.name.lowercased().contains(searchString)
|
||||
})
|
||||
|
||||
tableView.reloadData()
|
||||
}
|
||||
|
||||
// MARK: - Deinitialization
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ class SiteListWC: NSWindowController {
|
||||
default:
|
||||
break
|
||||
}
|
||||
} else {
|
||||
super.keyDown(with: event)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user