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