Phase 4: Migrate multi-option Select prompts to huh
Overview
Migrate Select prompts with 3+ options.
Files (16 total)
-
internal/commands/mr/merge/mr_merge.go:335- 3 options -
internal/commands/ssh-key/delete/delete.go:136- Dynamic SSH key list -
internal/commands/ssh-key/get/get.go:132- SSH key list -
internal/commands/ci/ciutils/utils.go:267- Job selection -
internal/commands/ci/status/status.go:138- Job selection -
internal/commands/issue/board/view/issue_board_view.go:261- Board selection -
internal/commands/stack/navigate/stack_navigate.go:208- Stack navigation - 5 auth/login Select prompts
Key Improvement
Type-safe option mapping with huh:
// BEFORE: Manual map needed
keyOpts := make(map[string]int)
surveyOpts := []string{}
for _, key := range keys {
keyOpts[key.Title] = key.ID
surveyOpts = append(surveyOpts, key.Title)
}
var result string
prompt.AskOne(&survey.Select{Options: surveyOpts}, &result)
selectedID := keyOpts[result]
// AFTER: Type-safe
options := []huh.Option[int]{}
for _, key := range keys {
options = append(options, huh.NewOption(key.Title, key.ID))
}
var selectedID int
huh.NewSelect[int]().Options(options...).Value(&selectedID).Run()
Effort: 3-4 days