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:
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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))
|
||||
|
@ -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.";
|
||||
|
||||
|
Reference in New Issue
Block a user