Refactor ButtonBase, remove styling properties and rename per specs

features/nuget_autobuild
Matija Koželj 2 years ago
parent 52a577df0d
commit c33820a8a7

@ -1,33 +1,32 @@
using System.Windows.Input; using System.Windows.Input;
using Connected.Annotations;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using static System.String;
namespace Connected.Components; namespace Connected.Components;
public abstract class ButtonBase : UIComponent public abstract class ButtonBase : UIComponent
{ {
#region EventCallbacks
/// <summary> /// <summary>
/// Button click event. /// Button click event.
/// </summary> /// </summary>
[Parameter] [Parameter]
public EventCallback<MouseEventArgs> OnClick { get; set; } public EventCallback<MouseEventArgs> Clicked { get; set; }
#endregion
#region Content placeholders
/// <summary> /// <summary>
/// Potential activation target for this button. This enables RenderFragments with user-defined /// Potential activation target for this button. This enables RenderFragments with user-defined
/// buttons which will automatically activate the intended functionality. /// buttons which will automatically activate the intended functionality.
/// </summary> /// </summary>
[CascadingParameter] [CascadingParameter]
protected IActivatable Activateable { get; set; } protected IActivatable? Activateable { get; set; }
#endregion
/// <summary> #region Styling properties
/// The HTML element that will be rendered in the root by the component #endregion
/// By default, is a button
/// </summary>
[Parameter]
public string HtmlTag { get; set; } = "button";
#region Behavior properties
/// <summary> /// <summary>
/// The button Type (Button, Submit, Refresh) /// The button Type (Button, Submit, Refresh)
/// </summary> /// </summary>
@ -35,49 +34,41 @@ public abstract class ButtonBase : UIComponent
public ButtonType ButtonType { get; set; } public ButtonType ButtonType { get; set; }
/// <summary> /// <summary>
/// If true, the button will be disabled. /// Command executed when the user clicks on an element.
/// </summary>
[Parameter]
public bool Disabled { get; set; }
/// <summary>
/// The higher the number, the heavier the drop-shadow. 0 for no shadow.
/// </summary> /// </summary>
[Parameter] [Parameter]
public int Elevation { set; get; } = 0; public ICommand? Command { get; set; }
/// <summary> /// <summary>
/// If true, disables ripple effect. /// Command parameter.
/// </summary> /// </summary>
[Parameter] [Parameter]
public bool CanRipple { get; set; } public object? CommandParameters { get; set; }
/// <summary> /// <summary>
/// Command executed when the user clicks on an element. /// If true, the button will be disabled.
/// </summary> /// </summary>
[Parameter] [Parameter]
public ICommand? Command { get; set; } public bool Disabled { get; set; }
#endregion
/// <summary> /// <summary>
/// Command parameter. /// The HTML element that will be rendered in the root by the component
/// By default, is a button
/// </summary> /// </summary>
[Parameter] protected string HtmlTag => ButtonType.ToString().ToLower();
public object? CommandParameters { get; set; }
protected async Task OnClickHandler(MouseEventArgs e) protected async Task OnClick(MouseEventArgs e)
{ {
if (Disabled) if (Disabled)
return; return;
await OnClick.InvokeAsync(e); if (Clicked.HasDelegate)
await Clicked.InvokeAsync(e);
if (Command?.CanExecute(CommandParameters) ?? false) if (Command?.CanExecute(CommandParameters) ?? false)
Command.Execute(CommandParameters); Command.Execute(CommandParameters);
Activateable?.Activate(this, e); Activateable?.Activate(this, e);
} }
protected ElementReference _elementReference;
public ValueTask FocusAsync() => _elementReference.FocusAsync();
} }

Loading…
Cancel
Save