@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() ?? "" }; } }