Files
2025-11-03 11:03:45 +01:00

65 lines
1.6 KiB
Plaintext

@using System.Globalization
<input type="number"
value="@FormattedValue"
@onchange="OnChange"
step="@Step.ToString(CultureInfo.InvariantCulture)"
min="@(Min?.ToString(CultureInfo.InvariantCulture))"
max="@(Max?.ToString(CultureInfo.InvariantCulture))"
class="@CssClass" />
@code {
/// <summary>
/// Actual bind value
/// </summary>
[Parameter]
public decimal Value { get; set; }
/// <summary>
/// Event for value changed
/// </summary>
[Parameter]
public EventCallback<decimal> ValueChanged { get; set; }
/// <summary>
/// Numero di cifre decimali gestite
/// </summary>
[Parameter]
public int Decimals { get; set; } = 3;
/// <summary>
/// Step incremento
/// </summary>
[Parameter]
public decimal Step { get; set; } = 0.001M;
/// <summary>
/// Valore minimo ammesso
/// </summary>
[Parameter]
public decimal? Min { get; set; }
/// <summary>
/// Valore massimo ammesso
/// </summary>
[Parameter]
public decimal? Max { get; set; }
/// <summary>
/// CssClass for input component
/// </summary>
[Parameter]
public string CssClass { get; set; } = string.Empty;
private string FormattedValue => Value.ToString($"F{Decimals}", CultureInfo.InvariantCulture);
private async Task OnChange(ChangeEventArgs e)
{
if (decimal.TryParse(e.Value?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed))
{
var rounded = Math.Round(parsed, Decimals);
Value = rounded;
await ValueChanged.InvokeAsync(rounded);
}
}
}