diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor b/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor
index 28ec6118..40adf2fe 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor
@@ -50,12 +50,12 @@
@for (int i = 0; i < (MaxChips == 0 ? _valuesState.Value?.Count ?? 0 : (MaxChips < (_valuesState.Value?.Count ?? 0) ? MaxChips : _valuesState.Value?.Count ?? 0)); i++)
{
int a = i;
-
+
}
@if (_valuesState.Value != null && MaxChips != 0 && MaxChips < _valuesState.Value.Count)
{
-
+
}
diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor.cs b/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor.cs
index a6442cd9..496ddbcf 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor.cs
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/ChipField/MudChipField.razor.cs
@@ -273,7 +273,7 @@ protected async Task SetChips()
///
public async Task Closed(MudChip chip)
{
- if (Disabled || ReadOnly)
+ if (GetDisabledState() || GetReadOnlyState())
{
return;
}
diff --git a/tests/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/ChipField/ChipFieldFormStateTest.razor b/tests/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/ChipField/ChipFieldFormStateTest.razor
new file mode 100644
index 00000000..84563019
--- /dev/null
+++ b/tests/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/ChipField/ChipFieldFormStateTest.razor
@@ -0,0 +1,21 @@
+@namespace MudExtensions.UnitTests.TestComponents
+
+
+
+
+
+
+
+
+@code {
+ public static string __description__ = "Chips should respect the parent form's Disabled and ReadOnly state";
+
+ [Parameter]
+ public bool FormDisabled { get; set; }
+
+ [Parameter]
+ public bool FormReadOnly { get; set; }
+
+ [Parameter]
+ public List? Values { get; set; } = new() { "first", "second" };
+}
diff --git a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ChipFieldTests.cs b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ChipFieldTests.cs
index 03609994..3a630117 100644
--- a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ChipFieldTests.cs
+++ b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ChipFieldTests.cs
@@ -1,7 +1,9 @@
using Bunit;
using AwesomeAssertions;
using Microsoft.AspNetCore.Components;
+using MudBlazor;
using MudBlazor.Extensions;
+using MudExtensions.UnitTests.TestComponents;
namespace MudExtensions.UnitTests.Components
{
@@ -21,5 +23,36 @@ public async Task ChipFieldBasicTest()
comp.Instance.GetState(x => x.Values).Should().BeEquivalentTo(new List { "asdf", "asd", "sdfg" });
comp.Instance.GetState(x => x.Value).Should().BeEquivalentTo(null);
}
+
+ [Test]
+ public async Task ChipField_ParentFormDisabled_ShouldDisableChipsAndPreventRemoval()
+ {
+ var comp = Context.Render(opt =>
+ {
+ opt.Add(a => a.FormDisabled, true);
+ });
+ var chipField = comp.FindComponent>();
+ var chips = comp.FindComponents>();
+
+ chips.Should().HaveCount(2);
+ chips.Should().AllSatisfy(chip => chip.Instance.Disabled.Should().BeTrue());
+
+ await comp.InvokeAsync(() => chipField.Instance.Closed(chips[0].Instance));
+ chipField.Instance.GetState(x => x.Values).Should().BeEquivalentTo(new List { "first", "second" });
+ }
+
+ [Test]
+ public async Task ChipField_ParentFormReadOnly_ShouldPreventRemoval()
+ {
+ var comp = Context.Render(opt =>
+ {
+ opt.Add(a => a.FormReadOnly, true);
+ });
+ var chipField = comp.FindComponent>();
+ var chips = comp.FindComponents>();
+
+ await comp.InvokeAsync(() => chipField.Instance.Closed(chips[0].Instance));
+ chipField.Instance.GetState(x => x.Values).Should().BeEquivalentTo(new List { "first", "second" });
+ }
}
}