@page "/user/{Page}" @inject Services.IUserService UserService @inject Microsoft.AspNetCore.Components.NavigationManager UriHelper @inject Blazorcrud.Client.Shared.PageHistoryState PageHistoryState <h1>Users</h1> <br/> <div class="row mb-3"> <div class="col-md-7"> @if(LoggedIn) { <NavLink href="/user/createuser" class="btn btn-sm btn-success mb-2">Add User</NavLink> } </div> <div class="input-group col-md-5 text-md-right"> <input name="UserSearchInput" type="text" class="form-control" placeholder="User Name" @bind="this.SearchTerm" @onkeyup="SearchBoxKeyPress" /> <div class="input-group-btn"> <button name="UserSearchButton" class="btn btn-default" @onclick="SearchClick"> <i class="oi oi-magnifying-glass" title="search" aria-hidden="true"></i> </button> </div> <div class="input-group-btn"> <button name="UserSearchClear" class="btn btn-default" @onclick="ClearSearch"> <i class="oi oi-x" title="clear" aria-hidden="true"></i> </button> </div> </div> </div> @if (users == null) { <p><em>Loading...</em></p> } else { <table class="table table-striped"> <thead> <tr> <th style="width:35%">First Name</th> <th style="width:30%">Last Name</th> <th style="width:30%">Username</th> <th style="width:5%"></th> </tr> </thead> <tbody> @foreach (var user in users.Results) { <tr> <td>@user.FirstName</td> <td>@user.LastName</td> <td>@user.Username</td> <td style="white-space: nowrap"> <NavLink href="@($"/user/viewuser/{user.Id}")" class="oi oi-eye text-primary mr-3 nounderline"></NavLink> @if (user.Operations.Any(x => x.OperationId == "UpdateUser")) { <NavLink href="@($"/user/updateuser/{user.Id}")" class="oi oi-pencil text-warning mr-2 nounderline"></NavLink> } @if (user.Operations.Any(x => x.OperationId == "DeleteUser")) { if (user.IsDeleting) { <button @onclick="@(() => DeleteUser(user))" disabled="@user.IsDeleting" class=" btn btn-link oi oi-trash text-danger mr-1 nounderline"> <span class="spinner-border spinner-border-sm"></span> </button> } else { <button @onclick="@(() => DeleteUser(user))" disabled="@user.IsDeleting" class=" btn btn-link oi oi-trash text-danger mr-1 nounderline"> <span></span> </button> } } </td> </tr> } </tbody> </table> <Pager Result=@users PageChanged=PagerPageChanged /> } @code { [Parameter] public string Page { get; set;} = "1"; [Parameter] public string SearchTerm { get; set; } = string.Empty; protected PagedResult<UserViewModel> users; public bool LoggedIn { get {return UserService.User != null;} } protected override void OnInitialized() { PageHistoryState.AddPageToHistory(UriHelper.Uri); base.OnInitialized(); } protected override async Task OnParametersSetAsync() { users = await UserService.GetUsers(null, Page); PageHistoryState.AddPageToHistory(UriHelper.Uri); } protected async Task SearchBoxKeyPress(KeyboardEventArgs ev) { if (ev.Key == "Enter") { await SearchClick(); } } protected async Task SearchClick() { if (string.IsNullOrEmpty(SearchTerm)) { users = await UserService.GetUsers(null, Page); return; } users = await UserService.GetUsers(SearchTerm, Page); StateHasChanged(); } protected async Task ClearSearch() { SearchTerm = string.Empty; users = await UserService.GetUsers(SearchTerm, Page); PageHistoryState.AddPageToHistory(UriHelper.Uri); StateHasChanged(); } protected void PagerPageChanged(int page) { UriHelper.NavigateTo("/user/" + page); PageHistoryState.AddPageToHistory(UriHelper.Uri); } private async void DeleteUser(UserViewModel _user) { var user = _user; user.IsDeleting = true; await UserService.DeleteUser(user); users = await UserService.GetUsers(null, Page); StateHasChanged(); } }