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
|