Skip to content

Commit f365279

Browse files
authored
Combobox Fix Multiselection CheckBox Click and Initial MultiSelection Values Show Empty Value on MultiSelection Change (#220)
1 parent beb4928 commit f365279

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

CodeBeam.MudBlazor.Extensions.UnitTests/Components/ComboboxTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,17 @@ public async Task Combobox_ValueChangeEventCountTest_MultiSelection()
139139
var combobox = comp.FindComponent<MudComboBox<string>>();
140140

141141
comp.Instance.ValueChangeCount.Should().Be(0);
142-
comp.Instance.ValuesChangeCount.Should().Be(1);
142+
comp.Instance.ValuesChangeCount.Should().Be(0);
143143

144144
await comp.InvokeAsync(() => combobox.SetParam("SelectedValues", new HashSet<string>() { "1" }));
145145
comp.WaitForAssertion(() => comp.Instance.ValueChangeCount.Should().Be(0));
146-
comp.WaitForAssertion(() => comp.Instance.ValuesChangeCount.Should().Be(2));
146+
comp.WaitForAssertion(() => comp.Instance.ValuesChangeCount.Should().Be(1));
147147

148148

149149
// Setting same value should not fire events
150150
await comp.InvokeAsync(() => combobox.SetParam("SelectedValues", new HashSet<string>() { "1" }));
151151
comp.WaitForAssertion(() => comp.Instance.ValueChangeCount.Should().Be(0));
152-
comp.Instance.ValuesChangeCount.Should().Be(2);
152+
comp.Instance.ValuesChangeCount.Should().Be(1);
153153
}
154154

155155
/// <summary>

CodeBeam.MudBlazor.Extensions/Components/ComboBox/MudComboBox.razor.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,15 @@ protected async Task SyncMultiselectionValues(bool singleToMultiselection)
429429
}
430430
else
431431
{
432-
SelectedValues = new HashSet<T>() { Value };
432+
if (Value is string && string.IsNullOrEmpty(Converter.Set(Value)))
433+
{
434+
SelectedValues = new HashSet<T>();
435+
}
436+
else
437+
{
438+
SelectedValues = new HashSet<T>() { Value };
439+
}
440+
433441
}
434442
await SelectedValuesChanged.InvokeAsync(_selectedValues);
435443
}
@@ -650,6 +658,7 @@ protected override void OnParametersSet()
650658
_allSelected = GetAllSelectedState();
651659
}
652660

661+
bool _firstRendered = false;
653662
T _oldValue;
654663
bool _oldMultiselection = false;
655664
protected override async Task OnParametersSetAsync()
@@ -658,7 +667,10 @@ protected override async Task OnParametersSetAsync()
658667
UpdateIcon();
659668
if (MultiSelection != _oldMultiselection)
660669
{
661-
await SyncMultiselectionValues(MultiSelection);
670+
if (_firstRendered == true)
671+
{
672+
await SyncMultiselectionValues(MultiSelection);
673+
}
662674
ForceRenderItems();
663675
if (MultiSelection == true)
664676
{
@@ -714,6 +726,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
714726
_keyInterceptor.KeyDown += HandleKeyDown;
715727
_keyInterceptor.KeyUp += HandleKeyUp;
716728
await UpdateDataVisualiserTextAsync();
729+
_firstRendered = true;
717730
StateHasChanged();
718731
}
719732
//Console.WriteLine("Select rendered");
@@ -1095,6 +1108,10 @@ public async Task BeginValidatePublic()
10951108
if (Items?.Select(x => x.Value).Contains(item.Value) == false)
10961109
{
10971110
Items.Add(item);
1111+
if (MultiSelection == true && SelectedValues.Contains(item.Value))
1112+
{
1113+
item.Selected = true;
1114+
}
10981115
result = true;
10991116
}
11001117
return result;

CodeBeam.MudBlazor.Extensions/Components/ComboBox/MudComboBoxItem.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
@if (MudComboBox != null && MudComboBox.MultiSelection == true && MudComboBox.ShowCheckbox == true)
99
{
10-
<MudCheckBox Class="me-4" Color="@MudComboBox.Color" Disabled="@Disabled" @bind-Checked="Selected" @onclick="OnClickHandler" Dense="true" />
10+
<MudCheckBox Class="me-4" Color="@MudComboBox.Color" Disabled="@Disabled" @bind-Checked="Selected" @onclick="HandleOnClick" Dense="true" />
1111
}
1212

1313
<MudText Typo="GetTypo()">

ComponentViewer.Docs/Pages/Examples/ComboboxExample3.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
@code {
3131
string _value;
32-
IEnumerable<string> _selectedValues;
32+
IEnumerable<string> _selectedValues = new HashSet<string>() { "Harry Potter", "Ron Weasley" };
3333
Dense _dense = Dense.Standard;
3434
Color _color = Color.Primary;
3535
bool _selectAll;

0 commit comments

Comments
 (0)