Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

On click handler #106

Merged
merged 1 commit into from
Feb 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion samples/BlazorServer/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,18 @@
<button class="btn btn-warning" @onclick="@(() => toastService.ShowWarning("I'm a WARNING message"))">Warning Toast</button>
<button class="btn btn-danger" @onclick="@(() => toastService.ShowError("I'm an ERROR message"))">Error Toast</button>
<button class="btn btn-info" @onclick="@OnShowHtml">Info Toast with HTML</button>
<button class="btn btn-info" @onclick="@(() => toastService.ShowInfo("Click to refresh the page", "Click me!", () => { NavigationManager.NavigateTo("/", true); }))">
Info Toast with custom action on click
</button>

@code
{
[Inject]
public NavigationManager NavigationManager { get; set; }

private void OnShowHtml()
{
RenderFragment message = @<text>I'm an <em>INFO</em> message with some <strong>bold</strong> text</text>;
RenderFragment message =@<text>I'm an <em>INFO</em> message with some <strong>bold</strong> text</text>;
toastService.ShowToast(ToastLevel.Info, message);
}
}
42 changes: 21 additions & 21 deletions samples/BlazorServer/Shared/NavMenu.razor
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">Blazor Server</a>
<button class="navbar-toggler" @onclick="@ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>

<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">Blazor Server</a>
<button class="navbar-toggler" @onclick="@ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
</ul>
</div>

@code {
bool collapseNavMenu = true;

string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}
</ul>
</div>
@code {
bool collapseNavMenu = true;
string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}
8 changes: 7 additions & 1 deletion samples/BlazorWebAssembly/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,18 @@
<button class="btn btn-warning" @onclick="@(() => toastService.ShowWarning("I'm a WARNING message"))">Warning Toast</button>
<button class="btn btn-danger" @onclick="@(() => toastService.ShowError("I'm an ERROR message"))">Error Toast</button>
<button class="btn btn-info" @onclick="@OnShowHtml">Info Toast with HTML</button>
<button class="btn btn-info" @onclick="@(() => toastService.ShowInfo("Click to refresh the page", "Click me!", () => { NavigationManager.NavigateTo("/", true); }))">
Info Toast with custom action on click
</button>

@code
{
[Inject]
public NavigationManager NavigationManager { get; set; }

private void OnShowHtml()
{
RenderFragment message = @<text>Info Toast with <strong>bold</strong> text</text>;
RenderFragment message =@<text>Info Toast with <strong>bold</strong> text</text>;
toastService.ShowToast(ToastLevel.Info, message);
}
}
2 changes: 1 addition & 1 deletion src/Blazored.Toast/BlazoredToast.razor
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@using Microsoft.AspNetCore.Components.Web

<div class="blazored-toast @ToastSettings.BaseClass @ToastSettings.AdditionalClasses">
<div class="blazored-toast @ToastSettings.BaseClass @ToastSettings.AdditionalClasses" @onclick="ToastClick">

@if (!string.IsNullOrWhiteSpace(ToastSettings.Icon))
{
Expand Down
6 changes: 6 additions & 0 deletions src/Blazored.Toast/BlazoredToast.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ protected override void OnInitialized()
_countdownTimer.OnTick += CalculateProgress;
_countdownTimer.OnElapsed += () => { Close(); };
_countdownTimer.Start();

}

private async void CalculateProgress(int percentComplete)
Expand All @@ -35,6 +36,11 @@ private void Close()
ToastsContainer.RemoveToast(ToastId);
}

private void ToastClick()
{
ToastSettings.OnClick?.Invoke();
}

public void Dispose()
{
_countdownTimer.Dispose();
Expand Down
2 changes: 1 addition & 1 deletion src/Blazored.Toast/BlazoredToasts.razor
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<CascadingValue Value=this>
@foreach (var toast in ToastList.OrderBy(x=>x.TimeStamp))
{
<BlazoredToast @key="toast" ToastSettings="toast.ToastSettings" ToastId="toast.Id" Timeout="Timeout" />
<BlazoredToast @key="toast" ToastSettings="toast.ToastSettings" ToastId="toast.Id" Timeout="Timeout"/>
}
</CascadingValue>
</div>
Expand Down
18 changes: 11 additions & 7 deletions src/Blazored.Toast/BlazoredToasts.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,31 +73,35 @@ private void ClearToasts(object sender, LocationChangedEventArgs args)
});
}

private ToastSettings BuildToastSettings(ToastLevel level, RenderFragment message, string heading)
private ToastSettings BuildToastSettings(ToastLevel level, RenderFragment message, string heading, Action? onclick)
{
switch (level)
{
case ToastLevel.Error:
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Error" : heading, message, IconType, "blazored-toast-error", ErrorClass, ErrorIcon, ShowProgressBar);
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Error" : heading, message, IconType,
"blazored-toast-error", ErrorClass, ErrorIcon, ShowProgressBar, onclick);

case ToastLevel.Info:
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Info" : heading, message, IconType, "blazored-toast-info", InfoClass, InfoIcon, ShowProgressBar);
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Info" : heading, message, IconType,
"blazored-toast-info", InfoClass, InfoIcon, ShowProgressBar, onclick);

case ToastLevel.Success:
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Success" : heading, message, IconType, "blazored-toast-success", SuccessClass, SuccessIcon, ShowProgressBar);
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Success" : heading, message, IconType,
"blazored-toast-success", SuccessClass, SuccessIcon, ShowProgressBar, onclick);

case ToastLevel.Warning:
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Warning" : heading, message, IconType, "blazored-toast-warning", WarningClass, WarningIcon, ShowProgressBar);
return new ToastSettings(string.IsNullOrWhiteSpace(heading) ? "Warning" : heading, message, IconType,
"blazored-toast-warning", WarningClass, WarningIcon, ShowProgressBar, onclick);
}

throw new InvalidOperationException();
}

private void ShowToast(ToastLevel level, RenderFragment message, string heading)
private void ShowToast(ToastLevel level, RenderFragment message, string heading, Action? onClick)
{
InvokeAsync(() =>
{
var settings = BuildToastSettings(level, message, heading);
var settings = BuildToastSettings(level, message, heading, onClick);
var toast = new ToastInstance
{
Id = Guid.NewGuid(),
Expand Down
12 changes: 10 additions & 2 deletions src/Blazored.Toast/Configuration/ToastSettings.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Components;
using System;
using Microsoft.AspNetCore.Components;

namespace Blazored.Toast.Configuration
{
Expand All @@ -11,7 +12,8 @@ public ToastSettings(
string baseClass,
string additionalClasses,
string icon,
bool showProgressBar)
bool showProgressBar,
Action? onClick)
{
Heading = heading;
Message = message;
Expand All @@ -20,6 +22,11 @@ public ToastSettings(
AdditionalClasses = additionalClasses;
Icon = icon;
ShowProgressBar = showProgressBar;
OnClick = onClick;
if (onClick != null)
{
AdditionalClasses += " blazored-toast-action";
}
}

public string Heading { get; set; }
Expand All @@ -29,5 +36,6 @@ public ToastSettings(
public string Icon { get; set; }
public IconType? IconType { get; set; }
public bool ShowProgressBar { get; set; }
public Action? OnClick { get; set; }
}
}
22 changes: 11 additions & 11 deletions src/Blazored.Toast/Services/IToastService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,78 +8,78 @@ public interface IToastService
/// <summary>
/// A event that will be invoked when showing a toast
/// </summary>
event Action<ToastLevel, RenderFragment, string> OnShow;
event Action<ToastLevel, RenderFragment, string, Action> OnShow;

/// <summary>
/// Shows a information toast
/// </summary>
/// <param name="message">Text to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowInfo(string message, string heading = "");
void ShowInfo(string message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a information toast
/// </summary>
/// <param name="message">RenderFragment to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowInfo(RenderFragment message, string heading = "");
void ShowInfo(RenderFragment message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a success toast
/// </summary>
/// <param name="message">Text to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowSuccess(string message, string heading = "");
void ShowSuccess(string message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a success toast
/// </summary>
/// <param name="message">RenderFragment to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowSuccess(RenderFragment message, string heading = "");
void ShowSuccess(RenderFragment message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a warning toast
/// </summary>
/// <param name="message">Text to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowWarning(string message, string heading = "");
void ShowWarning(string message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a warning toast
/// </summary>
/// <param name="message">RenderFragment to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowWarning(RenderFragment message, string heading = "");
void ShowWarning(RenderFragment message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a error toast
/// </summary>
/// <param name="message">Text to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowError(string message, string heading = "");
void ShowError(string message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a error toast
/// </summary>
/// <param name="message">RenderFragment to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowError(RenderFragment message, string heading = "");
void ShowError(RenderFragment message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a toast using the supplied settings
/// </summary>
/// <param name="level">Toast level to display</param>
/// <param name="message">Text to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowToast(ToastLevel level, string message, string heading = "");
void ShowToast(ToastLevel level, string message, string heading = "", Action? onClick = null);

/// <summary>
/// Shows a toast using the supplied settings
/// </summary>
/// <param name="level">Toast level to display</param>
/// <param name="message">RenderFragment to display on the toast</param>
/// <param name="heading">The text to display as the toasts heading</param>
void ShowToast(ToastLevel level, RenderFragment message, string heading = "");
void ShowToast(ToastLevel level, RenderFragment message, string heading = "", Action? onClick = null);
}
}
Loading