1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-08-06 19:40:08 +02:00

🏗 WIP: UI for searchable extensions

This commit is contained in:
2023-11-21 20:03:50 +01:00
parent 3b78ac43d7
commit f39732a0e6
5 changed files with 54 additions and 37 deletions

View File

@ -214,6 +214,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
@objc func openPhpVersionManager() {
PhpVersionManagerWindowController.show()
}
@objc func openPhpExtensionManager() {
PhpExtensionManagerWindowController.show()
}
@objc func openDonate() {
NSWorkspace.shared.open(Constants.Urls.DonationPage)

View File

@ -152,6 +152,9 @@ extension StatusMenu {
NSMenuItem(title: "mi_php_version_manager".localized,
action: #selector(MainMenu.openPhpVersionManager),
keyEquivalent: "m"),
NSMenuItem(title: "mi_php_ext_manager".localized,
action: #selector(MainMenu.openPhpExtensionManager),
keyEquivalent: "e"),
NSMenuItem(title: "mi_php_config".localized,
action: #selector(MainMenu.openActiveConfigFolder),
keyEquivalent: "c"),
@ -200,16 +203,6 @@ extension StatusMenu {
post: stats.post_max_size,
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

View File

@ -9,6 +9,23 @@
import Foundation
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
struct BrewPhpExtension {
let name: String
@ -17,34 +34,33 @@ struct BrewPhpExtension {
struct PhpExtensionManagerView: View {
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) {
let extensions = formulae[self.phpVersion]!
.sorted()
.map({ name in
return BrewPhpExtension(name: name, isInstalled: false)
})
self.extensions = extensions
@ObservedObject var manager = BrewExtensionsObservable()
@State var searchText: String
@State var phpVersion: String {
didSet {
self.manager.loadExtensionData(for: self.phpVersion)
print(self.manager.extensions)
}
}
@State var searchText: String = ""
@State var extensions: [BrewPhpExtension] = []
@State var phpVersion: String = ""
var filteredExtensions: [BrewPhpExtension] {
guard !searchText.isEmpty else {
return manager.extensions
}
return manager.extensions.filter { $0.name.contains(searchText) }
}
var body: some View {
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)
.listRowBackground(
index % 2 == 0
? Color.gray.opacity(0)
: Color.gray.opacity(0.08)
)
.padding(.vertical, 8)
.padding(.horizontal, 8)
}
@ -79,6 +95,10 @@ struct PhpExtensionManagerView: View {
HStack(alignment: .center, spacing: 7.0) {
VStack(alignment: .leading, spacing: 0) {
HStack {
Image(systemName: "puzzlepiece.extension")
.resizable()
.frame(width: 12, height: 12)
.foregroundColor(Color.blue)
Text(bExtension.name).bold()
}
}

View File

@ -14,7 +14,7 @@ class PhpExtensionManagerWindowController: PMWindowController {
// MARK: - Window Identifier
var view: PhpVersionManagerView!
var view: PhpExtensionManagerView!
override var windowName: String {
return "PhpExtensionManager"
@ -24,15 +24,12 @@ class PhpExtensionManagerWindowController: PMWindowController {
let windowController = Self()
windowController.window = NSWindow()
windowController.view = PhpVersionManagerView(
formulae: Brew.shared.formulae,
handler: BrewPhpFormulaeHandler()
)
windowController.view = PhpExtensionManagerView()
guard let window = windowController.window else { return }
window.title = ""
window.title = "phpextman.window.title".localized
window.styleMask = [.titled, .closable, .miniaturizable]
window.titlebarAppearsTransparent = true
window.titlebarAppearsTransparent = false
window.delegate = delegate ?? windowController
window.contentView = NSHostingView(rootView: windowController.view)
window.setContentSize(NSSize(width: 600, height: 800))

View File

@ -12,7 +12,9 @@
"mi_no_php_linked" = "No PHP version linked!";
"mi_fix_php_link" = "Fix Automatically...";
"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_manage_limits" = "Manage Limits...";
@ -100,6 +102,7 @@
// 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.disclaimer" = "Certain extensions may require other dependencies to be installed, but generally speaking installing extensions should be much faster than installing PHP versions.";