sharee.bike-App/TINKLib/ViewModel/Map/TinkKonradToggleViewModel.cs

85 lines
3.2 KiB
C#
Raw Normal View History

2021-05-13 20:03:07 +02:00
using System.Collections.Generic;
using System.Linq;
using TINK.Model;
using TINK.Model.Connector;
2021-11-07 21:28:13 +01:00
using TINK.Model.Connector.Filter;
2021-05-13 20:03:07 +02:00
using Xamarin.Forms;
namespace TINK.ViewModel.Map
{
2022-09-06 16:08:19 +02:00
/// <remarks> Old name: MapPageFilter. </remarks>
public class TinkKonradToggleViewModel : ITinkKonradToggleViewModel
{
/// <summary> Constructs a map page filter view model object from values.</summary>
/// <param name="currentFilter">Filters and options dictionary.</param>
public TinkKonradToggleViewModel(IGroupFilterMapPage currentFilter)
{
FilterDictionary = currentFilter ?? new GroupFilterMapPage();
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Gets the filter values.</summary>
public IGroupFilterMapPage FilterDictionary { get; }
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Gets the activated filter.</summary>
public string CurrentFilter
{
get
{
return FilterDictionary.FirstOrDefault(x => x.Value == FilterState.On).Key ?? string.Empty;
}
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Gets value whether TINK is enabled or not. </summary>
public bool IsTinkEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.CARGOBIKE;
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Gets color of the TINK button. </summary>
public Color TinkColor => CurrentFilter.GetBikeCategory() == FilterHelper.CARGOBIKE ? Color.White : Color.FromRgba(0, 0, 0, 0);
public Color NoTinkColor => CurrentFilter.GetBikeCategory() == FilterHelper.CARGOBIKE ? Color.FromRgb(210, 17, 20) : Color.White;
/// <summary> Gets value whether Konrad is enabled or not. </summary>
public bool IsKonradEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.CITYBIKE;
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Gets color of the Konrad button. </summary>
public Color KonradColor => CurrentFilter.GetBikeCategory() == FilterHelper.CITYBIKE ? Color.White : Color.FromRgba(0, 0, 0, 0);
public Color NoKonradColor => CurrentFilter.GetBikeCategory() == FilterHelper.CITYBIKE ? Color.FromRgb(210, 17, 20) : Color.White;
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Gets whether toggle functionality is visible or not. </summary>
public bool IsToggleVisible =>
FilterDictionary.Select(x => x.Key).ContainsGroupId(FilterHelper.CITYBIKE)
&& FilterDictionary.Select(x => x.Key).ContainsGroupId(FilterHelper.CARGOBIKE)
&& (IsTinkEnabled || IsKonradEnabled);
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary>
/// Toggles from bike group TINK to Konrad or vice versa.
/// Toggling means one of
/// - TINK => Konrad or
/// - TINK => Konrad.
/// </summary>
/// <param name="p_strCurrentFilterSet">Filter set to toggle.</param>
/// <returns></returns>
public TinkKonradToggleViewModel DoToggle()
{
var currentFilterSet = FilterDictionary.ToArray();
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
if (currentFilterSet.Length < 2)
{
// There is nothing to toggle because filter set contains only one element.
return new TinkKonradToggleViewModel(FilterDictionary);
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
var currentState = currentFilterSet[currentFilterSet.Length - 1].Value == FilterState.On
? FilterState.On
: FilterState.Off;
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
var toggledFilterSet = new Dictionary<string, FilterState>();
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
foreach (var filterElement in currentFilterSet)
{
toggledFilterSet.Add(filterElement.Key, currentState);
currentState = filterElement.Value;
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
return new TinkKonradToggleViewModel(new GroupFilterMapPage(toggledFilterSet));
}
}
2021-05-13 20:03:07 +02:00
}