Forge
csharp3407750f
1using AgentForge.Contracts;
2using AgentForge.Data.Entities;
3using AgentForge.Plugin.Sdk;
4
5namespace AgentForge.Plugin.View.Components.Iop;
6
7internal static class ForgeViewIopChangesTab
8{
9 internal static string Render(
10 string repoName,
11 ForgeMergeRequestEntity mergeRequest,
12 MergeRequestDiffResponse? diff,
13 string branch)
14 {
15 if (diff is null || diff.Files.Count == 0)
16 {
17 return ForgeHtml.Fragment(
18 ForgeHtml.P("iop-empty", ForgeHtml.Text("No file changes.")),
19 ForgeHtml.P("iop-meta",
20 ForgeHtml.A(
21 $"/view/repos/{ForgeRepoNames.ToUrlPath(repoName)}/merge-requests/{mergeRequest.Number}",
22 "Open merge request")));
23 }
24
25 var items = diff.Files.Select(file =>
26 {
27 var parts = new List<string>
28 {
29 ForgeHtml.A(ForgeViewLinks.BlobHref(repoName, branch, file.Path), file.Path),
30 };
31 if (file.Additions > 0 || file.Deletions > 0)
32 {
33 parts.Add(ForgeHtml.Text(" "));
34 parts.Add(ForgeHtml.Span("meta", ForgeHtml.Text($"+{file.Additions} −{file.Deletions}")));
35 }
36
37 return ForgeHtml.Li(null, [.. parts]);
38 }).ToArray();
39
40 return ForgeHtml.Fragment(
41 ForgeHtml.P("iop-meta", ForgeHtml.Text(ForgePluginDiffFormatting.FormatSummary(diff.Stats))),
42 ForgeHtml.Ul("iop-file-list", items),
43 ForgeHtml.P("iop-meta",
44 ForgeHtml.A(
45 $"/view/repos/{ForgeRepoNames.ToUrlPath(repoName)}/merge-requests/{mergeRequest.Number}?iop=changes",
46 "Full diff")));
47 }
48}
49
View only · write via MCP/CIDE