fix: reviewers not correctly shown on dashboard edit screen
This commit is contained in:
@@ -61,10 +61,47 @@ func selectedLoginPrefix(value string) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m App) reviewerInputContext(value string) (
|
||||
prefix, query string,
|
||||
selected []string,
|
||||
currentComplete bool,
|
||||
) {
|
||||
prefix = selectedLoginPrefix(value)
|
||||
query = currentLoginQuery(value)
|
||||
selected = parseLoginList(prefix)
|
||||
if canonical, ok := m.eligibleReviewerLogin(query); ok {
|
||||
selected = normalizedLogins(append(selected, canonical))
|
||||
query = ""
|
||||
currentComplete = true
|
||||
}
|
||||
return prefix, query, selected, currentComplete
|
||||
}
|
||||
|
||||
func (m App) eligibleReviewerLogin(value string) (string, bool) {
|
||||
value = strings.TrimSpace(strings.TrimPrefix(value, "@"))
|
||||
if value == "" {
|
||||
return "", false
|
||||
}
|
||||
for _, user := range m.prEditUsers {
|
||||
if user.CanReview &&
|
||||
!strings.EqualFold(user.Login, m.details.Author) &&
|
||||
strings.EqualFold(user.Login, value) {
|
||||
return user.Login, true
|
||||
}
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
func (m App) userSuggestions() []userSuggestion {
|
||||
field := m.prEditField
|
||||
query := strings.ToLower(currentLoginQuery(m.prEditEditors[field].Text))
|
||||
selected := parseLoginList(selectedLoginPrefix(m.prEditEditors[field].Text))
|
||||
if field == prEditReviewersField {
|
||||
_, reviewerQuery, reviewerSelected, _ :=
|
||||
m.reviewerInputContext(m.prEditEditors[field].Text)
|
||||
query = strings.ToLower(reviewerQuery)
|
||||
selected = reviewerSelected
|
||||
}
|
||||
selectedSet := make(map[string]bool, len(selected))
|
||||
for _, login := range selected {
|
||||
selectedSet[strings.ToLower(login)] = true
|
||||
@@ -78,10 +115,18 @@ func (m App) userSuggestions() []userSuggestion {
|
||||
for _, login := range current {
|
||||
currentSet[strings.ToLower(login)] = true
|
||||
}
|
||||
existingReviewers := make(map[string]bool, len(m.details.Reviewers))
|
||||
if field == prEditReviewersField {
|
||||
for _, reviewer := range m.details.Reviewers {
|
||||
existingReviewers[strings.ToLower(reviewer.Login)] = true
|
||||
}
|
||||
}
|
||||
now := time.Now()
|
||||
for _, user := range m.prEditUsers {
|
||||
if field == prEditReviewersField {
|
||||
if !user.CanReview || strings.EqualFold(user.Login, m.details.Author) {
|
||||
if !user.CanReview ||
|
||||
strings.EqualFold(user.Login, m.details.Author) ||
|
||||
existingReviewers[strings.ToLower(user.Login)] {
|
||||
continue
|
||||
}
|
||||
} else if !user.CanAssign {
|
||||
@@ -197,7 +242,14 @@ func (m *App) completeUserSuggestion() bool {
|
||||
index := clamp(m.prEditUserIndex, 0, len(suggestions)-1)
|
||||
login := suggestions[index].user.Login
|
||||
editor := &m.prEditEditors[m.prEditField]
|
||||
completed := selectedLoginPrefix(editor.Text) + login
|
||||
prefix := selectedLoginPrefix(editor.Text)
|
||||
if m.prEditField == prEditReviewersField {
|
||||
_, _, _, currentComplete := m.reviewerInputContext(editor.Text)
|
||||
if currentComplete {
|
||||
return false
|
||||
}
|
||||
}
|
||||
completed := prefix + login
|
||||
if editor.Text == completed {
|
||||
return false
|
||||
}
|
||||
@@ -208,6 +260,25 @@ func (m *App) completeUserSuggestion() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (m *App) startNextReviewer() bool {
|
||||
if m.prEditField != prEditReviewersField {
|
||||
return false
|
||||
}
|
||||
editor := &m.prEditEditors[prEditReviewersField]
|
||||
if editor.Cursor != len([]rune(editor.Text)) {
|
||||
return false
|
||||
}
|
||||
_, _, _, currentComplete := m.reviewerInputContext(editor.Text)
|
||||
if !currentComplete {
|
||||
return false
|
||||
}
|
||||
editor.Text = strings.TrimRight(editor.Text, " \t") + ", "
|
||||
editor.Cursor = len([]rune(editor.Text))
|
||||
m.prEditUserIndex = 0
|
||||
m.err = nil
|
||||
return true
|
||||
}
|
||||
|
||||
func (m App) userCompletionLines(width int) []string {
|
||||
width = max(1, width)
|
||||
if m.prEditUsersLoading {
|
||||
@@ -232,9 +303,14 @@ func (m App) userCompletionLines(width int) []string {
|
||||
" ranked by latest 100 default-branch commits",
|
||||
))
|
||||
}
|
||||
separatorHelp := "comma separates users"
|
||||
if m.prEditField == prEditReviewersField {
|
||||
separatorHelp = "space starts next reviewer"
|
||||
}
|
||||
lines = append(lines,
|
||||
dimStyle.Render(fmt.Sprintf(
|
||||
" comma separates users • %s choose • %s complete",
|
||||
" %s • %s choose • %s complete",
|
||||
separatorHelp,
|
||||
primaryCombinedKeyLabel(
|
||||
m.keybindings.Input.PreviousCompletion,
|
||||
m.keybindings.Input.NextCompletion,
|
||||
|
||||
Reference in New Issue
Block a user