< Summary

Class:DCL.Social.Friends.CancelFriendRequestHUDComponentView
Assembly:FriendRequestHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/FriendRequestHUD/CancelFriendRequestHUDComponentView.cs
Covered lines:61
Uncovered lines:16
Coverable lines:77
Total lines:193
Line coverage:79.2% (61 of 77)
Covered branches:0
Total branches:0

Metrics

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

File(s)

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

#LineLine coverage
 1using DCL.Helpers;
 2using System;
 3using TMPro;
 4using UnityEngine;
 5using UnityEngine.UI;
 6
 7namespace DCL.Social.Friends
 8{
 9    public class CancelFriendRequestHUDComponentView : BaseComponentView, ICancelFriendRequestHUDView
 10    {
 11        [SerializeField] internal GameObject defaultContainer;
 12        [SerializeField] internal GameObject failedContainer;
 13        [SerializeField] internal TMP_Text nameLabel;
 14        [SerializeField] internal Button[] closeButtons;
 15        [SerializeField] internal Button cancelButton;
 16        [SerializeField] internal Button retryButton;
 17        [SerializeField] internal Button openPassportButton;
 18        [SerializeField] internal TMP_InputField messageBodyInput;
 19        [SerializeField] internal ImageComponentView profileImage;
 20        [SerializeField] internal ImageComponentView senderProfileImage;
 21        [SerializeField] internal TMP_Text dateLabel;
 22        [SerializeField] internal GameObject bodyMessageContainer;
 23        [SerializeField] internal ShowHideAnimator confirmationToast;
 24        [SerializeField] internal Button rejectOperationButton;
 25
 1226        private readonly Model model = new Model();
 27        private ILazyTextureObserver lastRecipientProfilePictureObserver;
 28        private ILazyTextureObserver lastSenderProfilePictureObserver;
 29        private bool cancelConfirmed;
 30
 31        public event Action OnCancel;
 32        public event Action OnClose;
 33        public event Action OnOpenProfile;
 34
 35        public static CancelFriendRequestHUDComponentView Create() =>
 1136            Instantiate(
 37                Resources.Load<CancelFriendRequestHUDComponentView>("FriendRequests/CancelFriendRequestHUD"));
 38
 39        public override void Awake()
 40        {
 1141            base.Awake();
 42
 8843            foreach (var button in closeButtons)
 3344                button.onClick.AddListener(() => OnClose?.Invoke());
 45
 1146            cancelButton.onClick.AddListener(() =>
 47            {
 048                if (cancelConfirmed)
 49                {
 050                    OnCancel?.Invoke();
 051                    cancelConfirmed = false;
 52                }
 53                else
 54                {
 055                    cancelConfirmed = true;
 056                    ShowConfirmationToast();
 57                }
 058            });
 59
 1160            rejectOperationButton.onClick.AddListener(() =>
 61            {
 062                cancelConfirmed = false;
 063                HideConfirmationToast();
 064            });
 1165            retryButton.onClick.AddListener(() => OnCancel?.Invoke());
 1166            openPassportButton.onClick.AddListener(() => OnOpenProfile?.Invoke());
 1167        }
 68
 69        public override void Dispose()
 70        {
 2271            base.Dispose();
 2272            model.RecipientProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 473        }
 74
 75        public override void RefreshControl()
 76        {
 1777            defaultContainer.SetActive(model.State is Model.LayoutState.Default or Model.LayoutState.Pending);
 1778            failedContainer.SetActive(model.State == Model.LayoutState.Failed);
 1779            cancelButton.interactable = model.State != Model.LayoutState.Pending;
 80
 13681            foreach (Button button in closeButtons)
 5182                button.interactable = model.State != Model.LayoutState.Pending;
 83
 1784            nameLabel.text = model.Name;
 1785            messageBodyInput.text = model.BodyMessage;
 1786            bodyMessageContainer.SetActive(!string.IsNullOrEmpty(model.BodyMessage));
 87
 88            // the load of the profile picture gets stuck if the same listener is registered many times
 1789            if (lastRecipientProfilePictureObserver != model.RecipientProfilePictureObserver)
 90            {
 491                lastRecipientProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 492                model.RecipientProfilePictureObserver?.AddListener(profileImage.SetImage);
 493                lastRecipientProfilePictureObserver = model.RecipientProfilePictureObserver;
 94            }
 95
 96            // the load of the profile picture gets stuck if the same listener is registered many times
 1797            if (lastSenderProfilePictureObserver != model.SenderProfilePictureObserver)
 98            {
 499                lastSenderProfilePictureObserver?.RemoveListener(profileImage.SetImage);
 4100                model.SenderProfilePictureObserver?.AddListener(senderProfileImage.SetImage);
 4101                lastSenderProfilePictureObserver = model.SenderProfilePictureObserver;
 102            }
 17103        }
 104
 105        public void Close()
 106        {
 1107            base.Hide(instant: true);
 1108            gameObject.SetActive(false);
 1109        }
 110
 111        public void SetSenderProfilePicture(ILazyTextureObserver textureObserver)
 112        {
 6113            model.SenderProfilePictureObserver = textureObserver;
 6114            RefreshControl();
 6115        }
 116
 117        public void Show()
 118        {
 1119            cancelConfirmed = false;
 1120            gameObject.SetActive(true);
 1121            base.Show(instant: true);
 1122            HideConfirmationToast();
 1123            model.State = Model.LayoutState.Default;
 1124            RefreshControl();
 1125        }
 126
 127        public void SetRecipientName(string name)
 128        {
 1129            model.Name = name;
 1130            RefreshControl();
 1131        }
 132
 133        public void SetRecipientProfilePicture(ILazyTextureObserver textureObserver)
 134        {
 6135            model.RecipientProfilePictureObserver = textureObserver;
 6136            RefreshControl();
 6137        }
 138
 139        public void ShowPendingToCancel()
 140        {
 1141            model.State = Model.LayoutState.Pending;
 1142            HideConfirmationToast();
 1143            RefreshControl();
 1144        }
 145
 146        public void ShowCancelFailed()
 147        {
 0148            model.State = Model.LayoutState.Failed;
 0149            HideConfirmationToast();
 0150            RefreshControl();
 0151        }
 152
 153        public void SetBodyMessage(string messageBody)
 154        {
 2155            model.BodyMessage = messageBody;
 2156            RefreshControl();
 2157        }
 158
 159        public void SetTimestamp(DateTime date)
 160        {
 1161            dateLabel.text = date.Date.ToString("M");
 1162        }
 163
 164        private void ShowConfirmationToast()
 165        {
 0166            rejectOperationButton.gameObject.SetActive(true);
 0167            confirmationToast.Show();
 0168        }
 169
 170
 171        private void HideConfirmationToast()
 172        {
 2173            rejectOperationButton.gameObject.SetActive(false);
 2174            confirmationToast.Hide();
 2175        }
 176
 177        private class Model
 178        {
 179            public string Name;
 180            public LayoutState State;
 181            public ILazyTextureObserver RecipientProfilePictureObserver;
 182            public ILazyTextureObserver SenderProfilePictureObserver;
 183            public string BodyMessage;
 184
 185            public enum LayoutState
 186            {
 187                Default,
 188                Pending,
 189                Failed
 190            }
 191        }
 192    }
 193}