Forge
csharp3407750f
1using AgentForge.Abstractions;
2using AgentForge.Data;
3using AgentForge.Data.Entities;
4using AgentForge.Models;
5using AgentForge.Plugin.Sdk;
6using AgentForge.Plugin.View;
7
8using Microsoft.Extensions.DependencyInjection;
9
10namespace AgentForge.Plugin.MergeRequest;
11
12internal static class ForgeMergeRequestListPage
13{
14 internal static string Render(string repoName, IReadOnlyList<ForgeMergeRequestEntity> mergeRequests)
15 {
16 if (mergeRequests.Count == 0)
17 return ForgeHtml.Ul("plain", ForgeHtml.Li("meta", ForgeHtml.Text("No merge requests yet.")));
18
19 var items = new List<string>(mergeRequests.Count);
20 foreach (var mr in mergeRequests)
21 {
22 var href = $"/view/repos/{ForgeRepoNames.ToUrlPath(repoName)}/merge-requests/{mr.Number}";
23 items.Add(ForgeHtml.Li(null,
24 ForgeHtml.A(href, $"!{mr.Number}"),
25 ForgeHtml.Text(" "),
26 ForgeHtml.Text(mr.Title),
27 ForgeHtml.Text(" "),
28 ForgeHtml.Badge(mr.Status.ToSlug())));
29 }
30
31 return ForgeHtml.Ul("plain", [.. items]);
32 }
33}
34
35internal static class ForgeMergeRequestTabBodyRegistration
36{
37 internal static void Register(ForgeRepoTabBodyRegistry registry) =>
38 registry.Add("merge-requests", ctx =>
39 {
40 var repository = ctx.Services.GetRequiredService<ForgeRepository>();
41 var mergeRequests = repository.ListMergeRequests(ctx.RepoId);
42 return ForgeMergeRequestListPage.Render(ctx.RepoName, mergeRequests);
43 });
44}
45
View only · write via MCP/CIDE