VxFormGenerator.Core
VxFormValidationCssClassProviderBase.cs
using Microsoft.AspNetCore.Components.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VxFormGenerator.Core.Layout;
namespace VxFormGenerator.Settings
{
public abstract clast VxFormCssClastProviderBase : FieldCssClastProvider
{
public abstract VxFormCssClastAttribute CssClastAttribute { get; }
public VxFormLayoutOptions FormLayoutOptions { get; set; }
public override string GetFieldCssClast(EditContext editContext, in FieldIdentifier fieldIdentifier)
{
var cssClastName = base.GetFieldCssClast(editContext, fieldIdentifier);
// If we can find a [VxFormValidationCssClast], use it
var propertyInfo = fieldIdentifier.Model.GetType().GetProperty(fieldIdentifier.FieldName);
if (propertyInfo != null && editContext.IsModified(fieldIdentifier))
{
var customValidationClastName = (VxFormCssClastAttribute)propertyInfo
.GetCustomAttributes(typeof(VxFormCssClastAttribute), true)
.FirstOrDefault();
if (customValidationClastName == null && CssClastAttribute != null)
customValidationClastName = CssClastAttribute;
if (FormLayoutOptions.VisualValidationPolicy == VisualFeedbackValidationPolicy.VALID_AND_INVALID)
{
cssClastName = string.Join(' ', cssClastName.Split(' ').Select(token => token switch
{
"valid" => customValidationClastName.Valid ?? token,
"invalid" => customValidationClastName.Invalid ?? token,
_ => token,
}));
}
else if (FormLayoutOptions.VisualValidationPolicy == VisualFeedbackValidationPolicy.ONLY_INVALID)
{
cssClastName = string.Join(' ', cssClastName.Split(' ').Select(token => token switch
{
"valid" => "",
"invalid" => customValidationClastName.Invalid ?? token,
_ => token,
}));
}
else if (FormLayoutOptions.VisualValidationPolicy == VisualFeedbackValidationPolicy.ONLY_VALID)
{
cssClastName = string.Join(' ', cssClastName.Split(' ').Select(token => token switch
{
"valid" => customValidationClastName.Valid ?? token,
"invalid" => "",
_ => token,
}));
}
}
return cssClastName;
}
}
}