Forge
csharp3407750f
1using System.Text.Json;
2
3namespace AgentForge.Plugin.View.Components.Iop;
4
5internal static class ForgeViewIopCommentComposer
6{
7 internal static string RenderIssue(string repoName, int issueNumber) =>
8 Render(
9 $"/view/repos/{ForgeRepoNames.ToUrlPath(repoName)}/issues/{issueNumber}/comment",
10 repoName,
11 surface: "issue-comment",
12 issueNumber: issueNumber);
13
14 internal static string RenderMergeRequest(string repoName, int mrNumber) =>
15 Render(
16 $"/view/repos/{ForgeRepoNames.ToUrlPath(repoName)}/merge-requests/{mrNumber}/comment",
17 repoName,
18 surface: "mr-comment",
19 mrNumber: mrNumber);
20
21 private static string Render(
22 string action,
23 string repoName,
24 string surface,
25 int? issueNumber = null,
26 int? mrNumber = null)
27 {
28 var context = new Dictionary<string, string> { ["repo"] = repoName };
29 if (issueNumber is > 0)
30 context["issueNumber"] = issueNumber.Value.ToString();
31 if (mrNumber is > 0)
32 context["mrNumber"] = mrNumber.Value.ToString();
33
34 return ForgeHtml.Form(
35 "post",
36 action,
37 "forge-composer-form",
38 ForgeHtml.Textarea(new ForgeTextareaSpec(
39 "body",
40 CssClass: "forge-composer",
41 Rows: 3,
42 Placeholder: "Comment… type / for commands",
43 DataForgeSurface: surface,
44 DataForgeContext: JsonSerializer.Serialize(context))),
45 ForgeHtml.Button("submit", "Comment", "btn forge-composer-submit"));
46 }
47}
48
View only · write via MCP/CIDE