< Summary

Information
Class: UIBlazor.Components.ModelSelector
Assembly: UIBlazor
File(s): /home/runner/work/InvAit/InvAit/UIBlazor/Components/ModelSelector.razor
Tag: 14_22728831704
Line coverage
0%
Covered lines: 0
Uncovered lines: 25
Coverable lines: 25
Total lines: 71
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
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%
OnInitialized()100%210%
OnLoadData(...)0%2040%
OnValueChange(...)0%4260%
HandleProfileChanged()100%210%
Dispose()100%210%

File(s)

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

#LineLine coverage
 1<RadzenDropDown TValue="string"
 2                @attributes="AdditionalAttributes"
 3                Data="@viewModels"
 4                @bind-Value="@ProfileManager.ActiveProfile.Model"
 5                Placeholder="Model"
 6                AllowFiltering="true"
 7                LoadData="@OnLoadData"
 8                Change="@OnValueChange" />
 9
 10@code {
 11    [Parameter(CaptureUnmatchedValues = true)]
 012    public Dictionary<string, object> AdditionalAttributes { get; set; }
 13
 014    [Inject] private IProfileManager ProfileManager { get; set; } = null!;
 15
 16    // Список для отображения (включает оригинальные данные или опцию добавления)
 17    IEnumerable<string> viewModels;
 18
 19    protected override void OnInitialized()
 20    {
 021        viewModels = ProfileManager.ActiveProfile.AvailableModels;
 022        ProfileManager.OnSaved += HandleProfileChanged;
 023    }
 24
 25    void OnLoadData(LoadDataArgs args)
 26    {
 027        var allModels = ProfileManager.ActiveProfile.AvailableModels;
 28
 029        if (string.IsNullOrEmpty(args.Filter))
 30        {
 031            viewModels = allModels;
 32        }
 33        else
 34        {
 35            // Фильтруем существующие модели
 036            var filtered = allModels
 037                .Where(m => m.Contains(args.Filter, StringComparison.OrdinalIgnoreCase))
 038                .ToList();
 39
 40            // Если точного совпадения нет - добавляем пункт-команду
 041            if (filtered.Count == 0)
 42            {
 043                filtered.Insert(0, $"➕ {args.Filter}");
 44            }
 45
 046            viewModels = filtered;
 47        }
 048    }
 49
 50    void OnValueChange(object value)
 51    {
 052        var selectedValue = value?.ToString();
 53
 054        if (!string.IsNullOrEmpty(selectedValue) && selectedValue.StartsWith("➕ "))
 55        {
 056            var newModelName = selectedValue.Substring(2).Trim();
 057            ProfileManager.ActiveProfile.Model = newModelName;
 058            viewModels = ProfileManager.ActiveProfile.AvailableModels;
 59        }
 060    }
 61
 62    private void HandleProfileChanged()
 63    {
 064        InvokeAsync(StateHasChanged);
 065    }
 66
 67    public void Dispose()
 68    {
 069        ProfileManager.OnSaved -= HandleProfileChanged;
 070    }
 71}