@inject IMessageService MessageService
@namespace LANCommander.UI.Components
@code {
[Parameter] public long Value { get; set; }
[Parameter] public EventCallback ValueChanged { get; set; }
[Parameter] public long Default { get; set; } = ByteSizeLib.ByteSize.BytesInMebiByte;
[Parameter] public long Maximum { get; set; }
[Parameter] public long Minimum { get; set; }
long _baseNumber = 2;
long _multiplier = ByteSizeLib.ByteSize.BytesInMegaByte;
(long Multiplier, string Label)[] _options =
[
(ByteSizeLib.ByteSize.BytesInTebiByte, "TiB"),
(ByteSizeLib.ByteSize.BytesInGibiByte, "GiB"),
(ByteSizeLib.ByteSize.BytesInMebiByte, "MiB"),
(ByteSizeLib.ByteSize.BytesInKiloByte, "KiB"),
(1, "b"),
];
protected override async Task OnInitializedAsync()
{
var multiplierLabel = ByteSizeLib.ByteSize.FromBytes(Value).LargestWholeNumberBinarySymbol;
_multiplier = _options.FirstOrDefault(o => o.Label == multiplierLabel).Multiplier;
_baseNumber = Value / _multiplier;
}
(long Multiplier, string Label)[] _availableOptions
{
get
{
return _options.Where(o => (Maximum == 0 || o.Multiplier < Maximum) && (Minimum == 0 || o.Multiplier > Minimum)).ToArray();
}
}
async Task BaseNumberChanged(long val)
{
if (val <= 0)
return;
_baseNumber = val;
await Changed();
}
async Task MultiplierChanged(long val)
{
if (val <= 0)
return;
_multiplier = val;
await Changed();
}
async Task Changed()
{
Value = _baseNumber * _multiplier;
if (Maximum > 0 && Value > Maximum)
Value = Maximum;
if (Minimum > 0 && Value < Minimum)
Value = Minimum;
if (Value < 0)
Value = 0;
if (ValueChanged.HasDelegate)
await ValueChanged.InvokeAsync(Value);
}
}