mirror of
https://gitea.com/gitea/tea.git
synced 2026-10-26 19:11:25 +01:00
62 lines
1.9 KiB
Go
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
|
|
}
|