mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2026-03-29 16:10:08 +02:00
🏗 WIP: UI for searchable extensions
This commit is contained in:
@@ -215,6 +215,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
|||||||
PhpVersionManagerWindowController.show()
|
PhpVersionManagerWindowController.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc func openPhpExtensionManager() {
|
||||||
|
PhpExtensionManagerWindowController.show()
|
||||||
|
}
|
||||||
|
|
||||||
@objc func openDonate() {
|
@objc func openDonate() {
|
||||||
NSWorkspace.shared.open(Constants.Urls.DonationPage)
|
NSWorkspace.shared.open(Constants.Urls.DonationPage)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,6 +152,9 @@ extension StatusMenu {
|
|||||||
NSMenuItem(title: "mi_php_version_manager".localized,
|
NSMenuItem(title: "mi_php_version_manager".localized,
|
||||||
action: #selector(MainMenu.openPhpVersionManager),
|
action: #selector(MainMenu.openPhpVersionManager),
|
||||||
keyEquivalent: "m"),
|
keyEquivalent: "m"),
|
||||||
|
NSMenuItem(title: "mi_php_ext_manager".localized,
|
||||||
|
action: #selector(MainMenu.openPhpExtensionManager),
|
||||||
|
keyEquivalent: "e"),
|
||||||
NSMenuItem(title: "mi_php_config".localized,
|
NSMenuItem(title: "mi_php_config".localized,
|
||||||
action: #selector(MainMenu.openActiveConfigFolder),
|
action: #selector(MainMenu.openActiveConfigFolder),
|
||||||
keyEquivalent: "c"),
|
keyEquivalent: "c"),
|
||||||
@@ -200,16 +203,6 @@ extension StatusMenu {
|
|||||||
post: stats.post_max_size,
|
post: stats.post_max_size,
|
||||||
upload: stats.upload_max_filesize)
|
upload: stats.upload_max_filesize)
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: As soon as this does more than just edit memory limits, move this
|
|
||||||
/*
|
|
||||||
addItem(NSMenuItem.separator())
|
|
||||||
addItem(NSMenuItem(
|
|
||||||
title: "mi_manage_limits".localized,
|
|
||||||
action: #selector(MainMenu.openConfigGUI),
|
|
||||||
keyEquivalent: "l")
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Extensions
|
// MARK: - Extensions
|
||||||
|
|||||||
@@ -9,6 +9,23 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
|
class BrewExtensionsObservable: ObservableObject {
|
||||||
|
@Published var extensions: [BrewPhpExtension] = [] {
|
||||||
|
didSet {
|
||||||
|
print(self.extensions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func loadExtensionData(for version: String) {
|
||||||
|
let tapFormulae = BrewTapFormulae.from(tap: "shivammathur/homebrew-extensions")
|
||||||
|
if let filteredTapFormulae = tapFormulae[version] {
|
||||||
|
self.extensions = filteredTapFormulae.sorted().map({ name in
|
||||||
|
return BrewPhpExtension(name: name, isInstalled: false)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Temp model for UI purposes
|
// Temp model for UI purposes
|
||||||
struct BrewPhpExtension {
|
struct BrewPhpExtension {
|
||||||
let name: String
|
let name: String
|
||||||
@@ -17,34 +34,33 @@ struct BrewPhpExtension {
|
|||||||
|
|
||||||
struct PhpExtensionManagerView: View {
|
struct PhpExtensionManagerView: View {
|
||||||
init() {
|
init() {
|
||||||
let formulae = BrewTapFormulae.from(tap: "shivammathur/homebrew-extensions")
|
self.searchText = ""
|
||||||
|
self.phpVersion = PhpEnvironments.shared.currentInstall!.version.short
|
||||||
|
self.manager.loadExtensionData(for: self.phpVersion)
|
||||||
|
}
|
||||||
|
|
||||||
if formulae.keys.contains(self.phpVersion) {
|
@ObservedObject var manager = BrewExtensionsObservable()
|
||||||
let extensions = formulae[self.phpVersion]!
|
@State var searchText: String
|
||||||
.sorted()
|
@State var phpVersion: String {
|
||||||
.map({ name in
|
didSet {
|
||||||
return BrewPhpExtension(name: name, isInstalled: false)
|
self.manager.loadExtensionData(for: self.phpVersion)
|
||||||
})
|
print(self.manager.extensions)
|
||||||
|
|
||||||
self.extensions = extensions
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@State var searchText: String = ""
|
var filteredExtensions: [BrewPhpExtension] {
|
||||||
@State var extensions: [BrewPhpExtension] = []
|
guard !searchText.isEmpty else {
|
||||||
@State var phpVersion: String = ""
|
return manager.extensions
|
||||||
|
}
|
||||||
|
return manager.extensions.filter { $0.name.contains(searchText) }
|
||||||
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
// header.padding(20)
|
header.padding(20)
|
||||||
|
|
||||||
List(Array(extensions.enumerated()), id: \.1.name) { (index, pExtension) in
|
List(Array(self.filteredExtensions.enumerated()), id: \.1.name) { (_, pExtension) in
|
||||||
listContent(for: pExtension)
|
listContent(for: pExtension)
|
||||||
.listRowBackground(
|
|
||||||
index % 2 == 0
|
|
||||||
? Color.gray.opacity(0)
|
|
||||||
: Color.gray.opacity(0.08)
|
|
||||||
)
|
|
||||||
.padding(.vertical, 8)
|
.padding(.vertical, 8)
|
||||||
.padding(.horizontal, 8)
|
.padding(.horizontal, 8)
|
||||||
}
|
}
|
||||||
@@ -79,6 +95,10 @@ struct PhpExtensionManagerView: View {
|
|||||||
HStack(alignment: .center, spacing: 7.0) {
|
HStack(alignment: .center, spacing: 7.0) {
|
||||||
VStack(alignment: .leading, spacing: 0) {
|
VStack(alignment: .leading, spacing: 0) {
|
||||||
HStack {
|
HStack {
|
||||||
|
Image(systemName: "puzzlepiece.extension")
|
||||||
|
.resizable()
|
||||||
|
.frame(width: 12, height: 12)
|
||||||
|
.foregroundColor(Color.blue)
|
||||||
Text(bExtension.name).bold()
|
Text(bExtension.name).bold()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class PhpExtensionManagerWindowController: PMWindowController {
|
|||||||
|
|
||||||
// MARK: - Window Identifier
|
// MARK: - Window Identifier
|
||||||
|
|
||||||
var view: PhpVersionManagerView!
|
var view: PhpExtensionManagerView!
|
||||||
|
|
||||||
override var windowName: String {
|
override var windowName: String {
|
||||||
return "PhpExtensionManager"
|
return "PhpExtensionManager"
|
||||||
@@ -24,15 +24,12 @@ class PhpExtensionManagerWindowController: PMWindowController {
|
|||||||
let windowController = Self()
|
let windowController = Self()
|
||||||
|
|
||||||
windowController.window = NSWindow()
|
windowController.window = NSWindow()
|
||||||
windowController.view = PhpVersionManagerView(
|
windowController.view = PhpExtensionManagerView()
|
||||||
formulae: Brew.shared.formulae,
|
|
||||||
handler: BrewPhpFormulaeHandler()
|
|
||||||
)
|
|
||||||
|
|
||||||
guard let window = windowController.window else { return }
|
guard let window = windowController.window else { return }
|
||||||
window.title = ""
|
window.title = "phpextman.window.title".localized
|
||||||
window.styleMask = [.titled, .closable, .miniaturizable]
|
window.styleMask = [.titled, .closable, .miniaturizable]
|
||||||
window.titlebarAppearsTransparent = true
|
window.titlebarAppearsTransparent = false
|
||||||
window.delegate = delegate ?? windowController
|
window.delegate = delegate ?? windowController
|
||||||
window.contentView = NSHostingView(rootView: windowController.view)
|
window.contentView = NSHostingView(rootView: windowController.view)
|
||||||
window.setContentSize(NSSize(width: 600, height: 800))
|
window.setContentSize(NSSize(width: 600, height: 800))
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
"mi_no_php_linked" = "No PHP version linked!";
|
"mi_no_php_linked" = "No PHP version linked!";
|
||||||
"mi_fix_php_link" = "Fix Automatically...";
|
"mi_fix_php_link" = "Fix Automatically...";
|
||||||
"mi_no_php_linked_explain" = "What's This?";
|
"mi_no_php_linked_explain" = "What's This?";
|
||||||
"mi_php_version_manager" = "PHP Version Manager...";
|
|
||||||
|
"mi_php_version_manager" = "Manage PHP Installations...";
|
||||||
|
"mi_php_ext_manager" = "Manage PHP Extensions...";
|
||||||
"mi_php_config_manager" = "PHP Configuration Editor...";
|
"mi_php_config_manager" = "PHP Configuration Editor...";
|
||||||
"mi_manage_limits" = "Manage Limits...";
|
"mi_manage_limits" = "Manage Limits...";
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@
|
|||||||
|
|
||||||
// PHPEXTMAN
|
// PHPEXTMAN
|
||||||
|
|
||||||
|
"phpextman.window.title" = "Extensions";
|
||||||
"phpextman.description" = "**PHP Extension Manager** lets you manage different PHP extensions with a simple click of the button. Because Homebrew is used, extensions won't need to be compiled on the fly using `pecl`.";
|
"phpextman.description" = "**PHP Extension Manager** lets you manage different PHP extensions with a simple click of the button. Because Homebrew is used, extensions won't need to be compiled on the fly using `pecl`.";
|
||||||
"phpextman.disclaimer" = "Certain extensions may require other dependencies to be installed, but generally speaking installing extensions should be much faster than installing PHP versions.";
|
"phpextman.disclaimer" = "Certain extensions may require other dependencies to be installed, but generally speaking installing extensions should be much faster than installing PHP versions.";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user