0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-07-21 10:14:40 +02:00

Improve string join code for projects id

This commit is contained in:
Tyrone Yeh 2025-05-09 14:29:18 +08:00
parent e912b7e3db
commit 4c72c32f9b
No known key found for this signature in database
GPG Key ID: AC8B5AA00375E170
3 changed files with 20 additions and 11 deletions

View File

@ -288,3 +288,14 @@ func RemoveValue[T comparable](a []T, target T) []T {
}
return a[:n]
}
func JoinSlice[T any](items []T, toString func(T) string) string {
var b strings.Builder
sep := ""
for _, item := range items {
b.WriteString(sep)
b.WriteString(toString(item))
sep = ","
}
return b.String()
}

View File

@ -272,13 +272,12 @@ func ValidateRepoMetasForNewIssue(ctx *context.Context, form forms.CreateIssueFo
allProjects := append(slices.Clone(pageMetaData.ProjectsData.OpenProjects), pageMetaData.ProjectsData.ClosedProjects...)
candidateProjects := toSet(allProjects, func(project *project_model.Project) int64 { return project.ID })
inputProjectIDs, _ := base.StringsToInt64s(strings.Split(form.ProjectIDs, ","))
var projectIDStrings []string
for _, inputProjectID := range inputProjectIDs {
if candidateProjects.Contains(inputProjectID) {
projectIDStrings = append(projectIDStrings, strconv.FormatInt(inputProjectID, 10))
pageMetaData.ProjectsData.SelectedProjectID = util.JoinSlice(inputProjectIDs, func(v int64) string {
if candidateProjects.Contains(v) {
return strconv.FormatInt(v, 10)
}
}
pageMetaData.ProjectsData.SelectedProjectID = strings.Join(projectIDStrings, ",")
return ""
})
// prepare assignees
candidateAssignees := toSet(pageMetaData.AssigneesData.CandidateAssignees, func(user *user_model.User) int64 { return user.ID })

View File

@ -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"
shared_user "code.gitea.io/gitea/routers/web/shared/user"
"code.gitea.io/gitea/services/context"
issue_service "code.gitea.io/gitea/services/issue"
@ -161,11 +162,9 @@ func (d *IssuePageMetaData) retrieveAssigneesData(ctx *context.Context) {
func (d *IssuePageMetaData) retrieveProjectsDataForIssueWriter(ctx *context.Context) {
if d.Issue != nil && len(d.Issue.Projects) > 0 {
ids := make([]string, 0, len(d.Issue.Projects))
for _, a := range d.Issue.Projects {
ids = append(ids, strconv.FormatInt(a.ID, 10))
}
d.ProjectsData.SelectedProjectID = strings.Join(ids, ",")
d.ProjectsData.SelectedProjectID = util.JoinSlice(d.Issue.Projects, func(v *project_model.Project) string {
return strconv.FormatInt(v.ID, 10)
})
}
d.ProjectsData.OpenProjects, d.ProjectsData.ClosedProjects = retrieveProjectsInternal(ctx, ctx.Repo.Repository)
}