UserPreference for list views

This commit is contained in:
Frede Hundewadt 2022-03-17 19:08:36 +01:00
parent afe2dd024e
commit e690ab7383
26 changed files with 216 additions and 170 deletions

View file

@ -14,8 +14,7 @@
// 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]
// //
*@ *@
<select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
<select class="form-control" @bind-value="@SearchColumn" @bind-value:event="oninput" @onchange="OnSearchColumnChange">
@foreach (var (key, value) in Items) @foreach (var (key, value) in Items)
{ {
<option value="@key">@value</option> <option value="@key">@value</option>

View file

@ -18,30 +18,42 @@
using System.Security.AccessControl; using System.Security.AccessControl;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Wonky.Client.Services;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class CompanySearchColumn public partial class CompanySearchDropdown : IDisposable
{ {
[Inject] private ILocalStorageService LocalStorage { get; set; } [Inject] private ILocalStorageService LocalStorage { get; set; }
[Parameter] public EventCallback<string> OnColumnChanged { get; set; } [Inject] private UserPreferenceService UserPreferenceService { get; set; }
private string SearchColumn { get; set; } [Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new();
private string? Selection { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
var value = await LocalStorage.GetItemAsStringAsync("UserCompanySearch"); UserPreferenceService.OnChange += ProfileServiceOnOnChange;
var y = string.IsNullOrWhiteSpace(value) ? "name" : value.Replace("\"", ""); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Firmanavn"); Items.Add("name", "Firmanavn");
Items.Add("account", "Konto"); Items.Add("account", "Konto");
Items.Add("city", "Bynavn"); Items.Add("city", "Bynavn");
Items.Add("zipCode", "Postnr"); Items.Add("zipCode", "Postnr");
Items.Add("phone", "Telefon"); Items.Add("phone", "Telefon");
Selection = (from x in Items where x.Key == _preferences.CompanySearch select x.Key).First();
SearchColumn = (from x in Items where x.Key == y select x.Value).First();
} }
private async Task OnSearchColumnChange(ChangeEventArgs eventArgs) private async Task OnSelectionChanged(ChangeEventArgs e)
{ {
await OnColumnChanged.InvokeAsync(SearchColumn); var val = e.Value.ToString();
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySearch(val);
} }
} private void ProfileServiceOnOnChange(Preferences newPreferences)
{
_preferences = newPreferences;
StateHasChanged();
}
public void Dispose()
{
UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} }

View file

@ -1,40 +0,0 @@
// Copyright (C) 2022 FCS Frede's Computer Services.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the Affero GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// Affero GNU General Public License for more details.
//
// You should have received a copy of the Affero GNU General Public License
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
//
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components;
namespace Wonky.Client.Components
{
public partial class CompanySortColumn
{
[Parameter] public EventCallback<string> OnSortChanged { get; set; }
private string SortColumn { get; set; } = "name";
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);
}
}
}

View file

@ -15,7 +15,7 @@
// //
*@ *@
<select class="form-control" @bind-value="@SortColumn" @bind-value:event="oninput" @onchange="OnSortColumnChange"> <select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
@foreach (var (key, value) in Items) @foreach (var (key, value) in Items)
{ {
<option value="@key">@value</option> <option value="@key">@value</option>

View file

@ -0,0 +1,59 @@
// Copyright (C) 2022 FCS Frede's Computer Services.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the Affero GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// Affero GNU General Public License for more details.
//
// You should have received a copy of the Affero GNU General Public License
// 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 Wonky.Client.Services;
namespace Wonky.Client.Components
{
public partial class CompanySortDropdown : IDisposable
{
[Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new();
private string? Selection { get; set; }
protected override async Task OnInitializedAsync()
{
UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Firmanavn");
Items.Add("account", "Konto");
Items.Add("city", "Bynavn");
Selection = (from x in Items where x.Key == _preferences.CompanySort select x.Key).First();
}
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySort(val);
}
private void ProfileServiceOnOnChange(Preferences newPreferences)
{
_preferences = newPreferences;
StateHasChanged();
}
public void Dispose()
{
UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
}
}
}

View file

@ -20,26 +20,32 @@ using Wonky.Client.Services;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ItemGroupFilter public partial class ItemGroupDropdown : IDisposable
{ {
[Inject] private ILocalStorageService LocalStorage { get; set; } [Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private ProfileService ProfileService { get; set; } [Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string Selection { get; set; } = "all"; private string Selection { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
ProfileService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await ProfileService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Varenavn"); Items.Add("0", "Alle");
Items.Add("sku", "Varenr"); Items.Add("1", "Lim Sealer Reparation");
Selection = (from x in Items where x.Key == _preferences.ItemGroup select x.Value).First(); Items.Add("2", "Grunder Maling");
Items.Add("3", "Smøremidler");
Items.Add("4", "Rens Polish");
Items.Add("5", "Tape Selvklæbende");
Items.Add("6", "Tilbehør Diverse");
} }
private async Task OnColumnChanged(ChangeEventArgs args) private async Task OnSelectionChanged(ChangeEventArgs e)
{ {
await ProfileService.SetItemSort(args.Value.ToString()); var val = e.Value.ToString();
await OnChanged.InvokeAsync(val);
} }
private void ProfileServiceOnOnChange(Preferences newPreferences) private void ProfileServiceOnOnChange(Preferences newPreferences)
{ {
@ -48,6 +54,6 @@ public partial class ItemGroupFilter
} }
public void Dispose() public void Dispose()
{ {
ProfileService.OnChange -= ProfileServiceOnOnChange; UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} }
} }

View file

@ -19,25 +19,28 @@ using Wonky.Client.Services;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ItemSearchColumn public partial class ItemSearchDropdown : IDisposable
{ {
[Inject] private ILocalStorageService LocalStorage { get; set; } [Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private ProfileService ProfileService { get; set; } [Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string Selection { get; set; } = "name"; private string Selection { get; set; } = "name";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
ProfileService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await ProfileService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Varenavn"); Items.Add("name", "Varenavn");
Items.Add("sku", "Varenr"); Items.Add("sku", "Varenr");
Items.Add("shortName", "Forkortelse"); Items.Add("shortName", "Forkortelse");
Selection = (from x in Items where x.Key == _preferences.ItemSearch select x.Value).First(); Selection = (from x in Items where x.Key == _preferences.ItemSearch select x.Key).First();
} }
private async Task OnSelectChanged(ChangeEventArgs e) private async Task OnSelectChanged(ChangeEventArgs e)
{ {
await ProfileService.SetItemSort(e.Value.ToString()); var val = e.Value.ToString();
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetItemSearch(val);
} }
private void ProfileServiceOnOnChange(Preferences newPreferences) private void ProfileServiceOnOnChange(Preferences newPreferences)
{ {
@ -46,6 +49,6 @@ public partial class ItemSearchColumn
} }
public void Dispose() public void Dispose()
{ {
ProfileService.OnChange -= ProfileServiceOnOnChange; UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} }
} }

View file

@ -19,24 +19,27 @@ using Wonky.Client.Services;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ItemSortColumn : IDisposable public partial class ItemSortDropdown : IDisposable
{ {
[Inject] private ILocalStorageService LocalStorage { get; set; } [Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private ProfileService ProfileService { get; set; } [Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string Selection { get; set; } = "name"; private string Selection { get; set; } = "name";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
ProfileService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await ProfileService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Varenavn"); Items.Add("name", "Varenavn");
Items.Add("sku", "Varenr"); Items.Add("sku", "Varenr");
Selection = (from x in Items where x.Key == _preferences.ItemSort select x.Value).First(); Selection = (from x in Items where x.Key == _preferences.ItemSort select x.Key).First();
} }
private async Task OnSelectChanged(ChangeEventArgs e) private async Task OnSelectChanged(ChangeEventArgs e)
{ {
await ProfileService.SetItemSort(e.Value.ToString()); var val = e.Value.ToString();
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetItemSort(val);
} }
private void ProfileServiceOnOnChange(Preferences newPreferences) private void ProfileServiceOnOnChange(Preferences newPreferences)
{ {
@ -45,6 +48,6 @@ public partial class ItemSortColumn : IDisposable
} }
public void Dispose() public void Dispose()
{ {
ProfileService.OnChange -= ProfileServiceOnOnChange; UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} }
} }

View file

@ -21,28 +21,31 @@ using Wonky.Client.Services;
namespace Wonky.Client.Components namespace Wonky.Client.Components
{ {
public partial class PageSizeDropDown : IDisposable public partial class PageSizeDropdown : IDisposable
{ {
[Inject] private ILocalStorageService LocalStorage { get; set; } [Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private ProfileService ProfileService { get; set; } [Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string? Selection { get; set; } private string? Selection { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
ProfileService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await ProfileService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("5", "5"); Items.Add("5", "5");
Items.Add("10", "10"); Items.Add("10", "10");
Items.Add("15", "15"); Items.Add("15", "15");
Items.Add("30", "30"); Items.Add("30", "30");
Items.Add("50", "50"); Items.Add("50", "50");
Selection = (from x in Items where x.Key == _preferences.PageSize select x.Value).First(); Selection = (from x in Items where x.Key == _preferences.PageSize select x.Key).First();
} }
private async Task OnSelectChanged(ChangeEventArgs e) private async Task OnSelectChanged(ChangeEventArgs e)
{ {
await ProfileService.SetPageSize(e.Value?.ToString()); var val = e.Value.ToString();
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetPageSize(val);
} }
private void ProfileServiceOnOnChange(Preferences newPreferences) private void ProfileServiceOnOnChange(Preferences newPreferences)
{ {
@ -51,7 +54,7 @@ namespace Wonky.Client.Components
} }
public void Dispose() public void Dispose()
{ {
ProfileService.OnChange -= ProfileServiceOnOnChange; UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} }
} }
} }

View file

@ -23,7 +23,7 @@ namespace Wonky.Client.Components
{ {
private Timer _timer = new(); private Timer _timer = new();
private string SearchTerm { get; set; } = ""; private string SearchTerm { get; set; } = "";
[Parameter] public EventCallback<string> OnSearchPhraseChanged { get; set; } [Parameter] public EventCallback<string> OnChanged { get; set; }
private void SearchChanged() private void SearchChanged()
{ {
@ -35,7 +35,7 @@ namespace Wonky.Client.Components
private void OnTimerElapsed(object? sender, ElapsedEventArgs e) private void OnTimerElapsed(object? sender, ElapsedEventArgs e)
{ {
OnSearchPhraseChanged.InvokeAsync(SearchTerm); OnChanged.InvokeAsync(SearchTerm);
_timer.Enabled = false; _timer.Enabled = false;
_timer.Dispose(); _timer.Dispose();
} }

View file

@ -81,21 +81,21 @@ public class CompanyHttpRepository : ICompanyHttpRepository
public async Task<CompanyDto> GetCompanyByAccount(string accountNumber) public async Task<CompanyDto> GetCompanyByAccount(string accountNumber)
{ {
var company = await _client.GetFromJsonAsync<CompanyDto>( var company = await _client.GetFromJsonAsync<CompanyDto>(
$"{_apiConfig.CrmCompanies}/get/account/{accountNumber}"); $"{_apiConfig.CrmCompanies}/account/{accountNumber}");
return company ?? new CompanyDto(); return company ?? new CompanyDto();
} }
public async Task<CompanyDto> GetCompanyById(string companyId) public async Task<CompanyDto> GetCompanyById(string companyId)
{ {
var company = await _client.GetFromJsonAsync<CompanyDto>( var company = await _client.GetFromJsonAsync<CompanyDto>(
$"{_apiConfig.CrmCompanies}/get/id/{companyId}"); $"{_apiConfig.CrmCompanies}{companyId}");
return company ?? new CompanyDto(); return company ?? new CompanyDto();
} }
public async Task<string> CreateCompany(CompanyDto companyDto) public async Task<string> CreateCompany(CompanyDto companyDto)
{ {
var response = await _client.PostAsJsonAsync( var response = await _client.PostAsJsonAsync(
$"{_apiConfig.CrmCompanies}/post", companyDto); $"{_apiConfig.CrmCompanies}", companyDto);
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<CompanyDto>(content); var result = JsonSerializer.Deserialize<CompanyDto>(content);
return result.CompanyId; return result.CompanyId;
@ -104,12 +104,12 @@ public class CompanyHttpRepository : ICompanyHttpRepository
public async Task UpdateCompany(CompanyDto companyDto) public async Task UpdateCompany(CompanyDto companyDto)
{ {
await _client.PutAsJsonAsync( await _client.PutAsJsonAsync(
$"{_apiConfig.CrmCompanies}/put/id/{companyDto.CompanyId}", companyDto); $"{_apiConfig.CrmCompanies}/{companyDto.CompanyId}", companyDto);
} }
public async Task DeleteCompany(string companyId) public async Task DeleteCompany(string companyId)
{ {
await _client.DeleteAsync( await _client.DeleteAsync(
$"{_apiConfig.CrmCompanies}/delete/id/{companyId}"); $"{_apiConfig.CrmCompanies}/{companyId}");
} }
} }

View file

@ -60,7 +60,7 @@ public class SalesItemHttpRepository : ISalesItemHttpRepository
["searchTerm"] = pagingParameters.SearchTerm, ["searchTerm"] = pagingParameters.SearchTerm,
["searchColumn"] = pagingParameters.SearchColumn, ["searchColumn"] = pagingParameters.SearchColumn,
["orderBy"] = pagingParameters.OrderBy, ["orderBy"] = pagingParameters.OrderBy,
["selectGroup"] = pagingParameters.SelectGroup ["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup
}; };
var response = await _client var response = await _client
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.PriceCatalog}/page", queryString)); .GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.PriceCatalog}/page", queryString));

View file

@ -23,13 +23,22 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col"> <div class="col">
<CompanySortColumn OnSortChanged="SortChanged"/> <div>
<label class="form-label">Rækkefølge</label>
<CompanySortDropdown OnChanged="SetSortCol"/>
</div>
</div> </div>
<div class="col"> <div class="col">
<CompanySearchColumn OnColumnChanged="ColumnChanged" /> <div>
<label class="form-label">Søgefelt</label>
<CompanySearchDropdown OnChanged="SetSearchCol"/>
</div>
</div> </div>
<div class="col"> <div class="col">
<SearchPhrase OnSearchPhraseChanged="SearchChanged"/> <div>
<label class="form-label">Søgetekst</label>
<SearchPhrase OnChanged="SetSearchPhrase"/>
</div>
</div> </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>
@ -40,9 +49,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 OnPageSizeChanged="SetPageSize" /> <PageSizeDropdown OnChanged="SetPageSize"></PageSizeDropdown>
</div>
<div class="col-md-2">
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View file

@ -20,6 +20,7 @@ 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.Services;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Requests; using Wonky.Entity.Requests;
@ -30,16 +31,19 @@ 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 Preferences _preferences { get; set; } = new();
private string CompanySort { get; set; } = "name"; [Inject] private UserPreferenceService UserPrefService { get; set; }
private string PageSize { get; set; } = "5"; [Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject]
public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILocalStorageService LocalStorage { get; set; } [Inject] public ILocalStorageService LocalStorage { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
_preferences = await UserPrefService.GetPreferences();
_paging.OrderBy = _preferences.CompanySort;
_paging.SearchColumn = _preferences.CompanySearch;
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
await GetCompanies(); await GetCompanies();
@ -58,7 +62,7 @@ namespace Wonky.Client.Pages
MetaData = pagingResponse.MetaData; MetaData = pagingResponse.MetaData;
} }
private async Task ColumnChanged(string? searchColumn) private async Task SetSearchCol(string searchColumn)
{ {
_paging.SearchColumn = searchColumn; _paging.SearchColumn = searchColumn;
_paging.PageNumber = 1; _paging.PageNumber = 1;
@ -71,14 +75,14 @@ namespace Wonky.Client.Pages
await GetCompanies(); await GetCompanies();
} }
private async Task SearchChanged(string? searchTerm) private async Task SetSearchPhrase(string searchTerm)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SearchTerm = searchTerm; _paging.SearchTerm = searchTerm;
await GetCompanies(); await GetCompanies();
} }
private async Task SortChanged(string? orderBy) private async Task SetSortCol(string orderBy)
{ {
_paging.OrderBy = orderBy; _paging.OrderBy = orderBy;
await GetCompanies(); await GetCompanies();

View file

@ -5,13 +5,13 @@
@* 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 OnColumnChanged="ProductColumnChanged"></ItemSearchColumn> <ItemGroupDropdown OnChanged="SetItemGroup" />
</div> </div>
<div class="col"> <div class="col">
<SearchPhrase OnSearchPhraseChanged="ProductSearchChanged"></SearchPhrase> <ItemSearchDropdown OnChanged="SetSearchCol" />
</div> </div>
<div class="col"> <div class="col">
<ItemGroupFilter OnGroupFilterChanged="ProductGroupChanged"></ItemGroupFilter> <SearchPhrase OnChanged="SetSortCol" />
</div> </div>
<div class="col"> <div class="col">

View file

@ -2,6 +2,7 @@ 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.Models;
using Wonky.Client.Services;
using Wonky.Client.Shared; using Wonky.Client.Shared;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Models; using Wonky.Entity.Models;
@ -18,16 +19,18 @@ public partial class DraftDocument : IDisposable
private string Price = "0"; private string Price = "0";
private SalesItemDto _selectedItem { get; set; } = new(); private SalesItemDto _selectedItem { get; set; } = new();
private List<SalesItemDto> SalesItems { get; set; } = new(); private List<SalesItemDto> SalesItems { get; set; } = new();
private List<CompanyDto> CompanyList { get; set; } = new();
// private SalesItemDto SelectedItem { get; set; } = new();
private MetaData _meta { get; set; } = new(); private MetaData _meta { get; set; } = new();
private PagingParams _paging { get; set; } = new(); private PagingParams _paging { get; set; } = new();
private Preferences _prefs { get; set; } = new();
[Inject] private ISalesItemHttpRepository ItemRepo { get; set; } [Inject] private ISalesItemHttpRepository ItemRepo { get; set; }
[Inject] private ICompanyHttpRepository CompanyRepo { get; set; } [Inject] private ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] private HttpInterceptorService Interceptor { get; set; } [Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private UserPreferenceService UserPrefs { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
_prefs = await UserPrefs.GetPreferences();
_paging.SearchColumn = _prefs.ItemSearch;
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
await GetSalesItems(); await GetSalesItems();
@ -76,20 +79,20 @@ public partial class DraftDocument : IDisposable
// save the remaining draft // save the remaining draft
await DraftStateProvider.SaveChangesAsync(); await DraftStateProvider.SaveChangesAsync();
} }
private async Task ProductGroupChanged(string groupFilter) private async Task SetItemGroup(string groupFilter)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SelectGroup = groupFilter; _paging.SelectGroup = groupFilter;
await GetSalesItems(); await GetSalesItems();
} }
private async Task ProductColumnChanged(string columnName) private async Task SetSearchCol(string columnName)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SearchTerm = ""; _paging.SearchTerm = "";
_paging.SearchColumn = columnName; _paging.SearchColumn = columnName;
await GetSalesItems(); await GetSalesItems();
} }
private async Task ProductSearchChanged(string searchTerm) private async Task SetSortCol(string searchTerm)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SearchTerm = searchTerm; _paging.SearchTerm = searchTerm;

View file

@ -23,16 +23,29 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col"> <div class="col">
<ItemGroupFilter OnGroupFilterChanged="GroupFilterChanged" /> <div>
<label class="form-label">Varegruppe</label>
<ItemGroupDropdown OnChanged="SetItemGroup"/>
</div>
</div> </div>
<div class="col"> <div class="col">
<ItemSortColumn OnColumnChanged="SortColumnChanged"/> <div>
<label class="form-label">Rækkefølge</label>
<ItemSortDropdown OnChanged="SetSortCol"/>
</div>
</div> </div>
<div class="col"> <div class="col">
<ItemSearchColumn OnColumnChanged="SearchColumnChanged"/> <div>
<label class="form-label">Søgefelt</label>
<ItemSearchDropdown OnChanged="SetSearchCol"/>
</div>
</div> </div>
<div class="col"> <div class="col">
<SearchPhrase OnSearchPhraseChanged="SearchPhraseChanged"/> <div>
<label class="form-label">Søgetekst</label>
<SearchPhrase OnChanged="SetSearchPhrase"/>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -40,9 +53,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 OnPageSizeChanged="SetPageSize" /> <PageSizeDropdown OnChanged="SetPageSize"></PageSizeDropdown>
</div>
<div class="col-md-2">
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View file

@ -21,6 +21,7 @@ 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.Client.Components;
using Wonky.Client.Services;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Requests; using Wonky.Entity.Requests;
@ -28,15 +29,22 @@ namespace Wonky.Client.Pages;
public partial class SalesItemCatalog : IDisposable public partial class SalesItemCatalog : IDisposable
{ {
[Inject] private UserPreferenceService UserPreferenceService { get; set; }
private List<SalesItemDto> SalesItemList { get; set; } = new(); private List<SalesItemDto> SalesItemList { get; set; } = new();
private MetaData? MetaData { get; set; } = new(); private MetaData? MetaData { get; set; } = new();
private PagingParams _paging = new(); private PagingParams _paging = new();
private Preferences _preferences = 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; } [Inject] public ILocalStorageService LocalStorage { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
_preferences = await UserPreferenceService.GetPreferences();
_paging.OrderBy = _preferences.ItemSort;
_paging.SearchColumn = _preferences.ItemSearch;
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
await GetSalesItems(); await GetSalesItems();
@ -62,26 +70,26 @@ public partial class SalesItemCatalog : IDisposable
await GetSalesItems(); await GetSalesItems();
} }
private async Task GroupFilterChanged(string groupFilter) private async Task SetItemGroup(string groupFilter)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SelectGroup = groupFilter; _paging.SelectGroup = groupFilter;
await GetSalesItems(); await GetSalesItems();
} }
private async Task SearchColumnChanged(string columnName) private async Task SetSearchCol(string columnName)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SearchColumn = columnName; _paging.SearchColumn = columnName;
await GetSalesItems(); await GetSalesItems();
} }
private async Task SearchPhraseChanged(string searchTerm) private async Task SetSearchPhrase(string searchTerm)
{ {
_paging.PageNumber = 1; _paging.PageNumber = 1;
_paging.SearchTerm = searchTerm; _paging.SearchTerm = searchTerm;
await GetSalesItems(); await GetSalesItems();
} }
private async Task SortColumnChanged(string orderBy) private async Task SetSortCol(string orderBy)
{ {
_paging.OrderBy = orderBy; _paging.OrderBy = orderBy;
await GetSalesItems(); await GetSalesItems();

View file

@ -58,6 +58,7 @@ builder.Services.AddScoped<AuthenticationStateProvider, AuthStateProvider>();
builder.Services.AddScoped<IAuthenticationService, AuthenticationService>(); builder.Services.AddScoped<IAuthenticationService, AuthenticationService>();
builder.Services.AddScoped<RefreshTokenService>(); builder.Services.AddScoped<RefreshTokenService>();
builder.Services.AddScoped<VirkRegistryService>(); builder.Services.AddScoped<VirkRegistryService>();
builder.Services.AddScoped<UserPreferenceService>();
// --------------------------------------- // ---------------------------------------

View file

@ -4,75 +4,55 @@ namespace Wonky.Client.Services;
public record Preferences public record Preferences
{ {
public bool DisplayIgnored { get; set; } = false;
public bool DisplayAll { get; set; } = false;
public string CompanySearch { get; set; } = "name"; public string CompanySearch { get; set; } = "name";
public string CompanySort { get; set; } = "name"; public string CompanySort { get; set; } = "name";
public string ItemSearch { get; set; } = "name"; public string ItemSearch { get; set; } = "name";
public string ItemSort { get; set; } = "name"; public string ItemSort { get; set; } = "name";
public string PageSize { get; set; } = "5"; public string PageSize { get; set; } = "5";
public string ItemGroup { get; set; } = "all";
} }
public class ProfileService public class UserPreferenceService
{ {
private readonly ILocalStorageService _localStorageService; private readonly ILocalStorageService _localStorageService;
public event Action<Preferences>? OnChange; public event Action<Preferences>? OnChange;
public ProfileService(ILocalStorageService localStorageService) public UserPreferenceService(ILocalStorageService localStorageService)
{ {
_localStorageService = localStorageService; _localStorageService = localStorageService;
} }
public async Task ToggleIgnored(bool toggle) public async Task SetCompanySearch(string companySearch)
{ {
var preferences = await GetPreferences(); var preferences = await GetPreferences();
var newPreferences = preferences var newPreferences = preferences
with { DisplayIgnored = toggle }; with { CompanySearch = companySearch };
await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences);
}
public async Task ToggleAll(bool toggle)
{
var preferences = await GetPreferences();
var newPreferences = preferences
with { DisplayAll = toggle };
await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences);
}
public async Task SetCompanySearch(string column)
{
var preferences = await GetPreferences();
var newPreferences = preferences
with { CompanySearch = column };
await _localStorageService.SetItemAsync("preferences", newPreferences); await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences); OnChange?.Invoke(newPreferences);
} }
public async Task SetCompanySort(string column) public async Task SetCompanySort(string companySort)
{ {
var preferences = await GetPreferences(); var preferences = await GetPreferences();
var newPreferences = preferences var newPreferences = preferences
with { CompanySort = column }; with { CompanySort = companySort };
await _localStorageService.SetItemAsync("preferences", newPreferences); await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences); OnChange?.Invoke(newPreferences);
} }
public async Task SetItemSearch(string column) public async Task SetItemSearch(string itemSearch)
{ {
var preferences = await GetPreferences(); var preferences = await GetPreferences();
var newPreferences = preferences var newPreferences = preferences
with { ItemSearch = column }; with { ItemSearch = itemSearch };
await _localStorageService.SetItemAsync("preferences", newPreferences); await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences); OnChange?.Invoke(newPreferences);
} }
public async Task SetItemSort(string column) public async Task SetItemSort(string itemSort)
{ {
var preferences = await GetPreferences(); var preferences = await GetPreferences();
var newPreferences = preferences var newPreferences = preferences
with { ItemSort = column }; with { ItemSort = itemSort };
await _localStorageService.SetItemAsync("preferences", newPreferences); await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences); OnChange?.Invoke(newPreferences);
} }
public async Task SetPageSize(string pageSize) public async Task SetPageSize(string pageSize)
{ {
var preferences = await GetPreferences(); var preferences = await GetPreferences();
@ -81,14 +61,6 @@ public class ProfileService
await _localStorageService.SetItemAsync("preferences", newPreferences); await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences); OnChange?.Invoke(newPreferences);
} }
public async Task SetItemGroup(string group)
{
var preferences = await GetPreferences();
var newPreferences = preferences
with { ItemGroup = group };
await _localStorageService.SetItemAsync("preferences", newPreferences);
OnChange?.Invoke(newPreferences);
}
public async Task<Preferences> GetPreferences() public async Task<Preferences> GetPreferences()
{ {
return await _localStorageService.GetItemAsync<Preferences>("preferences") return await _localStorageService.GetItemAsync<Preferences>("preferences")

View file

@ -54,11 +54,6 @@
<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>