Working on Admin page modal

This commit is contained in:
2024-10-13 17:42:40 +02:00
parent d2729870e3
commit 599ce2bf43
15 changed files with 157 additions and 14 deletions

View File

@@ -23,5 +23,6 @@ public interface IAdminPageGenerator<TModel> {
IAdminPageGenerator<TModel> ConfigureRepository<TRepository>() where TRepository : ModelRepository<TModel>;
IAdminPropertyGenerator Property<TProperty>(Expression<Func<TModel, TProperty>> propertyExpression);
IAdminPageGenerator<TModel> ListingProperty<TProperty>(Expression<Func<TModel, TProperty>> propertyExpression);
}

View File

@@ -14,5 +14,6 @@ public interface IAdminPropertyGenerator {
IAdminPropertyGenerator Description(string description);
IAdminPropertyGenerator Prefix(string prefix);
IAdminPropertyGenerator Validator(Func<object, bool> validator);
IAdminPropertyGenerator IsSelector<TSelector>();
}

View File

@@ -113,6 +113,12 @@ internal sealed class AdminPageGenerator<TModel> : IAdminPageGenerator<TModel>,
return generator;
}
public IAdminPageGenerator<TModel> ListingProperty<TProperty>(Expression<Func<TModel, TProperty>> propertyExpression) {
var property = GetPropertyInfo(propertyExpression);
Page.ListingProperty = property.Name;
return this;
}
public AdminPage<TModel> Compile() {
var properties = new List<AdminPageProperty>();

View File

@@ -70,6 +70,11 @@ internal sealed class AdminPropertyGenerator(string name, Type type) : IAdminPro
return this;
}
public IAdminPropertyGenerator IsSelector<TSelector>() {
_property.SelectorType = typeof(TSelector);
return this;
}
public AdminPageProperty Compile() {
_property.DisplayName ??= _property.Name;
return _property;

View File

@@ -11,6 +11,7 @@ public class AdminPage {
public string Url { get; set; }
public AdminPagePermissions Permissions { get; set; }
public IList<AdminPageProperty> Properties { get; set; }
public string ListingProperty { get; set; }
[JsonIgnore]
public Type RepositoryProvider { get; set; }

View File

@@ -19,6 +19,8 @@ public sealed class AdminPageProperty {
[JsonIgnore]
public Type Type { get; set; }
public Type SelectorType { get; set; }
public Func<object, bool> Validator { get; set; }
public object GetValue(object entry) {

View File

@@ -7,5 +7,6 @@ public interface IAdminPagesProvider {
internal void RegisterAdminPage(string url, AdminPage page);
AdminPage LoadAdminPage(string url);
IList<AdminPage> LoadRegisteredAdminPages();
AdminPage HasPageFor(Type type);
}

View File

@@ -16,4 +16,11 @@ public class AdminPagesProvider : IAdminPagesProvider {
public IList<AdminPage> LoadRegisteredAdminPages() {
return _pages.Values.ToList();
}
public AdminPage HasPageFor(Type type) {
return _pages
.Where(p => p.Value.ModelType == type)
.Select(p => p.Value)
.SingleOrDefault();
}
}