< Summary

Information
Class: MyNet.UI.ViewModels.Import.ImportListViewModel<T>
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/ViewModels/Import/ImportListViewModel.cs
Tag: 323_28699572109
Line coverage
95%
Covered lines: 20
Uncovered lines: 1
Coverable lines: 21
Total lines: 90
Line coverage: 95.2%
Branch coverage
61%
Covered branches: 11
Total branches: 18
Branch coverage: 61.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_ImportItems()100%22100%
Load(...)100%22100%
ImportSelection()50%22100%
DoNotImportSelection()0%620%
CanApplyToSelection()50%22100%
ApplyOnSelection(...)75%44100%
RaiseSelectionCommandsCanExecuteChanged()50%44100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/ViewModels/Import/ImportListViewModel.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="ImportListViewModel.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System.Collections.Generic;
 8using System.Collections.ObjectModel;
 9using System.Linq;
 10using System.Windows.Input;
 11using MyNet.UI.Commands;
 12
 13namespace MyNet.UI.ViewModels.Import;
 14
 15/// <summary>
 16/// Provides list operations for import items.
 17/// </summary>
 18/// <typeparam name="T">The import item type.</typeparam>
 19public sealed class ImportListViewModel<T> : ViewModelBase
 20    where T : ImportItemViewModel
 21{
 22    /// <summary>
 23    /// Initializes a new instance of the <see cref="ImportListViewModel{T}"/> class.
 24    /// </summary>
 25    /// <param name="commandFactory">Optional command factory used to create commands.</param>
 1526    public ImportListViewModel(ICommandFactory? commandFactory = null)
 27    {
 1528        var commands = commandFactory.GetOrDefault();
 1529        ImportSelectionCommand = commands.Create(ImportSelection, CanApplyToSelection);
 1530        DoNotImportSelectionCommand = commands.Create(DoNotImportSelection, CanApplyToSelection);
 1531    }
 32
 33    /// <summary>
 34    /// Gets items available for import.
 35    /// </summary>
 1536    public ObservableCollection<T> Items { get; } = [];
 37
 38    /// <summary>
 39    /// Gets items marked for import.
 40    /// </summary>
 3941    public IReadOnlyCollection<T> ImportItems => [.. Items.Where(x => x.Import)];
 42
 43    /// <summary>
 44    /// Gets the command that marks selected items for import.
 45    /// </summary>
 46    public ICommand ImportSelectionCommand { get; }
 47
 48    /// <summary>
 49    /// Gets the command that marks selected items as not imported.
 50    /// </summary>
 51    public ICommand DoNotImportSelectionCommand { get; }
 52
 53    /// <summary>
 54    /// Replaces list items.
 55    /// </summary>
 56    public void Load(IEnumerable<T> items)
 57    {
 1558        Items.Clear();
 59
 6060        foreach (var item in items)
 1561            Items.Add(item);
 62
 1563        RaiseSelectionCommandsCanExecuteChanged();
 1564    }
 65
 66    /// <summary>
 67    /// Marks selected items for import.
 68    /// </summary>
 369    public void ImportSelection() => ApplyOnSelection(x => x.Import = true);
 70
 71    /// <summary>
 72    /// Marks selected items as not imported.
 73    /// </summary>
 074    public void DoNotImportSelection() => ApplyOnSelection(x => x.Import = false);
 75
 376    private bool CanApplyToSelection() => Items.Any(x => x.IsSelected);
 77
 78    private void ApplyOnSelection(System.Action<T> action)
 79    {
 1280        foreach (var item in Items.Where(x => x.IsSelected))
 381            action(item);
 382    }
 83
 84    private void RaiseSelectionCommandsCanExecuteChanged()
 85    {
 1586        (ImportSelectionCommand as IRaiseCanExecuteChanged)?.RaiseCanExecuteChanged();
 1587        (DoNotImportSelectionCommand as IRaiseCanExecuteChanged)?.RaiseCanExecuteChanged();
 1588    }
 89}
 90