mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-03 00:45:22 +02:00
feat: show more relevant results for 'dependencies' dropdown (#8003)
- Fix issue dropdown breaking when currently selected issue is included in results. - Add `sort` parameter to `/issues/search` API. - Sort dropdown by relevance. - Make priority_repo_id work again. - Added E2E test. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8003 Reviewed-by: Shiny Nematoda <snematoda@noreply.codeberg.org> Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: Danko Aleksejevs <danko@very.lv> Co-committed-by: Danko Aleksejevs <danko@very.lv>
This commit is contained in:
parent
414199fc66
commit
184e068f37
17 changed files with 269 additions and 41 deletions
|
@ -32,7 +32,7 @@
|
|||
created_unix: 1731254961
|
||||
updated_unix: 1731254961
|
||||
topics: '[]'
|
||||
|
||||
|
||||
-
|
||||
id: 2
|
||||
owner_id: 2
|
||||
|
|
|
@ -48,7 +48,9 @@ type IssuesOptions struct { //nolint
|
|||
UpdatedBeforeUnix int64
|
||||
// prioritize issues from this repo
|
||||
PriorityRepoID int64
|
||||
IsArchived optional.Option[bool]
|
||||
// if this issue index (not ID) exists and matches the filters, *and* priorityrepo sort is used, show it first
|
||||
PriorityIssueIndex int64
|
||||
IsArchived optional.Option[bool]
|
||||
|
||||
// If combined with AllPublic, then private as well as public issues
|
||||
// that matches the criteria will be returned, if AllPublic is false
|
||||
|
@ -60,7 +62,7 @@ type IssuesOptions struct { //nolint
|
|||
|
||||
// applySorts sort an issues-related session based on the provided
|
||||
// sortType string
|
||||
func applySorts(sess *xorm.Session, sortType string, priorityRepoID int64) {
|
||||
func applySorts(sess *xorm.Session, sortType string, priorityRepoID, priorityIssueIndex int64) {
|
||||
switch sortType {
|
||||
case "oldest":
|
||||
sess.Asc("issue.created_unix").Asc("issue.id")
|
||||
|
@ -97,8 +99,11 @@ func applySorts(sess *xorm.Session, sortType string, priorityRepoID int64) {
|
|||
case "priorityrepo":
|
||||
sess.OrderBy("CASE "+
|
||||
"WHEN issue.repo_id = ? THEN 1 "+
|
||||
"ELSE 2 END ASC", priorityRepoID).
|
||||
Desc("issue.created_unix").
|
||||
"ELSE 2 END ASC", priorityRepoID)
|
||||
if priorityIssueIndex != 0 {
|
||||
sess.OrderBy("issue.index = ? DESC", priorityIssueIndex)
|
||||
}
|
||||
sess.Desc("issue.created_unix").
|
||||
Desc("issue.id")
|
||||
case "project-column-sorting":
|
||||
sess.Asc("project_issue.sorting").Desc("issue.created_unix").Desc("issue.id")
|
||||
|
@ -470,7 +475,7 @@ func Issues(ctx context.Context, opts *IssuesOptions) (IssueList, error) {
|
|||
Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
|
||||
applyLimit(sess, opts)
|
||||
applyConditions(sess, opts)
|
||||
applySorts(sess, opts.SortType, opts.PriorityRepoID)
|
||||
applySorts(sess, opts.SortType, opts.PriorityRepoID, opts.PriorityIssueIndex)
|
||||
|
||||
issues := IssueList{}
|
||||
if err := sess.Find(&issues); err != nil {
|
||||
|
@ -494,7 +499,7 @@ func IssueIDs(ctx context.Context, opts *IssuesOptions, otherConds ...builder.Co
|
|||
}
|
||||
|
||||
applyLimit(sess, opts)
|
||||
applySorts(sess, opts.SortType, opts.PriorityRepoID)
|
||||
applySorts(sess, opts.SortType, opts.PriorityRepoID, opts.PriorityIssueIndex)
|
||||
|
||||
var res []int64
|
||||
total, err := sess.Select("`issue`.id").Table(&Issue{}).FindAndCount(&res)
|
||||
|
|
|
@ -149,7 +149,7 @@ func PullRequests(ctx context.Context, baseRepoID int64, opts *PullRequestsOptio
|
|||
}
|
||||
|
||||
findSession := listPullRequestStatement(ctx, baseRepoID, opts)
|
||||
applySorts(findSession, opts.SortType, 0)
|
||||
applySorts(findSession, opts.SortType, 0, 0)
|
||||
findSession = db.SetSessionPagination(findSession, opts)
|
||||
prs := make([]*PullRequest, 0, opts.PageSize)
|
||||
found := findSession.Find(&prs)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue