summary refs log tree commit diff
path: root/testFrontend/SafeNSound.Demo/Pages/User.razor
diff options
context:
space:
mode:
Diffstat (limited to 'testFrontend/SafeNSound.Demo/Pages/User.razor')
-rw-r--r--testFrontend/SafeNSound.Demo/Pages/User.razor83
1 files changed, 83 insertions, 0 deletions
diff --git a/testFrontend/SafeNSound.Demo/Pages/User.razor b/testFrontend/SafeNSound.Demo/Pages/User.razor
new file mode 100644

index 0000000..cdffbe3 --- /dev/null +++ b/testFrontend/SafeNSound.Demo/Pages/User.razor
@@ -0,0 +1,83 @@ +@page "/User" +@implements IDisposable +@if (_isInitialized) { + <h3>User (@WhoAmI.UserId#@WhoAmI.DeviceId[..5])</h3> + <LinkButton OnClick="@(() => { + NavigationManager.NavigateTo("/User/Devices"); + return Task.CompletedTask; + })">Manage devices + </LinkButton> + <hr/> + + <span> + Raise alarm: + <LinkButton OnClick="@(() => RaiseAlarm("fall"))">Fall</LinkButton> + <LinkButton OnClick="@(() => RaiseAlarm("toilet"))">Toilet</LinkButton> + <LinkButton Color="#FF0000" OnClick="@(() => RaiseAlarm(null))">Clear</LinkButton> + </span> + <br/> +} + +@if (Alarm != null) { + <ModalWindow Title="User alarm"> + <div class="modal-body"> + <span><strong>Alarm ID:</strong> @Alarm.Id</span><br/> + <span><strong>Reason:</strong> @Alarm.Reason</span><br/> + <span><strong>Raised at:</strong> @Alarm.CreatedAt.ToLocalTime()</span><br/> + </div> + <div class="modal-footer"> + <LinkButton Color="#FF0000" OnClick="@(() => RaiseAlarm(null))">Clear Alarm</LinkButton> + </div> + </ModalWindow> +} + +@code { + + bool _isInitialized = false; + bool _running = true; + + private WhoAmI WhoAmI { get; set; } = null!; + private AlarmDto? Alarm { get; set; } = null!; + + protected override async Task OnInitializedAsync() { + WhoAmI = await App.UserClient.WhoAmI(); + _isInitialized = true; + _ = PollAlarm(); + NavigationManager.LocationChanged += (sender, args) => { + if (args.Location != NavigationManager.Uri) { + _running = false; // Stop polling when navigating away + } + }; + } + + private async Task PollAlarm() { + while (_running) { + var newAlarm = await App.UserClient.GetAlarm(); + if (Alarm?.Id != newAlarm?.Id) { + Alarm = newAlarm; + StateHasChanged(); + } + + await Task.Delay(1000); + } + } + + private async Task RaiseAlarm(string? reason) { + if (string.IsNullOrWhiteSpace(reason)) + await App.UserClient.DeleteAlarm(); + else + await App.UserClient.SetAlarm(new() { Reason = reason }); + } + + private void ReleaseUnmanagedResources() { + _running = false; + } + + public void Dispose() { + ReleaseUnmanagedResources(); + GC.SuppressFinalize(this); + } + + ~User() => ReleaseUnmanagedResources(); + +} \ No newline at end of file