< 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:0
Uncovered lines:74
Coverable lines:74
Total lines:174
Line coverage:0% (0 of 74)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:17
Method coverage:0% (0 of 17)

Metrics

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

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() =>
 037            Instantiate(
 38                Resources.Load<SentFriendRequestHUDComponentView>("FriendRequests/SentFriendRequestHUD"));
 39
 40        public override void Awake()
 41        {
 042            base.Awake();
 43
 044            foreach (var button in closeButtons)
 045                button.onClick.AddListener(() => OnClose?.Invoke());
 46
 047            cancelButton.onClick.AddListener(() => OnCancel?.Invoke());
 48
 049            tryCancelButton.onClick.AddListener(() =>
 50            {
 051                ShowConfirmationToast();
 052                SwitchToCancelButton();
 053            });
 54
 055            rejectOperationButton.onClick.AddListener(() =>
 56            {
 057                HideConfirmationToast();
 058                SwitchToTryCancelButton();
 059            });
 60
 061            openPassportButton.onClick.AddListener(() => OnOpenProfile?.Invoke());
 062        }
 63
 64        public override void Dispose()
 65        {
 066            base.Dispose();
 067            model.RecipientProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 068        }
 69
 70        public override void RefreshControl()
 71        {
 072            cancelButton.interactable = model.State != SentFriendRequestHUDViewModel.LayoutState.Pending;
 073            tryCancelButton.interactable = model.State != SentFriendRequestHUDViewModel.LayoutState.Pending;
 074            cancelButtonsContainer.SetActive(model.State != SentFriendRequestHUDViewModel.LayoutState.Pending);
 075            pendingToCancelContainer.SetActive(model.State == SentFriendRequestHUDViewModel.LayoutState.Pending);
 76
 077            foreach (Button button in closeButtons)
 078                button.interactable = model.State != SentFriendRequestHUDViewModel.LayoutState.Pending;
 79
 080            nameLabel.text = model.Name;
 081            messageBodyInput.text = model.BodyMessage;
 082            bodyMessageContainer.SetActive(!string.IsNullOrEmpty(model.BodyMessage));
 83
 84            // the load of the profile picture gets stuck if the same listener is registered many times
 085            if (lastRecipientProfilePictureObserver != model.RecipientProfilePictureObserver)
 86            {
 087                lastRecipientProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 088                model.RecipientProfilePictureObserver?.AddListener(profileImage.SetImage);
 089                lastRecipientProfilePictureObserver = model.RecipientProfilePictureObserver;
 90            }
 91
 92            // the load of the profile picture gets stuck if the same listener is registered many times
 093            if (lastSenderProfilePictureObserver != model.SenderProfilePictureObserver)
 94            {
 095                lastSenderProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 096                model.SenderProfilePictureObserver?.AddListener(senderProfileImage.SetImage);
 097                lastSenderProfilePictureObserver = model.SenderProfilePictureObserver;
 98            }
 099        }
 100
 0101        public void Close() => base.Hide();
 102
 103        public void SetSenderProfilePicture(ILazyTextureObserver textureObserver)
 104        {
 0105            model.SenderProfilePictureObserver = textureObserver;
 0106            RefreshControl();
 0107        }
 108
 109        public override void Show(bool instant = false)
 110        {
 0111            base.Show(instant);
 0112            HideConfirmationToast();
 0113            SwitchToTryCancelButton();
 0114            model.State = SentFriendRequestHUDViewModel.LayoutState.Default;
 0115            RefreshControl();
 0116        }
 117
 118        public void SetRecipientName(string name)
 119        {
 0120            model.Name = name;
 0121            RefreshControl();
 0122        }
 123
 124        public void SetRecipientProfilePicture(ILazyTextureObserver textureObserver)
 125        {
 0126            model.RecipientProfilePictureObserver = textureObserver;
 0127            RefreshControl();
 0128        }
 129
 130        public void ShowPendingToCancel()
 131        {
 0132            model.State = SentFriendRequestHUDViewModel.LayoutState.Pending;
 0133            HideConfirmationToast();
 0134            RefreshControl();
 0135        }
 136
 137        public void SetBodyMessage(string messageBody)
 138        {
 0139            model.BodyMessage = messageBody;
 0140            RefreshControl();
 0141        }
 142
 143        public void SetTimestamp(DateTime date)
 144        {
 0145            dateLabel.text = date.Date.ToString("MMM dd", new CultureInfo("en-US")).ToUpper();
 0146        }
 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        {
 0158            rejectOperationButton.gameObject.SetActive(false);
 0159            confirmationToast.Hide();
 0160        }
 161
 162        private void SwitchToCancelButton()
 163        {
 0164            tryCancelButton.gameObject.SetActive(false);
 0165            cancelButton.gameObject.SetActive(true);
 0166        }
 167
 168        private void SwitchToTryCancelButton()
 169        {
 0170            tryCancelButton.gameObject.SetActive(true);
 0171            cancelButton.gameObject.SetActive(false);
 0172        }
 173    }
 174}