feat(theme): StatusPill widget

This commit is contained in:
Joseph Doherty
2026-06-01 04:46:24 -04:00
parent 6736415a32
commit af8682c0f2
5 changed files with 42 additions and 0 deletions
@@ -0,0 +1,16 @@
@* Components/StatusPill.razor *@
<span class="chip @ChipClass">@ChildContent</span>
@code {
[Parameter, EditorRequired] public StatusState State { get; set; }
[Parameter] public RenderFragment? ChildContent { get; set; }
private string ChipClass => State switch
{
StatusState.Ok => "chip-ok",
StatusState.Warn => "chip-warn",
StatusState.Bad => "chip-bad",
StatusState.Info => "chip-info",
_ => "chip-idle",
};
}
@@ -0,0 +1,3 @@
namespace ZB.MOM.WW.Theme;
public enum StatusState { Ok, Warn, Bad, Idle, Info }
@@ -2,3 +2,4 @@
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using ZB.MOM.WW.Theme
@using ZB.MOM.WW.Theme.Components
@@ -0,0 +1,21 @@
namespace ZB.MOM.WW.Theme.Tests;
public class StatusPillTests : TestContext
{
[Theory]
[InlineData(StatusState.Ok, "chip-ok")]
[InlineData(StatusState.Warn, "chip-warn")]
[InlineData(StatusState.Bad, "chip-bad")]
[InlineData(StatusState.Idle, "chip-idle")]
[InlineData(StatusState.Info, "chip-info")]
public void Maps_state_to_chip_class(StatusState state, string expected)
{
var cut = RenderComponent<StatusPill>(p => p
.Add(x => x.State, state)
.AddChildContent("Connected"));
var span = cut.Find("span");
Assert.Contains("chip", span.ClassList);
Assert.Contains(expected, span.ClassList);
Assert.Equal("Connected", span.TextContent.Trim());
}
}
@@ -1,3 +1,4 @@
global using Bunit;
global using Xunit;
global using ZB.MOM.WW.Theme;
global using ZB.MOM.WW.Theme.Components;