Files
jmiller df9305758f
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Validate PR (pull_request) Failing after 9s
Universal: Auto Version Bump / Version Bump (push) Successful in 14s
Generic: Project CI / Lint & Validate (pull_request) Successful in 46s
Universal: PR Check / Secret Scan (pull_request) Successful in 1m16s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
feat: add issue status presets and cross-org migration (#507)
4 built-in presets: default, software-development, support-tickets,
bug-tracking. API endpoints to list presets, apply to org, and copy
statuses between orgs. Web UI dropdown on org settings page.

Claude-Session: https://claude.ai/code/session_011AAFzotGMf3ayvXhEmStCd
2026-06-28 02:05:14 -05:00

121 lines
4.5 KiB
Handlebars

{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings issue-statuses")}}
<h4 class="ui top attached header">
{{ctx.Locale.Tr "org.settings.issue_statuses"}}
</h4>
<div class="ui attached segment">
<p class="text grey">{{ctx.Locale.Tr "org.settings.issue_statuses_desc"}}</p>
{{if .IssueStatuses}}
<table class="ui compact table">
<thead>
<tr>
<th>{{ctx.Locale.Tr "org.settings.issue_status_color"}}</th>
<th>{{ctx.Locale.Tr "org.settings.issue_status_name"}}</th>
<th>{{ctx.Locale.Tr "org.settings.issue_status_closes_issue"}}</th>
<th>{{ctx.Locale.Tr "org.settings.issue_status_sort_order"}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{range .IssueStatuses}}
<tr {{if not .IsActive}}class="tw-opacity-50"{{end}}>
<td>
{{if .Color}}
<span class="tw-inline-block tw-w-4 tw-h-4 tw-rounded" style="background-color: {{.Color}}"></span>
{{else}}
<span class="text grey">-</span>
{{end}}
</td>
<td>
<strong>{{.Name}}</strong>
{{if .IsRequired}}<span class="ui mini blue label" title="Required status - cannot be deleted">{{svg "octicon-lock" 10}} required</span>{{end}}
{{if not .IsActive}}<span class="ui mini grey label">{{ctx.Locale.Tr "org.settings.issue_status_inactive"}}</span>{{end}}
{{if .Description}}<br><small class="text grey">{{.Description}}</small>{{end}}
</td>
<td>
{{if .ClosesIssue}}
<span class="ui mini purple label">{{ctx.Locale.Tr "org.settings.issue_status_closes"}}</span>
{{else}}
<span class="text grey">-</span>
{{end}}
</td>
<td>{{.SortOrder}}</td>
<td class="tw-text-right">
{{if .IsRequired}}
<span class="ui tiny icon button disabled" title="Required - cannot be deleted">{{svg "octicon-lock" 14}}</span>
{{else}}
<form method="post" action="{{$.OrgLink}}/settings/issue-statuses/{{.ID}}/delete" class="tw-inline">
{{$.CsrfTokenHtml}}
<button class="ui tiny red icon button" type="submit" title="{{ctx.Locale.Tr "remove"}}">{{svg "octicon-trash" 14}}</button>
</form>
{{end}}
</td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<div class="empty-placeholder">
<p>{{ctx.Locale.Tr "org.settings.issue_statuses_empty"}}</p>
</div>
{{end}}
<div class="divider"></div>
<h5>{{ctx.Locale.Tr "org.settings.issue_status_presets"}}</h5>
<p class="text grey">{{ctx.Locale.Tr "org.settings.issue_status_presets_desc"}}</p>
<form class="ui form" method="post" action="{{.OrgLink}}/settings/issue-statuses/apply-preset">
{{.CsrfTokenHtml}}
<div class="inline fields">
<div class="field">
<select name="preset" class="ui dropdown">
{{range .StatusPresets}}
<option value="{{.Name}}">{{.Description}}</option>
{{end}}
</select>
</div>
<div class="field">
<button class="ui primary button" type="submit" onclick="return confirm('{{ctx.Locale.Tr "org.settings.issue_status_preset_confirm"}}')">
{{svg "octicon-checklist" 14}} {{ctx.Locale.Tr "org.settings.issue_status_preset_apply"}}
</button>
</div>
</div>
</form>
<div class="divider"></div>
<h5>{{ctx.Locale.Tr "org.settings.issue_status_add"}}</h5>
<form class="ui form" method="post" action="{{.OrgLink}}/settings/issue-statuses">
{{.CsrfTokenHtml}}
<div class="three fields">
<div class="required field">
<label>{{ctx.Locale.Tr "org.settings.issue_status_name"}}</label>
<input name="name" required placeholder="e.g. In Progress, Won't Fix, Blocked">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "org.settings.issue_status_color"}}</label>
<input name="color" type="color" value="#0075ff">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "org.settings.issue_status_sort_order"}}</label>
<input name="sort_order" type="number" value="0" min="0">
</div>
</div>
<div class="two fields">
<div class="field">
<label>{{ctx.Locale.Tr "org.settings.issue_status_description"}}</label>
<input name="description" placeholder="Help text shown to users">
</div>
<div class="field">
<div class="ui checkbox tw-mt-4">
<input name="closes_issue" type="checkbox">
<label>{{ctx.Locale.Tr "org.settings.issue_status_closes_issue"}}</label>
</div>
<p class="help">{{ctx.Locale.Tr "org.settings.issue_status_closes_issue_help"}}</p>
</div>
</div>
<button class="ui primary button" type="submit">{{ctx.Locale.Tr "org.settings.issue_status_add"}}</button>
</form>
</div>
{{template "org/settings/layout_footer" .}}