Skip to content

Commit

Permalink
fix(#95): fetch all available users for assign user view
Browse files Browse the repository at this point in the history
  • Loading branch information
mk-5 committed Dec 23, 2023
1 parent 1c54cd3 commit 4c1154a
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 13 deletions.
18 changes: 12 additions & 6 deletions internal/issues/search_issues.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,10 +229,16 @@ func (view *searchIssuesView) runSelectStatus() {
func (view *searchIssuesView) runSelectUser() {
app.GetApp().ClearNow()
app.GetApp().Loading(true)
us := view.fetchUsers(view.project.Key)
us = append(us, jira.User{DisplayName: ui.MessageAll})
usersStrings := users.FormatJiraUsers(us)
view.fuzzyFind = app.NewFuzzyFind(ui.MessageSelectUser, usersStrings)
var us []jira.User
view.fuzzyFind = app.NewFuzzyFindWithProvider(ui.MessageSelectUser, func(query string) []string {
if len(us) > 0 && len(us) < JiraFetchRecordsThreshold {
return users.FormatJiraUsers(us)
}
us = view.fetchUsers(view.project.Key, query)
us = append(us, jira.User{DisplayName: ui.MessageAll})
usersStrings := users.FormatJiraUsers(us)
return usersStrings
})
app.GetApp().Loading(false)
if user := <-view.fuzzyFind.Complete; true {
app.GetApp().ClearNow()
Expand Down Expand Up @@ -311,8 +317,8 @@ func (view *searchIssuesView) fetchStatuses(projectId string) []jira.IssueStatus
return ss
}

func (view *searchIssuesView) fetchUsers(projectKey string) []jira.User {
us, err := view.api.FindUsers(projectKey)
func (view *searchIssuesView) fetchUsers(projectKey string, query string) []jira.User {
us, err := view.api.FindUsersWithQuery(projectKey, query)
if err != nil {
app.Error(err.Error())
}
Expand Down
9 changes: 4 additions & 5 deletions internal/issues/search_issues_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,12 +295,11 @@ func Test_fjiraSearchIssuesView_runSelectUser(t *testing.T) {
view.runSelectUser()
done <- struct{}{}
}()
for {
if view.fuzzyFind != nil {
break
}
<-time.NewTimer(10 * time.Millisecond).C
for view.fuzzyFind == nil {
<-time.After(10 * time.Millisecond)
}
view.fuzzyFind.SetDebounceDisabled(true)
view.fuzzyFind.Update()
query := "John"
for _, key := range query {
view.fuzzyFind.HandleKeyEvent(tcell.NewEventKey(-1, key, tcell.ModNone))
Expand Down
1 change: 1 addition & 0 deletions internal/jira/jira.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type Api interface {
SearchJql(query string) ([]Issue, error)
SearchJqlPageable(query string, page int32, pageSize int32) ([]Issue, int32, int32, error)
FindUsers(project string) ([]User, error)
FindUsersWithQuery(project string, query string) ([]User, error)
FindProjects() ([]Project, error)
FindLabels(issue *Issue, query string) ([]string, error)
AddLabel(issueId string, label string) error
Expand Down
12 changes: 10 additions & 2 deletions internal/jira/jira_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,23 @@ const (
var UserSearchDeserializeErr = errors.New("Cannot deserialize jira user search response.")

type findUserQueryParams struct {
Project string `url:"project"`
MaxResults int `url:"maxResults"`
Project string `url:"project"`
MaxResults int `url:"maxResults"`
Query *string `url:"query"`
}

func (api *httpApi) FindUsers(project string) ([]User, error) {
return api.FindUsersWithQuery(project, "")
}

func (api *httpApi) FindUsersWithQuery(project string, query string) ([]User, error) {
queryParams := &findUserQueryParams{
Project: project,
MaxResults: 10000,
}
if query != "" {
queryParams.Query = &query
}
response, err := api.jiraRequest("GET", FindUser, queryParams, nil)
if err != nil {
return nil, err
Expand Down

0 comments on commit 4c1154a

Please sign in to comment.