< Summary

Information
Class: UIBlazor.Components.Settings.ModelSelector
Assembly: UIBlazor
File(s): /home/runner/work/InvAit/InvAit/UIBlazor/Components/Settings/ModelSelector.razor
Tag: 71_26091983037
Line coverage
0%
Covered lines: 0
Uncovered lines: 30
Coverable lines: 30
Total lines: 82
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 18
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_AdditionalAttributes()100%210%
get_ProfileManager()100%210%
.ctor()100%210%
OnInitialized()100%210%
OnLoadData(...)0%2040%
OnValueChange(...)0%4260%
ProfilePropertyChanged(...)0%7280%
Dispose()100%210%

File(s)

/home/runner/work/InvAit/InvAit/UIBlazor/Components/Settings/ModelSelector.razor

#LineLine coverage
 1@using System.ComponentModel
 2@implements IDisposable
 3
 4<RadzenDropDown TValue="string"
 5                @attributes="AdditionalAttributes"
 6                Data="@viewModels"
 7                @bind-Value="@ProfileManager.ActiveProfile.Model"
 8                Placeholder="Model"
 9                AllowFiltering="true"
 10                LoadData="@OnLoadData"
 11                Change="@OnValueChange" />
 12
 13@code {
 14    [Parameter(CaptureUnmatchedValues = true)]
 015    public Dictionary<string, object> AdditionalAttributes { get; set; } = [];
 16
 017    [Inject] private IProfileManager ProfileManager { get; set; } = null!;
 18
 19    // Список для отображения (включает оригинальные данные или опцию добавления)
 020    IEnumerable<string> viewModels = [];
 21
 22    protected override void OnInitialized()
 23    {
 024        viewModels = ProfileManager.ActiveProfile.AvailableModels;
 025        ProfileManager.PropertyChanged += ProfilePropertyChanged;
 026    }
 27
 28    void OnLoadData(LoadDataArgs args)
 29    {
 030        var allModels = ProfileManager.ActiveProfile.AvailableModels;
 31
 032        if (string.IsNullOrEmpty(args.Filter))
 33        {
 034            viewModels = allModels;
 35        }
 36        else
 37        {
 38            // Фильтруем существующие модели
 039            var filtered = allModels
 040                .Where(m => m.Contains(args.Filter, StringComparison.OrdinalIgnoreCase))
 041                .ToList();
 42
 43            // Если точного совпадения нет - добавляем пункт-команду
 044            if (filtered.Count == 0)
 45            {
 046                filtered.Insert(0, $"➕ {args.Filter}");
 47            }
 48
 049            viewModels = filtered;
 50        }
 051    }
 52
 53    void OnValueChange(object value)
 54    {
 055        var selectedValue = value?.ToString();
 56
 057        if (!string.IsNullOrEmpty(selectedValue) && selectedValue.StartsWith("➕ "))
 58        {
 059            var newModelName = selectedValue.Substring(2).Trim();
 060            ProfileManager.ActiveProfile.Model = newModelName;
 061            viewModels = ProfileManager.ActiveProfile.AvailableModels;
 62        }
 063    }
 64
 65    private void ProfilePropertyChanged(object? sender, PropertyChangedEventArgs args)
 66    {
 067        if (args.PropertyName is nameof(ConnectionProfile.AvailableModels) or nameof(ProfileOptions.ActiveProfileId))
 68        {
 069            viewModels = ProfileManager.ActiveProfile.AvailableModels;
 070            InvokeAsync(StateHasChanged);
 71        }
 072        else if (args.PropertyName is nameof(ConnectionProfile.Model))
 73        {
 074            InvokeAsync(StateHasChanged);
 75        }
 076    }
 77
 78    public void Dispose()
 79    {
 080        ProfileManager.PropertyChanged -= ProfilePropertyChanged;
 081    }
 82}