Skip to content

Commit c8f0992

Browse files
committed
refactor: improve test site examples
1 parent 35b3008 commit c8f0992

File tree

12 files changed

+317
-0
lines changed

12 files changed

+317
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using NuGet.Common;
2+
using NuGet.Protocol;
3+
using NuGet.Protocol.Core.Types;
4+
5+
namespace Umbraco.Community.SimpleTrees.TestSite;
6+
7+
public class NuGetService
8+
{
9+
public async Task<IEnumerable<IPackageSearchMetadata>> GetPackageMetadata(string packageId)
10+
{
11+
var logger = NullLogger.Instance;
12+
var cancellationToken = CancellationToken.None;
13+
var cache = new SourceCacheContext();
14+
15+
var repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
16+
var resource = await repository.GetResourceAsync<PackageMetadataResource>(cancellationToken);
17+
18+
var results = await resource.GetMetadataAsync(
19+
packageId,
20+
includePrerelease: true,
21+
includeUnlisted: false,
22+
cache,
23+
logger,
24+
cancellationToken);
25+
26+
return results;
27+
}
28+
29+
public async Task<IEnumerable<IPackageSearchMetadata>> GetPackages(string owner, int skip, int take)
30+
{
31+
var logger = NullLogger.Instance;
32+
var cancellationToken = CancellationToken.None;
33+
34+
var repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
35+
var resource = await repository.GetResourceAsync<PackageSearchResource>(cancellationToken);
36+
var searchFilter = new SearchFilter(includePrerelease: true);
37+
38+
var results = await resource.SearchAsync(
39+
$"owner:{owner}",
40+
searchFilter,
41+
skip: skip,
42+
take: take,
43+
logger,
44+
cancellationToken);
45+
46+
return results;
47+
}
48+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Umbraco.Cms.Core.Models;
2+
using Umbraco.Community.SimpleTrees.Models;
3+
4+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
5+
6+
public class ExampleTree : SimpleTree
7+
{
8+
public override Task<PagedModel<ISimpleTreeItem>> GetTreeRootAsync(int skip, int take, bool foldersOnly)
9+
{
10+
return Task.FromResult(new PagedModel<ISimpleTreeItem>(0, []));
11+
}
12+
13+
public override Task<PagedModel<ISimpleTreeItem>> GetTreeChildrenAsync(string entityType, string parentUnique, int skip, int take, bool foldersOnly)
14+
{
15+
return Task.FromResult(new PagedModel<ISimpleTreeItem>(0, []));
16+
}
17+
18+
public override string Name => "Example Tree";
19+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Umbraco.Community.SimpleTrees.Models;
2+
3+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
4+
5+
public class MyMenu : SimpleMenu
6+
{
7+
public override string Name => "My Tree Menu";
8+
public override string[] Sections => [jcdcdev.Umbraco.Core.Constants.Sections.Members, jcdcdev.Umbraco.Core.Constants.Sections.Media];
9+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Umbraco.Cms.Core.Models;
2+
using Umbraco.Community.SimpleTrees.Models;
3+
4+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
5+
6+
public class MyTree : SimpleTree
7+
{
8+
public override Task<PagedModel<ISimpleTreeItem>> GetTreeRootAsync(int skip, int take, bool foldersOnly)
9+
{
10+
var data = new List<ISimpleTreeItem>
11+
{
12+
CreateRootItem("James", Guid.NewGuid().ToString(), "icon-user"),
13+
CreateRootItem("Tim", Guid.NewGuid().ToString(), "icon-user"),
14+
};
15+
16+
return Task.FromResult(new PagedModel<ISimpleTreeItem>(data.Count, data));
17+
}
18+
19+
public override Task<PagedModel<ISimpleTreeItem>> GetTreeChildrenAsync(string entityType, string parentUnique, int skip, int take, bool foldersOnly) => Task.FromResult(EmptyResult());
20+
21+
public override string[] Menus => [nameof(MyMenu)];
22+
23+
public override string Name => "My Tree";
24+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Umbraco.Community.SimpleTrees.Models;
2+
3+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
4+
5+
public class NuGetMenu : SimpleMenu
6+
{
7+
public override string Name => "NuGet Packages";
8+
public override string[] Sections => [jcdcdev.Umbraco.Core.Constants.Sections.Content];
9+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using Umbraco.Cms.Core.Models;
2+
using Umbraco.Community.SimpleTrees.Models;
3+
4+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
5+
6+
public class NuGetPackageTree : SimpleTree
7+
{
8+
private static readonly string[] Authors = ["jcdcdev", "umbraco"];
9+
public override string[] Menus => [nameof(NuGetMenu)];
10+
11+
public override Task<PagedModel<ISimpleTreeItem>> GetTreeRootAsync(int skip, int take, bool foldersOnly)
12+
{
13+
var items = Authors.Select(x => CreateRootItem(x, x, "icon-user", true, true));
14+
return Task.FromResult<PagedModel<ISimpleTreeItem>>(new(Authors.Length, items));
15+
}
16+
17+
public override async Task<PagedModel<ISimpleTreeItem>> GetTreeChildrenAsync(string entityType, string parentUnique, int skip, int take, bool foldersOnly)
18+
{
19+
var service = new NuGetService();
20+
if (entityType == DefaultRootEntityType)
21+
{
22+
var results = await service.GetPackages(parentUnique, skip, take);
23+
24+
var items = new List<ISimpleTreeItem>();
25+
foreach (var result in results)
26+
{
27+
var item = CreateItem(result.Title, result.Identity.Id, parentUnique, "icon-document", hasChildren: true);
28+
item.IsFolder = true;
29+
items.Add(item);
30+
}
31+
32+
return new PagedModel<ISimpleTreeItem>(items.Count, items);
33+
}
34+
35+
var versions = await service.GetPackageMetadata(parentUnique);
36+
37+
var versionItems = new List<ISimpleTreeItem>();
38+
foreach (var version in versions.Reverse())
39+
{
40+
var item = CreateItem(
41+
version.Identity.Version.ToString(),
42+
$"{version.Identity.Id}_{version.Identity.Version}",
43+
parentUnique,
44+
"icon-box");
45+
46+
versionItems.Add(item);
47+
}
48+
49+
return new PagedModel<ISimpleTreeItem>(versionItems.Count, versionItems);
50+
}
51+
52+
public override string Name => "NuGet Packages";
53+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Microsoft.AspNetCore.Mvc;
2+
using Umbraco.Community.SimpleTrees.Web;
3+
using Umbraco.Community.SimpleTrees.Web.Models;
4+
5+
namespace Umbraco.Community.SimpleTrees.TestSite.ViewComponents;
6+
7+
public class ExampleItemViewComponent : SimpleTreeViewComponent
8+
{
9+
public override IViewComponentResult Invoke(SimpleTreeViewModel model)
10+
{
11+
return Content($"""
12+
<uui-box>
13+
Hello {model.Unique} {model.EntityType} {DateTime.UtcNow:HH:mm:ss}
14+
</uui-box>
15+
"""
16+
);
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Microsoft.AspNetCore.Mvc;
2+
using Umbraco.Community.SimpleTrees.Web;
3+
using Umbraco.Community.SimpleTrees.Web.Models;
4+
5+
namespace Umbraco.Community.SimpleTrees.TestSite.ViewComponents;
6+
7+
public class ExampleRootViewComponent : SimpleTreeViewComponent
8+
{
9+
public override IViewComponentResult Invoke(SimpleTreeViewModel model)
10+
{
11+
return Content($"""
12+
<uui-box headline="This is my custom tree item">
13+
Hello {model.Unique} {model.EntityType} {DateTime.UtcNow:HH:mm:ss}
14+
</uui-box>
15+
"""
16+
);
17+
}
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@inherits Umbraco.Community.SimpleTrees.Web.SimpleTreeViewPage
2+
3+
<uui-box headline="This is a custom tree item">
4+
<div>
5+
<table>
6+
<thead>
7+
<tr>
8+
<th>Entity Type</th>
9+
<th>Unique</th>
10+
</tr>
11+
</thead>
12+
<tbody>
13+
<tr>
14+
<td>@Model.EntityType</td>
15+
<td>@Model.Unique</td>
16+
</tr>
17+
</table>
18+
</div>
19+
</uui-box>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@inherits Umbraco.Community.SimpleTrees.Web.SimpleTreeViewPage
2+
3+
<uui-box headline="This is a custom tree item">
4+
<div>
5+
<table>
6+
<thead>
7+
<tr>
8+
<th>Entity Type</th>
9+
<th>Unique</th>
10+
</tr>
11+
</thead>
12+
<tbody>
13+
<tr>
14+
<td>@Model.EntityType</td>
15+
<td>@Model.Unique</td>
16+
</tr>
17+
</table>
18+
</div>
19+
</uui-box>

0 commit comments

Comments
 (0)