Skip to content

Commit

Permalink
added content status filter #233
Browse files Browse the repository at this point in the history
  • Loading branch information
itbeard committed Jun 29, 2023
1 parent e8b286f commit 913aa02
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 11 deletions.
10 changes: 10 additions & 0 deletions Pds/Pds.Web.Models/Content/ContentStatusFilterItem.cs
Original file line number Diff line number Diff line change
@@ -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; }
}
3 changes: 2 additions & 1 deletion Pds/Pds.Web.Models/Content/FilterSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ public class FilterSettings
public List<SocialMediaFilterItem> SocialMediaFilterItems { get; set; }
public List<ContentTypeFilterItem> ContentTypeFilterItems { get; set; }
public List<BrandFilterItem> BrandFilterItems { get; set; }

public List<ContentStatusFilterItem> ContentStatusFilterItems { get; set; }

public DateTime? From { get; set; }

public DateTime? To { get; set; }
Expand Down
10 changes: 10 additions & 0 deletions Pds/Pds.Web/Common/EnumsTranslator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
52 changes: 42 additions & 10 deletions Pds/Pds.Web/Pages/Content/Components/Filter.razor
Original file line number Diff line number Diff line change
Expand Up @@ -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;

<div class="@($"filter {filterPaddingFixClass}")">
<div class="filter-header">

<button title="Фильтр" class="btn btn-success btn-sm button-filter" @onclick="OnButtonFilterClick">
<i class="@($"bi {filterButtonClass}")"></i>
</button>
<SearchComponent Search="SearchOnChanged"/>
</div>

<div class="@($"filter-main {openFilterClass}")">
<EditForm EditContext="@editContext">
<div class="form-group no-wrap">
Expand All @@ -50,6 +50,19 @@ else
</label>
}
</div>

<div class="form-group no-wrap">
<span class="filter-row-title">Статус:</span>
@foreach (var statusFilterItem in filterSettings.ContentStatusFilterItems)
{
var id = $"status_{statusFilterItem.ContentStatus.ToString()}";
<InputCheckbox name="@id" class="btn-check" @bind-Value="statusFilterItem.IsSelected" Id="@id"/>
<label class="btn btn-secondary" for="@id">
@EnumsTranslator.ContentStatusToRu(statusFilterItem.ContentStatus)
</label>
}
</div>

<div class="form-group no-wrap">
<span class="filter-row-title">Соцсеть:</span>
@foreach (var smFilterItem in filterSettings.SocialMediaFilterItems)
Expand Down Expand Up @@ -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
Expand All @@ -110,13 +123,13 @@ else
localStorage.SetItemAsync(savedSettingsLocalStorageKey, filterSettings);
OnFilterUpdate.InvokeAsync(filterSettings);
}

private void SearchOnChanged(string searchText)
{
OnSearch.InvokeAsync(searchText);
}

private async Task<FilterSettings> GetDefaultFilterSettings(List<BrandDto> brands)
private async Task<FilterSettings> GetFilterSettings(List<BrandDto> brands)
{
var filter = new FilterSettings
{
Expand All @@ -136,9 +149,17 @@ else
IsSelected = false
})
.ToList(),
BrandFilterItems = mapper.Map<List<BrandFilterItem>>(brands)
BrandFilterItems = mapper.Map<List<BrandFilterItem>>(brands),
ContentStatusFilterItems = ((ContentStatus[]) Enum.GetValues(typeof(ContentStatus)))
.Select(gType =>
new ContentStatusFilterItem()
{
ContentStatus = gType,
IsSelected = false
})
.ToList(),
};

SetDefaultFilterValues(ref filter);
filter = await GetSavedFilterValues(filter);

Expand All @@ -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<FilterSettings> GetSavedFilterValues(FilterSettings filter)
{
return await LocalStorageFilterHelper<FilterSettings>.GetSavedFilterValues(filter, localStorage, savedSettingsLocalStorageKey);
Expand All @@ -164,7 +196,7 @@ else
{
return await apiClient.Get<List<BrandDto>>(tokenProvider, "content/get-brands");
}

private void OnButtonFilterClick()
{
isMobileFilterOpen = !isMobileFilterOpen;
Expand Down
5 changes: 5 additions & 0 deletions Pds/Pds.Web/Pages/Content/List.razor
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)) &&
Expand Down

0 comments on commit 913aa02

Please sign in to comment.