mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-09-27 17:36:29 +02:00
74 lines
2.8 KiB
C#
74 lines
2.8 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using TINK.Model;
|
|
|
|
namespace TINK.ViewModel.Map
|
|
{
|
|
/// <summary> Helper functionality. </summary>
|
|
/// <remarks> Former name: MapPageFilterFactory</remarks>
|
|
public static class GroupFilterMapPageHelper
|
|
{
|
|
/// <summary> Verifies that filters available are always consistent with filter configuration from settings page/ user group. </summary>
|
|
/// <param name="mapPageFilterDictionary">Last filter from map page. Might have to be updated.</param>
|
|
/// <param name="settingsAndUserFilter">Filter from settings page/ user group.</param>
|
|
public static IGroupFilterMapPage CreateUpdated(
|
|
this IGroupFilterMapPage mapPageFilterDictionary,
|
|
IEnumerable<string> settingsAndUserFilter)
|
|
{
|
|
if (settingsAndUserFilter == null)
|
|
{
|
|
// All filters are null filters no update has to be performed.
|
|
return mapPageFilterDictionary;
|
|
}
|
|
|
|
if (mapPageFilterDictionary == null || mapPageFilterDictionary.Count <= 0)
|
|
{
|
|
return new GroupFilterMapPage();
|
|
}
|
|
|
|
// Filter dictionary by enumeration.
|
|
var updatedMapPageFilterDictionary = new Dictionary<string, FilterState>(mapPageFilterDictionary).Where(x => settingsAndUserFilter.Contains(x.Key)).ToDictionary(x => x.Key, x => x.Value);
|
|
|
|
// Get key of activated filter if there is still one.
|
|
var activatedFilter = updatedMapPageFilterDictionary.FirstOrDefault(x => x.Value == FilterState.On).Key
|
|
?? string.Empty;
|
|
|
|
// Add entries which have become available.
|
|
var filterState = FilterState.On; // Set first filter added to on.
|
|
var filtersToAdd = settingsAndUserFilter.Except(updatedMapPageFilterDictionary.Select(x => x.Key));
|
|
foreach (var l_oEntry in filtersToAdd)
|
|
{
|
|
updatedMapPageFilterDictionary.Add(l_oEntry, filterState);
|
|
filterState = FilterState.Off;
|
|
}
|
|
|
|
if (updatedMapPageFilterDictionary.Count <= 0)
|
|
{
|
|
return new GroupFilterMapPage(updatedMapPageFilterDictionary);
|
|
}
|
|
|
|
// Ensure that there is at least one element on.
|
|
if (updatedMapPageFilterDictionary.Where(x => x.Value == FilterState.On).Count() == 0)
|
|
{
|
|
// No element is active. Set one element active.
|
|
updatedMapPageFilterDictionary[updatedMapPageFilterDictionary.ToArray()[0].Key] = FilterState.On;
|
|
return new GroupFilterMapPage(updatedMapPageFilterDictionary);
|
|
}
|
|
|
|
// Ensure that there is only one selected element.
|
|
if (updatedMapPageFilterDictionary.Where(x => x.Value == FilterState.On).Count() > 1)
|
|
{
|
|
// More than one element is active. Set element inactive.
|
|
if (updatedMapPageFilterDictionary.ContainsKey(activatedFilter))
|
|
{
|
|
// Turn filter off.
|
|
updatedMapPageFilterDictionary[activatedFilter] = FilterState.Off;
|
|
}
|
|
|
|
return new GroupFilterMapPage(updatedMapPageFilterDictionary);
|
|
}
|
|
|
|
return new GroupFilterMapPage(updatedMapPageFilterDictionary);
|
|
}
|
|
}
|
|
}
|