Forge
csharp3407750f
1using AgentForge.Contracts;
2
3namespace AgentForge.Plugin.View.Components;
4
5public static class ForgeViewRepoCatalog
6{
7 public static string RenderTable(
8 IReadOnlyList<RepoResponse> repos,
9 bool includeCloneUrl = true,
10 string? emptyMessage = null)
11 {
12 if (repos.Count == 0)
13 {
14 if (!string.IsNullOrWhiteSpace(emptyMessage))
15 return ForgeViewEmptyState.Render(emptyMessage);
16 return ForgeViewEmptyState.RenderCreateRepoHint();
17 }
18
19 var headerCells = new List<string>
20 {
21 ForgeHtml.Th("Name"),
22 ForgeHtml.Th("Drive"),
23 ForgeHtml.Th("Visibility"),
24 };
25 if (includeCloneUrl)
26 headerCells.Add(ForgeHtml.Th("Clone"));
27 headerCells.Add(ForgeHtml.Th(""));
28
29 var rows = new List<string>(repos.Count);
30 foreach (var repo in repos)
31 {
32 var cells = new List<string>
33 {
34 ForgeHtml.Td(ForgeHtml.Strong(repo.Name)),
35 ForgeHtml.Td(ForgeHtml.Badge(repo.DriveMode)),
36 ForgeHtml.Td(ForgeHtml.Badge(repo.Visibility)),
37 };
38 if (includeCloneUrl)
39 cells.Add(ForgeHtml.Td(ForgeHtml.Code(repo.CloneUrl)));
40 cells.Add(ForgeHtml.Td(
41 ForgeHtml.A(ForgeViewLinks.RepoViewHref(repo.Name), "open")));
42 rows.Add(ForgeHtml.Tr([.. cells]));
43 }
44
45 return ForgeHtml.Table("repo-catalog",
46 ForgeHtml.Thead(ForgeHtml.Tr([.. headerCells])),
47 ForgeHtml.Tbody([.. rows]));
48 }
49}
50
View only · write via MCP/CIDE