diff --git a/pkg/gui/dependencies_panel.go b/pkg/gui/dependencies_panel.go index fc523cc..4af403e 100644 --- a/pkg/gui/dependencies_panel.go +++ b/pkg/gui/dependencies_panel.go @@ -50,56 +50,36 @@ func (gui *Gui) linkPathMap() map[string]bool { return linkPathMap } -func (gui *Gui) handleDepInstall() error { - dep := gui.getSelectedDependency() - if dep == nil { - return nil - } - +func (gui *Gui) handleDepInstall(dep *commands.Dependency) error { cmdStr := fmt.Sprintf("npm install %s", dep.Name) return gui.newMainCommand(cmdStr, dep.ID()) } -func (gui *Gui) handleDepUpdate() error { - dep := gui.getSelectedDependency() - if dep == nil { - return nil - } - +func (gui *Gui) handleDepUpdate(dep *commands.Dependency) error { cmdStr := fmt.Sprintf("npm update %s", dep.Name) return gui.newMainCommand(cmdStr, dep.ID()) } -func (gui *Gui) handleOpenDepPackageConfig() error { - selectedDep := gui.getSelectedDependency() - if selectedDep == nil { - return nil - } - - if selectedDep.PackageConfig == nil { +func (gui *Gui) handleOpenDepPackageConfig(dep *commands.Dependency) error { + if dep.PackageConfig == nil { return gui.surfaceError(errors.New("dependency not in node_modules")) } - return gui.openFile(selectedDep.ConfigPath()) + return gui.openFile(dep.ConfigPath()) } -func (gui *Gui) handleDepUninstall() error { - selectedDep := gui.getSelectedDependency() - if selectedDep == nil { - return nil - } - +func (gui *Gui) handleDepUninstall(dep *commands.Dependency) error { var menuItems []*menuItem - if selectedDep.Kind == "peer" { + if dep.Kind == "peer" { // I have no idea how peer dependencies work, so we're just using the one option here - uninstallStr := fmt.Sprintf("npm uninstall %s", selectedDep.Name) + uninstallStr := fmt.Sprintf("npm uninstall %s", dep.Name) menuItems = []*menuItem{ { displayStrings: []string{"uninstall", utils.ColoredString(uninstallStr, color.FgYellow)}, onPress: func() error { - return gui.newMainCommand(uninstallStr, selectedDep.ID()) + return gui.newMainCommand(uninstallStr, dep.ID()) }, }, } @@ -110,20 +90,20 @@ func (gui *Gui) handleDepUninstall() error { "optional": " --save-optional", } - uninstallCmdStr := fmt.Sprintf("npm uninstall --no-save %s", selectedDep.Name) - uninstallAndSaveCmdStr := fmt.Sprintf("npm uninstall%s %s", kindMap[selectedDep.Kind], selectedDep.Name) + uninstallCmdStr := fmt.Sprintf("npm uninstall --no-save %s", dep.Name) + uninstallAndSaveCmdStr := fmt.Sprintf("npm uninstall%s %s", kindMap[dep.Kind], dep.Name) menuItems = []*menuItem{ { displayStrings: []string{"uninstall and save", utils.ColoredString(uninstallAndSaveCmdStr, color.FgYellow)}, onPress: func() error { - return gui.newMainCommand(uninstallAndSaveCmdStr, selectedDep.ID()) + return gui.newMainCommand(uninstallAndSaveCmdStr, dep.ID()) }, }, { displayStrings: []string{"just uninstall", utils.ColoredString(uninstallCmdStr, color.FgYellow)}, onPress: func() error { - return gui.newMainCommand(uninstallCmdStr, selectedDep.ID()) + return gui.newMainCommand(uninstallCmdStr, dep.ID()) }, }, } @@ -140,3 +120,14 @@ func (gui *Gui) selectedDepID() string { return selectedDep.ID() } + +func (gui *Gui) wrappedDependencyHandler(f func(*commands.Dependency) error) func(*gocui.Gui, *gocui.View) error { + return gui.wrappedHandler(func() error { + dep := gui.getSelectedDependency() + if dep == nil { + return nil + } + + return f(dep) + }) +} diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 9162511..599090a 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -366,7 +366,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { { ViewName: "packages", Key: gui.getKey("universal.select"), - Handler: gui.wrappedHandler(gui.handleCheckoutPackage), + Handler: gui.wrappedPackageHandler(gui.handleCheckoutPackage), }, { ViewName: "packages", @@ -382,7 +382,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { { ViewName: "packages", Key: gui.getKey("packages.pack"), - Handler: gui.wrappedHandler(gui.handlePackPackage), + Handler: gui.wrappedPackageHandler(gui.handlePackPackage), Description: fmt.Sprintf("%s package", utils.ColoredString("`npm pack`", color.FgYellow)), }, { @@ -394,67 +394,67 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { { ViewName: "packages", Key: gui.getKey("packages.globalLink"), - Handler: gui.wrappedHandler(gui.handleGlobalLinkPackage), + Handler: gui.wrappedPackageHandler(gui.handleGlobalLinkPackage), Description: fmt.Sprintf("%s (i.e. globally link) (or unlink if already linked)", utils.ColoredString("`npm link`", color.FgYellow)), }, { ViewName: "packages", Key: gui.getKey("universal.remove"), - Handler: gui.wrappedHandler(gui.handleRemovePackage), + Handler: gui.wrappedPackageHandler(gui.handleRemovePackage), Description: "remove package from list", }, { ViewName: "packages", Key: gui.getKey("universal.install"), - Handler: gui.wrappedHandler(gui.handleInstall), + Handler: gui.wrappedPackageHandler(gui.handleInstall), Description: fmt.Sprintf("%s package", utils.ColoredString("`npm install`", color.FgYellow)), }, { ViewName: "packages", Key: gui.getKey("packages.build"), - Handler: gui.wrappedHandler(gui.handleBuild), + Handler: gui.wrappedPackageHandler(gui.handleBuild), Description: fmt.Sprintf("%s package", utils.ColoredString("`npm run build`", color.FgYellow)), }, { ViewName: "packages", Key: gui.getKey("universal.openFile"), - Handler: gui.wrappedHandler(gui.handleOpenPackageConfig), + Handler: gui.wrappedPackageHandler(gui.handleOpenPackageConfig), Description: "open package.json", }, { ViewName: "scripts", Key: gui.getKey("universal.select"), - Handler: gui.wrappedHandler(gui.handleRunScript), + Handler: gui.wrappedScriptHandler(gui.handleRunScript), Description: fmt.Sprintf("%s script", utils.ColoredString("`npm run`", color.FgYellow)), }, { ViewName: "scripts", Key: gui.getKey("universal.remove"), - Handler: gui.wrappedHandler(gui.handleRemoveScript), + Handler: gui.wrappedScriptHandler(gui.handleRemoveScript), Description: "remove script from package.json", }, { ViewName: "deps", Key: gui.getKey("universal.install"), - Handler: gui.wrappedHandler(gui.handleDepInstall), + Handler: gui.wrappedDependencyHandler(gui.handleDepInstall), Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm install`", color.FgYellow)), }, { ViewName: "deps", Key: gui.getKey("universal.openFile"), - Handler: gui.wrappedHandler(gui.handleOpenDepPackageConfig), + Handler: gui.wrappedDependencyHandler(gui.handleOpenDepPackageConfig), Description: "open package.json", }, { ViewName: "deps", Key: gui.getKey("universal.update"), - Handler: gui.wrappedHandler(gui.handleDepUpdate), + Handler: gui.wrappedDependencyHandler(gui.handleDepUpdate), Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm update`", color.FgYellow)), }, { ViewName: "deps", Key: gui.getKey("universal.remove"), - Handler: gui.wrappedHandler(gui.handleDepUninstall), + Handler: gui.wrappedDependencyHandler(gui.handleDepUninstall), Description: fmt.Sprintf("%s dependency", utils.ColoredString("`npm uninstall`", color.FgYellow)), }, } diff --git a/pkg/gui/packages_panel.go b/pkg/gui/packages_panel.go index dec3f7c..e13a6bf 100644 --- a/pkg/gui/packages_panel.go +++ b/pkg/gui/packages_panel.go @@ -103,14 +103,8 @@ func (gui *Gui) refreshStatePackages() error { return nil } -func (gui *Gui) handleCheckoutPackage() error { - selectedPkg := gui.getSelectedPackage() - - if selectedPkg == nil { - return nil - } - - if err := gui.sendPackageToTop(selectedPkg.Path); err != nil { +func (gui *Gui) handleCheckoutPackage(pkg *commands.Package) error { + if err := gui.sendPackageToTop(pkg.Path); err != nil { return err } @@ -146,74 +140,49 @@ func (gui *Gui) handleLinkPackage() error { return gui.newMainCommand(cmdStr, selectedPkg.ID()) } -func (gui *Gui) handleGlobalLinkPackage() error { - selectedPkg := gui.getSelectedPackage() - if selectedPkg == nil { - return nil - } - - if selectedPkg != gui.currentPackage() { +func (gui *Gui) handleGlobalLinkPackage(pkg *commands.Package) error { + if pkg != gui.currentPackage() { return gui.surfaceError(errors.New("You can only globally link the current package. Hit space on this package to make it the current package.")) } var cmdStr string - if selectedPkg.LinkedGlobally { + if pkg.LinkedGlobally { cmdStr = "npm unlink" } else { cmdStr = "npm link" } - return gui.newMainCommand(cmdStr, selectedPkg.ID()) + return gui.newMainCommand(cmdStr, pkg.ID()) } -func (gui *Gui) handleInstall() error { - selectedPkg := gui.getSelectedPackage() - if selectedPkg == nil { - return nil - } - +func (gui *Gui) handleInstall(pkg *commands.Package) error { var cmdStr string - if selectedPkg == gui.currentPackage() { + if pkg == gui.currentPackage() { cmdStr = "npm install" } else { - cmdStr = "npm install --prefix " + selectedPkg.Path + cmdStr = "npm install --prefix " + pkg.Path } - return gui.newMainCommand(cmdStr, selectedPkg.ID()) + return gui.newMainCommand(cmdStr, pkg.ID()) } -func (gui *Gui) handleBuild() error { - selectedPkg := gui.getSelectedPackage() - if selectedPkg == nil { - return nil - } - +func (gui *Gui) handleBuild(pkg *commands.Package) error { var cmdStr string - if selectedPkg == gui.currentPackage() { + if pkg == gui.currentPackage() { cmdStr = "npm run build" } else { - cmdStr = "npm run build --prefix " + selectedPkg.Path + cmdStr = "npm run build --prefix " + pkg.Path } - return gui.newMainCommand(cmdStr, selectedPkg.ID()) + return gui.newMainCommand(cmdStr, pkg.ID()) } -func (gui *Gui) handleOpenPackageConfig() error { - selectedPkg := gui.getSelectedPackage() - if selectedPkg == nil { - return nil - } - - return gui.openFile(selectedPkg.ConfigPath()) +func (gui *Gui) handleOpenPackageConfig(pkg *commands.Package) error { + return gui.openFile(pkg.ConfigPath()) } -func (gui *Gui) handleRemovePackage() error { - selectedPkg := gui.getSelectedPackage() - if selectedPkg == nil { - return nil - } - - if selectedPkg == gui.currentPackage() { +func (gui *Gui) handleRemovePackage(pkg *commands.Package) error { + if pkg == gui.currentPackage() { return gui.createErrorPanel("Cannot remove current package") } @@ -223,7 +192,7 @@ func (gui *Gui) handleRemovePackage() error { prompt: "Do you want to remove this package from the list? It won't actually be removed from the filesystem, but as far as lazynpm is concerned it'll be as good as dead. You won't have to worry about it no more.", returnFocusOnClose: true, handleConfirm: func() error { - return gui.removePackage(selectedPkg.Path) + return gui.removePackage(pkg.Path) }, }) } @@ -242,18 +211,13 @@ func (gui *Gui) handleAddPackage() error { }) } -func (gui *Gui) handlePackPackage() error { - selectedPkg := gui.getSelectedPackage() - if selectedPkg == nil { - return nil - } - +func (gui *Gui) handlePackPackage(pkg *commands.Package) error { cmdStr := "npm pack" - if selectedPkg != gui.currentPackage() { - cmdStr = fmt.Sprintf("npm pack %s", selectedPkg.Path) + if pkg != gui.currentPackage() { + cmdStr = fmt.Sprintf("npm pack %s", pkg.Path) } - return gui.newMainCommand(cmdStr, selectedPkg.ID()) + return gui.newMainCommand(cmdStr, pkg.ID()) } func (gui *Gui) selectedPackageID() string { @@ -303,7 +267,6 @@ func (gui *Gui) handlePublishPackage(pkg *commands.Package) error { } func (gui *Gui) wrappedPackageHandler(f func(*commands.Package) error) func(*gocui.Gui, *gocui.View) error { - return gui.wrappedHandler(func() error { pkg := gui.getSelectedPackage() if pkg == nil { diff --git a/pkg/gui/scripts_panel.go b/pkg/gui/scripts_panel.go index 44776a6..68ac7ca 100644 --- a/pkg/gui/scripts_panel.go +++ b/pkg/gui/scripts_panel.go @@ -35,17 +35,13 @@ func (gui *Gui) handleScriptSelect(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) handleRunScript() error { - script := gui.getSelectedScript() - +func (gui *Gui) handleRunScript(script *commands.Script) error { return gui.createPromptPanel(gui.getScriptsView(), "run script", fmt.Sprintf("npm run %s", script.Name), func(input string) error { return gui.newMainCommand(input, script.ID()) }) } -func (gui *Gui) handleRemoveScript() error { - script := gui.getSelectedScript() - +func (gui *Gui) handleRemoveScript(script *commands.Script) error { return gui.createConfirmationPanel(createConfirmationPanelOpts{ returnToView: gui.getScriptsView(), title: "Remove script", @@ -67,3 +63,14 @@ func (gui *Gui) selectedScriptID() string { return script.ID() } + +func (gui *Gui) wrappedScriptHandler(f func(*commands.Script) error) func(*gocui.Gui, *gocui.View) error { + return gui.wrappedHandler(func() error { + pkg := gui.getSelectedScript() + if pkg == nil { + return nil + } + + return f(pkg) + }) +}