| 253 | } |
| 254 | |
| 255 | func (c *cli) getUserRoles(ctx context.Context, inputs *userRolesInput, fetchUserRoles userRolesFetcher, selectUserRoles userRolesSelector) error { |
| 256 | var options []string |
| 257 | if err := ansi.Waiting(func() (err error) { |
| 258 | options, err = fetchUserRoles(ctx, c, inputs.ID) |
| 259 | return err |
| 260 | }); err != nil { |
| 261 | return err |
| 262 | } |
| 263 | |
| 264 | selectedRoles, err := selectUserRoles(options) |
| 265 | if err != nil { |
| 266 | return err |
| 267 | } |
| 268 | |
| 269 | for _, selectedRole := range selectedRoles { |
| 270 | indexOfFirstEmptySpace := strings.Index(selectedRole, " ") |
| 271 | inputs.Roles = append(inputs.Roles, selectedRole[:indexOfFirstEmptySpace]) |
| 272 | } |
| 273 | |
| 274 | if len(inputs.Roles) == 0 { |
| 275 | return errNoRolesSelected |
| 276 | } |
| 277 | |
| 278 | return err |
| 279 | } |
| 280 | |
| 281 | func pickUserRoles(options []string) ([]string, error) { |
| 282 | rolesPrompt := &survey.MultiSelect{ |