ikurotime / gitgud

public
main / internal/interface/web/templates/pulls_list.templ
2.0 KB · Templ Raw
 1package templates
 2
 3import "gitgud/internal/domain"
 4
 5templ PullsList(user *domain.User, repo *domain.Repository, state string, prs []*domain.PullRequest, openCount, mergedCount, closedCount int) {
 6	@Layout("Pull requests · "+repo.Name, user) {
 7		@repoHeader(repo, "pulls")
 8		<div class="mb-4 flex items-center justify-between">
 9			<div class="flex gap-5 text-sm">
10				<a class={ stateTabClass(state, "open") } href={ templ.SafeURL(repoPath(repo, "/pulls?state=open")) }>{ itoa(openCount) } Open</a>
11				<a class={ stateTabClass(state, "merged") } href={ templ.SafeURL(repoPath(repo, "/pulls?state=merged")) }>{ itoa(mergedCount) } Merged</a>
12				<a class={ stateTabClass(state, "closed") } href={ templ.SafeURL(repoPath(repo, "/pulls?state=closed")) }>{ itoa(closedCount) } Closed</a>
13			</div>
14			<a class="btn btn-primary" href={ templ.SafeURL(repoPath(repo, "/compare")) }>+ New pull request</a>
15		</div>
16		if len(prs) == 0 {
17			@emptyState("No pull requests", "There are no "+state+" pull requests in this repository.", "", "")
18		} else {
19			<div class="card overflow-hidden">
20				for _, p := range prs {
21					<div class="row border-b border-line px-4 py-3 last:border-0">
22						<a class="flex items-start gap-2.5" href={ templ.SafeURL(repoPath(repo, "/pulls/"+itoa(p.Number))) }>
23							@prDot(string(p.State))
24							<span class="min-w-0">
25								<span class="block text-ink hover:text-accent">{ p.Title }</span>
26								<span class="meta">#{ itoa(p.Number) } · <span class="font-mono">{ p.HeadBranch }</span>  <span class="font-mono">{ p.BaseBranch }</span> · by { p.AuthorName }</span>
27							</span>
28						</a>
29					</div>
30				}
31			</div>
32		}
33	}
34}
35
36templ prDot(state string) {
37	if state == "open" {
38		<span class="mt-1 size-3.5 shrink-0 rounded-full border-2 border-accent"></span>
39	} else if state == "merged" {
40		<span class="mt-1 size-3.5 shrink-0 rounded-full border-2 border-merged"></span>
41	} else {
42		<span class="mt-1 size-3.5 shrink-0 rounded-full border-2 border-faint"></span>
43	}
44}