diff --git a/docs/CodeBeam.MudBlazor.Extensions.Docs.Wasm/wwwroot/CodeBeam.MudBlazor.Extensions.xml b/docs/CodeBeam.MudBlazor.Extensions.Docs.Wasm/wwwroot/CodeBeam.MudBlazor.Extensions.xml
index 600b4649..dabdd227 100644
--- a/docs/CodeBeam.MudBlazor.Extensions.Docs.Wasm/wwwroot/CodeBeam.MudBlazor.Extensions.xml
+++ b/docs/CodeBeam.MudBlazor.Extensions.Docs.Wasm/wwwroot/CodeBeam.MudBlazor.Extensions.xml
@@ -995,12 +995,6 @@
-
-
-
-
-
-
@@ -4164,12 +4158,6 @@
-
-
-
-
-
-
diff --git a/docs/CodeBeam.MudBlazor.Extensions.Docs/CodeBeam.MudBlazor.Extensions.Docs.csproj b/docs/CodeBeam.MudBlazor.Extensions.Docs/CodeBeam.MudBlazor.Extensions.Docs.csproj
index a1c691a6..329de389 100644
--- a/docs/CodeBeam.MudBlazor.Extensions.Docs/CodeBeam.MudBlazor.Extensions.Docs.csproj
+++ b/docs/CodeBeam.MudBlazor.Extensions.Docs/CodeBeam.MudBlazor.Extensions.Docs.csproj
@@ -14,7 +14,7 @@
-
+
diff --git a/docs/CodeBeam.MudBlazor.Extensions.Docs/Pages/Components/ListExtended/Examples/ListExtendedExample3.razor b/docs/CodeBeam.MudBlazor.Extensions.Docs/Pages/Components/ListExtended/Examples/ListExtendedExample3.razor
index 028aeea0..6b704aab 100644
--- a/docs/CodeBeam.MudBlazor.Extensions.Docs/Pages/Components/ListExtended/Examples/ListExtendedExample3.razor
+++ b/docs/CodeBeam.MudBlazor.Extensions.Docs/Pages/Components/ListExtended/Examples/ListExtendedExample3.razor
@@ -30,7 +30,7 @@
-
+
@foreach (var item in _list?.GetItems() ?? new())
{
@item.Text
@@ -57,8 +57,16 @@
MudListExtended? _list;
int? _selectedValue = 1;
IEnumerable _selectedValues = new List();
+ IReadOnlyCollection _mSelectedValues;
MudListItemExtended? _selectedItem;
MudListItemExtended _thirdItem = new();
MudListItemExtended _fifthItem = new();
IEnumerable> _selectedItems = new List>();
+
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+ _mSelectedValues = _selectedValues as IReadOnlyCollection ?? _selectedValues.ToList();
+ }
+
}
\ No newline at end of file
diff --git a/src/CodeBeam.MudBlazor.Extensions/CodeBeam.MudBlazor.Extensions.csproj b/src/CodeBeam.MudBlazor.Extensions/CodeBeam.MudBlazor.Extensions.csproj
index bf6dc8aa..e10a8969 100644
--- a/src/CodeBeam.MudBlazor.Extensions/CodeBeam.MudBlazor.Extensions.csproj
+++ b/src/CodeBeam.MudBlazor.Extensions/CodeBeam.MudBlazor.Extensions.csproj
@@ -45,12 +45,10 @@
-
+
-
+
diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/ComboBox/MudComboBox.razor.cs b/src/CodeBeam.MudBlazor.Extensions/Components/ComboBox/MudComboBox.razor.cs
index e8dfcd5a..831d8ada 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/ComboBox/MudComboBox.razor.cs
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/ComboBox/MudComboBox.razor.cs
@@ -749,7 +749,7 @@ protected override void OnInitialized()
else if (MultiSelection && SelectedValues != null)
{
// TODO: Check this line again
- SetValueAsync(SelectedValues.FirstOrDefault()).CatchAndLog();
+ SetValueCoreAsync(SelectedValues.FirstOrDefault()).CatchAndLog();
}
}
@@ -1285,22 +1285,6 @@ protected void DeselectAllItems()
}
}
- ///
- ///
- ///
- ///
- public override async Task ForceUpdate()
- {
- await base.ForceUpdate();
- if (!MultiSelection)
- {
- SelectedValues = new HashSet(_comparer) { Value };
- }
- else
- {
- await SelectedValuesChanged.InvokeAsync(new HashSet(SelectedValues, _comparer));
- }
- }
///
///
diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/DateWheelPicker/MudDateWheelPicker.razor.cs b/src/CodeBeam.MudBlazor.Extensions/Components/DateWheelPicker/MudDateWheelPicker.razor.cs
index 919c44b0..20fe83a6 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/DateWheelPicker/MudDateWheelPicker.razor.cs
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/DateWheelPicker/MudDateWheelPicker.razor.cs
@@ -573,7 +573,7 @@ protected string NumberToString(int val)
///
public async Task Clear()
{
- await SetValueAsync(null);
+ await SetValueCoreAsync(null);
await InputReference.SetText(null);
}
diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/PasswordField/MudPasswordField.razor.cs b/src/CodeBeam.MudBlazor.Extensions/Components/PasswordField/MudPasswordField.razor.cs
index f90bd4ca..0168e440 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/PasswordField/MudPasswordField.razor.cs
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/PasswordField/MudPasswordField.razor.cs
@@ -160,7 +160,7 @@ public async Task SetText(string text)
private async Task OnMaskedValueChanged(string s)
{
- await SetTextAsync(s);
+ await SetTextCoreAsync(s);
}
///
diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor b/src/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor
index dca0aa16..fd7a13bc 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/SelectExtended/MudSelectExtended.razor
@@ -137,7 +137,7 @@
@if (ItemCollection != null || ChildContent != null)
{
-
- , string?>? multiSelectionTextFunc = null)
{
// The Text property of the control is updated
- await SetTextAsync(multiSelectionTextFunc?.Invoke(selectedConvertedValues));
+ await SetTextCoreAsync(multiSelectionTextFunc?.Invoke(selectedConvertedValues));
// The comparison is made on the multiSelectionText variable
if (multiSelectionText != text)
@@ -1106,7 +1106,7 @@ public async Task SelectOption(object? obj)
return;
}
- await SetValueAsync(value);
+ await SetValueCoreAsync(value);
//await UpdateTextPropertyAsync(false);
_elementReference.SetText(ReadText).CatchAndLog();
//_selectedValues.Clear();
@@ -1117,23 +1117,6 @@ public async Task SelectOption(object? obj)
await InvokeAsync(StateHasChanged);
}
- //TODO: will override this method when core library will have the base one.
- ///
- ///
- ///
- ///
- public override async Task ForceUpdate()
- {
- await base.ForceUpdate();
- if (!MultiSelection)
- {
- SelectedValues = new HashSet(_comparer) { ReadValue };
- }
- else
- {
- await SelectedValuesChanged.InvokeAsync(new HashSet(SelectedValues, _comparer));
- }
- }
///
///
diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/Wheel/MudWheel.razor.cs b/src/CodeBeam.MudBlazor.Extensions/Components/Wheel/MudWheel.razor.cs
index 59eeb873..99001706 100644
--- a/src/CodeBeam.MudBlazor.Extensions/Components/Wheel/MudWheel.razor.cs
+++ b/src/CodeBeam.MudBlazor.Extensions/Components/Wheel/MudWheel.razor.cs
@@ -165,12 +165,12 @@ protected async Task HandleOnWheel(WheelEventArgs args)
if (args.DeltaY < 0 && index != 0)
{
T? val = ItemCollection[index - 1];
- await SetValueAsync(val);
+ await SetValueCoreAsync(val);
}
else if (0 < args.DeltaY && index != ItemCollection.Count - 1)
{
T? val = ItemCollection[index + 1];
- await SetValueAsync(val);
+ await SetValueCoreAsync(val);
}
await Task.Delay(300);
}
@@ -218,7 +218,7 @@ protected async Task HandleOnSwipe(SwipeEventArgs args)
}
T? val = ItemCollection[index - 1];
index--;
- await SetValueAsync(val);
+ await SetValueCoreAsync(val);
StateHasChanged();
}
else if (args.SwipeDirection == SwipeDirection.BottomToTop)
@@ -229,7 +229,7 @@ protected async Task HandleOnSwipe(SwipeEventArgs args)
}
T? val = ItemCollection[index + 1];
index++;
- await SetValueAsync(val);
+ await SetValueCoreAsync(val);
StateHasChanged();
}
}
@@ -258,7 +258,7 @@ public async Task ChangeWheel(int changeCount)
await _animate.Refresh();
T? val = ItemCollection is not null ? ItemCollection[index + changeCount] : default;
- await SetValueAsync(val);
+ await SetValueCoreAsync(val);
}
///
diff --git a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ComboboxTests.cs b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ComboboxTests.cs
index c7e7a471..f4cece0c 100644
--- a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ComboboxTests.cs
+++ b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/ComboboxTests.cs
@@ -55,29 +55,6 @@ public void ComboBox_InitialValuesTest(bool multiSelection)
combobox.Instance.GetState(x => x.Text).Should().Be("1");
}
- [Test]
- public async Task ComboBox_ValueBubblingTest()
- {
- var comp = Context.Render();
- var combobox = comp.FindComponent>();
-
- combobox.Instance.GetState(x => x.Value).Should().BeNull();
- combobox.Instance.GetState(x => x.Text).Should().BeNull();
-
- comp.Render(p => p.Add(x => x.SelectedValue, "1"));
- await comp.InvokeAsync(() => combobox.Instance.ForceUpdate());
- comp.WaitForAssertion(() => combobox.Instance.GetState(x => x.Value).Should().Be("1"));
- combobox.Instance.SelectedValues.Should().BeEquivalentTo(new HashSet() { "1" });
- combobox.Instance.GetState(x => x.Text).Should().Be("1");
-
- comp.Render(p => p.Add(x => x.SelectedValue, "2"));
- comp.WaitForAssertion(() => combobox.Instance.GetState(x => x.Value).Should().Be("2"));
- combobox.Instance.SelectedValues.Should().BeEquivalentTo(new HashSet() { "1" });
- await comp.InvokeAsync(() => combobox.Instance.ForceUpdate());
- combobox.Instance.SelectedValues.Should().BeEquivalentTo(new HashSet() { "2" });
- combobox.Instance.GetState(x => x.Text).Should().Be("2");
- }
-
[Test]
public void ComboBox_ValueBubblingTest_MultiSelection()
{
@@ -101,32 +78,6 @@ public void ComboBox_ValueBubblingTest_MultiSelection()
combobox.Instance.GetState(x => x.Text).Should().Be(null);
}
- [Test]
- public async Task ComboBox_ValueChangeEventCountTest()
- {
- var comp = Context.Render(x =>
- {
- x.Add(c => c.MultiSelection, false);
- });
- var combobox = comp.FindComponent>();
- var input = comp.Find("div.mud-input-control");
-
- comp.Instance.ValueChangeCount.Should().Be(0);
- comp.Instance.ValuesChangeCount.Should().Be(0);
-
- await comp.InvokeAsync(() => combobox.Render(p => p.Add(x => x.Value, "1")));
- await comp.InvokeAsync(() => combobox.Instance.ForceUpdate());
- comp.WaitForAssertion(() => comp.Instance.ValueChangeCount.Should().Be(1));
- comp.Instance.ValuesChangeCount.Should().Be(1);
- combobox.Instance.GetState(x => x.Value).Should().Be("1");
-
- // Changing value programmatically without ForceUpdate should change value, but should not fire change events
- // Its by design, so this part can be change if design changes
- await comp.InvokeAsync(() => combobox.Render(p => p.Add(x => x.Value, "2")));
- comp.WaitForAssertion(() => comp.Instance.ValueChangeCount.Should().Be(1));
- comp.Instance.ValuesChangeCount.Should().Be(1);
- combobox.Instance.GetState(x => x.Value).Should().Be("2");
- }
[Test]
public async Task ComboBox_ValueChangeEventCountTest_MultiSelection()
diff --git a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs
index 0b8372b4..23ef428e 100644
--- a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs
+++ b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Components/SelectExtendedTests.cs
@@ -66,29 +66,7 @@ public void Select_InitialValuesTest(bool multiSelection)
select.Instance.SelectedValues.Should().BeEquivalentTo(new HashSet() { "1" });
select.Instance.GetState(x => x.Text).Should().Be("1");
}
-
- [Test]
- public async Task Select_ValueBubblingTest()
- {
- var comp = Context.Render();
- var select = comp.FindComponent>();
-
- select.Instance.GetState(x => x.Value).Should().BeNull();
- select.Instance.GetState(x => x.Text).Should().BeNull();
-
- comp.Render(p => p.Add(x => x.SelectedValue, "1"));
- await comp.InvokeAsync(() => select.Instance.ForceUpdate());
- comp.WaitForAssertion(() => select.Instance.GetState(x => x.Value).Should().Be("1"));
- select.Instance.SelectedValues.Should().BeEquivalentTo(new HashSet() { "1" });
- select.Instance.GetState(x => x.Text).Should().Be("1");
-
- comp.Render(p => p.Add(x => x.SelectedValue, "2"));
- await comp.InvokeAsync(() => select.Instance.ForceUpdate());
- comp.WaitForAssertion(() => select.Instance.GetState(x => x.Value).Should().Be("2"));
- select.Instance.SelectedValues.Should().BeEquivalentTo(new HashSet() { "2" });
- select.Instance.GetState(x => x.Text).Should().Be("2");
- }
-
+
[Test]
public void Select_ValueBubblingTest_MultiSelection()
{
@@ -112,33 +90,6 @@ public void Select_ValueBubblingTest_MultiSelection()
select.Instance.GetState(x => x.Text).Should().Be("2, 1");
}
- [Test]
- public async Task Select_ValueChangeEventCountTest()
- {
- var comp = Context.Render(x =>
- {
- x.Add(c => c.MultiSelection, false);
- });
- var select = comp.FindComponent>();
- var input = comp.Find("div.mud-input-control");
-
- comp.Instance.ValueChangeCount.Should().Be(0);
- comp.Instance.ValuesChangeCount.Should().Be(0);
-
- await comp.InvokeAsync(() => select.Render(p => p.Add(x => x.Value, "1")));
- await comp.InvokeAsync(() => select.Instance.ForceUpdate());
- comp.WaitForAssertion(() => comp.Instance.ValueChangeCount.Should().Be(1));
- comp.Instance.ValuesChangeCount.Should().Be(1);
- select.Instance.GetState(x => x.Value).Should().Be("1");
-
- // Changing value programmatically without ForceUpdate should change value, but should not fire change events
- // Its by design, so this part can be change if design changes
- await comp.InvokeAsync(() => select.Render(p => p.Add(x => x.Value, "2")));
- comp.WaitForAssertion(() => comp.Instance.ValueChangeCount.Should().Be(1));
- comp.Instance.ValuesChangeCount.Should().Be(1);
- select.Instance.GetState(x => x.Value).Should().Be("2");
- }
-
[Test]
public async Task Select_ValueChangeEventCountTest_MultiSelection()
{
diff --git a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Mocks/MockEventListener.cs b/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Mocks/MockEventListener.cs
deleted file mode 100644
index 00ae67af..00000000
--- a/tests/CodeBeam.MudBlazor.Extensions.UnitTests/Mocks/MockEventListener.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) MudBlazor 2021
-// MudBlazor licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Components.Web;
-using MudBlazor;
-
-namespace MudExtensions.UnitTests.Mocks
-{
- public class MockEventListenerFactory : IEventListenerFactory
- {
- private readonly MockEventListener _listener;
-
- public MockEventListenerFactory(MockEventListener listener)
- {
- _listener = listener;
- }
-
- public MockEventListenerFactory()
- {
-
- }
-
- public IEventListener Create() => _listener ?? new MockEventListener();
- }
-
- public class MockEventListener : IEventListener
- {
- public Dictionary> Callbacks { get; private set; } = new();
-
- public Dictionary ElementIdMapper { get; private set; } = new();
-
- public ValueTask DisposeAsync()
- {
- Callbacks.Clear();
- ElementIdMapper.Clear();
- return ValueTask.CompletedTask;
- }
-
- public Task Subscribe(string eventName, string elementId, string projection, int throttleInterval, Func