< Summary

Class:DCL.Chat.HUD.PrivateChatEntry
Assembly:WorldChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/PrivateChatEntry.cs
Covered lines:48
Uncovered lines:12
Coverable lines:60
Total lines:136
Line coverage:80% (48 of 60)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Create()0%110100%
Awake()0%110100%
Initialize(...)0%110100%
Configure(...)0%110100%
RefreshControl()0%220100%
HandleUserBlocked(...)0%6200%
SetBlockStatus(...)0%110100%
SetPresence(...)0%330100%
Dock(...)0%2100%
IsVisible(...)0%2.152066.67%
EnableAvatarSnapshotFetching()0%220100%
DisableAvatarSnapshotFetching()0%220100%
HandleContextMenuHidden()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/PrivateChatEntry.cs

#LineLine coverage
 1using System;
 2using TMPro;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6namespace DCL.Chat.HUD
 7{
 8    public class PrivateChatEntry : BaseComponentView, IComponentModelConfig<PrivateChatEntryModel>
 9    {
 10        [SerializeField] internal Button openChatButton;
 11        [SerializeField] internal PrivateChatEntryModel model;
 12        [SerializeField] internal TMP_Text userNameLabel;
 13        [SerializeField] internal TMP_Text lastMessageLabel;
 14        [SerializeField] internal ImageComponentView picture;
 15        [SerializeField] internal UnreadNotificationBadge unreadNotifications;
 16        [SerializeField] internal Button optionsButton;
 17        [SerializeField] internal GameObject blockedContainer;
 18        [SerializeField] internal GameObject onlineStatusContainer;
 19        [SerializeField] internal GameObject offlineStatusContainer;
 20        [SerializeField] internal RectTransform userContextMenuPositionReference;
 21
 22        private UserContextMenu userContextMenu;
 23        private IChatController chatController;
 24
 9325        public PrivateChatEntryModel Model => model;
 26
 27        public event Action<PrivateChatEntry> OnOpenChat;
 28
 29        public static PrivateChatEntry Create()
 30        {
 731            return Instantiate(Resources.Load<PrivateChatEntry>("SocialBarV1/WhisperChannelElement"));
 32        }
 33
 34        public override void Awake()
 35        {
 5036            base.Awake();
 5037            optionsButton.onClick.AddListener(() =>
 38            {
 039                userContextMenu.Show(model.userId);
 040                Dock(userContextMenu);
 041            });
 5242            openChatButton.onClick.AddListener(() => OnOpenChat?.Invoke(this));
 5043            onFocused += isFocused =>
 44            {
 9345                if (optionsButton == null) return;
 9346                var isContextualMenuOpenWithThisUser = userContextMenu != null
 47                                                       && userContextMenu.isVisible
 48                                                       && userContextMenu.UserId == model.userId;
 9349                optionsButton.gameObject.SetActive(isFocused || isContextualMenuOpenWithThisUser);
 9350            };
 5051        }
 52
 53        public void Initialize(IChatController chatController,
 54            UserContextMenu userContextMenu)
 55        {
 4156            this.chatController = chatController;
 4157            this.userContextMenu = userContextMenu;
 4158            userContextMenu.OnHide -= HandleContextMenuHidden;
 4159            userContextMenu.OnHide += HandleContextMenuHidden;
 4160            userContextMenu.OnBlock -= HandleUserBlocked;
 4161            userContextMenu.OnBlock += HandleUserBlocked;
 4162        }
 63
 64        public void Configure(PrivateChatEntryModel newModel)
 65        {
 4866            model = newModel;
 4867            RefreshControl();
 4868        }
 69
 70        public override void RefreshControl()
 71        {
 4872            userNameLabel.text = model.userName;
 4873            lastMessageLabel.text = model.lastMessage;
 4874            lastMessageLabel.gameObject.SetActive(!string.IsNullOrEmpty(model.lastMessage));
 4875            SetBlockStatus(model.isBlocked);
 4876            SetPresence(model.isOnline);
 4877            unreadNotifications.Initialize(chatController, model.userId);
 78
 4879            if (model.imageFetchingEnabled)
 180                EnableAvatarSnapshotFetching();
 81            else
 4782                DisableAvatarSnapshotFetching();
 4783        }
 84
 85        private void HandleUserBlocked(string userId, bool blocked)
 86        {
 087            if (userId != model.userId) return;
 088            SetBlockStatus(blocked);
 089        }
 90
 91        public void SetBlockStatus(bool isBlocked)
 92        {
 4893            model.isBlocked = isBlocked;
 4894            blockedContainer.SetActive(isBlocked);
 4895        }
 96
 97        public void SetPresence(bool isOnline)
 98        {
 4899            model.isOnline = isOnline;
 48100            onlineStatusContainer.SetActive(isOnline && !model.isBlocked);
 48101            offlineStatusContainer.SetActive(!isOnline && !model.isBlocked);
 48102        }
 103
 104        private void Dock(UserContextMenu userContextMenu)
 105        {
 0106            var menuTransform = (RectTransform) userContextMenu.transform;
 0107            menuTransform.pivot = userContextMenuPositionReference.pivot;
 0108            menuTransform.position = userContextMenuPositionReference.position;
 0109        }
 110
 111        public bool IsVisible(RectTransform container)
 112        {
 19113            if (!gameObject.activeSelf) return false;
 19114            return ((RectTransform) transform).CountCornersVisibleFrom(container) > 0;
 115        }
 116
 117        public void EnableAvatarSnapshotFetching()
 118        {
 45119            if (model.imageFetchingEnabled) return;
 43120            picture.Configure(new ImageComponentModel {uri = model.pictureUrl});
 43121            model.imageFetchingEnabled = true;
 43122        }
 123
 124        public void DisableAvatarSnapshotFetching()
 125        {
 95126            if (!model.imageFetchingEnabled) return;
 1127            picture.SetImage((string) null);
 1128            model.imageFetchingEnabled = false;
 1129        }
 130
 131        private void HandleContextMenuHidden()
 132        {
 0133            optionsButton.gameObject.SetActive(false);
 0134        }
 135    }
 136}