diff --git a/COMET.Web.Common.Tests/Components/MultiComboBoxTestFixture.cs b/COMET.Web.Common.Tests/Components/MultiComboBoxTestFixture.cs index c998a6b3..0fc4787d 100644 --- a/COMET.Web.Common.Tests/Components/MultiComboBoxTestFixture.cs +++ b/COMET.Web.Common.Tests/Components/MultiComboBoxTestFixture.cs @@ -60,14 +60,21 @@ public void SetUp() new() { Name = "Category4" }, new() { Name = "Category5" }, }; - + } + + [TestCase(true, false)] + [TestCase(false, false)] + [TestCase(false, true)] + public async Task VerifyComponent(bool isComponentEnabled, bool isComponentReadOnly) + { this.component = this.context.RenderComponent>(parameter => { parameter.Add(p => p.Data, this.availableCategories); parameter.Add(p => p.Values, this.availableCategories); parameter.Add(p => p.ShowCheckBoxes, true); parameter.Add(p => p.MaxNumberOfChips, 2); - parameter.Add(p => p.Enabled, true); + parameter.Add(p => p.Enabled, isComponentEnabled); + parameter.Add(p => p.IsReadOnly, isComponentReadOnly); parameter.Add(p => p.EditorTextTemplate, builder => { @@ -78,14 +85,9 @@ public void SetUp() parameter.Add(p => p.RowTemplate, value => value.Name); }); - } - - [Test] - public async Task VerifyComponent() - { + Assert.Multiple(() => { - Assert.IsTrue(this.component.Instance.Enabled); Assert.IsNotEmpty(this.component.Instance.Data); Assert.IsNotEmpty(this.component.Instance.Values); Assert.IsTrue(this.component.Instance.ShowCheckBoxes); @@ -95,15 +97,25 @@ public async Task VerifyComponent() }); var comboBox = this.component.FindComponent>(); - Assert.IsNotNull(comboBox); - Assert.IsNull(comboBox.Instance.Value); + + Assert.Multiple(() => + { + Assert.IsNotNull(comboBox); + Assert.IsNull(comboBox.Instance.Value); + Assert.That(comboBox.Instance.ReadOnly, Is.EqualTo(isComponentReadOnly)); + Assert.That(comboBox.Instance.Enabled, Is.EqualTo(isComponentEnabled)); + }); await this.component.InvokeAsync(() => comboBox.Instance.ShowDropDown()); var dropdownItems = this.component.FindAll(".item-template-checkbox"); - Assert.IsNotNull(dropdownItems); - Assert.IsNotEmpty(dropdownItems); - Assert.AreEqual(this.availableCategories.Count, dropdownItems.Count); + + Assert.Multiple(() => + { + Assert.IsNotNull(dropdownItems); + Assert.IsNotEmpty(dropdownItems); + Assert.AreEqual(this.availableCategories.Count, dropdownItems.Count); + }); } } } \ No newline at end of file diff --git a/COMET.Web.Common/Components/MultiComboBox.razor b/COMET.Web.Common/Components/MultiComboBox.razor index 485ce07f..c933b065 100644 --- a/COMET.Web.Common/Components/MultiComboBox.razor +++ b/COMET.Web.Common/Components/MultiComboBox.razor @@ -27,6 +27,7 @@ Data="@this.Data" ValueChanged="@this.ItemSelected" Enabled="@this.Enabled" + ReadOnly="@(this.IsReadOnly)" Value="@this.lastSelectedValue" ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto" CssClass="w-100"> diff --git a/COMET.Web.Common/Components/MultiComboBox.razor.cs b/COMET.Web.Common/Components/MultiComboBox.razor.cs index 2466e144..28ce03e9 100644 --- a/COMET.Web.Common/Components/MultiComboBox.razor.cs +++ b/COMET.Web.Common/Components/MultiComboBox.razor.cs @@ -68,7 +68,8 @@ public partial class MultiComboBox public IEnumerable Data { get; set; } = Enumerable.Empty(); /// - /// Gets or sets if the component should show all the fields as readonly + /// Gets or sets if the component should show all the fields as enabled/disabled. + /// If a component is disabled, the user can't select the values within the component. /// [Parameter] public bool Enabled { get; set; } = true; @@ -83,7 +84,14 @@ public partial class MultiComboBox /// Gets or sets the callback used to update the component value /// [Parameter] - public EventCallback> ValuesChanged { get; set; } + public EventCallback> ValuesChanged { get; set; } + + /// + /// Gets or sets if the component is read only. + /// If a component is read only, the user can select the values but not edit them. + /// + [Parameter] + public bool IsReadOnly { get; set; } /// /// Handler for when the value of the component has changed