OF-DL/OF DL.Gui/ViewModels/ConfigCategoryViewModel.cs

76 lines
2.7 KiB
C#

using System.Collections.ObjectModel;
using OF_DL.Models.Config;
namespace OF_DL.Gui.ViewModels;
public sealed class ConfigCategoryViewModel : ViewModelBase
{
public ConfigCategoryViewModel(string categoryName, IEnumerable<ConfigFieldViewModel> fields)
{
CategoryName = categoryName;
List<ConfigFieldViewModel> fieldList = fields.ToList();
DownloadOnlySpecificDatesField = fieldList.FirstOrDefault(field =>
string.Equals(field.PropertyName, nameof(Config.DownloadOnlySpecificDates), StringComparison.Ordinal));
DownloadDateSelectionField = fieldList.FirstOrDefault(field =>
string.Equals(field.PropertyName, nameof(Config.DownloadDateSelection), StringComparison.Ordinal));
CustomDateField = fieldList.FirstOrDefault(field =>
string.Equals(field.PropertyName, nameof(Config.CustomDate), StringComparison.Ordinal));
IEnumerable<ConfigFieldViewModel> visibleFields = IsDownloadBehavior
? fieldList.Where(field => field.PropertyName is not nameof(Config.DownloadOnlySpecificDates)
and not nameof(Config.DownloadDateSelection)
and not nameof(Config.CustomDate))
: fieldList;
foreach (ConfigFieldViewModel field in visibleFields)
{
Fields.Add(field);
}
}
public string CategoryName { get; }
public bool IsDownloadBehavior =>
string.Equals(CategoryName, "Download Behavior", StringComparison.Ordinal);
public ConfigFieldViewModel? DownloadOnlySpecificDatesField { get; }
public ConfigFieldViewModel? DownloadDateSelectionField { get; }
public ConfigFieldViewModel? CustomDateField { get; }
public bool HasSpecificDateFilterFields =>
DownloadOnlySpecificDatesField != null &&
DownloadDateSelectionField != null &&
CustomDateField != null;
public string SpecificDateFilterHelpText
{
get
{
List<string> parts = [];
if (!string.IsNullOrWhiteSpace(DownloadOnlySpecificDatesField?.HelpText))
{
parts.Add(DownloadOnlySpecificDatesField.HelpText);
}
if (!string.IsNullOrWhiteSpace(DownloadDateSelectionField?.HelpText))
{
parts.Add(DownloadDateSelectionField.HelpText);
}
if (!string.IsNullOrWhiteSpace(CustomDateField?.HelpText))
{
parts.Add(CustomDateField.HelpText);
}
return string.Join(" ", parts.Distinct(StringComparer.Ordinal));
}
}
public bool HasSpecificDateFilterHelpText => !string.IsNullOrWhiteSpace(SpecificDateFilterHelpText);
public ObservableCollection<ConfigFieldViewModel> Fields { get; } = [];
}