@using BLAIzor.Models @using Radzen @if (isEditing) {

@TitleString

@foreach (var group in Groups) {
@group.GroupName
@for (int entryIndex = 0; entryIndex < group.EntryCount; entryIndex++) { var entryPrefix = $"{group.GroupName}_{entryIndex}"; foreach (var field in group.Fields) { var label = $"{entryPrefix}_{field.Label}";
@switch (field.Type?.ToLower()) { case "textarea": break; case "number": break; case "date": break; case "checkbox": break; case "radio": @foreach (var option in field.Options ?? new()) { var split = option.Split(':'); var text = split[0]; var val = split.Length > 1 && int.TryParse(split[1], out var parsedVal) ? parsedVal : 0; } break; case "select": break; default: break; }
} } @if (group.Repeatable) { } }
} else {

Details

@foreach (var kvp in formValues) {

@kvp.Key: @kvp.Value

}
}

@FormSubmitResult

@code { [Parameter] public List Groups { get; set; } = new(); [Parameter] public List IgnoreReflection { get; set; } = new(); [Parameter] public EventCallback> OnSubmit { get; set; } [Parameter] public bool isEditing { get; set; } [Parameter] public string TitleString { get; set; } = "Edit your details"; [Parameter] public string ButtonTextString { get; set; } = "Submit"; private EditContext editContext; private Dictionary formValues = new(); private Dictionary formDates = new(); private string FormSubmitResult = ""; protected override void OnParametersSet() { foreach (var group in Groups) { if (group.EntryCount == 0) { group.EntryCount = 1; // Always have at least one entry } for (int i = 0; i < group.EntryCount; i++) { foreach (var field in group.Fields) { var key = $"{group.GroupName}_{i}_{field.Label}"; if (!formValues.ContainsKey(key)) { if (field.Type?.ToLower() == "radio" && field.Options?.Count > 0) { var defaultVal = field.Options.FirstOrDefault()?.Split(':').LastOrDefault() ?? "0"; formValues[key] = defaultVal; } else { formValues[key] = string.Empty; } } if (field.Type?.ToLower() == "date" && !formDates.ContainsKey(key)) { formDates[key] = DateTime.Today; } } } } editContext = new EditContext(formValues); } private string GetValue(string label) => formValues.TryGetValue(label, out var value) ? value : ""; private void SetValue(string label, string? value) => formValues[label] = value ?? ""; private DateTime? GetDate(string label) => formDates.TryGetValue(label, out var date) ? date : null; private void SetDate(string label, DateTime? value) => formDates[label] = value; private string GetDropdownValue(string label) => formValues.TryGetValue(label, out var value) ? value : ""; private void SetDropdownValue(string label, string? value) => formValues[label] = value ?? ""; private bool GetCheckboxValue(string label) => formValues.TryGetValue(label, out var value) && bool.TryParse(value, out var result) && result; private void SetCheckboxValue(string label, bool? value) => formValues[label] = (value ?? false).ToString(); private int GetRadioValue(string label) => formValues.TryGetValue(label, out var value) && int.TryParse(value, out var intValue) ? intValue : 0; private void SetRadioValue(string label, int? value) => formValues[label] = value?.ToString() ?? "0"; private void AddGroupEntry(FormFieldGroup group) { group.EntryCount++; StateHasChanged(); } private async Task HandleValidSubmit() { foreach (var dateField in formDates) { formValues[dateField.Key] = dateField.Value?.ToString("yyyy-MM-dd") ?? ""; } FormSubmitResult = "Success!"; await OnSubmit.InvokeAsync(formValues); isEditing = false; } }