Files
gitea-tea/internal/services/issue_create_selectables.go
T

62 lines
1.9 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package services
import (
"context"
)
// IssueTemplate is a repository issue template used to seed create forms.
type IssueTemplate struct {
Name, About, Title, Content string
Form bool
}
type issueTemplateResponse struct {
Name string `json:"name"`
About string `json:"about"`
Title string `json:"title"`
MarkdownContent string `json:"content"`
Form []any `json:"body"`
}
// IssueTemplates lists repository issue templates; null responses become an empty list.
func (s Issues) IssueTemplates(ctx context.Context) ([]IssueTemplate, error) {
var response []issueTemplateResponse
// TODO(sdk): IssueFormElementAttributes.Options is []string, so GetIssueTemplates fails on checkbox options, which are objects.
if err := getJSON(ctx, s.Client, "repos/"+s.Repository+"/issue_templates", &response); err != nil {
return nil, err
}
result := make([]IssueTemplate, 0, len(response))
for _, r := range response {
result = append(result, IssueTemplate{Name: r.Name, About: r.About, Title: r.Title, Content: r.MarkdownContent, Form: r.Form != nil})
}
return result, nil
}
// IssueCreateSelectables adds repository issue templates to the create form choices.
type IssueCreateSelectables struct {
CreateSelectables
Templates []IssueTemplate
}
// CreateSelectables concurrently loads templates and, when the user can push, assignees/milestones/labels.
func (s Issues) CreateSelectables(ctx context.Context) (IssueCreateSelectables, error) {
var result IssueCreateSelectables
err := loadTogether(
func() (err error) {
result.CreateSelectables, err = loadCreateSelectables(ctx, s.Client, s.Repository)
return err
},
func() (err error) {
result.Templates, err = s.IssueTemplates(ctx)
return err
},
)
if err != nil {
return IssueCreateSelectables{}, err
}
return result, nil
}