Newer
Older
hypermedia-blazorcrud / Blazorcrud.Client / Pages / Users / List.razor
@Derek Comartin Derek Comartin on 12 Jul 4 KB Init
@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();
    }
}