100 lines
2.3 KiB
Plaintext
100 lines
2.3 KiB
Plaintext
@using System.Globalization
|
|
@typeparam T
|
|
|
|
@* <input type="text"
|
|
inputmode="numeric"
|
|
pattern="[0-9\s]{13,19}"
|
|
autocomplete="cc-number"
|
|
maxlength="19"
|
|
placeholder="xxxx xxxx xxxx xxxx" />
|
|
*@
|
|
|
|
<input type="text" class="@Class"
|
|
inputmode="numeric"
|
|
value="@formattedValue"
|
|
onfocus="this.select()"
|
|
@oninput="OnInputChanged"
|
|
@onblur="OnBlur"
|
|
/>
|
|
|
|
@code {
|
|
[Parameter]
|
|
public T Value { get; set; }
|
|
|
|
[Parameter]
|
|
public EventCallback<T> 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() ?? ""
|
|
};
|
|
}
|
|
}
|