Skip to content

Commit d1c7a0b

Browse files
authored
Watch Initial Values (#228)
1 parent 1f78243 commit d1c7a0b

File tree

4 files changed

+50
-10
lines changed

4 files changed

+50
-10
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@namespace MudExtensions.UnitTests.TestComponents
2+
@using MudExtensions.Enums;
3+
4+
<MudWatch Mode="WatchMode.StopWatch" @bind-Value="_value" Wheel="false" ShowHour="true" ShowMinute="true" ShowSecond="true" ShowMillisecond="false" Typo="Typo.h6" />
5+
6+
@code
7+
{
8+
TimeSpan _value = new TimeSpan(1, 0, 0);
9+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Bunit;
2+
using MudExtensions.UnitTests.Components;
3+
using ComponentViewer.Docs.Pages.Components;
4+
using FluentAssertions;
5+
using MudBlazor;
6+
using MudExtensions;
7+
using MudExtensions.UnitTests.TestComponents;
8+
9+
namespace MudExtensions.UnitTests.Components
10+
{
11+
[TestFixture]
12+
public class WatchTests : BunitTest
13+
{
14+
[Test]
15+
public void WatchInitialValueTest()
16+
{
17+
var comp = Context.RenderComponent<WatchTest>();
18+
var watch = comp.FindComponent<MudWatch>();
19+
watch.Instance.Value.Should().Be(new TimeSpan(1, 0, 0));
20+
}
21+
22+
}
23+
}

CodeBeam.MudBlazor.Extensions/Components/Watch/MudWatch.razor.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,20 @@ protected override void OnInitialized()
3737
{
3838
Value = CountdownTime;
3939
}
40-
else if (Mode == WatchMode.StopWatch)
41-
{
42-
Value = TimeSpan.FromSeconds(0);
43-
}
4440

4541
if (Mode == WatchMode.Watch)
4642
{
4743
SetWatchMode(Mode).AndForgetExt();
4844
Start();
4945
}
46+
if (Mode == WatchMode.StopWatch)
47+
{
48+
_initialValue = Value;
49+
}
5050
}
5151

52+
TimeSpan _initialValue = new();
53+
5254
TimeSpan _value;
5355
[Parameter]
5456
public TimeSpan Value
@@ -61,6 +63,7 @@ public TimeSpan Value
6163
return;
6264
}
6365
_value = value;
66+
InvokeAsync(() => ValueChanged.InvokeAsync(_value)).AndForgetExt();
6467
SetInternalValues();
6568
}
6669
}
@@ -171,7 +174,7 @@ public WatchMode Mode
171174
/// </summary>
172175
[Parameter]
173176
[Category(CategoryTypes.FormComponent.Behavior)]
174-
public EventCallback ValueChanged { get; set; }
177+
public EventCallback<TimeSpan> ValueChanged { get; set; }
175178

176179
/// <summary>
177180
/// Fires when countdown reach to 0.
@@ -250,7 +253,8 @@ public async void Elapse(object sender, System.Timers.ElapsedEventArgs args)
250253
else
251254
{
252255
int oldSecondValue = ((int)Value.TotalSeconds);
253-
Value = TimeSpan.FromMilliseconds(_stopwatch.ElapsedMilliseconds);
256+
Value = _initialValue + TimeSpan.FromMilliseconds(_stopwatch.ElapsedMilliseconds);
257+
254258
}
255259
#pragma warning disable CS4014
256260
if (Wheel)
@@ -284,10 +288,14 @@ public async Task Stop()
284288
if (Mode == WatchMode.CountDown)
285289
{
286290
Value = CountdownTime - TimeSpan.FromMilliseconds(_stopwatch.ElapsedMilliseconds);
291+
if (Value < TimeSpan.Zero)
292+
{
293+
Value = TimeSpan.Zero;
294+
}
287295
}
288296
else if (Mode == WatchMode.StopWatch)
289297
{
290-
Value = TimeSpan.FromMilliseconds(_stopwatch.ElapsedMilliseconds);
298+
Value = _initialValue + TimeSpan.FromMilliseconds(_stopwatch.ElapsedMilliseconds);
291299
}
292300

293301
await InvokeAsync(StateHasChanged);
@@ -310,7 +318,7 @@ public async Task Reset()
310318
else
311319
{
312320
_stopwatch.Reset();
313-
Value = TimeSpan.Zero;
321+
Value = _initialValue;
314322
LapRecords.Clear();
315323
await LapRecordsChanged.InvokeAsync();
316324
}

ComponentViewer.Docs/Pages/Examples/WatchExample1.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
<MudWatch @ref="_watch" Interval="TimeSpan.FromMilliseconds(1)" Mode="_watchMode" LapRecords="_lapRecords" LapRecordsChanged="@(() => Snackbar.Add("Lap updated."))"
99
Wheel="_wheel" ShowHour="_showHour" ShowMinute="_showMinute" ShowSecond="_showSecond" ShowMillisecond="_showMillisecond"
1010
Delimiter="@_delimiter" Typo="_typo" TypoMillisecond="_typoMillisecond" Color="_color" CountdownCompleted="@(() => Snackbar.Add("Completed"))" />
11-
1211
<MudStack Row="true">
1312
<MudButton OnClick="@(() => _watch.Start())">Start</MudButton>
1413
<MudButton OnClick="@(() => _watch.Stop())">Stop</MudButton>
@@ -70,10 +69,11 @@
7069
bool _showHour = true;
7170
bool _showMinute = true;
7271
bool _showSecond = true;
73-
bool _showMillisecond = true;
72+
bool _showMillisecond = false;
7473
string _delimiter = ":";
7574
Typo _typo = Typo.h6;
7675
Typo _typoMillisecond = Typo.h6;
7776
Color _color;
7877
List<LapRecord> _lapRecords = new();
78+
TimeSpan _value = new TimeSpan(0, 0, 0);
7979
}

0 commit comments

Comments
 (0)