ant-design-blazor/components/checkbox/Checkbox.razor.cs

118 lines
3.0 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using System.Linq.Expressions;
namespace AntDesign
{
public partial class Checkbox : AntInputComponentBase<bool>
{
[Parameter]
public RenderFragment ChildContent { get; set; }
2020-04-24 18:32:50 +08:00
private ElementReference _inputElement;
private ElementReference _contentElement;
[Parameter]
public EventCallback<bool> CheckedChange { get; set; }
[Parameter]
public Expression<Func<bool>> CheckedExpression { get; set; }
[Parameter]
public bool AutoFocus { get; set; }
[Parameter]
public bool Disabled { get; set; }
[Parameter]
public bool Indeterminate { get; set; }
[Parameter]
public bool Checked { get; set; }
[Parameter]
public string Label { get; set; }
[CascadingParameter]
public CheckboxGroup CheckboxGroup { get; set; }
protected Dictionary<string, object> InputAttributes { get; set; }
protected override void OnParametersSet()
{
SetClass();
base.OnParametersSet();
}
2020-04-24 18:32:50 +08:00
protected override void OnInitialized()
{
if (this is Checkbox checkbox)
{
CheckboxGroup?.CheckboxItems.Add(checkbox);
}
2020-06-03 20:29:28 +08:00
Value = Checked;
}
protected override void Dispose(bool disposing)
{
if (this is Checkbox checkbox)
{
CheckboxGroup?.CheckboxItems.Remove(checkbox);
}
base.Dispose(disposing);
}
protected void SetClass()
{
2020-04-24 18:32:50 +08:00
string prefixName = "ant-checkbox";
ClassMapper.Clear()
.Add(prefixName)
.If($"{prefixName}-checked", () => Checked && !Indeterminate)
.If($"{prefixName}-disabled", () => Disabled)
.If($"{prefixName}-indeterminate", () => Indeterminate);
}
protected async Task InputCheckedChange(ChangeEventArgs args)
{
2020-04-24 18:32:50 +08:00
if (args != null && args.Value is bool value)
{
await InnerCheckedChange(value);
2020-06-03 20:29:28 +08:00
CurrentValue = Checked;
2020-04-24 18:32:50 +08:00
}
}
protected async Task InnerCheckedChange(bool @checked)
{
if (!this.Disabled)
{
this.Checked = @checked;
await this.CheckedChange.InvokeAsync(this.Checked);
CheckboxGroup?.OnCheckboxChange(this);
}
}
protected void UpdateAutoFocus()
{
if (this.AutoFocus)
{
InputAttributes.Add("autofocus", "autofocus");
}
else
{
InputAttributes.Remove("autofocus");
}
}
protected void WriteValue(bool value)
{
this.Checked = value;
}
}
}