@using System.Globalization
@typeparam T
@*
*@
@code {
[Parameter]
public T Value { get; set; }
[Parameter]
public EventCallback ValueChanged { get; set; }
[Parameter]
public string? Class { get; set; }
[Parameter]
public string? Id { get; set; }
[Parameter]
public string? PlaceHolder { get; set; }
private string formattedValue = "";
protected override void OnParametersSet()
{
formattedValue = FormatValue(Value);
}
private void OnInputChanged(ChangeEventArgs e)
{
var raw = e.Value?.ToString()?.Replace(",", "").Trim() ?? "0";
var sss = new string(raw.Where(char.IsDigit).ToArray());
if (string.IsNullOrEmpty(sss))
{
formattedValue = "0";
return;
}
object? parsed = typeof(T) switch
{
var t when t == typeof(int) && int.TryParse(raw, out var intVal) => intVal,
var t when t == typeof(long) && long.TryParse(raw, out var longVal) => longVal,
var t when t == typeof(decimal) && decimal.TryParse(raw, out var decVal) => decVal,
_ => null
};
if (parsed is T tValue)
{
ValueChanged.InvokeAsync(tValue);
}
formattedValue = raw; // temporary display while editing
}
private void OnBlur()
{
formattedValue = FormatValue(Value);
}
private void OnFocus()
{
formattedValue = FormatValue(Value);
// formattedValue = Value?.ToString();
}
private string FormatValue(T val)
{
if (val == null) return "";
return val switch
{
int i => i.ToString("N0", CultureInfo.InvariantCulture),
long l => l.ToString("N0", CultureInfo.InvariantCulture),
decimal d => d.ToString("N0", CultureInfo.InvariantCulture),
_ => val.ToString() ?? ""
};
}
}