From 913aa02b6b92de9e78fab566b48032f1089a8485 Mon Sep 17 00:00:00 2001 From: itbeard Date: Thu, 29 Jun 2023 18:07:36 +0200 Subject: [PATCH] added content status filter #233 --- .../Content/ContentStatusFilterItem.cs | 10 ++++ Pds/Pds.Web.Models/Content/FilterSettings.cs | 3 +- Pds/Pds.Web/Common/EnumsTranslator.cs | 10 ++++ .../Pages/Content/Components/Filter.razor | 52 +++++++++++++++---- Pds/Pds.Web/Pages/Content/List.razor | 5 ++ 5 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 Pds/Pds.Web.Models/Content/ContentStatusFilterItem.cs diff --git a/Pds/Pds.Web.Models/Content/ContentStatusFilterItem.cs b/Pds/Pds.Web.Models/Content/ContentStatusFilterItem.cs new file mode 100644 index 00000000..2b99fbdd --- /dev/null +++ b/Pds/Pds.Web.Models/Content/ContentStatusFilterItem.cs @@ -0,0 +1,10 @@ +using Pds.Core.Enums; + +namespace Pds.Web.Models.Content; + +public class ContentStatusFilterItem +{ + public ContentStatus ContentStatus { get; set; } + + public bool IsSelected { get; set; } +} \ No newline at end of file diff --git a/Pds/Pds.Web.Models/Content/FilterSettings.cs b/Pds/Pds.Web.Models/Content/FilterSettings.cs index b1849e34..213ba279 100644 --- a/Pds/Pds.Web.Models/Content/FilterSettings.cs +++ b/Pds/Pds.Web.Models/Content/FilterSettings.cs @@ -5,7 +5,8 @@ public class FilterSettings public List SocialMediaFilterItems { get; set; } public List ContentTypeFilterItems { get; set; } public List BrandFilterItems { get; set; } - + public List ContentStatusFilterItems { get; set; } + public DateTime? From { get; set; } public DateTime? To { get; set; } diff --git a/Pds/Pds.Web/Common/EnumsTranslator.cs b/Pds/Pds.Web/Common/EnumsTranslator.cs index fcfb32f3..00e4f8e9 100644 --- a/Pds/Pds.Web/Common/EnumsTranslator.cs +++ b/Pds/Pds.Web/Common/EnumsTranslator.cs @@ -44,6 +44,16 @@ public static string GiftStatusToRu(GiftStatus status) }; } + public static string ContentStatusToRu(ContentStatus status) + { + return status switch + { + ContentStatus.Active => "Активный", + ContentStatus.Archived => "Архивный", + _ => string.Empty + }; + } + public static string PersonStatusToRu(PersonStatus status) { return status switch diff --git a/Pds/Pds.Web/Pages/Content/Components/Filter.razor b/Pds/Pds.Web/Pages/Content/Components/Filter.razor index 46e63e5c..e7e0530f 100644 --- a/Pds/Pds.Web/Pages/Content/Components/Filter.razor +++ b/Pds/Pds.Web/Pages/Content/Components/Filter.razor @@ -27,16 +27,16 @@ else var filterButtonClass = isMobileFilterOpen ? "bi-caret-up-fill" : "bi-caret-down-fill"; var filterPaddingFixClass = isMobileFilterOpen ? string.Empty : "filter-padding-fix"; var openFilterClass = isMobileFilterOpen ? "filter-main-open" : string.Empty; - +
- +
- +
@@ -50,6 +50,19 @@ else }
+ +
+ Статус: + @foreach (var statusFilterItem in filterSettings.ContentStatusFilterItems) + { + var id = $"status_{statusFilterItem.ContentStatus.ToString()}"; + + + } +
+
Соцсеть: @foreach (var smFilterItem in filterSettings.SocialMediaFilterItems) @@ -99,7 +112,7 @@ else protected override async Task OnInitializedAsync() { brands = await GetBrands(); - filterSettings = await GetDefaultFilterSettings(brands); + filterSettings = await GetFilterSettings(brands); editContext = new EditContext(filterSettings); editContext.OnFieldChanged += EditContext_OnFieldChanged; await OnFilterUpdate.InvokeAsync(filterSettings); //trigger filter initialize @@ -110,13 +123,13 @@ else localStorage.SetItemAsync(savedSettingsLocalStorageKey, filterSettings); OnFilterUpdate.InvokeAsync(filterSettings); } - + private void SearchOnChanged(string searchText) { OnSearch.InvokeAsync(searchText); } - private async Task GetDefaultFilterSettings(List brands) + private async Task GetFilterSettings(List brands) { var filter = new FilterSettings { @@ -136,9 +149,17 @@ else IsSelected = false }) .ToList(), - BrandFilterItems = mapper.Map>(brands) + BrandFilterItems = mapper.Map>(brands), + ContentStatusFilterItems = ((ContentStatus[]) Enum.GetValues(typeof(ContentStatus))) + .Select(gType => + new ContentStatusFilterItem() + { + ContentStatus = gType, + IsSelected = false + }) + .ToList(), }; - + SetDefaultFilterValues(ref filter); filter = await GetSavedFilterValues(filter); @@ -147,14 +168,25 @@ else private void SetDefaultFilterValues(ref FilterSettings filter) { + // Set default brand + var defaultBrand = brands.FirstOrDefault(b => b.IsDefault); + if (defaultBrand != null) + { + filter.BrandFilterItems.First(b => b.Id == defaultBrand.Id).IsSelected = true; + } + // Set default "from" filter value var fromFilterDateString = stateContainer.Settings.GetByKey(SettingsKeys.FilterContentReleaseDateFrom); if (DateTime.TryParse(fromFilterDateString, out var fromFilterDate)) { filter.From = fromFilterDate; } + + filter.ContentStatusFilterItems + .First(u => u.ContentStatus == ContentStatus.Active) + .IsSelected = true; } - + private async Task GetSavedFilterValues(FilterSettings filter) { return await LocalStorageFilterHelper.GetSavedFilterValues(filter, localStorage, savedSettingsLocalStorageKey); @@ -164,7 +196,7 @@ else { return await apiClient.Get>(tokenProvider, "content/get-brands"); } - + private void OnButtonFilterClick() { isMobileFilterOpen = !isMobileFilterOpen; diff --git a/Pds/Pds.Web/Pages/Content/List.razor b/Pds/Pds.Web/Pages/Content/List.razor index e61e56ad..2ef5fe39 100644 --- a/Pds/Pds.Web/Pages/Content/List.razor +++ b/Pds/Pds.Web/Pages/Content/List.razor @@ -192,6 +192,10 @@ else PageSettings pageSettings) { //Filtering + var selectedStatuses = filterSettings.ContentStatusFilterItems + .Where(i => i.IsSelected) + .Select(i => i.ContentStatus) + .ToList(); var selectedSocialMediaTypes = filterSettings.SocialMediaFilterItems .Where(i => i.IsSelected) .Select(i => i.SocialMediaType) @@ -207,6 +211,7 @@ else var itemsToShow = content.Items .Where(i => + (selectedStatuses.Contains(i.Status) || selectedStatuses.Count == 0) && (selectedSocialMediaTypes.Contains(i.SocialMediaType) || selectedSocialMediaTypes.Count == 0) && (selectedContentTypes.Contains(i.Type) || selectedContentTypes.Count == 0) && (selectedBrandsIds.Contains(i.Brand.Id)) &&