diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs
index 0c57c263ef..357e37b19c 100644
--- a/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs
+++ b/src/BlazorUI/Bit.BlazorUI/Components/Notifications/Message/BitMessage.razor.cs
@@ -6,6 +6,7 @@
public partial class BitMessage : BitComponentBase
{
private bool _isExpanded;
+ private CancellationTokenSource? _autoDismissCts;
@@ -20,6 +21,11 @@ public partial class BitMessage : BitComponentBase
[Parameter, ResetStyleBuilder]
public BitAlignment? Alignment { get; set; }
+ ///
+ /// Enables the auto-dismiss feature and sets the time to automatically call the OnDismiss callback.
+ ///
+ [Parameter] public TimeSpan? AutoDismissTime { get; set; }
+
///
/// The content of message.
///
@@ -178,7 +184,33 @@ protected override void RegisterCssClasses()
});
}
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ await base.OnAfterRenderAsync(firstRender);
+
+ if (firstRender is false) return;
+ if (OnDismiss.HasDelegate is false) return;
+ if (AutoDismissTime is not { } delay || delay <= TimeSpan.Zero) return;
+ _autoDismissCts?.Cancel();
+ _autoDismissCts = new CancellationTokenSource();
+ _ = AutoDismissAsync(delay, _autoDismissCts.Token);
+ }
+
+
+
+ private async Task AutoDismissAsync(TimeSpan delay, CancellationToken ct)
+ {
+ try
+ {
+ await Task.Delay(delay, ct);
+
+ if (ct.IsCancellationRequested || OnDismiss.HasDelegate is false) return;
+
+ await InvokeAsync(OnDismiss.InvokeAsync);
+ }
+ catch (TaskCanceledException) { }
+ }
private void ToggleExpand() => _isExpanded = _isExpanded is false;
@@ -188,6 +220,18 @@ protected override void RegisterCssClasses()
+ protected override async ValueTask DisposeAsync(bool disposing)
+ {
+ if (IsDisposed || disposing is false) return;
+
+ _autoDismissCts?.Cancel();
+ _autoDismissCts?.Dispose();
+
+ await base.DisposeAsync(disposing);
+ }
+
+
+
private static Dictionary _IconMap = new()
{
[BitColor.Primary] = "Info",
diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor
index 9a30c981e4..e8b17b9e6f 100644
--- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor
+++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor
@@ -151,6 +151,19 @@
{
Dismissed, click to reset
}
+
+
+
+ @if (isAutoDismissed is false)
+ {
+
+ Auto-Dismiss option enabled by adding the AutoDismissTime parameter alongside OnDismiss.
+
+ }
+ else
+ {
+ Auto-Dismissed, click to reset
+ }
diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.cs
index 03a4472870..ade5c1b62c 100644
--- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.cs
+++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.cs
@@ -21,6 +21,13 @@ public partial class BitMessageDemo
Href = "#alignment-enum",
},
new()
+ {
+ Name = "AutoDismissTime",
+ Type = "TimeSpan?",
+ DefaultValue = "null",
+ Description = "Enables the auto-dismiss feature and sets the time to automatically call the OnDismiss callback.",
+ },
+ new()
{
Name = "ChildContent",
Type = "RenderFragment?",
@@ -474,6 +481,8 @@ public partial class BitMessageDemo
private bool isDismissed;
+ private bool isAutoDismissed;
+
private double elevation = 7;
private bool isErrorDismissed;
private bool isWarningDismissed;
diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.samples.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.samples.cs
index 6900bf64c4..63ea2fce1a 100644
--- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.samples.cs
+++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Notifications/Message/BitMessageDemo.razor.samples.cs
@@ -106,9 +106,21 @@ Dismiss option enabled by adding OnDismiss parameter.
else
{
isDismissed = false"">Dismissed, click to reset
+}
+
+@if (isAutoDismissed is false)
+{
+ isAutoDismissed = true"">
+ Auto-Dismiss option enabled by adding AutoDismissTime parameter alongside of OnDismiss.
+
+}
+else
+{
+ isAutoDismissed = false"">Auto-Dismissed, click to reset
}";
private readonly string example8CsharpCode = @"
-private bool isDismissed;";
+private bool isDismissed;
+private bool isAutoDismissed;";
private readonly string example9RazorCode = @"