diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/DisabledParentSelectTest.razor b/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/DisabledParentSelectTest.razor new file mode 100644 index 00000000..a1e16a0f --- /dev/null +++ b/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/DisabledParentSelectTest.razor @@ -0,0 +1,13 @@ +@namespace MudExtensions.UnitTests.TestComponents + + + + + + + + + +@code { + string? value = null; +} diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/SelectTest1.razor b/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/SelectTest1.razor index bbb3fb61..fed38789 100644 --- a/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/SelectTest1.razor +++ b/CodeBeam.MudBlazor.Extensions.UnitTests.Viewer/TestComponents/SelectExtended/SelectTest1.razor @@ -1,7 +1,7 @@ @namespace MudExtensions.UnitTests.TestComponents - + @@ -11,18 +11,21 @@ @code { - public static string __description__ = "Click should open the Menu and selecting a value should update the bindable value."; + public static string __description__ = "Click should open the Menu and selecting a value should update the bindable value."; - string? value = null; - bool _focused = false; + [Parameter] + public bool Disabled { get; set; } - private void Focused() - { - _focused = true; - } + string? value = null; + bool _focused = false; - private void Blurred() - { - _focused = false; - } + private void Focused() + { + _focused = true; + } + + private void Blurred() + { + _focused = false; + } } diff --git a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs index 167a4641..f9ca958c 100644 --- a/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs +++ b/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs @@ -471,7 +471,7 @@ public void SingleSelect_Should_FireTextChangedBeforeSelectedValuesChanged() string.Join(",", selectedValues ?? new List()).Should().Be("2"); input.Click(); - comp.WaitForAssertion(()=>comp.FindAll("div.mud-list-item-extended").Count.Should().BeGreaterThan(0)); + comp.WaitForAssertion(() => comp.FindAll("div.mud-list-item-extended").Count.Should().BeGreaterThan(0)); items = comp.FindAll("div.mud-list-item-extended").ToArray(); items[0].Click(); @@ -713,7 +713,7 @@ public void SingleSelect_Should_CallValidationFunc() comp.FindAll("div.mud-list-item-extended")[1].Click(); // menu should be closed now - comp.WaitForAssertion(() => menu.ClassList.Should().NotContain("mud-popover-open")); + comp.WaitForAssertion(() => comp.Find("div.mud-popover").ClassList.Should().NotContain("mud-popover-open")); comp.WaitForAssertion(() => select.Instance.Value.Should().Be("2")); select.Instance.Text.Should().Be("2"); validatedValue.Should().Be("2"); @@ -1333,5 +1333,35 @@ await comp.InvokeAsync(() => select.SelectedValues?.Count().Should().Be(1); select.Text.Should().Be("test"); } + + [Test] + public void Select_Should_NotOpen_WhenDisabled() + { + var comp = Context.RenderComponent(parameters => + { + parameters.Add(p => p.Disabled, true); + }); + var select = comp.FindComponent>(); + var input = comp.Find("div.mud-input-control"); + + // Try to open the select + input.Click(); + // The menu should not open + comp.Find("div.mud-popover").ClassList.Should().NotContain("mud-popover-open"); + } + + [Test] + public void Select_Should_NotOpen_WhenParentDisabled() + { + // Use a test component that wraps the select in a disabled parent + var comp = Context.RenderComponent(); + var select = comp.FindComponent>(); + var input = comp.Find("div.mud-input-control"); + + // Try to open the select + input.Click(); + // The menu should not open + comp.Find("div.mud-popover").ClassList.Should().NotContain("mud-popover-open"); + } } } diff --git a/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor.cs b/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor.cs index 8298106f..3f21747b 100644 --- a/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor.cs +++ b/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor.cs @@ -850,7 +850,7 @@ protected override async ValueTask DisposeAsyncCore() /// protected internal async Task HandleKeyDownAsync(KeyboardEventArgs obj) { - if (Disabled || ReadOnly) + if (GetDisabledState() || GetReadOnlyState()) return; if (_list != null && _isOpen) @@ -997,7 +997,7 @@ public override ValueTask SelectRangeAsync(int pos1, int pos2) /// public async Task ToggleMenu() { - if (Disabled || ReadOnly) + if (GetDisabledState() || GetReadOnlyState()) return; if (_isOpen) await CloseMenu(); @@ -1011,7 +1011,7 @@ public async Task ToggleMenu() /// public async Task OpenMenu() { - if (Disabled || ReadOnly) + if (GetDisabledState() || GetReadOnlyState()) return; _isOpen = true; UpdateIcon();