diff --git a/EgwCoreLib.Razor/InputDouble.razor b/EgwCoreLib.Razor/InputDouble.razor new file mode 100644 index 0000000..d4a6acd --- /dev/null +++ b/EgwCoreLib.Razor/InputDouble.razor @@ -0,0 +1,65 @@ +@using System.Globalization + + + +@code { + /// + /// Actual bind value + /// + [Parameter] + public double Value { get; set; } + + /// + /// Event for value changed + /// + [Parameter] + public EventCallback ValueChanged { get; set; } + + /// + /// Number of decimal places to display + /// + [Parameter] + public int Decimals { get; set; } = 3; + + /// + /// Step increment + /// + [Parameter] + public double Step { get; set; } = 0.001; + + /// + /// Minimum value + /// + [Parameter] + public double? Min { get; set; } + + /// + /// Maximum value + /// + [Parameter] + public double? Max { get; set; } + + /// + /// CssClass for input component + /// + [Parameter] + public string CssClass { get; set; } = string.Empty; + + private string FormattedValue => Value.ToString($"F{Decimals}", CultureInfo.InvariantCulture); + + private async Task OnChange(ChangeEventArgs e) + { + if (double.TryParse(e.Value?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed)) + { + var rounded = Math.Round(parsed, Decimals); + Value = rounded; + await ValueChanged.InvokeAsync(rounded); + } + } +}