You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connected.Components/Components/Snackbar/SnackbarElement.razor.cs

79 lines
2.3 KiB

// Copyright (c) Alessandro Ghidini. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Changes and improvements Copyright (c) The MudBlazor Team
using Microsoft.AspNetCore.Components;
using static System.String;
namespace Connected.Components;
public partial class SnackbarElement : UIComponent, IDisposable
{
[Parameter]
public Snackbar Snackbar { get; set; }
/// <summary>
/// Custom close icon.
/// </summary>
[Parameter] public string CloseIcon { get; set; } = Icons.Material.Filled.Close;
// appearance
private string Action => Snackbar?.State.Options.Action;
private ThemeColor ActionColor => Snackbar?.State.Options.ActionColor ?? ThemeColor.Default;
private Variant ActionVariant => Snackbar?.State.Options.ActionVariant ?? Snackbar?.State.Options.SnackbarVariant ?? Variant.Text;
private string AnimationStyle => Snackbar?.State.AnimationStyle + Style;
private string SnackbarClass => Snackbar?.State.SnackbarClass;
private RenderFragment Css;
private bool ShowActionButton => Snackbar?.State.ShowActionButton == true;
private bool ShowCloseIcon => Snackbar?.State.ShowCloseIcon == true;
// icon
private bool HideIcon => Snackbar?.State.HideIcon == true;
private string Icon => Snackbar?.State.Icon;
private ThemeColor IconColor => Snackbar?.State.Options.IconColor ?? ThemeColor.Inherit;
private Size IconSize => Snackbar?.State.Options.IconSize ?? Size.Medium;
// behavior
private void ActionClicked() => Snackbar?.Clicked(false);
private void CloseIconClicked() => Snackbar?.Clicked(true);
private SnackbarMessage Message => Snackbar?.SnackbarMessage;
private void SnackbarClicked()
{
if (!ShowActionButton)
Snackbar?.Clicked(false);
}
private void SnackbarUpdated()
{
InvokeAsync(StateHasChanged);
}
protected override void OnInitialized()
{
if (Snackbar != null)
{
Snackbar.OnUpdate += SnackbarUpdated;
Snackbar.Init();
Css = builder =>
{
var transitionClass = Snackbar.State.TransitionClass;
if (!IsNullOrWhiteSpace(transitionClass))
{
builder.OpenElement(1, "style");
builder.AddContent(2, transitionClass);
builder.CloseElement();
}
};
}
}
public void Dispose()
{
if (Snackbar != null)
Snackbar.OnUpdate -= SnackbarUpdated;
}
}