feat: 框架搭建基本完成
geffzhang authored at 2023-02-28 20:06:05
1.36 KiB
NewLife.CubeBlazor
using BlazorComponent;
using Masa.Blazor;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;

namespace NewLife.CubeBlazor.Razor.Shared
{
  public class SAutoLoadingButton : MButton
  {
    [Parameter]
    public string BorderRadiusClass { get; set; } = "rounded-pill";

    [Parameter]
    public bool DisableLoading { get; set; }

    public override async Task SetParametersAsync(ParameterView parameters)
    {
      Color = "primary";
      await base.SetParametersAsync(parameters);
    }

    protected override void OnParametersSet()
    {
      var originalOnClick = OnClick;

      if (OnClick.HasDelegate)
      {
        OnClick = EventCallback.Factory.Create<MouseEventArgs>(this, async (args) =>
        {
          Loading = DisableLoading is false;
          Disabled = true;

          try
          {
            await originalOnClick.InvokeAsync(args);
          }
          finally
          {
            Loading = false;
            Disabled = false;
            StateHasChanged();
          }
        });
      }
    }

    protected override void SetComponentClass()
    {
      base.SetComponentClass();

      CssProvider.Merge(delegate (CssBuilder cssBuilder)
      {
        cssBuilder.AddIf(BorderRadiusClass, () =>
        {
          return !(Class?.Split(' ').Contains(BorderRadiusClass) ?? false);
        });
      });
    }
  }

}