wip - make user preferences available

This commit is contained in:
Frede Hundewadt 2022-03-16 18:32:02 +01:00
parent 8df1af22d2
commit b3cd44431e
21 changed files with 134 additions and 95 deletions

View file

@ -15,11 +15,9 @@
// //
*@ *@
<label for="search-column" class="form-label">Søge kolonne</label> <select class="form-control" @bind-value="@SearchColumn" @bind-value:event="oninput" @onchange="OnSearchColumnChange">
<select id="search-column" class="form-control" @bind-value="@SearchColumn" @bind-value:event="oninput" @onchange="ApplyFilter"> @foreach (var (key, value) in Items)
<option value="name">Navn</option> {
<option value="zipCode">Postnr</option> <option value="@key">@value</option>
<option value="city">Bynavn</option> }
<option value="account">Konto</option> </select>
<option value="phone">Telefon</option>
</select>

View file

@ -15,18 +15,33 @@
// //
using System.Security.AccessControl;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class CompanySearchColumn public partial class CompanySearchColumn
{ {
[Parameter] [Inject] private ILocalStorageService LocalStorage { get; set; }
public EventCallback<string> OnColumnChanged { get; set; } [Parameter] public EventCallback<string> OnColumnChanged { get; set; }
private string SearchColumn { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
protected override async Task OnInitializedAsync()
{
var value = await LocalStorage.GetItemAsStringAsync("UserCompanySearch");
var y = string.IsNullOrWhiteSpace(value) ? "name" : value.Replace("\"", "");
private string SearchColumn { get; set; } = "name"; Items.Add("name", "Firmanavn");
private async Task ApplyFilter(ChangeEventArgs eventArgs) Items.Add("account", "Konto");
Items.Add("city", "Bynavn");
Items.Add("zipCode", "Postnr");
Items.Add("phone", "Telefon");
SearchColumn = (from x in Items where x.Key == y select x.Value).First();
}
private async Task OnSearchColumnChange(ChangeEventArgs eventArgs)
{ {
await OnColumnChanged.InvokeAsync(SearchColumn); await OnColumnChanged.InvokeAsync(SearchColumn);
} }
} }

View file

@ -15,9 +15,9 @@
// //
*@ *@
<label for="sort-column" class="form-label">Sortering</label> <select class="form-control" @bind-value="@SortColumn" @bind-value:event="oninput" @onchange="OnSortColumnChange">
<select id="sort-column" class="form-control" @bind-value="@SortColumn" @bind-value:event="oninput" @onchange="ApplySort"> @foreach (var (key, value) in Items)
<option value="name">Navn</option> {
<option value="account">Konto</option> <option value="@key">@value</option>
<option value="city">Bynavn</option> }
</select> </select>

View file

@ -15,6 +15,7 @@
// //
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
namespace Wonky.Client.Components namespace Wonky.Client.Components
@ -22,9 +23,15 @@ namespace Wonky.Client.Components
public partial class CompanySortColumn public partial class CompanySortColumn
{ {
[Parameter] public EventCallback<string> OnSortChanged { get; set; } [Parameter] public EventCallback<string> OnSortChanged { get; set; }
private string SortColumn { get; set; } = "name"; private string SortColumn { get; set; } = "name";
private async Task ApplySort(ChangeEventArgs eventArgs) private Dictionary<string, string> Items { get; set; } = new();
protected override void OnInitialized()
{
Items.Add("name", "Firmanavn");
Items.Add("account", "Konto");
Items.Add("city", "Bynavn");
}
private async Task OnSortColumnChange(ChangeEventArgs eventArgs)
{ {
await OnSortChanged.InvokeAsync(SortColumn); await OnSortChanged.InvokeAsync(SortColumn);
} }

View file

@ -15,15 +15,12 @@
// //
*@ *@
<section> <select class="form-control" @bind-value="GroupFilter" @bind-value:event="oninput" @onchange="OnGroupFilterChange">
<label for="group-column" class="form-label">Varegruppe</label> <option value="all" selected>Alle</option>
<select id="group-column" class="form-control" @bind-value="@GroupFilter" @bind-value:event="oninput" @onchange="ApplyGroupFilter"> <option value="1">Lim / Sealer / Rep</option>
<option value="all">Alle</option> <option value="2">Maling / Primer</option>
<option value="1">Lim / Sealer / Rep</option> <option value="3">Smøremidler</option>
<option value="2">Maling / Primer</option> <option value="4">Polish / Cleaner</option>
<option value="3">Smøremidler</option> <option value="5">Tape</option>
<option value="4">Polish / Cleaner</option> <option value="6">Diverse</option>
<option value="5">Tape</option> </select>
<option value="6">Diverse</option>
</select>
</section>

View file

@ -22,7 +22,7 @@ public partial class ItemGroupFilter
{ {
[Parameter] public EventCallback<string> OnGroupFilterChanged { get; set; } [Parameter] public EventCallback<string> OnGroupFilterChanged { get; set; }
private string GroupFilter { get; set; } = "all"; private string GroupFilter { get; set; } = "all";
private async Task ApplyGroupFilter(ChangeEventArgs eventArgs) private async Task OnGroupFilterChange(ChangeEventArgs eventArgs)
{ {
if (GroupFilter == "all") if (GroupFilter == "all")
GroupFilter = ""; GroupFilter = "";

View file

@ -15,12 +15,9 @@
// //
*@ *@
<label for="search-column" class="form-label">Søge kolonne</label> <select id="search-column" class="form-control" @bind-value="@SearchColumn" @bind-value:event="oninput" @onchange="OnSearchColumnChange">
<select id="search-column" class="form-control" @foreach (var (key, value) in Items)
@bind-value="@SearchColumn" {
@bind-value:event="oninput" <option value="@key">@value</option>
@onchange="ApplySearchColumn"> }
<option value="name">Navn</option> </select>
<option value="sku">Varenr</option>
<option value="shortName">Fork</option>
</select>

View file

@ -13,16 +13,24 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ItemSearchColumn public partial class ItemSearchColumn
{ {
[Parameter] public EventCallback<string> OnSearchColumnChanged { get; set; } [Parameter] public EventCallback<string> OnColumnChanged { get; set; }
private string SearchColumn { get; set; } = "name"; private string SearchColumn { get; set; } = "name";
private async Task ApplySearchColumn(ChangeEventArgs eventArgs) private Dictionary<string, string> Items { get; set; } = new();
protected override void OnInitialized()
{ {
await OnSearchColumnChanged.InvokeAsync(SearchColumn); Items.Add("name", "Varenavn");
Items.Add("sku", "Varenr");
Items.Add("shortName", "Forkortelse");
}
private async Task OnSearchColumnChange(ChangeEventArgs eventArgs)
{
await OnColumnChanged.InvokeAsync(SearchColumn);
} }
} }

View file

@ -15,8 +15,9 @@
// //
*@ *@
<label for="order-by" class="form-label">Sortering</label> <select class="form-control" @bind-value="@SortColumn" @bind-value:event="oninput" @onchange="OnSortColumnChange">
<select id="order-by" class="form-control" @bind-value="@SortColumn" @bind-value:event="oninput" @onchange="ApplySortColumn"> @foreach (var (key, value) in Items)
<option value="name">Varenavn</option> {
<option value="sku">Varenr</option> <option value="@key">@value</option>
</select> }
</select>

View file

@ -13,18 +13,26 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ItemSortColumn public partial class ItemSortColumn
{ {
[Parameter] [Parameter] public EventCallback<string> OnColumnChanged { get; set; }
public EventCallback<string> OnSortColumnChanged { get; set; }
private string SortColumn { get; set; } = "name"; private string SortColumn { get; set; } = "name";
private async Task ApplySortColumn(ChangeEventArgs eventArgs) private Dictionary<string, string> Items { get; set; } = new();
protected override void OnInitialized()
{ {
await OnSortColumnChanged.InvokeAsync(SortColumn); Items.Add("name", "Varenavn");
Items.Add("sku", "Varenr");
} }
private async Task OnSortColumnChange(ChangeEventArgs eventArgs)
{
await OnColumnChanged.InvokeAsync(SortColumn);
}
} }

View file

@ -16,11 +16,11 @@
*@ *@
<div class="form-group"> <div class="form-group">
<select class="form-control" @onchange="OnPageSizeChange"> <select class="form-control" @bind-value="@PageSize" @bind-value:event="oninput" @onchange="OnPageSizeChange">
<option selected="selected">5</option> <option value="5">5</option>
<option>10</option> <option value="10">10</option>
<option>15</option> <option value="15">15</option>
<option>30</option> <option value="30">30</option>
<option>50</option> <option value="50">50</option>
</select> </select>
</div> </div>

View file

@ -15,18 +15,19 @@
// //
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
namespace Wonky.Client.Components namespace Wonky.Client.Components
{ {
public partial class PageSizeDropDown public partial class PageSizeDropDown
{ {
[Parameter] [Parameter] public EventCallback<string> OnPageSizeChanged { get; set; }
public EventCallback<int> SelectedPageSize { get; set; } private string PageSize { get; set; } = "5";
private async Task OnPageSizeChange(ChangeEventArgs eventArgs) private async Task OnPageSizeChange(ChangeEventArgs eventArgs)
{ {
await SelectedPageSize.InvokeAsync(int.Parse(eventArgs.Value?.ToString()!)); await OnPageSizeChanged.InvokeAsync(PageSize);
} }
} }
} }

View file

@ -15,7 +15,6 @@
// //
*@ *@
<label for="search-input" class="form-label">Søgetekst</label>
<input id="search-input" type="text" class="form-control" placeholder="Søg ..." <input id="search-input" type="text" class="form-control" placeholder="Søg ..."
@bind-value="@SearchTerm" @bind-value:event="oninput" @bind-value="@SearchTerm" @bind-value:event="oninput"
@onkeyup="SearchChanged"/> @onkeyup="SearchChanged"/>

View file

@ -1,6 +1,6 @@
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
namespace Wonky.Entity.Models; namespace Wonky.Client.Models;
public class DraftItem public class DraftItem
{ {

View file

@ -22,15 +22,15 @@
@attribute [Authorize(Roles = "Adviser")] @attribute [Authorize(Roles = "Adviser")]
<div class="row mb-3"> <div class="row mb-3">
<div class="col">
<CompanySortColumn OnSortChanged="SortChanged"/>
</div>
<div class="col"> <div class="col">
<CompanySearchColumn OnColumnChanged="ColumnChanged" /> <CompanySearchColumn OnColumnChanged="ColumnChanged" />
</div> </div>
<div class="col"> <div class="col">
<SearchPhrase OnSearchPhraseChanged="SearchChanged"/> <SearchPhrase OnSearchPhraseChanged="SearchChanged"/>
</div> </div>
<div class="col">
<CompanySortColumn OnSortChanged="SortChanged"/>
</div>
<div class="col"> <div class="col">
<a class="btn btn-success mb-1" href="/company/create">Nyt firma</a> <a class="btn btn-success mb-1" href="/company/create">Nyt firma</a>
</div> </div>
@ -40,7 +40,7 @@
<Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination> <Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<PageSizeDropDown SelectedPageSize="SetPageSize" /> <PageSizeDropDown OnPageSizeChanged="SetPageSize" />
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
</div> </div>

View file

@ -16,6 +16,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazored.LocalStorage;
using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository; using Wonky.Client.HttpRepository;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
@ -28,14 +29,14 @@ namespace Wonky.Client.Pages
{ {
public List<CompanyDto>? Companies { get; set; } = new(); public List<CompanyDto>? Companies { get; set; } = new();
public MetaData? MetaData { get; set; } = new(); public MetaData? MetaData { get; set; } = new();
private PagingParams _paging = new(); private PagingParams _paging = new();
private string CompanySearch { get; set; } = "name";
private string CompanySort { get; set; } = "name";
private string PageSize { get; set; } = "5";
[Inject] [Inject]
public ICompanyHttpRepository CompanyRepo { get; set; } public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] [Inject] public ILocalStorageService LocalStorage { get; set; }
public HttpInterceptorService Interceptor { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
@ -59,14 +60,13 @@ namespace Wonky.Client.Pages
private async Task ColumnChanged(string? searchColumn) private async Task ColumnChanged(string? searchColumn)
{ {
_paging.SearchTerm = "";
_paging.SearchColumn = searchColumn; _paging.SearchColumn = searchColumn;
_paging.PageNumber = 1; _paging.PageNumber = 1;
await GetCompanies(); await GetCompanies();
} }
private async Task SetPageSize(int pageSize) private async Task SetPageSize(string pageSize)
{ {
_paging.PageSize = pageSize; _paging.PageSize = Convert.ToInt32(pageSize);
_paging.PageNumber = 1; _paging.PageNumber = 1;
await GetCompanies(); await GetCompanies();
} }

View file

@ -5,7 +5,7 @@
@* display product filter options *@ @* display product filter options *@
<div class="row mb-3"> <div class="row mb-3">
<div class="col"> <div class="col">
<ItemSearchColumn OnSearchColumnChanged="ProductColumnChanged"></ItemSearchColumn> <ItemSearchColumn OnColumnChanged="ProductColumnChanged"></ItemSearchColumn>
</div> </div>
<div class="col"> <div class="col">
<SearchPhrase OnSearchPhraseChanged="ProductSearchChanged"></SearchPhrase> <SearchPhrase OnSearchPhraseChanged="ProductSearchChanged"></SearchPhrase>

View file

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository; using Wonky.Client.HttpRepository;
using Wonky.Client.Models;
using Wonky.Client.Shared; using Wonky.Client.Shared;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Models; using Wonky.Entity.Models;

View file

@ -15,7 +15,7 @@
// //
*@ *@
@page "/price-catalog" @page "/Price-Catalog"
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@ -23,24 +23,24 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col"> <div class="col">
<ItemSearchColumn OnSearchColumnChanged="SearchColumnChanged" /> <ItemGroupFilter OnGroupFilterChanged="GroupFilterChanged" />
</div>
<div class="col">
<ItemSortColumn OnColumnChanged="SortColumnChanged"/>
</div>
<div class="col">
<ItemSearchColumn OnColumnChanged="SearchColumnChanged"/>
</div> </div>
<div class="col"> <div class="col">
<SearchPhrase OnSearchPhraseChanged="SearchPhraseChanged"/> <SearchPhrase OnSearchPhraseChanged="SearchPhraseChanged"/>
</div> </div>
<div class="col">
<ItemSortColumn OnSortColumnChanged="SortColumnChanged"/>
</div>
<div class="col">
<ItemGroupFilter OnGroupFilterChanged="GroupFilterChanged" />
</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
<Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination> <Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<PageSizeDropDown SelectedPageSize="SetPageSize" /> <PageSizeDropDown OnPageSizeChanged="SetPageSize" />
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
</div> </div>

View file

@ -16,9 +16,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Blazored.LocalStorage;
using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository; using Wonky.Client.HttpRepository;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Wonky.Client.Components;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Requests; using Wonky.Entity.Requests;
@ -31,6 +33,7 @@ public partial class SalesItemCatalog : IDisposable
private PagingParams _paging = new(); private PagingParams _paging = new();
[Inject] public ISalesItemHttpRepository SalesItemRepo { get; set; } [Inject] public ISalesItemHttpRepository SalesItemRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILocalStorageService LocalStorage { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
@ -52,9 +55,9 @@ public partial class SalesItemCatalog : IDisposable
MetaData = pagingResponse.MetaData; MetaData = pagingResponse.MetaData;
} }
private async Task SetPageSize(int pageSize) private async Task SetPageSize(string pageSize)
{ {
_paging.PageSize = pageSize; _paging.PageSize = Convert.ToInt32(pageSize);
_paging.PageNumber = 1; _paging.PageNumber = 1;
await GetSalesItems(); await GetSalesItems();
} }
@ -68,7 +71,6 @@ public partial class SalesItemCatalog : IDisposable
private async Task SearchColumnChanged(string columnName) private async Task SearchColumnChanged(string columnName)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SearchTerm = "";
_paging.SearchColumn = columnName; _paging.SearchColumn = columnName;
await GetSalesItems(); await GetSalesItems();
} }

View file

@ -50,10 +50,15 @@
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="price-catalog"> <NavLink class="nav-link" href="/Price-Catalog">
<span class="oi oi-list-rich" aria-hidden="true"></span> Priskatalog <span class="oi oi-list-rich" aria-hidden="true"></span> Priskatalog
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="/UserSettings">
<span class="oi oi-list-rich" aria-hidden="true"></span> Indstillinger
</NavLink>
</div>
</Authorized> </Authorized>
</AuthorizeView> </AuthorizeView>
</nav> </nav>