< Summary

Class:DCL.Backpack.BackpackFiltersComponentView
Assembly:BackpackEditorHUDV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackFiltersComponentView.cs
Covered lines:53
Uncovered lines:22
Coverable lines:75
Total lines:206
Line coverage:70.6% (53 of 75)
Covered branches:0
Total branches:0
Covered methods:9
Total methods:14
Method coverage:64.2% (9 of 14)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
BackpackFiltersComponentView()0%110100%
Awake()0%110100%
Dispose()0%110100%
LoadCollectionDropdown(...)0%440100%
SetSearchText(...)0%2100%
SetOnlyCollectiblesToggleIsOn(...)0%6200%
SetSorting(...)0%2100%
SelectDropdownCollections(...)0%20400%
OrderByToOptionId(...)0%1101000%
LoadSortByDropdown()0%110100%
OnOnlyCollectiblesToggleChanged(...)0%220100%
OnCollectionDropdownChanged(...)0%3.033085.71%
OnSortByDropdownChanged(...)0%14140100%
OnSearchBarChanged(...)0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackFiltersComponentView.cs

#LineLine coverage
 1using DCLServices.WearablesCatalogService;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5using UnityEngine;
 6
 7namespace DCL.Backpack
 8{
 9    public class BackpackFiltersComponentView : MonoBehaviour, IBackpackFiltersComponentView
 10    {
 11        public event Action<bool> OnOnlyCollectiblesChanged;
 12        public event Action<HashSet<string>> OnCollectionChanged;
 13        public event Action<(NftOrderByOperation type, bool directionAscendent)> OnSortByChanged;
 14        public event Action<string> OnSearchTextChanged;
 15
 16        public List<ToggleComponentModel> loadedFilters;
 17
 18        [SerializeField] internal ToggleComponentView onlyCollectiblesToggle;
 19        [SerializeField] internal DropdownComponentView collectionDropdown;
 20        [SerializeField] internal DropdownComponentView sortByDropdown;
 21        [SerializeField] internal SearchBarComponentView searchBar;
 22
 5223        private readonly HashSet<string> selectedCollections = new ();
 24
 25        private const string NEWEST_FILTER_ID = "newest";
 26        private const string OLDEST_FILTER_ID = "oldest";
 27        private const string RAREST_FILTER_ID = "rarest";
 28        private const string LESS_RARE_FILTER_ID = "less_rare";
 29        private const string NAME_AZ_FILTER_ID = "name_az";
 30        private const string NAME_ZA_FILTER_ID = "name_za";
 31
 32        private void Awake()
 33        {
 4934            LoadSortByDropdown();
 35
 4936            onlyCollectiblesToggle.OnSelectedChanged += OnOnlyCollectiblesToggleChanged;
 4937            collectionDropdown.OnOptionSelectionChanged += OnCollectionDropdownChanged;
 4938            sortByDropdown.OnOptionSelectionChanged += OnSortByDropdownChanged;
 4939            searchBar.OnSearchText += OnSearchBarChanged;
 4940        }
 41
 42        public void Dispose()
 43        {
 1444            onlyCollectiblesToggle.OnSelectedChanged -= OnOnlyCollectiblesToggleChanged;
 1445            collectionDropdown.OnOptionSelectionChanged -= OnCollectionDropdownChanged;
 1446            sortByDropdown.OnOptionSelectionChanged -= OnSortByDropdownChanged;
 1447            searchBar.OnSearchText -= OnSearchBarChanged;
 1448        }
 49
 50        public void LoadCollectionDropdown(
 51            WearableCollectionsAPIData.Collection[] collections,
 52            WearableCollectionsAPIData.Collection defaultCollection = null)
 53        {
 554            List<ToggleComponentModel> collectionsToAdd = new ();
 55
 556            if (defaultCollection != null)
 57            {
 158                ToggleComponentModel defaultToggle = new ()
 59                {
 60                    id = defaultCollection.urn,
 61                    text = defaultCollection.name,
 62                    isOn = true,
 63                    isTextActive = true,
 64                    changeTextColorOnSelect = true,
 65                };
 66
 167                collectionsToAdd.Add(defaultToggle);
 168                selectedCollections.Clear();
 169                selectedCollections.Add(defaultToggle.id);
 70            }
 71
 4072            foreach (var collection in collections)
 73            {
 1574                ToggleComponentModel newCollectionModel = new ToggleComponentModel
 75                {
 76                    id = collection.urn,
 77                    text = collection.name,
 78                    isOn = false,
 79                    isTextActive = true,
 80                    changeTextColorOnSelect = true,
 81                };
 82
 1583                collectionsToAdd.Add(newCollectionModel);
 84            }
 85
 586            if (collectionsToAdd.Count > 0)
 587                collectionDropdown.SetTitle(collectionsToAdd[0].text);
 88
 589            collectionDropdown.SetOptions(collectionsToAdd);
 590            loadedFilters = collectionsToAdd;
 591        }
 92
 93        public void SetSearchText(string text, bool notify) =>
 094            searchBar.SubmitSearch(text, notify, notify);
 95
 96        public void SetOnlyCollectiblesToggleIsOn(bool isOn, bool notify)
 97        {
 098            if (notify)
 099                onlyCollectiblesToggle.isOn = isOn;
 100            else
 0101                onlyCollectiblesToggle.SetIsOnWithoutNotify(isOn);
 0102        }
 103
 104        public void SetSorting(NftOrderByOperation type, bool directionAscending, bool notify)
 105        {
 0106            IToggleComponentView option = sortByDropdown.SelectOption(OrderByToOptionId(type, directionAscending), notif
 0107            sortByDropdown.SetTitle(option.title);
 0108        }
 109
 110        public void SelectDropdownCollections(HashSet<string> collections, bool notify)
 111        {
 0112            var isFirstAssigned = false;
 113
 0114            foreach (string collection in collections)
 115            {
 0116                collectionDropdown.SelectOption(collection, notify);
 117
 0118                if (isFirstAssigned) continue;
 0119                IToggleComponentView option = collectionDropdown.GetOption(collection);
 0120                if (option == null) continue;
 0121                collectionDropdown.SetTitle(option.title);
 0122                isFirstAssigned = true;
 123            }
 0124        }
 125
 126        private string OrderByToOptionId(NftOrderByOperation type, bool directionAscending)
 127        {
 128            switch (type)
 129            {
 130                case NftOrderByOperation.Date:
 0131                    return directionAscending ? OLDEST_FILTER_ID : NEWEST_FILTER_ID;
 132                case NftOrderByOperation.Rarity:
 0133                    return directionAscending ? LESS_RARE_FILTER_ID : RAREST_FILTER_ID;
 134                case NftOrderByOperation.Name:
 0135                    return directionAscending ? NAME_AZ_FILTER_ID : NAME_ZA_FILTER_ID;
 136                default:
 0137                    throw new ArgumentOutOfRangeException($"Unsupported order type operation: {type}, direction: {(direc
 138            }
 139        }
 140
 141        private void LoadSortByDropdown()
 142        {
 49143            List<ToggleComponentModel> sortingMethodsToAdd = new List<ToggleComponentModel>
 144            {
 145                new () { id = NEWEST_FILTER_ID, text = "Newest", isOn = false, isTextActive = true, changeTextColorOnSel
 146                new () { id = OLDEST_FILTER_ID, text = "Oldest", isOn = false, isTextActive = true, changeTextColorOnSel
 147                new () { id = RAREST_FILTER_ID, text = "Rarest", isOn = false, isTextActive = true, changeTextColorOnSel
 148                new () { id = LESS_RARE_FILTER_ID, text = "Less rare", isOn = false, isTextActive = true, changeTextColo
 149                new () { id = NAME_AZ_FILTER_ID, text = "Name A-Z", isOn = true, isTextActive = true, changeTextColorOnS
 150                new () { id = NAME_ZA_FILTER_ID, text = "Name Z-A", isOn = false, isTextActive = true, changeTextColorOn
 151            };
 152
 49153            sortByDropdown.SetTitle(sortingMethodsToAdd[4].text);
 49154            sortByDropdown.SetOptions(sortingMethodsToAdd);
 49155        }
 156
 157        private void OnOnlyCollectiblesToggleChanged(bool isOn, string optionId, string optionText) =>
 1158            OnOnlyCollectiblesChanged?.Invoke(isOn);
 159
 160        private void OnCollectionDropdownChanged(bool isOn, string optionId, string optionName)
 161        {
 3162            if (!isOn)
 0163                return;
 164
 3165            collectionDropdown.SetTitle(optionName);
 3166            selectedCollections.Clear();
 3167            selectedCollections.Add(optionId);
 168
 169            // need to make a copy of the collection because it may be modified in the event subscription
 3170            OnCollectionChanged?.Invoke(selectedCollections.ToHashSet());
 3171        }
 172
 173        private void OnSortByDropdownChanged(bool isOn, string optionId, string optionName)
 174        {
 12175            if (!isOn)
 6176                return;
 177
 6178            sortByDropdown.SetTitle(optionName);
 179
 180            switch (optionId)
 181            {
 182                case OLDEST_FILTER_ID:
 1183                    OnSortByChanged?.Invoke((NftOrderByOperation.Date, true));
 1184                    break;
 185                case NEWEST_FILTER_ID:
 1186                    OnSortByChanged?.Invoke((NftOrderByOperation.Date, false));
 1187                    break;
 188                case LESS_RARE_FILTER_ID:
 1189                    OnSortByChanged?.Invoke((NftOrderByOperation.Rarity, true));
 1190                    break;
 191                case RAREST_FILTER_ID:
 1192                    OnSortByChanged?.Invoke((NftOrderByOperation.Rarity, false));
 1193                    break;
 194                case NAME_AZ_FILTER_ID:
 1195                    OnSortByChanged?.Invoke((NftOrderByOperation.Name, true));
 1196                    break;
 197                case NAME_ZA_FILTER_ID:
 1198                    OnSortByChanged?.Invoke((NftOrderByOperation.Name, false));
 199                    break;
 200            }
 1201        }
 202
 203        private void OnSearchBarChanged(string newText) =>
 1204            OnSearchTextChanged?.Invoke(newText);
 205    }
 206}