< Summary

Class:FavoritesesSubSectionComponentController
Assembly:ExploreV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Sections/PlacesAndEventsSection/SubSections/PlacesSubSection/FavoritesSubSection/FavoritesesSubSectionComponentController.cs
Covered lines:25
Uncovered lines:40
Coverable lines:65
Total lines:147
Line coverage:38.4% (25 of 65)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
FavoritesesSubSectionComponentController(...)0%110100%
Dispose()0%110100%
FirstLoading()0%2100%
RequestAllFavorites()0%6200%
RequestAllFromAPI()0%2100%
OnRequestedEventsUpdated(...)0%2100%
TakeAllForAvailableSlots(...)0%2100%
ShowMoreFavorites()0%12300%
ShowPlaceDetailedInfo(...)0%2100%
OnJumpInToPlace(...)0%6200%
View_OnFriendHandlerAdded(...)0%2100%
OnChannelToJoinChanged(...)0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Sections/PlacesAndEventsSection/SubSections/PlacesSubSection/FavoritesSubSection/FavoritesesSubSectionComponentController.cs

#LineLine coverage
 1using DCL;
 2using DCL.Social.Friends;
 3using ExploreV2Analytics;
 4using System;
 5using System.Collections.Generic;
 6using System.Linq;
 7using UnityEngine;
 8using static HotScenesController;
 9using Environment = DCL.Environment;
 10
 11public class FavoritesesSubSectionComponentController : IFavoritesSubSectionComponentController, IPlacesAndEventsAPIRequ
 12{
 13    public event Action OnCloseExploreV2;
 14
 15    internal const int INITIAL_NUMBER_OF_ROWS = 5;
 16    private const int SHOW_MORE_ROWS_INCREMENT = 3;
 17
 18    internal readonly IFavoritesSubSectionComponentView view;
 19    internal readonly IPlacesAPIController placesAPIApiController;
 20    internal readonly FriendTrackerController friendsTrackerController;
 21    private readonly IExploreV2Analytics exploreV2Analytics;
 22    private readonly DataStore dataStore;
 23
 24    internal readonly PlaceAndEventsCardsReloader cardsReloader;
 25
 626    internal List<HotSceneInfo> favoritesFromAPI = new ();
 27    internal int availableUISlots;
 28
 629    public FavoritesesSubSectionComponentController(IFavoritesSubSectionComponentView view, IPlacesAPIController placesA
 30    {
 31
 632        this.dataStore = dataStore;
 633        this.dataStore.channels.currentJoinChannelModal.OnChange += OnChannelToJoinChanged;
 634        this.view = view;
 635        this.exploreV2Analytics = exploreV2Analytics;
 636        placesAPIApiController = placesAPI;
 37
 638        this.view.OnReady += FirstLoading;
 639        this.view.OnInfoClicked += ShowPlaceDetailedInfo;
 640        this.view.OnJumpInClicked += OnJumpInToPlace;
 641        this.view.OnShowMoreFavoritesClicked += ShowMoreFavorites;
 642        this.view.OnFriendHandlerAdded += View_OnFriendHandlerAdded;
 643        friendsTrackerController = new FriendTrackerController(friendsController, view.currentFriendColors);
 644        cardsReloader = new PlaceAndEventsCardsReloader(view, this, dataStore.exploreV2);
 45
 646        view.ConfigurePools();
 647    }
 48
 49    public void Dispose()
 50    {
 651        view.OnReady -= FirstLoading;
 652        view.OnInfoClicked -= ShowPlaceDetailedInfo;
 653        view.OnJumpInClicked -= OnJumpInToPlace;
 654        view.OnFavoriteSubSectionEnable -= RequestAllFavorites;
 655        view.OnFriendHandlerAdded -= View_OnFriendHandlerAdded;
 656        view.OnShowMoreFavoritesClicked -= ShowMoreFavorites;
 57
 658        dataStore.channels.currentJoinChannelModal.OnChange -= OnChannelToJoinChanged;
 59
 660        cardsReloader.Dispose();
 661    }
 62
 63    private void FirstLoading()
 64    {
 065        view.OnFavoriteSubSectionEnable += RequestAllFavorites;
 066        cardsReloader.Initialize();
 067    }
 68
 69    internal void RequestAllFavorites()
 70    {
 071        if (cardsReloader.CanReload())
 72        {
 073            availableUISlots = view.CurrentTilesPerRow * INITIAL_NUMBER_OF_ROWS;
 074            view.SetShowMoreButtonActive(false);
 75
 076            cardsReloader.RequestAll();
 77        }
 078    }
 79
 80    public void RequestAllFromAPI()
 81    {
 082        placesAPIApiController.GetAllFavorites(
 83            OnCompleted: OnRequestedEventsUpdated);
 084    }
 85
 86    private void OnRequestedEventsUpdated(List<HotSceneInfo> placeList)
 87    {
 088        friendsTrackerController.RemoveAllHandlers();
 89
 090        favoritesFromAPI = placeList;
 91
 092        view.SetFavorites(PlacesAndEventsCardsFactory.CreatePlacesCards((TakeAllForAvailableSlots(placeList))));
 093        view.SetShowMoreFavoritesButtonActive(availableUISlots < favoritesFromAPI.Count);
 094    }
 95
 96    internal List<HotSceneInfo> TakeAllForAvailableSlots(List<HotSceneInfo> modelsFromAPI) =>
 097        modelsFromAPI.Take(availableUISlots).ToList();
 98
 99    internal void ShowMoreFavorites()
 100    {
 0101        int numberOfExtraItemsToAdd = ((int)Mathf.Ceil((float)availableUISlots / view.currentFavoritePlacesPerRow) * vie
 0102        int numberOfItemsToAdd = (view.currentFavoritePlacesPerRow * SHOW_MORE_ROWS_INCREMENT) + numberOfExtraItemsToAdd
 103
 0104        List<HotSceneInfo> placesFiltered = availableUISlots + numberOfItemsToAdd <= favoritesFromAPI.Count
 105            ? favoritesFromAPI.GetRange(availableUISlots, numberOfItemsToAdd)
 106            : favoritesFromAPI.GetRange(availableUISlots, favoritesFromAPI.Count - availableUISlots);
 107
 0108        view.AddFavorites(PlacesAndEventsCardsFactory.CreatePlacesCards(placesFiltered));
 109
 0110        availableUISlots += numberOfItemsToAdd;
 111
 0112        if (availableUISlots > favoritesFromAPI.Count)
 0113            availableUISlots = favoritesFromAPI.Count;
 114
 0115        view.SetShowMoreFavoritesButtonActive(availableUISlots < favoritesFromAPI.Count);
 0116    }
 117
 118    internal void ShowPlaceDetailedInfo(PlaceCardComponentModel placeModel)
 119    {
 0120        view.ShowPlaceModal(placeModel);
 0121        exploreV2Analytics.SendClickOnPlaceInfo(placeModel.hotSceneInfo.id, placeModel.placeName);
 122
 0123        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.Places);
 0124    }
 125
 126    internal void OnJumpInToPlace(HotSceneInfo placeFromAPI)
 127    {
 0128        view.HidePlaceModal();
 129
 0130        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 0131        OnCloseExploreV2?.Invoke();
 132        //TODO define if this will be integrated and how
 0133    }
 134
 135    private void View_OnFriendHandlerAdded(FriendsHandler friendsHandler) =>
 0136        friendsTrackerController.AddHandler(friendsHandler);
 137
 138    private void OnChannelToJoinChanged(string currentChannelId, string previousChannelId)
 139    {
 0140        if (!string.IsNullOrEmpty(currentChannelId))
 0141            return;
 142
 0143        view.HidePlaceModal();
 0144        dataStore.exploreV2.currentVisibleModal.Set(ExploreV2CurrentModal.None);
 0145        OnCloseExploreV2?.Invoke();
 0146    }
 147}