mac: simplify package manager picker

This commit is contained in:
Peter Steinberger
2025-12-10 02:49:39 +01:00
parent e9679ce993
commit cf2b659491

View File

@@ -4,7 +4,7 @@ import SwiftUI
private enum NodePackageManager: String, CaseIterable, Identifiable { private enum NodePackageManager: String, CaseIterable, Identifiable {
case npm case npm
case pnpm case pnpm
case yarn case bun
var id: String { self.rawValue } var id: String { self.rawValue }
@@ -12,7 +12,7 @@ private enum NodePackageManager: String, CaseIterable, Identifiable {
switch self { switch self {
case .npm: "NPM" case .npm: "NPM"
case .pnpm: "PNPM" case .pnpm: "PNPM"
case .yarn: "Yarn" case .bun: "Bun"
} }
} }
@@ -20,7 +20,7 @@ private enum NodePackageManager: String, CaseIterable, Identifiable {
switch self { switch self {
case .npm: "npm install -g" case .npm: "npm install -g"
case .pnpm: "pnpm add -g" case .pnpm: "pnpm add -g"
case .yarn: "yarn global add" case .bun: "bun add -g"
} }
} }
} }
@@ -223,22 +223,22 @@ struct ToolsSettings: View {
} }
private var packageManager: NodePackageManager { private var packageManager: NodePackageManager {
NodePackageManager(rawValue: self.packageManagerRaw) ?? .npm if let parsed = NodePackageManager(rawValue: self.packageManagerRaw) {
return parsed
}
// Backward compatibility: map legacy "yarn" selection to Bun.
if self.packageManagerRaw == "yarn" { return .bun }
return .npm
} }
private var packageManagerPicker: some View { private var packageManagerPicker: some View {
VStack(alignment: .leading, spacing: 6) { Picker("Preferred package manager", selection: self.$packageManagerRaw) {
Text("Preferred package manager") ForEach(NodePackageManager.allCases) { manager in
.font(.caption.weight(.semibold)) Text(manager.label).tag(manager.rawValue)
.foregroundStyle(.secondary)
Picker("Preferred package manager", selection: self.$packageManagerRaw) {
ForEach(NodePackageManager.allCases) { manager in
Text(manager.label).tag(manager.rawValue)
}
} }
.pickerStyle(.segmented)
.frame(maxWidth: 340)
} }
.pickerStyle(.segmented)
.frame(maxWidth: 340)
.padding(.top, 2) .padding(.top, 2)
} }