Skip to content

Commit 2ae84bc

Browse files
authored
Fix Splitter Infinite Loop (#373)
1 parent 69cd70b commit 2ae84bc

4 files changed

Lines changed: 35 additions & 21 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ public void SpeedDialPageRenderTest()
3434
comp.Markup.Should().NotBeNullOrEmpty();
3535
}
3636

37+
[Test]
38+
public void SplitterPageRenderTest()
39+
{
40+
var comp = Context.RenderComponent<SplitterPage>();
41+
comp.Markup.Should().NotBeNullOrEmpty();
42+
}
43+
3744
[Test]
3845
public void StepperPageRenderTest()
3946
{

CodeBeam.MudBlazor.Extensions/Components/Splitter/MudSplitter.razor

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
@inherits MudComponentBase
33

44
<div class="@Classname" style="@Style">
5-
<MudSlider @ref="_slider" Value="@Dimension" ValueChanged="@UpdateDimension" ondblclick="@OnDoubleClick()"
5+
@* Don't make OnDoubleClick to method, causes infinite loop *@
6+
<MudSlider @ref="_slider" @bind-Value="@Dimension" @bind-Value:after="@(() => UpdateDimension(_slider.Value))" ondblclick="@OnDoubleClick"
67
T="double" Min="0" Max="100" Step="@Sensitivity" Disabled="@(!EnableSlide)"
78
Class="@SliderClassname" Style="overflow: hidden; z-index: 6" />
89

CodeBeam.MudBlazor.Extensions/Components/Splitter/MudSplitter.razor.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public partial class MudSplitter : MudComponentBase
142142
public EventCallback<double> DimensionChanged { get; set; }
143143

144144
/// <summary>
145-
///
145+
/// Fires when double click.
146146
/// </summary>
147147
[Parameter]
148148
public EventCallback OnDoubleClicked { get; set; }
@@ -159,7 +159,7 @@ public partial class MudSplitter : MudComponentBase
159159
/// </summary>
160160
/// <param name="percentage"></param>
161161
/// <returns></returns>
162-
protected Task UpdateDimension(double percentage)
162+
protected async Task UpdateDimension(double percentage)
163163
{
164164
Dimension = percentage;
165165

@@ -169,17 +169,19 @@ protected Task UpdateDimension(double percentage)
169169
Dimension = 100;
170170

171171
if (DimensionChanged.HasDelegate)
172-
_ = DimensionChanged.InvokeAsync(percentage);
172+
{
173+
await DimensionChanged.InvokeAsync(percentage);
174+
}
173175

174-
return Task.CompletedTask;
176+
//return Task.CompletedTask;
175177
}
176178

177-
Task OnDoubleClick()
179+
private async Task OnDoubleClick()
178180
{
179181
if (OnDoubleClicked.HasDelegate)
180-
_ = OnDoubleClicked.InvokeAsync();
182+
await OnDoubleClicked.InvokeAsync();
181183

182-
return Task.CompletedTask;
184+
//return Task.CompletedTask;
183185
}
184186
}
185187
}

ComponentViewer.Docs/Pages/Examples/SplitterExample1.razor

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,23 @@
3939
</MudGrid>
4040

4141
@code {
42-
MudSplitter? _splitter;
43-
Color _color;
44-
string _height = "400px";
45-
double _sensitivity = 0.1d;
46-
double _percentage = 50;
47-
bool _sliderEnabled = true;
48-
bool _marginEnabled = true;
49-
bool _borderedEnabled = true;
50-
bool _doubleClickEnabled = true;
42+
MudSplitter? _splitter;
43+
Color _color;
44+
string _height = "400px";
45+
double _sensitivity = 0.1d;
46+
double _percentage = 50;
47+
bool _sliderEnabled = true;
48+
bool _marginEnabled = true;
49+
bool _borderedEnabled = true;
50+
bool _doubleClickEnabled = true;
5151

52-
void OnDoubleClicked()
53-
{
54-
if (_doubleClickEnabled)
55-
_percentage = 50;
52+
private Task OnDoubleClicked()
53+
{
54+
if (_doubleClickEnabled)
55+
{
56+
_percentage = 50;
57+
}
58+
59+
return Task.CompletedTask;
5660
}
5761
}

0 commit comments

Comments
 (0)