< Summary

Information
Class: MyNet.UI.ViewModels.Import.ImportItemsProvider<T>
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/ViewModels/Import/ImportItemsProvider.cs
Tag: 323_28699572109
Line coverage
0%
Covered lines: 0
Uncovered lines: 12
Coverable lines: 12
Total lines: 65
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)0%620%
LoadSource(...)100%210%
Reload()0%620%
Clear()100%210%
ReplaceItems(...)0%620%

File(s)

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

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="ImportItemsProvider.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Collections.Generic;
 9using System.Collections.ObjectModel;
 10
 11namespace MyNet.UI.ViewModels.Import;
 12
 13/// <summary>
 14/// Maintains import items loaded from one source at a time.
 15/// </summary>
 16/// <typeparam name="T">The import item type.</typeparam>
 17/// <remarks>
 18/// Initializes a new instance of the <see cref="ImportItemsProvider{T}"/> class.
 19/// </remarks>
 20/// <param name="sources">The available import sources.</param>
 21public sealed class ImportItemsProvider<T>(IReadOnlyCollection<IImportSourceViewModel<T>> sources)
 22    where T : ImportItemViewModel
 23{
 24    private IImportSourceViewModel<T>? _lastSourceLoaded;
 25
 26    /// <summary>
 27    /// Gets available import sources.
 28    /// </summary>
 029    public IReadOnlyCollection<IImportSourceViewModel<T>> Sources { get; } = sources ?? throw new ArgumentNullException(
 30
 31    /// <summary>
 32    /// Gets loaded items.
 33    /// </summary>
 034    public ObservableCollection<T> Items { get; } = [];
 35
 36    /// <summary>
 37    /// Loads items from the specified source.
 38    /// </summary>
 39    public void LoadSource(IImportSourceViewModel<T> source)
 40    {
 041        ArgumentNullException.ThrowIfNull(source);
 42
 043        _lastSourceLoaded = source;
 044        ReplaceItems(source.ProvideItems());
 045    }
 46
 47    /// <summary>
 48    /// Reloads items from the last loaded source.
 49    /// </summary>
 050    public void Reload() => _lastSourceLoaded?.Reload();
 51
 52    /// <summary>
 53    /// Clears loaded items.
 54    /// </summary>
 055    public void Clear() => Items.Clear();
 56
 57    private void ReplaceItems(IEnumerable<T> items)
 58    {
 059        Items.Clear();
 60
 061        foreach (var item in items)
 062            Items.Add(item);
 063    }
 64}
 65