Skip to content

Commit 4c72c32

Browse files
committed
Improve string join code for projects id
1 parent e912b7e commit 4c72c32

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

modules/util/util.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,14 @@ func RemoveValue[T comparable](a []T, target T) []T {
288288
}
289289
return a[:n]
290290
}
291+
292+
func JoinSlice[T any](items []T, toString func(T) string) string {
293+
var b strings.Builder
294+
sep := ""
295+
for _, item := range items {
296+
b.WriteString(sep)
297+
b.WriteString(toString(item))
298+
sep = ","
299+
}
300+
return b.String()
301+
}

routers/web/repo/issue_new.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,12 @@ func ValidateRepoMetasForNewIssue(ctx *context.Context, form forms.CreateIssueFo
272272
allProjects := append(slices.Clone(pageMetaData.ProjectsData.OpenProjects), pageMetaData.ProjectsData.ClosedProjects...)
273273
candidateProjects := toSet(allProjects, func(project *project_model.Project) int64 { return project.ID })
274274
inputProjectIDs, _ := base.StringsToInt64s(strings.Split(form.ProjectIDs, ","))
275-
var projectIDStrings []string
276-
for _, inputProjectID := range inputProjectIDs {
277-
if candidateProjects.Contains(inputProjectID) {
278-
projectIDStrings = append(projectIDStrings, strconv.FormatInt(inputProjectID, 10))
275+
pageMetaData.ProjectsData.SelectedProjectID = util.JoinSlice(inputProjectIDs, func(v int64) string {
276+
if candidateProjects.Contains(v) {
277+
return strconv.FormatInt(v, 10)
279278
}
280-
}
281-
pageMetaData.ProjectsData.SelectedProjectID = strings.Join(projectIDStrings, ",")
279+
return ""
280+
})
282281

283282
// prepare assignees
284283
candidateAssignees := toSet(pageMetaData.AssigneesData.CandidateAssignees, func(user *user_model.User) int64 { return user.ID })

routers/web/repo/issue_page_meta.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
user_model "code.gitea.io/gitea/models/user"
1717
"code.gitea.io/gitea/modules/container"
1818
"code.gitea.io/gitea/modules/optional"
19+
"code.gitea.io/gitea/modules/util"
1920
shared_user "code.gitea.io/gitea/routers/web/shared/user"
2021
"code.gitea.io/gitea/services/context"
2122
issue_service "code.gitea.io/gitea/services/issue"
@@ -161,11 +162,9 @@ func (d *IssuePageMetaData) retrieveAssigneesData(ctx *context.Context) {
161162

162163
func (d *IssuePageMetaData) retrieveProjectsDataForIssueWriter(ctx *context.Context) {
163164
if d.Issue != nil && len(d.Issue.Projects) > 0 {
164-
ids := make([]string, 0, len(d.Issue.Projects))
165-
for _, a := range d.Issue.Projects {
166-
ids = append(ids, strconv.FormatInt(a.ID, 10))
167-
}
168-
d.ProjectsData.SelectedProjectID = strings.Join(ids, ",")
165+
d.ProjectsData.SelectedProjectID = util.JoinSlice(d.Issue.Projects, func(v *project_model.Project) string {
166+
return strconv.FormatInt(v.ID, 10)
167+
})
169168
}
170169
d.ProjectsData.OpenProjects, d.ProjectsData.ClosedProjects = retrieveProjectsInternal(ctx, ctx.Repo.Repository)
171170
}

0 commit comments

Comments
 (0)