csharp/Aaltuj/VxFormGenerator/VxFormGenerator.Core/VxFormValidationCssClassProviderBase.cs

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;
        }
    }
}