Skip to content

Commit 2ed1fc8

Browse files
authored
RangeSlider: Allow setting an independant min/max for the lower/upper slider (#456)
1 parent 17ede20 commit 2ed1fc8

File tree

1 file changed

+59
-1
lines changed

1 file changed

+59
-1
lines changed

CodeBeam.MudBlazor.Extensions/Components/RangeSlider/MudRangeSlider.razor.cs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public partial class MudRangeSlider<T> : MudComponentBase where T : struct, INum
1717
private readonly ParameterState<T> _value;
1818
private readonly ParameterState<T> _upperValue;
1919
private readonly ParameterState<T?> _slideableMin;
20+
private readonly ParameterState<T?> _slideableUpperMin;
2021
private readonly ParameterState<T?> _slideableMax;
22+
private readonly ParameterState<T?> _slideableLowerMax;
2123

2224
/// <summary>
2325
///
@@ -36,9 +38,15 @@ public MudRangeSlider()
3638
_slideableMin = registerScope.RegisterParameter<T?>(nameof(SlideableMin))
3739
.WithParameter(() => SlideableMin)
3840
.WithChangeHandler(OnSlideableMinChanged);
41+
_slideableUpperMin = registerScope.RegisterParameter<T?>(nameof(SlideableUpperMin))
42+
.WithParameter(() => SlideableUpperMin)
43+
.WithChangeHandler(OnSlideableUpperMinChanged);
3944
_slideableMax = registerScope.RegisterParameter<T?>(nameof(SlideableMax))
4045
.WithParameter(() => SlideableMax)
4146
.WithChangeHandler(OnSlideableMaxChanged);
47+
_slideableLowerMax = registerScope.RegisterParameter<T?>(nameof(SlideableLowerMax))
48+
.WithParameter(() => SlideableLowerMax)
49+
.WithChangeHandler(OnSlideableLowerMaxChanged);
4250
}
4351

4452
private async Task OnValueParameterChanged()
@@ -52,6 +60,11 @@ private async Task OnValueParameterChanged()
5260
{
5361
await _value.SetValueAsync((T)_slideableMin.Value);
5462
}
63+
64+
if (_slideableLowerMax.Value != null && _slideableLowerMax.Value < _value.Value)
65+
{
66+
await _value.SetValueAsync((T)_slideableLowerMax.Value);
67+
}
5568
}
5669

5770
private async Task OnUpperValueParameterChanged()
@@ -65,6 +78,11 @@ private async Task OnUpperValueParameterChanged()
6578
{
6679
await _upperValue.SetValueAsync((T)_slideableMax.Value);
6780
}
81+
82+
if (_slideableUpperMin.Value != null && _upperValue.Value < _slideableUpperMin.Value)
83+
{
84+
await _upperValue.SetValueAsync((T)_slideableUpperMin.Value);
85+
}
6886
}
6987

7088
private async Task OnSlideableMinChanged()
@@ -73,6 +91,19 @@ private async Task OnSlideableMinChanged()
7391
{
7492
await _value.SetValueAsync((T)_slideableMin.Value);
7593
}
94+
95+
if (_slideableMin.Value != null && _upperValue.Value < _slideableMin.Value)
96+
{
97+
await _upperValue.SetValueAsync((T)_slideableMin.Value);
98+
}
99+
}
100+
101+
private async Task OnSlideableUpperMinChanged()
102+
{
103+
if (_slideableUpperMin.Value != null && _upperValue.Value < _slideableUpperMin.Value)
104+
{
105+
await _upperValue.SetValueAsync((T)_slideableUpperMin.Value);
106+
}
76107
}
77108

78109
private async Task OnSlideableMaxChanged()
@@ -81,6 +112,19 @@ private async Task OnSlideableMaxChanged()
81112
{
82113
await _upperValue.SetValueAsync((T)_slideableMax.Value);
83114
}
115+
116+
if (_slideableMax.Value != null && _slideableMax.Value < _value.Value)
117+
{
118+
await _value.SetValueAsync((T)_slideableMax.Value);
119+
}
120+
}
121+
122+
private async Task OnSlideableLowerMaxChanged()
123+
{
124+
if (_slideableLowerMax.Value != null && _slideableLowerMax.Value < _value.Value)
125+
{
126+
await _value.SetValueAsync((T)_slideableLowerMax.Value);
127+
}
84128
}
85129

86130
/// <summary>
@@ -129,6 +173,13 @@ private async Task OnSlideableMaxChanged()
129173
[Category(CategoryTypes.Slider.Validation)]
130174
public T? SlideableMin { get; set; }
131175

176+
/// <summary>
177+
/// The minimum value the upper slider thumb can have.
178+
/// </summary>
179+
[Parameter]
180+
[Category(CategoryTypes.Slider.Validation)]
181+
public T? SlideableUpperMin { get; set; }
182+
132183
/// <summary>
133184
/// The maximum allowed value of the slider. Should not be equal to min.
134185
/// </summary>
@@ -137,12 +188,19 @@ private async Task OnSlideableMaxChanged()
137188
public T Max { get; set; } = T.CreateTruncating(100);
138189

139190
/// <summary>
140-
/// The minimum value can slider thumb has.
191+
/// The maximum value can slider thumb has.
141192
/// </summary>
142193
[Parameter]
143194
[Category(CategoryTypes.Slider.Validation)]
144195
public T? SlideableMax { get; set; }
145196

197+
/// <summary>
198+
/// The maximum value the lower slider thumb can have.
199+
/// </summary>
200+
[Parameter]
201+
[Category(CategoryTypes.Slider.Validation)]
202+
public T? SlideableLowerMax { get; set; }
203+
146204
/// <summary>
147205
/// The minimum distance between the upper and lower values
148206
/// </summary>

0 commit comments

Comments
 (0)