Forked from TimGeyssens/PropertyDataDataSource.cs
Last active
November 15, 2022 11:37
-
-
Save leekelleher/d786f4b72e7c16f37fb22d4d23c1b516 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections.Generic; | |
using System.Linq; | |
using Umbraco.Community.Contentment.DataEditors; | |
using Umbraco.Core.PropertyEditors; | |
using Umbraco.Web; | |
namespace MyWebsite.DataSources | |
{ | |
public class PropertyDataDataSource : IDataListSource | |
{ | |
private readonly IUmbracoContextAccessor _umbracoContextAccessor; | |
public PropertyDataDataSource(IUmbracoContextAccessor umbracoContextAccessor) | |
{ | |
_umbracoContextAccessor = umbracoContextAccessor; | |
} | |
public string Name => "Umbraco Property Data"; | |
public string Description => "Data source for umbraco property data coming from the website root node."; | |
public string Icon => "icon-globe"; | |
public OverlaySize OverlaySize => OverlaySize.Small; | |
public Dictionary<string, object> DefaultValues => new Dictionary<string, object>(); | |
public IEnumerable<ConfigurationField> Fields => new ConfigurationField[] | |
{ | |
new ConfigurationField | |
{ | |
Key = "propAlias", | |
Name = "Property", | |
Description = "Select the property to populate the data source with.", | |
View = "~/umbraco/views/propertyeditors/entitypicker/entitypicker.html", | |
Config = new Dictionary<string, object> | |
{ | |
{ "multiple", "0" }, | |
{ "entityType", "PropertyType" }, | |
{ "publishBy", "alias" }, | |
} | |
} | |
}; | |
public IEnumerable<DataListItem> GetItems(Dictionary<string, object> config) | |
{ | |
if (config.TryGetValue("propAlias", out var tmp) && tmp is string alias && string.IsNullOrWhiteSpace(alias) == false) | |
{ | |
var content = _umbracoContextAccessor.UmbracoContext.Content.GetAtRoot().First(); | |
if (content != null) | |
{ | |
var propertyValue = content.Value<string[]>(alias); | |
if (propertyValue != null) | |
{ | |
return propertyValue.Select(x => new DataListItem { Name = x, Value = x }); | |
} | |
} | |
} | |
return Enumerable.Empty<DataListItem>(); | |
} | |
} | |
} |
Thanks @leekelleher as of course I just needed the umbraco/
in the view path. Good job @greystate isn't paying me for this, otherwise that might have been embarrassing 😆
I still get an error but I now see that's from the Config dictionary field property (as lifted from v8), so I can make progress with investigating that now. I think I was thinking this might be a problem caused by RCLs or something... But clearly not! 🙏
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Agent Pitcher, we meet again! 🕵️♂️ // @LottePitcher @greystate
Looking at how I've done this elsewhere in Contentment, here's an example:
https://github.com/leekelleher/umbraco-contentment/blob/4.2.0/src/Umbraco.Community.Contentment/DataEditors/SocialLinks/SocialLinksConfigurationEditor.cs#L103
Would this not work for you? 🤔
View = _ioHelper.ResolveRelativeOrVirtualUrl("~/umbraco/views/propertyeditors/entitypicker/entitypicker.html"),
Previously, (e.g. v8) you could omit the
~/umbraco/
bit, as that was already in the context the "umbraco" directory, but in this .NET Core world, the paths are somewhat different. I'm not yet sure what the context of the "root" directory is, e.g. Content directory or the Web (wwwroot) directory. 🤷 That's why I use theResolveRelativeOrVirtualUrl
extension method to sort it out for me. 😬