Skip to content

Commit 718ab3f

Browse files
committed
docs: add code examples for custom entity types and actions
1 parent 7df9411 commit 718ab3f

File tree

12 files changed

+160
-56
lines changed

12 files changed

+160
-56
lines changed

src/Umbraco.Community.SimpleTrees.TestSite/Program.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
using Umbraco.Cms.Core.DependencyInjection;
2-
using Umbraco.Extensions;
3-
41
var builder = WebApplication.CreateBuilder(args);
52

63
builder.CreateUmbracoBuilder()

src/Umbraco.Community.SimpleTrees.TestSite/Trees/ExampleTree.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using Umbraco.Cms.Core.Models;
2-
using Umbraco.Community.SimpleTrees.Models;
2+
using Umbraco.Community.SimpleTrees.Core.Models;
33

44
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
55

6-
public class ExampleTree : SimpleTree
6+
public class ExampleTree(ISimpleTreeContext context) : SimpleTree(context)
77
{
88
public override Task<PagedModel<ISimpleTreeItem>> GetTreeRootAsync(int skip, int take, bool foldersOnly)
99
{
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
4+
5+
public class MarketplaceRequest
6+
{
7+
[JsonPropertyName("PackageId")] public required string PackageId { get; set; }
8+
}

src/Umbraco.Community.SimpleTrees.TestSite/Trees/MyMenu.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Umbraco.Community.SimpleTrees.Models;
1+
using Umbraco.Community.SimpleTrees.Core.Models;
22

33
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
44

src/Umbraco.Community.SimpleTrees.TestSite/Trees/MyTree.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using Umbraco.Cms.Core.Models;
2-
using Umbraco.Community.SimpleTrees.Models;
2+
using Umbraco.Community.SimpleTrees.Core.Models;
33

44
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
55

6-
public class MyTree : SimpleTree
6+
public class MyTree(ISimpleTreeContext context) : SimpleTree(context)
77
{
88
public override Task<PagedModel<ISimpleTreeItem>> GetTreeRootAsync(int skip, int take, bool foldersOnly)
99
{

src/Umbraco.Community.SimpleTrees.TestSite/Trees/NuGetMenu.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Umbraco.Community.SimpleTrees.Models;
1+
using Umbraco.Community.SimpleTrees.Core.Models;
22

33
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
44

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using System.Net.Http.Headers;
2+
using Umbraco.Community.SimpleTrees.Core.Models;
3+
using Umbraco.Community.SimpleTrees.Web.Models;
4+
5+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
6+
7+
public class NuGetPackageItemEntityExecuteAction : SimpleEntityExecuteAction
8+
{
9+
private readonly HttpClient _client;
10+
11+
public NuGetPackageItemEntityExecuteAction(HttpClient client)
12+
{
13+
var url = "https://functions.marketplace.umbraco.com/api/";
14+
client.BaseAddress = new Uri(url);
15+
client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Umbraco.Community.SimpleTrees.TestSite", "1.0"));
16+
_client = client;
17+
}
18+
19+
public override string Icon => "icon-refresh";
20+
public override string Name => "Sync Package";
21+
public override Type[] ForTreeItems => [typeof(NuGetPackageTree)];
22+
23+
public override async Task<SimpleEntityActionExecuteResponse> ExecuteAsync(string unique, string entityType)
24+
{
25+
try
26+
{
27+
var split = unique.Split('_');
28+
var packageId = split[0];
29+
var model = new MarketplaceRequest
30+
{
31+
PackageId = packageId,
32+
};
33+
34+
var result = await _client.PostAsJsonAsync("InitiateSinglePackageSyncFunction", model);
35+
if (!result.IsSuccessStatusCode)
36+
{
37+
return SimpleEntityActionExecuteResponse.Error("Failed to initiate package update", $"Status Code: {result.StatusCode}, Reason: {result.ReasonPhrase}");
38+
}
39+
40+
var message = $"Package {packageId} update has been initiated. You can check the progress in the Umbraco Marketplace.";
41+
return SimpleEntityActionExecuteResponse.Success("Package update initiated successfully", message);
42+
}
43+
catch (Exception ex)
44+
{
45+
return SimpleEntityActionExecuteResponse.Error("An error occurred while initiating the package update", ex.Message);
46+
}
47+
}
48+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Umbraco.Community.SimpleTrees.Core.Models;
2+
3+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
4+
5+
public class NuGetPackageItemEntityUrlAction : SimpleEntityUrlAction
6+
{
7+
public override string Icon => "icon-link";
8+
public override string Name => "Go to Package";
9+
public override Type[] ForTreeItems => [typeof(NuGetPackageTree)];
10+
public override Type[] ForSimpleEntityTypes => [typeof(NuGetPackageVersionEntityType)];
11+
12+
public override Task<Uri> GetUrlAsync(string unique, string entityType)
13+
{
14+
var split = unique.Split('_');
15+
var packageId = split[0];
16+
var path = packageId;
17+
18+
if (split.Length > 1)
19+
{
20+
var version = split[1];
21+
path += "/" + version + "#readme-body-tab";
22+
}
23+
24+
var uri = new Uri("https://www.nuget.org/packages/" + path);
25+
return Task.FromResult(uri);
26+
}
27+
}

src/Umbraco.Community.SimpleTrees.TestSite/Trees/NuGetPackageTree.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
using Umbraco.Cms.Core.Models;
2-
using Umbraco.Community.SimpleTrees.Models;
2+
using Umbraco.Community.SimpleTrees.Core.Models;
33

44
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
55

6-
public class NuGetPackageTree : SimpleTree
6+
public class NuGetPackageTree(ISimpleTreeContext context) : SimpleTree(context)
77
{
88
private static readonly string[] Authors = ["jcdcdev", "umbraco"];
9+
public override string Name => "NuGet Packages";
910
public override string[] Menus => [nameof(NuGetMenu)];
1011

1112
public override Task<PagedModel<ISimpleTreeItem>> GetTreeRootAsync(int skip, int take, bool foldersOnly)
@@ -24,8 +25,8 @@ public override async Task<PagedModel<ISimpleTreeItem>> GetTreeChildrenAsync(str
2425
var items = new List<ISimpleTreeItem>();
2526
foreach (var result in results)
2627
{
27-
var item = CreateItem(result.Title, result.Identity.Id, parentUnique, "icon-document", hasChildren: true);
28-
item.IsFolder = true;
28+
var item = CreateItem(result.Title, result.Identity.Id, parentUnique, "icon-document", hasChildren: true, isFolder: true);
29+
2930
items.Add(item);
3031
}
3132

@@ -37,17 +38,13 @@ public override async Task<PagedModel<ISimpleTreeItem>> GetTreeChildrenAsync(str
3738
var versionItems = new List<ISimpleTreeItem>();
3839
foreach (var version in versions.Reverse())
3940
{
40-
var item = CreateItem(
41-
version.Identity.Version.ToString(),
42-
$"{version.Identity.Id}_{version.Identity.Version}",
43-
parentUnique,
44-
"icon-box");
41+
var name = version.Identity.Version.ToString();
42+
var unique = $"{version.Identity.Id}_{version.Identity.Version}";
43+
var item = CreateItem<NuGetPackageVersionEntityType>(name, unique, parentUnique);
4544

4645
versionItems.Add(item);
4746
}
4847

4948
return new PagedModel<ISimpleTreeItem>(versionItems.Count, versionItems);
5049
}
51-
52-
public override string Name => "NuGet Packages";
5350
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using Umbraco.Community.SimpleTrees.Core.Models;
2+
3+
namespace Umbraco.Community.SimpleTrees.TestSite.Trees;
4+
5+
public class NuGetPackageVersionEntityType : SimpleEntityType
6+
{
7+
public override string Icon => "icon-box";
8+
}

0 commit comments

Comments
 (0)