@page "/contacts" @inject HttpClient Http @inject IDialogService DialogService @inject ISnackbar Snackbar @inject BoomerangService Boomerang Contact List Contact List Behold! Below is the list of all registered users in this application. (All data will be deleted for every 10 minutes) Create Refresh @if (contacts != null && contacts.Length > 0) { Id Username Phone Email Skill Sets Hobby Action @context.Id @context.UserName @context.Phone @context.Email @context.SkillSets @context.Hobby } else { No item to display. Click on the 'Create' button to add. } @code { private GetAllContactsResponse[]? contacts; private bool loading; protected override async Task OnInitializedAsync() { await LoadTableAsync(); await Boomerang.AddVariableAsync("PageName", "Contacts"); await Boomerang.SendBeaconAsync(); } private async Task LoadTableAsync() { loading = true; var response = await Http.GetAsync("api/v1/contacts"); var result = await response.ToResult>(); if (result.Succeeded) { contacts = result.Data.ToArray(); } else { contacts = null; foreach (var message in result.Messages) { Snackbar.Add(message, Severity.Error); } } loading = false; } private async Task OnButtonRefreshClicked() { await LoadTableAsync(); } private async Task OnButtonCreateClicked() { var dialogOptions = new DialogOptions { BackdropClick = false, CloseButton = true }; var dialog = await DialogService.ShowAsync("Create New Contact", dialogOptions); var dialogResult = await dialog.Result; if (dialogResult!.Canceled) { return; } loading = true; StateHasChanged(); var contactData = (AddEditContactCommand)dialogResult.Data!; var response = await Http.PostAsJsonAsync("api/v1/contacts", contactData); var result = await response.ToResult(); if (result.Succeeded) { Snackbar.Add(result.Messages[0], Severity.Success); await LoadTableAsync(); } else { foreach (var message in result.Messages) { Snackbar.Add(message, Severity.Error); } loading = false; } } async Task OnEditContactClicked(int id) { var dialogParams = new DialogParameters { ["Id"] = id }; var dialogOptions = new DialogOptions { BackdropClick = false, CloseButton = true }; var dialog = await DialogService.ShowAsync("Edit Contact", dialogParams, dialogOptions); var dialogResult = await dialog.Result; if (dialogResult!.Canceled) { return; } loading = true; StateHasChanged(); var contactData = (AddEditContactCommand)dialogResult.Data!; var response = await Http.PostAsJsonAsync("api/v1/contacts", contactData); var result = await response.ToResult(); if (result.Succeeded) { Snackbar.Add(result.Messages[0], Severity.Success); await LoadTableAsync(); } else { foreach (var message in result.Messages) { Snackbar.Add(message, Severity.Error); } loading = false; } } async Task OnDeleteContactClicked(int id) { var dialogResult = await DialogService.ShowMessageBox("Delete Contact", "Confirm to delete the item? This action cannot be undone.", yesText: "Delete!", cancelText: "No"); if (dialogResult == null) { return; } loading = true; StateHasChanged(); var deleteResponse = await Http.DeleteAsync($"api/v1/contacts/{id}"); if (deleteResponse.IsSuccessStatusCode) { var result = await deleteResponse.ToResult(); if (result!.Succeeded) { Snackbar.Add("Contact deleted successfully.", Severity.Success); await LoadTableAsync(); } else { Snackbar.Add(result.Messages[0], Severity.Error); } } else { Snackbar.Add("An error has occurred.", Severity.Error); loading = false; } } }