< 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:154
Uncovered lines:25
Coverable lines:179
Total lines:481
Line coverage:86% (154 of 179)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
EventCardComponentView()0%110100%
Start()0%440100%
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%15150100%
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%
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<EventCardCompone
 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 jumpinButtonForNotLive;
 148    [SerializeField] internal ButtonComponentView subscribeEventButton;
 149    [SerializeField] internal ButtonComponentView unsubscribeEventButton;
 150    [SerializeField] internal GameObject imageContainer;
 151    [SerializeField] internal GameObject eventInfoContainer;
 152    [SerializeField] internal GameObject loadingSpinner;
 153    [SerializeField] internal Animator cardAnimator;
 154    [SerializeField] internal VerticalLayoutGroup contentVerticalLayout;
 155    [SerializeField] internal VerticalLayoutGroup infoVerticalLayout;
 156    [SerializeField] internal HorizontalLayoutGroup timeAndPlayersHorizontalLayout;
 157
 158    [Header("Configuration")]
 159    [SerializeField] internal Sprite defaultPicture;
 160    [SerializeField] internal bool isEventCardModal = false;
 161    [SerializeField] internal EventCardComponentModel model;
 162
 0163    public Button.ButtonClickedEvent onJumpInClick => jumpinButton?.onClick;
 0164    public Button.ButtonClickedEvent onJumpInForNotLiveClick => jumpinButtonForNotLive?.onClick;
 0165    public Button.ButtonClickedEvent onInfoClick => infoButton?.onClick;
 0166    public Button.ButtonClickedEvent onSubscribeClick => subscribeEventButton?.onClick;
 0167    public Button.ButtonClickedEvent onUnsubscribeClick => unsubscribeEventButton?.onClick;
 168
 169    public override void Start()
 170    {
 60171        if (closeCardButton != null)
 29172            closeCardButton.onClick.AddListener(CloseModal);
 173
 60174        if (closeAction != null)
 29175            closeAction.OnTriggered += OnCloseActionTriggered;
 176
 60177        if (modalBackgroundButton != null)
 29178            modalBackgroundButton.onClick.AddListener(CloseModal);
 60179    }
 180
 181    public void Configure(EventCardComponentModel newModel)
 182    {
 18183        model = newModel;
 18184        RefreshControl();
 18185    }
 186
 187    public override void RefreshControl()
 188    {
 18189        if (model == null)
 0190            return;
 191
 18192        if (model.eventPictureSprite != null)
 18193            SetEventPicture(model.eventPictureSprite);
 0194        else if (model.eventPictureTexture != null)
 0195            SetEventPicture(model.eventPictureTexture);
 0196        else if (!string.IsNullOrEmpty(model.eventPictureUri))
 0197            SetEventPicture(model.eventPictureUri);
 198        else
 0199            SetEventPicture(sprite: null);
 200
 18201        SetEventAsLive(model.isLive);
 18202        SetLiveTagText(model.liveTagText);
 18203        SetEventDate(model.eventDateText);
 18204        SetEventName(model.eventName);
 18205        SetEventDescription(model.eventDescription);
 18206        SetEventStartedIn(model.eventStartedIn);
 18207        SetEventStartsInFromTo(model.eventStartsInFromTo);
 18208        SetEventOrganizer(model.eventOrganizer);
 18209        SetEventPlace(model.eventPlace);
 18210        SetSubscribersUsers(model.subscribedUsers);
 18211        SetCoords(model.coords);
 212
 18213        RebuildCardLayouts();
 18214    }
 215
 216    public override void OnFocus()
 217    {
 29218        base.OnFocus();
 219
 29220        if (cardAnimator != null)
 29221            cardAnimator.SetBool(ON_FOCUS_CARD_COMPONENT_BOOL, true);
 29222    }
 223
 224    public override void OnLoseFocus()
 225    {
 238226        base.OnLoseFocus();
 227
 238228        if (cardAnimator != null)
 193229            cardAnimator.SetBool(ON_FOCUS_CARD_COMPONENT_BOOL, false);
 238230    }
 231
 232    public override void Show(bool instant = false)
 233    {
 4234        base.Show(instant);
 235
 4236        DataStore.i.exploreV2.isSomeModalOpen.Set(true);
 4237    }
 238
 239    public override void Hide(bool instant = false)
 240    {
 40241        base.Hide(instant);
 242
 40243        DataStore.i.exploreV2.isSomeModalOpen.Set(false);
 40244    }
 245
 246    public override void Dispose()
 247    {
 298248        base.Dispose();
 249
 298250        if (eventImage != null)
 298251            eventImage.Dispose();
 252
 298253        if (closeCardButton != null)
 125254            closeCardButton.onClick.RemoveAllListeners();
 255
 298256        if (closeAction != null)
 125257            closeAction.OnTriggered -= OnCloseActionTriggered;
 258
 298259        if (modalBackgroundButton != null)
 125260            modalBackgroundButton.onClick.RemoveAllListeners();
 298261    }
 262
 263    public void SetEventPicture(Sprite sprite)
 264    {
 19265        if (sprite == null && defaultPicture != null)
 0266            sprite = defaultPicture;
 267
 19268        model.eventPictureSprite = sprite;
 269
 19270        if (eventImage == null)
 0271            return;
 272
 19273        eventImage.SetImage(sprite);
 19274    }
 275
 276    public void SetEventPicture(Texture2D texture)
 277    {
 1278        if (texture == null && defaultPicture != null)
 279        {
 0280            SetEventPicture(defaultPicture);
 0281            return;
 282        }
 283
 1284        model.eventPictureTexture = texture;
 285
 1286        if (!Application.isPlaying)
 0287            return;
 288
 1289        if (eventImage == null)
 0290            return;
 291
 1292        eventImage.SetImage(texture);
 1293    }
 294
 295    public void SetEventPicture(string uri)
 296    {
 1297        if (string.IsNullOrEmpty(uri) && defaultPicture != null)
 298        {
 0299            SetEventPicture(defaultPicture);
 0300            return;
 301        }
 302
 1303        model.eventPictureUri = uri;
 304
 1305        if (!Application.isPlaying)
 0306            return;
 307
 1308        if (eventImage == null)
 0309            return;
 310
 1311        eventImage.SetImage(uri);
 1312    }
 313
 314    public void SetEventAsLive(bool isLive)
 315    {
 26316        model.isLive = isLive;
 317
 26318        if (liveTag != null)
 26319            liveTag.gameObject.SetActive(isLive);
 320
 26321        if (eventDateText != null)
 26322            eventDateText.gameObject.SetActive(!isLive);
 323
 26324        if (jumpinButton != null)
 26325            jumpinButton.gameObject.SetActive(isEventCardModal || isLive);
 326
 26327        if (jumpinButtonForNotLive)
 23328            jumpinButtonForNotLive.gameObject.SetActive(!isEventCardModal && !isLive);
 329
 26330        if (subscribeEventButton != null)
 26331            subscribeEventButton.gameObject.SetActive(!isLive && !model.isSubscribed);
 332
 26333        if (unsubscribeEventButton != null)
 26334            unsubscribeEventButton.gameObject.SetActive(!isLive && model.isSubscribed);
 335
 26336        if (eventStartedInTitleForLive)
 23337            eventStartedInTitleForLive.gameObject.SetActive(isLive);
 338
 26339        if (eventStartedInTitleForNotLive)
 23340            eventStartedInTitleForNotLive.gameObject.SetActive(!isLive);
 341
 26342        if (subscribedUsersTitleForLive != null)
 23343            subscribedUsersTitleForLive.gameObject.SetActive(isLive);
 344
 26345        if (subscribedUsersTitleForNotLive != null)
 23346            subscribedUsersTitleForNotLive.gameObject.SetActive(!isLive);
 26347    }
 348
 349    public void SetLiveTagText(string newText)
 350    {
 19351        model.liveTagText = newText;
 352
 19353        if (liveTag == null)
 0354            return;
 355
 19356        liveTag.SetText(newText);
 19357    }
 358
 359    public void SetEventDate(string newDate)
 360    {
 19361        model.eventDateText = newDate;
 362
 19363        if (eventDateText == null)
 0364            return;
 365
 19366        eventDateText.text = newDate;
 19367    }
 368
 369    public void SetEventName(string newText)
 370    {
 19371        model.eventName = newText;
 372
 19373        if (eventNameText == null)
 0374            return;
 375
 19376        eventNameText.text = newText;
 19377    }
 378
 379    public void SetEventDescription(string newText)
 380    {
 19381        model.eventDescription = newText;
 382
 19383        if (eventDescText == null)
 11384            return;
 385
 8386        eventDescText.text = newText;
 8387    }
 388
 389    public void SetEventStartedIn(string newText)
 390    {
 19391        model.eventStartedIn = newText;
 392
 19393        if (eventStartedInText == null)
 3394            return;
 395
 16396        eventStartedInText.text = newText;
 16397    }
 398
 399    public void SetEventStartsInFromTo(string newText)
 400    {
 19401        model.eventStartsInFromTo = newText;
 402
 19403        if (eventStartsInFromToText == null)
 15404            return;
 405
 4406        eventStartsInFromToText.text = newText;
 4407    }
 408
 409    public void SetEventOrganizer(string newText)
 410    {
 19411        model.eventOrganizer = newText;
 412
 19413        if (eventOrganizerText == null)
 15414            return;
 415
 4416        eventOrganizerText.text = newText;
 4417    }
 418
 419    public void SetEventPlace(string newText)
 420    {
 19421        model.eventPlace = newText;
 422
 19423        if (eventPlaceText == null)
 15424            return;
 425
 4426        eventPlaceText.text = newText;
 4427    }
 428
 429    public void SetSubscribersUsers(int newNumberOfUsers)
 430    {
 22431        model.subscribedUsers = newNumberOfUsers;
 432
 22433        if (subscribedUsersText == null)
 0434            return;
 435
 22436        if (!isEventCardModal)
 437        {
 17438            subscribedUsersText.text = newNumberOfUsers.ToString();
 17439        }
 440        else
 441        {
 5442            if (newNumberOfUsers > 0)
 4443                subscribedUsersText.text = string.Format(USERS_CONFIRMED_MESSAGE, newNumberOfUsers);
 444            else
 1445                subscribedUsersText.text = NOBODY_CONFIRMED_MESSAGE;
 446        }
 1447    }
 448
 449    public void SetCoords(Vector2Int newCoords)
 450    {
 19451        model.coords = newCoords;
 452
 19453        if (jumpinButton == null || !isEventCardModal)
 15454            return;
 455
 4456        jumpinButton.SetText($"{newCoords.x},{newCoords.y}");
 4457    }
 458
 459    public void SetLoadingIndicatorVisible(bool isVisible)
 460    {
 2461        imageContainer.SetActive(!isVisible);
 2462        eventInfoContainer.SetActive(!isVisible);
 2463        loadingSpinner.SetActive(isVisible);
 2464    }
 465
 466    internal void RebuildCardLayouts()
 467    {
 18468        if (contentVerticalLayout != null)
 3469            Utils.ForceRebuildLayoutImmediate(contentVerticalLayout.transform as RectTransform);
 470
 18471        if (infoVerticalLayout != null)
 3472            Utils.ForceRebuildLayoutImmediate(infoVerticalLayout.transform as RectTransform);
 473
 18474        if (timeAndPlayersHorizontalLayout != null)
 15475            Utils.ForceRebuildLayoutImmediate(timeAndPlayersHorizontalLayout.transform as RectTransform);
 18476    }
 477
 4478    internal void CloseModal() { Hide(); }
 479
 2480    internal void OnCloseActionTriggered(DCLAction_Trigger action) { CloseModal(); }
 481}