Progress
This commit is contained in:
parent
457df20346
commit
edb2249a43
@ -9,7 +9,8 @@
|
||||
<InputNumber
|
||||
Label="Double"
|
||||
Required="true"
|
||||
Step="0.002"
|
||||
Step="0.001"
|
||||
DecimalPlaces="2"
|
||||
@bind-Value="@inputValueDouble">
|
||||
</InputNumber>
|
||||
|
||||
@ -17,6 +18,7 @@
|
||||
Label="Integer"
|
||||
Required="true"
|
||||
Step="0.002"
|
||||
|
||||
@bind-Value="@inputValueInt">
|
||||
</InputNumber>
|
||||
|
||||
@ -38,7 +40,21 @@
|
||||
|
||||
int counter { get; set; } = 0;
|
||||
|
||||
string inputValueText = "Sample text";
|
||||
private string _inputText = string.Empty;
|
||||
string inputValueText
|
||||
{
|
||||
get
|
||||
{
|
||||
return _inputText;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value.Length > 0) errorText = "Error!!!";
|
||||
else errorText = "";
|
||||
_inputText = value;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
double inputValueDouble = 12.756;
|
||||
int inputValueInt = 12;
|
||||
|
||||
@ -50,13 +66,6 @@
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
string errorText
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(inputValueText)) return string.Empty;
|
||||
return "Error!!";
|
||||
}
|
||||
}
|
||||
string errorText = "Error!!";
|
||||
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
<input type="number"
|
||||
value="@Value"
|
||||
placeholder="@Placeholder"
|
||||
step="@Step"
|
||||
step="@_step"
|
||||
disabled="@Disabled"
|
||||
readonly="@Readonly"
|
||||
@oninput=@ChangeValueAsync
|
||||
|
@ -1,13 +1,25 @@
|
||||
using Connected.Models;
|
||||
using Connected.Utilities;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System.Numerics;
|
||||
using static Connected.Colors;
|
||||
|
||||
namespace Connected.Components;
|
||||
public partial class InputNumber<NumberType>:InputBase where NumberType : INumber<NumberType>
|
||||
{
|
||||
|
||||
private double _step;
|
||||
[Parameter]
|
||||
public double Step { get; set; }
|
||||
public double Step {
|
||||
get
|
||||
{
|
||||
return _step;
|
||||
}
|
||||
set
|
||||
{
|
||||
_step = value;
|
||||
AdjustStep();
|
||||
}
|
||||
}
|
||||
|
||||
[Parameter]
|
||||
public NumberType Value { get; set; }
|
||||
@ -23,16 +35,54 @@ public partial class InputNumber<NumberType>:InputBase where NumberType : INumbe
|
||||
{
|
||||
if (args.Value is not null)
|
||||
{
|
||||
|
||||
if (args.Value.ToString().Length > 0)
|
||||
NumberType originalValue = (NumberType)Convert.ChangeType(args.Value, typeof(NumberType));
|
||||
NumberType value = originalValue;
|
||||
if (value.ToString().Length > 0)
|
||||
{
|
||||
await ValueChanged.InvokeAsync((NumberType)Convert.ChangeType(args.Value, typeof(NumberType)));
|
||||
|
||||
value = AdjustDecimalPlaces(value);
|
||||
//await ValueChanged.InvokeAsync((NumberType)Convert.ChangeType(value, typeof(NumberType)));
|
||||
}
|
||||
else
|
||||
{
|
||||
await ValueChanged.InvokeAsync((NumberType)Convert.ChangeType(0, typeof(NumberType)));
|
||||
value = (NumberType)Convert.ChangeType(0, typeof(NumberType));
|
||||
//await ValueChanged.InvokeAsync((NumberType)Convert.ChangeType(0, typeof(NumberType)));
|
||||
}
|
||||
Value = value;
|
||||
await ValueChanged.InvokeAsync((NumberType)Convert.ChangeType(Value, typeof(NumberType)));
|
||||
}
|
||||
}
|
||||
|
||||
private void AdjustStep()
|
||||
{
|
||||
if (DecimalPlaces > 0)
|
||||
{
|
||||
var StepDecmalPlaces = Helper.GetDecimalPlaces(_step);
|
||||
if (StepDecmalPlaces > DecimalPlaces)
|
||||
{
|
||||
double MinStep = 1;
|
||||
for (int i = 0; i < DecimalPlaces; i++)
|
||||
{
|
||||
MinStep = MinStep / 10;
|
||||
}
|
||||
_step = MinStep;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private NumberType AdjustDecimalPlaces(NumberType value)
|
||||
{
|
||||
NumberType result = value;
|
||||
if (Helper.NumberHasDecimalPlaces(value))
|
||||
{
|
||||
if (DecimalPlaces > 0)
|
||||
{
|
||||
decimal rounded = (decimal)Convert.ChangeType(value, typeof(decimal));
|
||||
rounded = Math.Round(rounded, DecimalPlaces);
|
||||
result = (NumberType)Convert.ChangeType(rounded, typeof(NumberType));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task Clear()
|
||||
@ -42,14 +92,23 @@ public partial class InputNumber<NumberType>:InputBase where NumberType : INumbe
|
||||
|
||||
#region Lifecycle
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if (DecimalPlaces > 0)
|
||||
{
|
||||
Value = AdjustDecimalPlaces(Value);
|
||||
await ValueChanged.InvokeAsync(Value);
|
||||
}
|
||||
AdjustStep();
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
if (typeof(NumberType).Name.ToLower().Contains("int"))
|
||||
{
|
||||
if (Step-(int)Step>0) Step= (int)Step;
|
||||
if (Step - (int)Step > 0) Step = (int)Step;
|
||||
if (Step < 1) Step = 1;
|
||||
}
|
||||
|
||||
await base.OnParametersSetAsync();
|
||||
}
|
||||
|
||||
|
@ -35,16 +35,14 @@ public partial class InputText: InputBase
|
||||
|
||||
private async Task ChangeValueAsync(ChangeEventArgs args)
|
||||
{
|
||||
if (string.IsNullOrEmpty(args.Value.ToString())) ErrorText = string.Empty;
|
||||
await ValueChanged.InvokeAsync(args.Value.ToString());
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private async Task Clear()
|
||||
{
|
||||
ChangeEventArgs arg = new ChangeEventArgs();
|
||||
arg.Value = string.Empty;
|
||||
await ChangeValueAsync(arg);
|
||||
await ValueChanged.InvokeAsync(string.Empty);
|
||||
StateHasChanged();
|
||||
|
||||
}
|
||||
|
||||
|
@ -50,8 +50,18 @@ public class InputBase : ComponentBase
|
||||
[Parameter]
|
||||
public bool ShowCharacterCounter { get; set; }
|
||||
|
||||
private string _errorText = string.Empty;
|
||||
[Parameter]
|
||||
public string ErrorText { get; set; } = string.Empty;
|
||||
public string ErrorText {
|
||||
get
|
||||
{
|
||||
return _errorText;
|
||||
}
|
||||
set
|
||||
{
|
||||
_errorText = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsError
|
||||
{
|
||||
@ -61,8 +71,20 @@ public class InputBase : ComponentBase
|
||||
}
|
||||
}
|
||||
|
||||
private string _helperText = string.Empty;
|
||||
[Parameter]
|
||||
public string HelperText { get; set; } = string.Empty;
|
||||
public string HelperText
|
||||
{
|
||||
get
|
||||
{
|
||||
return _helperText;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_helperText = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsHelperText
|
||||
{
|
||||
|
@ -88,25 +88,25 @@ internal class Navigation
|
||||
/// <summary>
|
||||
/// Navigates to the previous url if possible or does nothing if it is not.
|
||||
/// </summary>
|
||||
public void Back()
|
||||
public async Task Back()
|
||||
{
|
||||
if (!CanNavigateBack()) return;
|
||||
var backPageUrl = GetFromBackPageList();
|
||||
UpdateForwardPageList();
|
||||
|
||||
NavigateTo(backPageUrl);
|
||||
await NavigateTo(backPageUrl);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Navigates to the forward url if possible or does nothing if it is not.
|
||||
/// </summary>
|
||||
public void Forward()
|
||||
public async Task Forward()
|
||||
{
|
||||
if (!CanNavigateForward()) return;
|
||||
var forwardPageUrl = GetFromForwardPageList();
|
||||
UpdateBackPageList();
|
||||
|
||||
NavigateTo(forwardPageUrl);
|
||||
await NavigateTo(forwardPageUrl);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,12 @@ public static class Helper
|
||||
{
|
||||
switch (type.ToLower())
|
||||
{
|
||||
case "long":
|
||||
case "ulong":
|
||||
case "short":
|
||||
case "ushort":
|
||||
case "byte":
|
||||
case "sbyte":
|
||||
case "uint16":
|
||||
case "uint32":
|
||||
case "uint64":
|
||||
@ -51,6 +57,28 @@ public static class Helper
|
||||
}
|
||||
}
|
||||
|
||||
public static int GetDecimalPlaces(object number)
|
||||
{
|
||||
try
|
||||
{
|
||||
decimal n = (decimal)Convert.ChangeType(number, TypeCode.Decimal);
|
||||
n = Math.Abs(n); //make sure it is positive.
|
||||
n -= (int)n; //remove the integer part of the number.
|
||||
var decimalPlaces = 0;
|
||||
while (n > 0)
|
||||
{
|
||||
decimalPlaces++;
|
||||
n *= 10;
|
||||
n -= (int)n;
|
||||
}
|
||||
return decimalPlaces;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsTypeDate(string type)
|
||||
{
|
||||
switch (type.ToLower())
|
||||
@ -64,6 +92,38 @@ public static class Helper
|
||||
}
|
||||
}
|
||||
|
||||
public static bool NumberHasDecimalPlaces(object number)
|
||||
{
|
||||
if (number == null) return false;
|
||||
string type = number.GetType().Name.ToLower();
|
||||
if (IsTypeNumeric(type))
|
||||
{
|
||||
if (!type.Contains("double") && !type.Contains("decimal") && !type.Contains("float")) return false;
|
||||
else
|
||||
{
|
||||
if (type.Equals("double"))
|
||||
{
|
||||
var doubleVal = (double)Convert.ChangeType(number, TypeCode.Double);
|
||||
if (doubleVal % 1 == 0) return false;
|
||||
return true;
|
||||
}
|
||||
if (type.Equals("decimal"))
|
||||
{
|
||||
var doubleVal = (decimal)Convert.ChangeType(number, TypeCode.Decimal);
|
||||
if (doubleVal % 1 == 0) return false;
|
||||
return true;
|
||||
}
|
||||
if (type.Equals("float"))
|
||||
{
|
||||
var doubleVal = (float)number;
|
||||
if (doubleVal % 1 == 0) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsTypeString(string type)
|
||||
{
|
||||
switch (type.ToLower())
|
||||
@ -79,7 +139,7 @@ public static class Helper
|
||||
{
|
||||
try
|
||||
{
|
||||
var number = Double.Parse(input);
|
||||
var number = Decimal.Parse(input);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
|
Loading…
x
Reference in New Issue
Block a user