Added validation to admin pages

This commit is contained in:
2024-10-27 15:26:25 +01:00
parent 85a45ece55
commit d38cce6dc2
8 changed files with 66 additions and 16 deletions

View File

@@ -0,0 +1,4 @@
namespace HopFrame.Web.Admin.Attributes.Members;
[AttributeUsage(AttributeTargets.Property)]
public class AdminUniqueAttribute : Attribute;

View File

@@ -11,11 +11,12 @@ public interface IAdminPropertyGenerator<TProperty> {
IAdminPropertyGenerator<TProperty> Ignore(bool ignore = true);
IAdminPropertyGenerator<TProperty> Generated(bool generated = true);
IAdminPropertyGenerator<TProperty> Bold(bool bold = true);
IAdminPropertyGenerator<TProperty> Unique(bool unique = true);
IAdminPropertyGenerator<TProperty> DisplayName(string displayName);
IAdminPropertyGenerator<TProperty> Description(string description);
IAdminPropertyGenerator<TProperty> Prefix(string prefix);
IAdminPropertyGenerator<TProperty> Validator(Func<object, bool> validator);
IAdminPropertyGenerator<TProperty> Validator(Func<TProperty, string> validator);
IAdminPropertyGenerator<TProperty> IsSelector<TSelector>();
IAdminPropertyGenerator<TProperty> Parser<TModel>(Func<TModel, string, TProperty> parser);
IAdminPropertyGenerator<TProperty> ParserForListType<TModel, TInnerProperty>(Func<TModel, string, TInnerProperty> parser);

View File

@@ -51,6 +51,11 @@ internal sealed class AdminPropertyGenerator<TProperty>(string name, Type type)
return this;
}
public IAdminPropertyGenerator<TProperty> Unique(bool unique = true) {
_property.Unique = unique;
return this;
}
public IAdminPropertyGenerator<TProperty> DisplayName(string displayName) {
_property.DisplayName = displayName;
return this;
@@ -66,8 +71,8 @@ internal sealed class AdminPropertyGenerator<TProperty>(string name, Type type)
return this;
}
public IAdminPropertyGenerator<TProperty> Validator(Func<object, bool> validator) {
_property.Validator = validator;
public IAdminPropertyGenerator<TProperty> Validator(Func<TProperty, string> validator) {
_property.Validator = o => validator.Invoke((TProperty)o);
return this;
}
@@ -115,6 +120,9 @@ internal sealed class AdminPropertyGenerator<TProperty>(string name, Type type)
if (attributes.Any(a => a is AdminUneditableAttribute))
Editable(false);
if (attributes.Any(a => a is AdminUniqueAttribute))
Unique();
if (attributes.Any(a => a is AdminIgnoreAttribute)) {
var attribute = attributes.Single(a => a is AdminIgnoreAttribute) as AdminIgnoreAttribute;

View File

@@ -17,12 +17,14 @@ public sealed class AdminPageProperty {
public bool Bold { get; set; }
public bool Required { get; set; }
public bool Ignore { get; set; }
public bool Unique { get; set; }
[JsonIgnore]
public Type Type { get; set; }
public Type SelectorType { get; set; }
public Func<object, bool> Validator { get; set; }
public Func<object, string> Validator { get; set; }
public Func<object, string, object> Parser { get; set; }
public object GetValue(object entry) {