@using BLAIzor.Models
@using Radzen
@if (isEditing)
{
@TitleString
@foreach (var field in Fields)
{
if (IgnoreReflection.Contains(field.Label)) continue;
@field.Label
@switch (field.Type?.ToLower())
{
case "textarea":
Console.Write($"{field.Label}, {GetValue(field.Label)}");
break;
case "number":
SetValue(field.Label, args.ToString()))
InputAttributes="@(new Dictionary(){ { "aria-label", "enter value" }})" />
@* *@
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;
}
}
}
else
{
Details
@foreach (var field in Fields)
{
@field.Label: @formValues.GetValueOrDefault(field.Label)
}
}
@FormSubmitResult
@code {
[Parameter] public List Fields { 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 field in Fields)
{
// Initialize default value for form fields (text, number, etc.)
if (!formValues.ContainsKey(field.Label))
{
if (field.Type?.ToLower() == "radio" && field.Options?.Count > 0)
{
// Try to get the value part after ":" in "Text:Value" format
var firstOption = field.Options.FirstOrDefault();
var defaultValue = firstOption?.Split(':').Length > 1
? firstOption.Split(':')[1]
: "0";
formValues[field.Label] = defaultValue ?? "0";
}
else
{
formValues[field.Label] = string.Empty;
}
}
// Initialize default value for date fields
if (field.Type?.ToLower() == "date" && !formDates.ContainsKey(field.Label))
{
formDates[field.Label] = 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)
{
if (formValues.TryGetValue(label, out var value))
{
return bool.TryParse(value, out var result) && result;
}
return false;
}
private void SetCheckboxValue(string label, bool? value)
{
formValues[label] = (value ?? false).ToString();
}
private int GetRadioValue(string label)
{
if (formValues.TryGetValue(label, out var value) && int.TryParse(value, out var intValue))
return intValue;
return 0; // or your default
}
private void SetRadioValue(string label, int? value)
{
formValues[label] = value?.ToString() ?? "0";
}
private async Task HandleValidSubmit()
{
// Merge dates back into string values
foreach (var dateField in formDates)
{
formValues[dateField.Key] = dateField.Value?.ToString("yyyy-MM-dd") ?? "";
}
FormSubmitResult = "Success!";
await OnSubmit.InvokeAsync(formValues);
isEditing = false;
}
}