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" }); + } } }