Newer
Older
hypermedia-blazorcrud / Blazorcrud.Client / Pages / Upload / List.razor
@Derek Comartin Derek Comartin on 12 Jul 3 KB Init
@page "/upload/{Page}"
@inject Services.IUploadService UploadService
@inject Services.IUserService UserService
@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper
@inject Blazorcrud.Client.Shared.PageHistoryState PageHistoryState

<h1>Uploads</h1>
<br/>

<div class="row mb-3">
    <div class="col-md-7">
        @if(LoggedIn)
        {
            <NavLink href="/upload/createupload" class="btn btn-sm btn-success mb-2">Add Upload</NavLink>
        }
    </div>
    <div class="input-group col-md-5 text-md-right">
        <input name="UploadSearchInput" type="text" class="form-control" placeholder="Upload Name" @bind="this.SearchTerm" @onkeyup="SearchBoxKeyPress" />
        <div class="input-group-btn">
            <button name="UploadSearchButton" 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="UploadSearchClear" class="btn btn-default" @onclick="ClearSearch">
                <i class="oi oi-x" title="clear" aria-hidden="true"></i>
            </button>
        </div>
    </div>
</div>

@if (uploads == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table table-striped">
        <thead>
            <tr>
                <th style="width:35%">File Name</th>
                <th style="width:30%">Uploaded</th>
                <th style="width:30%">Processed</th>
                <th style="width:5%"></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var upload in uploads.Results)
            {
                <tr>
                    <td>@upload.FileName</td>
                    <td>@upload.UploadTimestamp</td>
                    <td>@upload.ProcessedTimestamp</td>
                    <td style="white-space: nowrap">
                        <NavLink href="@($"/upload/viewupload/{upload.Id}")" class="oi oi-eye text-primary mr-3 nounderline"></NavLink>
                    </td>
                </tr> 
            }
        </tbody>
    </table>
    <Pager Result=@uploads PageChanged=PagerPageChanged />
}

@code {
    [Parameter]
    public string Page { get; set;} = "1";
    [Parameter]
    public string SearchTerm { get; set; } = string.Empty;
    protected PagedResult<Upload> uploads;

    public bool LoggedIn
    {
        get {return UserService.User != null;}
    }

    protected override async Task OnParametersSetAsync()
    {
        uploads = await UploadService.GetUploads(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))
        {
            uploads = await UploadService.GetUploads(null, Page);
            return;
        }
        uploads = await UploadService.GetUploads(SearchTerm, Page);
        StateHasChanged();
    }

    protected async Task ClearSearch()
    {
        SearchTerm = string.Empty;
        uploads = await UploadService.GetUploads(SearchTerm, Page);
        PageHistoryState.AddPageToHistory(UriHelper.Uri);
        StateHasChanged();
    }
    protected void PagerPageChanged(int page)
    {
        UriHelper.NavigateTo("/upload/" + page);
        PageHistoryState.AddPageToHistory(UriHelper.Uri);
    }    
}