< Summary

Class:EventCardComponentView
Assembly:ExploreV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Sections/PlacesAndEventsSection/SubSections/EventsSubSection/EventCard/EventCardComponentView.cs
Covered lines:156
Uncovered lines:24
Coverable lines:180
Total lines:484
Line coverage:86.6% (156 of 180)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
EventCardComponentView()0%110100%
Start()0%550100%
Configure(...)0%110100%
RefreshControl()0%5.515072.73%
OnFocus()0%220100%
OnLoseFocus()0%220100%
Show(...)0%110100%
Hide(...)0%110100%
Dispose()0%550100%
SetEventPicture(...)0%4.374071.43%
SetEventPicture(...)0%6.65060%
SetEventPicture(...)0%6.65060%
SetEventAsLive(...)0%13130100%
SetLiveTagText(...)0%2.032080%
SetEventDate(...)0%2.032080%
SetEventName(...)0%2.032080%
SetEventDescription(...)0%220100%
SetEventStartedIn(...)0%220100%
SetEventStartsInFromTo(...)0%220100%
SetEventOrganizer(...)0%220100%
SetEventPlace(...)0%220100%
SetSubscribersUsers(...)0%4.024090%
SetCoords(...)0%330100%
SetLoadingIndicatorVisible(...)0%110100%
OnEventImageLoaded(...)0%110100%
RebuildCardLayouts()0%440100%
CloseModal()0%110100%
OnCloseActionTriggered(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Sections/PlacesAndEventsSection/SubSections/EventsSubSection/EventCard/EventCardComponentView.cs

#LineLine coverage
 1using DCL;
 2using DCL.Helpers;
 3using TMPro;
 4using UnityEngine;
 5using UnityEngine.UI;
 6
 7public interface IEventCardComponentView
 8{
 9    /// <summary>
 10    /// Event that will be triggered when the jumpIn button is clicked.
 11    /// </summary>
 12    Button.ButtonClickedEvent onJumpInClick { get; }
 13
 14    /// <summary>
 15    /// Event that will be triggered when the info button is clicked.
 16    /// </summary>
 17    Button.ButtonClickedEvent onInfoClick { get; }
 18
 19    /// <summary>
 20    /// Event that will be triggered when the subscribe event button is clicked.
 21    /// </summary>
 22    Button.ButtonClickedEvent onSubscribeClick { get; }
 23
 24    /// <summary>
 25    /// Event that will be triggered when the unsubscribe event button is clicked.
 26    /// </summary>
 27    Button.ButtonClickedEvent onUnsubscribeClick { get; }
 28
 29    /// <summary>
 30    /// Set the event picture directly from a sprite.
 31    /// </summary>
 32    /// <param name="sprite">Event picture (sprite).</param>
 33    void SetEventPicture(Sprite sprite);
 34
 35    /// <summary>
 36    /// Set the event picture from a 2D texture.
 37    /// </summary>
 38    /// <param name="texture">Event picture (url).</param>
 39    void SetEventPicture(Texture2D texture);
 40
 41    /// <summary>
 42    /// Set the event picture from an uri.
 43    /// </summary>
 44    /// <param name="uri"></param>
 45    void SetEventPicture(string uri);
 46
 47    /// <summary>
 48    /// Set the event card as live mode.
 49    /// </summary>
 50    /// <param name="isLive">True to set the event as live.</param>
 51    void SetEventAsLive(bool isLive);
 52
 53    /// <summary>
 54    /// Set the live tag text.
 55    /// </summary>
 56    /// <param name="newText">New text.</param>
 57    void SetLiveTagText(string newText);
 58
 59    /// <summary>
 60    /// Set the event date.
 61    /// </summary>
 62    /// <param name="newDate">The new date showed in the event card.</param>
 63    void SetEventDate(string newDate);
 64
 65    /// <summary>
 66    /// Set the event name in the card.
 67    /// </summary>
 68    /// <param name="newText">New event name.</param>
 69    void SetEventName(string newText);
 70
 71    /// <summary>
 72    /// Set the event description in the card.
 73    /// </summary>
 74    /// <param name="newText">New event description.</param>
 75    void SetEventDescription(string newText);
 76
 77    /// <summary>
 78    /// Set the event started time in the card.
 79    /// </summary>
 80    /// <param name="newText">New event started time.</param>
 81    void SetEventStartedIn(string newText);
 82
 83    /// <summary>
 84    /// Set the event dates range in the card.
 85    /// </summary>
 86    /// <param name="newText">New event date range.</param>
 87    void SetEventStartsInFromTo(string newText);
 88
 89    /// <summary>
 90    /// Set the event organizer in the card.
 91    /// </summary>
 92    /// <param name="newText">New event organizer.</param>
 93    void SetEventOrganizer(string newText);
 94
 95    /// <summary>
 96    /// Set the event place in the card.
 97    /// </summary>
 98    /// <param name="newText">New event place.</param>
 99    void SetEventPlace(string newText);
 100
 101    /// <summary>
 102    /// Set the the number of users subscribed to the event.
 103    /// </summary>
 104    /// <param name="newNumberOfUsers">Number of users subscribed.</param>
 105    void SetSubscribersUsers(int newNumberOfUsers);
 106
 107    /// <summary>
 108    /// Set the event coords.
 109    /// </summary>
 110    /// <param name="newCoords">Event coords.</param>
 111    void SetCoords(Vector2Int newCoords);
 112
 113    /// <summary>
 114    /// Active or deactive the loading indicator.
 115    /// </summary>
 116    /// <param name="isVisible">True for showing the loading indicator and hiding the card info.</param>
 117    void SetLoadingIndicatorVisible(bool isVisible);
 118}
 119
 120public class EventCardComponentView : BaseComponentView, IEventCardComponentView, IComponentModelConfig
 121{
 122    internal const string USERS_CONFIRMED_MESSAGE = "{0} confirmed";
 123    internal const string NOBODY_CONFIRMED_MESSAGE = "Nobody confirmed yet";
 124
 1125    internal static readonly int ON_FOCUS_CARD_COMPONENT_BOOL = Animator.StringToHash("OnFocus");
 126
 127    [Header("Prefab References")]
 128    [SerializeField] internal ImageComponentView eventImage;
 129    [SerializeField] internal TagComponentView liveTag;
 130    [SerializeField] internal TMP_Text eventDateText;
 131    [SerializeField] internal TMP_Text eventNameText;
 132    [SerializeField] internal TMP_Text eventDescText;
 133    [SerializeField] internal TMP_Text eventStartedInTitleForLive;
 134    [SerializeField] internal TMP_Text eventStartedInTitleForNotLive;
 135    [SerializeField] internal TMP_Text eventStartedInText;
 136    [SerializeField] internal TMP_Text eventStartsInFromToText;
 137    [SerializeField] internal TMP_Text eventOrganizerText;
 138    [SerializeField] internal TMP_Text eventPlaceText;
 139    [SerializeField] internal TMP_Text subscribedUsersTitleForLive;
 140    [SerializeField] internal TMP_Text subscribedUsersTitleForNotLive;
 141    [SerializeField] internal TMP_Text subscribedUsersText;
 142    [SerializeField] internal Button modalBackgroundButton;
 143    [SerializeField] internal ButtonComponentView closeCardButton;
 144    [SerializeField] internal InputAction_Trigger closeAction;
 145    [SerializeField] internal ButtonComponentView infoButton;
 146    [SerializeField] internal ButtonComponentView jumpinButton;
 147    [SerializeField] internal ButtonComponentView subscribeEventButton;
 148    [SerializeField] internal ButtonComponentView unsubscribeEventButton;
 149    [SerializeField] internal GameObject imageContainer;
 150    [SerializeField] internal GameObject eventInfoContainer;
 151    [SerializeField] internal GameObject loadingSpinner;
 152    [SerializeField] internal Animator cardAnimator;
 153    [SerializeField] internal VerticalLayoutGroup contentVerticalLayout;
 154    [SerializeField] internal VerticalLayoutGroup infoVerticalLayout;
 155    [SerializeField] internal HorizontalLayoutGroup timeAndPlayersHorizontalLayout;
 156
 157    [Header("Configuration")]
 158    [SerializeField] internal Sprite defaultPicture;
 159    [SerializeField] internal bool isEventCardModal = false;
 160    [SerializeField] internal EventCardComponentModel model;
 161
 0162    public Button.ButtonClickedEvent onJumpInClick => jumpinButton?.onClick;
 0163    public Button.ButtonClickedEvent onInfoClick => infoButton?.onClick;
 0164    public Button.ButtonClickedEvent onSubscribeClick => subscribeEventButton?.onClick;
 0165    public Button.ButtonClickedEvent onUnsubscribeClick => unsubscribeEventButton?.onClick;
 166
 167    public override void Start()
 168    {
 54169        if (eventImage != null)
 54170            eventImage.OnLoaded += OnEventImageLoaded;
 171
 54172        if (closeCardButton != null)
 26173            closeCardButton.onClick.AddListener(CloseModal);
 174
 54175        if (closeAction != null)
 26176            closeAction.OnTriggered += OnCloseActionTriggered;
 177
 54178        if (modalBackgroundButton != null)
 26179            modalBackgroundButton.onClick.AddListener(CloseModal);
 54180    }
 181
 182    public void Configure(BaseComponentModel newModel)
 183    {
 18184        model = (EventCardComponentModel)newModel;
 18185        RefreshControl();
 18186    }
 187
 188    public override void RefreshControl()
 189    {
 18190        if (model == null)
 0191            return;
 192
 18193        if (model.eventPictureSprite != null)
 18194            SetEventPicture(model.eventPictureSprite);
 0195        else if (model.eventPictureTexture != null)
 0196            SetEventPicture(model.eventPictureTexture);
 0197        else if (!string.IsNullOrEmpty(model.eventPictureUri))
 0198            SetEventPicture(model.eventPictureUri);
 199        else
 0200            SetEventPicture(sprite: null);
 201
 18202        SetEventAsLive(model.isLive);
 18203        SetLiveTagText(model.liveTagText);
 18204        SetEventDate(model.eventDateText);
 18205        SetEventName(model.eventName);
 18206        SetEventDescription(model.eventDescription);
 18207        SetEventStartedIn(model.eventStartedIn);
 18208        SetEventStartsInFromTo(model.eventStartsInFromTo);
 18209        SetEventOrganizer(model.eventOrganizer);
 18210        SetEventPlace(model.eventPlace);
 18211        SetSubscribersUsers(model.subscribedUsers);
 18212        SetCoords(model.coords);
 213
 18214        RebuildCardLayouts();
 18215    }
 216
 217    public override void OnFocus()
 218    {
 26219        base.OnFocus();
 220
 26221        if (cardAnimator != null)
 26222            cardAnimator.SetBool(ON_FOCUS_CARD_COMPONENT_BOOL, true);
 26223    }
 224
 225    public override void OnLoseFocus()
 226    {
 229227        base.OnLoseFocus();
 228
 229229        if (cardAnimator != null)
 187230            cardAnimator.SetBool(ON_FOCUS_CARD_COMPONENT_BOOL, false);
 229231    }
 232
 233    public override void Show(bool instant = false)
 234    {
 4235        base.Show(instant);
 236
 4237        DataStore.i.exploreV2.isSomeModalOpen.Set(true);
 4238    }
 239
 240    public override void Hide(bool instant = false)
 241    {
 40242        base.Hide(instant);
 243
 40244        DataStore.i.exploreV2.isSomeModalOpen.Set(false);
 40245    }
 246
 247    public override void Dispose()
 248    {
 286249        base.Dispose();
 250
 286251        if (eventImage != null)
 252        {
 286253            eventImage.OnLoaded -= OnEventImageLoaded;
 286254            eventImage.Dispose();
 255        }
 256
 286257        if (closeCardButton != null)
 119258            closeCardButton.onClick.RemoveAllListeners();
 259
 286260        if (closeAction != null)
 119261            closeAction.OnTriggered -= OnCloseActionTriggered;
 262
 286263        if (modalBackgroundButton != null)
 119264            modalBackgroundButton.onClick.RemoveAllListeners();
 286265    }
 266
 267    public void SetEventPicture(Sprite sprite)
 268    {
 20269        if (sprite == null && defaultPicture != null)
 0270            sprite = defaultPicture;
 271
 20272        model.eventPictureSprite = sprite;
 273
 20274        if (eventImage == null)
 0275            return;
 276
 20277        eventImage.SetImage(sprite);
 20278    }
 279
 280    public void SetEventPicture(Texture2D texture)
 281    {
 1282        if (texture == null && defaultPicture != null)
 283        {
 0284            SetEventPicture(defaultPicture);
 0285            return;
 286        }
 287
 1288        model.eventPictureTexture = texture;
 289
 1290        if (!Application.isPlaying)
 0291            return;
 292
 1293        if (eventImage == null)
 0294            return;
 295
 1296        eventImage.SetImage(texture);
 1297    }
 298
 299    public void SetEventPicture(string uri)
 300    {
 1301        if (string.IsNullOrEmpty(uri) && defaultPicture != null)
 302        {
 0303            SetEventPicture(defaultPicture);
 0304            return;
 305        }
 306
 1307        model.eventPictureUri = uri;
 308
 1309        if (!Application.isPlaying)
 0310            return;
 311
 1312        if (eventImage == null)
 0313            return;
 314
 1315        eventImage.SetImage(uri);
 1316    }
 317
 318    public void SetEventAsLive(bool isLive)
 319    {
 22320        model.isLive = isLive;
 321
 22322        if (liveTag != null)
 22323            liveTag.gameObject.SetActive(isLive);
 324
 22325        if (eventDateText != null)
 22326            eventDateText.gameObject.SetActive(!isLive);
 327
 22328        if (jumpinButton != null)
 22329            jumpinButton.gameObject.SetActive(isLive);
 330
 22331        if (subscribeEventButton != null)
 22332            subscribeEventButton.gameObject.SetActive(!isLive && !model.isSubscribed);
 333
 22334        if (unsubscribeEventButton != null)
 22335            unsubscribeEventButton.gameObject.SetActive(!isLive && model.isSubscribed);
 336
 22337        if (eventStartedInTitleForLive)
 19338            eventStartedInTitleForLive.gameObject.SetActive(isLive);
 339
 22340        if (eventStartedInTitleForNotLive)
 19341            eventStartedInTitleForNotLive.gameObject.SetActive(!isLive);
 342
 22343        if (subscribedUsersTitleForLive != null)
 19344            subscribedUsersTitleForLive.gameObject.SetActive(isLive);
 345
 22346        if (subscribedUsersTitleForNotLive != null)
 19347            subscribedUsersTitleForNotLive.gameObject.SetActive(!isLive);
 22348    }
 349
 350    public void SetLiveTagText(string newText)
 351    {
 19352        model.liveTagText = newText;
 353
 19354        if (liveTag == null)
 0355            return;
 356
 19357        liveTag.SetText(newText);
 19358    }
 359
 360    public void SetEventDate(string newDate)
 361    {
 19362        model.eventDateText = newDate;
 363
 19364        if (eventDateText == null)
 0365            return;
 366
 19367        eventDateText.text = newDate;
 19368    }
 369
 370    public void SetEventName(string newText)
 371    {
 19372        model.eventName = newText;
 373
 19374        if (eventNameText == null)
 0375            return;
 376
 19377        eventNameText.text = newText;
 19378    }
 379
 380    public void SetEventDescription(string newText)
 381    {
 19382        model.eventDescription = newText;
 383
 19384        if (eventDescText == null)
 11385            return;
 386
 8387        eventDescText.text = newText;
 8388    }
 389
 390    public void SetEventStartedIn(string newText)
 391    {
 19392        model.eventStartedIn = newText;
 393
 19394        if (eventStartedInText == null)
 3395            return;
 396
 16397        eventStartedInText.text = newText;
 16398    }
 399
 400    public void SetEventStartsInFromTo(string newText)
 401    {
 19402        model.eventStartsInFromTo = newText;
 403
 19404        if (eventStartsInFromToText == null)
 15405            return;
 406
 4407        eventStartsInFromToText.text = newText;
 4408    }
 409
 410    public void SetEventOrganizer(string newText)
 411    {
 19412        model.eventOrganizer = newText;
 413
 19414        if (eventOrganizerText == null)
 15415            return;
 416
 4417        eventOrganizerText.text = newText;
 4418    }
 419
 420    public void SetEventPlace(string newText)
 421    {
 19422        model.eventPlace = newText;
 423
 19424        if (eventPlaceText == null)
 15425            return;
 426
 4427        eventPlaceText.text = newText;
 4428    }
 429
 430    public void SetSubscribersUsers(int newNumberOfUsers)
 431    {
 22432        model.subscribedUsers = newNumberOfUsers;
 433
 22434        if (subscribedUsersText == null)
 0435            return;
 436
 22437        if (!isEventCardModal)
 438        {
 17439            subscribedUsersText.text = newNumberOfUsers.ToString();
 17440        }
 441        else
 442        {
 5443            if (newNumberOfUsers > 0)
 4444                subscribedUsersText.text = string.Format(USERS_CONFIRMED_MESSAGE, newNumberOfUsers);
 445            else
 1446                subscribedUsersText.text = NOBODY_CONFIRMED_MESSAGE;
 447        }
 1448    }
 449
 450    public void SetCoords(Vector2Int newCoords)
 451    {
 19452        model.coords = newCoords;
 453
 19454        if (jumpinButton == null || !isEventCardModal)
 15455            return;
 456
 4457        jumpinButton.SetText($"{newCoords.x},{newCoords.y}");
 4458    }
 459
 460    public void SetLoadingIndicatorVisible(bool isVisible)
 461    {
 2462        imageContainer.SetActive(!isVisible);
 2463        eventInfoContainer.SetActive(!isVisible);
 2464        loadingSpinner.SetActive(isVisible);
 2465    }
 466
 2467    internal void OnEventImageLoaded(Sprite sprite) { SetEventPicture(sprite); }
 468
 469    internal void RebuildCardLayouts()
 470    {
 18471        if (contentVerticalLayout != null)
 3472            Utils.ForceRebuildLayoutImmediate(contentVerticalLayout.transform as RectTransform);
 473
 18474        if (infoVerticalLayout != null)
 3475            Utils.ForceRebuildLayoutImmediate(infoVerticalLayout.transform as RectTransform);
 476
 18477        if (timeAndPlayersHorizontalLayout != null)
 15478            Utils.ForceRebuildLayoutImmediate(timeAndPlayersHorizontalLayout.transform as RectTransform);
 18479    }
 480
 4481    internal void CloseModal() { Hide(); }
 482
 2483    internal void OnCloseActionTriggered(DCLAction_Trigger action) { CloseModal(); }
 484}