< Summary

Class:DCL.Social.Friends.SentFriendRequestHUDComponentView
Assembly:FriendRequestHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/FriendRequestHUD/SentFriendRequestHUDComponentView.cs
Covered lines:60
Uncovered lines:14
Coverable lines:74
Total lines:174
Line coverage:81% (60 of 74)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Create()0%110100%
Awake()0%220100%
Dispose()0%220100%
RefreshControl()0%880100%
Close()0%2100%
SetSenderProfilePicture(...)0%110100%
Show(...)0%110100%
SetRecipientName(...)0%110100%
SetRecipientProfilePicture(...)0%110100%
ShowPendingToCancel()0%110100%
SetBodyMessage(...)0%110100%
SetTimestamp(...)0%110100%
SetSortingOrder(...)0%2100%
ShowConfirmationToast()0%2100%
HideConfirmationToast()0%110100%
SwitchToCancelButton()0%2100%
SwitchToTryCancelButton()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/FriendRequestHUD/SentFriendRequestHUDComponentView.cs

#LineLine coverage
 1using DCL.Helpers;
 2using System;
 3using System.Globalization;
 4using TMPro;
 5using UIComponents.Scripts.Components;
 6using UnityEngine;
 7using UnityEngine.UI;
 8
 9namespace DCL.Social.Friends
 10{
 11    public class SentFriendRequestHUDComponentView : BaseComponentView<SentFriendRequestHUDViewModel>, ISentFriendReques
 12    {
 13        [SerializeField] internal TMP_Text nameLabel;
 14        [SerializeField] internal Button[] closeButtons;
 15        [SerializeField] internal GameObject cancelButtonsContainer;
 16        [SerializeField] internal Button cancelButton;
 17        [SerializeField] internal Button tryCancelButton;
 18        [SerializeField] internal GameObject pendingToCancelContainer;
 19        [SerializeField] internal Button openPassportButton;
 20        [SerializeField] internal TMP_InputField messageBodyInput;
 21        [SerializeField] internal ImageComponentView profileImage;
 22        [SerializeField] internal ImageComponentView senderProfileImage;
 23        [SerializeField] internal TMP_Text dateLabel;
 24        [SerializeField] internal GameObject bodyMessageContainer;
 25        [SerializeField] internal ShowHideAnimator confirmationToast;
 26        [SerializeField] internal Button rejectOperationButton;
 27        [SerializeField] internal Canvas currentCanvas;
 28
 29        private ILazyTextureObserver lastRecipientProfilePictureObserver;
 30        private ILazyTextureObserver lastSenderProfilePictureObserver;
 31
 32        public event Action OnCancel;
 33        public event Action OnClose;
 34        public event Action OnOpenProfile;
 35
 36        public static SentFriendRequestHUDComponentView Create() =>
 1037            Instantiate(
 38                Resources.Load<SentFriendRequestHUDComponentView>("FriendRequests/SentFriendRequestHUD"));
 39
 40        public override void Awake()
 41        {
 1042            base.Awake();
 43
 6044            foreach (var button in closeButtons)
 2045                button.onClick.AddListener(() => OnClose?.Invoke());
 46
 1047            cancelButton.onClick.AddListener(() => OnCancel?.Invoke());
 48
 1049            tryCancelButton.onClick.AddListener(() =>
 50            {
 051                ShowConfirmationToast();
 052                SwitchToCancelButton();
 053            });
 54
 1055            rejectOperationButton.onClick.AddListener(() =>
 56            {
 057                HideConfirmationToast();
 058                SwitchToTryCancelButton();
 059            });
 60
 1061            openPassportButton.onClick.AddListener(() => OnOpenProfile?.Invoke());
 1062        }
 63
 64        public override void Dispose()
 65        {
 2066            base.Dispose();
 2067            model.RecipientProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 468        }
 69
 70        public override void RefreshControl()
 71        {
 1772            cancelButton.interactable = model.State != SentFriendRequestHUDViewModel.LayoutState.Pending;
 1773            tryCancelButton.interactable = model.State != SentFriendRequestHUDViewModel.LayoutState.Pending;
 1774            cancelButtonsContainer.SetActive(model.State != SentFriendRequestHUDViewModel.LayoutState.Pending);
 1775            pendingToCancelContainer.SetActive(model.State == SentFriendRequestHUDViewModel.LayoutState.Pending);
 76
 10277            foreach (Button button in closeButtons)
 3478                button.interactable = model.State != SentFriendRequestHUDViewModel.LayoutState.Pending;
 79
 1780            nameLabel.text = model.Name;
 1781            messageBodyInput.text = model.BodyMessage;
 1782            bodyMessageContainer.SetActive(!string.IsNullOrEmpty(model.BodyMessage));
 83
 84            // the load of the profile picture gets stuck if the same listener is registered many times
 1785            if (lastRecipientProfilePictureObserver != model.RecipientProfilePictureObserver)
 86            {
 487                lastRecipientProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 488                model.RecipientProfilePictureObserver?.AddListener(profileImage.SetImage);
 489                lastRecipientProfilePictureObserver = model.RecipientProfilePictureObserver;
 90            }
 91
 92            // the load of the profile picture gets stuck if the same listener is registered many times
 1793            if (lastSenderProfilePictureObserver != model.SenderProfilePictureObserver)
 94            {
 495                lastSenderProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 496                model.SenderProfilePictureObserver?.AddListener(senderProfileImage.SetImage);
 497                lastSenderProfilePictureObserver = model.SenderProfilePictureObserver;
 98            }
 1799        }
 100
 0101        public void Close() => base.Hide();
 102
 103        public void SetSenderProfilePicture(ILazyTextureObserver textureObserver)
 104        {
 6105            model.SenderProfilePictureObserver = textureObserver;
 6106            RefreshControl();
 6107        }
 108
 109        public override void Show(bool instant = false)
 110        {
 1111            base.Show(instant);
 1112            HideConfirmationToast();
 1113            SwitchToTryCancelButton();
 1114            model.State = SentFriendRequestHUDViewModel.LayoutState.Default;
 1115            RefreshControl();
 1116        }
 117
 118        public void SetRecipientName(string name)
 119        {
 1120            model.Name = name;
 1121            RefreshControl();
 1122        }
 123
 124        public void SetRecipientProfilePicture(ILazyTextureObserver textureObserver)
 125        {
 6126            model.RecipientProfilePictureObserver = textureObserver;
 6127            RefreshControl();
 6128        }
 129
 130        public void ShowPendingToCancel()
 131        {
 1132            model.State = SentFriendRequestHUDViewModel.LayoutState.Pending;
 1133            HideConfirmationToast();
 1134            RefreshControl();
 1135        }
 136
 137        public void SetBodyMessage(string messageBody)
 138        {
 2139            model.BodyMessage = messageBody;
 2140            RefreshControl();
 2141        }
 142
 143        public void SetTimestamp(DateTime date)
 144        {
 1145            dateLabel.text = date.Date.ToString("MMM dd", new CultureInfo("en-US")).ToUpper();
 1146        }
 147
 0148        public void SetSortingOrder(int sortingOrder) => currentCanvas.sortingOrder = sortingOrder;
 149
 150        private void ShowConfirmationToast()
 151        {
 0152            rejectOperationButton.gameObject.SetActive(true);
 0153            confirmationToast.Show();
 0154        }
 155
 156        private void HideConfirmationToast()
 157        {
 2158            rejectOperationButton.gameObject.SetActive(false);
 2159            confirmationToast.Hide();
 2160        }
 161
 162        private void SwitchToCancelButton()
 163        {
 0164            tryCancelButton.gameObject.SetActive(false);
 0165            cancelButton.gameObject.SetActive(true);
 0166        }
 167
 168        private void SwitchToTryCancelButton()
 169        {
 1170            tryCancelButton.gameObject.SetActive(true);
 1171            cancelButton.gameObject.SetActive(false);
 1172        }
 173    }
 174}