From 4f2532de425644a10a8effeb23088bcf31317139 Mon Sep 17 00:00:00 2001 From: Tyrone Yeh Date: Wed, 7 May 2025 15:24:40 +0800 Subject: [PATCH] Improject filter search method --- models/issues/issue_search.go | 14 ++++---------- modules/util/util.go | 11 +++++++++++ routers/web/repo/issue_list.go | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/models/issues/issue_search.go b/models/issues/issue_search.go index 0c17971e07..e05f8c26f6 100644 --- a/models/issues/issue_search.go +++ b/models/issues/issue_search.go @@ -16,6 +16,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/container" "code.gitea.io/gitea/modules/optional" + "code.gitea.io/gitea/modules/util" "xorm.io/builder" "xorm.io/xorm" @@ -196,17 +197,10 @@ func applyMilestoneCondition(sess *xorm.Session, opts *IssuesOptions) { } func applyProjectCondition(sess *xorm.Session, opts *IssuesOptions) { + opts.ProjectIDs = util.RemoveValue(opts.ProjectIDs, 0) if len(opts.ProjectIDs) > 0 { // specific project - var includedProjectIDs []int64 - for _, projectID := range opts.ProjectIDs { - if projectID > 0 { - includedProjectIDs = append(includedProjectIDs, projectID) - } - } - if len(includedProjectIDs) > 0 { - sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). - In("project_issue.project_id", includedProjectIDs) - } + sess.Join("INNER", "project_issue", "issue.id = project_issue.issue_id"). + In("project_issue.project_id", opts.ProjectIDs) } // opts.ProjectID == 0 means all projects, // do not need to apply any condition diff --git a/modules/util/util.go b/modules/util/util.go index 714c6bda7d..f61c6aa420 100644 --- a/modules/util/util.go +++ b/modules/util/util.go @@ -277,3 +277,14 @@ func DiffSlice[T comparable](oldSlice, newSlice []T) (added, removed []T) { } return added, removed } + +func RemoveValue[T comparable](a []T, target T) []T { + n := 0 + for _, v := range a { + if v != target { + a[n] = v + n++ + } + } + return a[:n] +} diff --git a/routers/web/repo/issue_list.go b/routers/web/repo/issue_list.go index bb00b90270..2de42be7ea 100644 --- a/routers/web/repo/issue_list.go +++ b/routers/web/repo/issue_list.go @@ -551,7 +551,7 @@ func prepareIssueFilterAndList(ctx *context.Context, milestoneID, projectID int6 IssueIDs: nil, } - if projectID > 0 { + if projectID != 0 { statsOpts.ProjectIDs = []int64{projectID} }