< Summary

Class:DCL.Social.Chat.ChatChannelComponentView
Assembly:WorldChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/ChatChannelComponentView.cs
Covered lines:47
Uncovered lines:12
Coverable lines:59
Total lines:157
Line coverage:79.6% (47 of 59)
Covered branches:0
Total branches:0
Covered methods:11
Total methods:17
Method coverage:64.7% (11 of 17)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%110100%
RefreshControl()0%110100%
Hide()0%110100%
Show()0%220100%
Setup(...)0%110100%
SetLoadingMessagesActive(...)0%2.062075%
SetOldMessagesLoadingActive(...)0%2.032080%
Configure(...)0%2100%
OnPointerDown(...)0%6200%
OnPointerExit(...)0%6200%
ShowOptionsMenu()0%110100%
ToggleMembersSection()0%6.846071.43%

File(s)

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

#LineLine coverage
 1using System;
 2using TMPro;
 3using UnityEngine;
 4using UnityEngine.EventSystems;
 5using UnityEngine.UI;
 6
 7namespace DCL.Social.Chat
 8{
 9    public class ChatChannelComponentView : BaseComponentView, IChatChannelWindowView, IComponentModelConfig<PublicChatM
 10        IPointerDownHandler
 11    {
 12        private const int MEMBERS_SECTION_WIDTH = 280;
 13
 14        [SerializeField] internal Button closeButton;
 15        [SerializeField] internal Button backButton;
 16        [SerializeField] internal Button optionsButton;
 17        [SerializeField] internal TMP_Text nameLabel;
 18        [SerializeField] internal ChatHUDView chatView;
 19        [SerializeField] internal PublicChatModel model;
 20        [SerializeField] internal GameObject messagesLoading;
 21        [SerializeField] internal ScrollRect scroll;
 22        [SerializeField] internal GameObject oldMessagesLoadingContainer;
 23        [SerializeField] internal ChannelContextualMenu contextualMenu;
 24        [SerializeField] internal TMP_Text memberCountLabel;
 25        [SerializeField] internal RectTransform collapsableArea;
 26        [SerializeField] internal Button membersIconButton;
 27        [SerializeField] internal ButtonComponentView expandMembersListButton;
 28        [SerializeField] internal ButtonComponentView collapseMembersListButton;
 29        [SerializeField] internal ChannelMembersComponentView membersList;
 30        [SerializeField] internal ToggleComponentView muteToggle;
 31
 32        private Coroutine alphaRoutine;
 33        private bool isMembersSectionOpen;
 34        private float collapsableAreaOriginalWidth;
 35
 36        public event Action OnClose;
 37        public event Action<bool> OnFocused;
 38        public event Action OnBack;
 39        public event Action OnRequireMoreMessages;
 40        public event Action OnLeaveChannel;
 41        public event Action OnShowMembersList;
 42        public event Action OnHideMembersList;
 43        public event Action<bool> OnMuteChanged;
 44        public event Action<string> OnCopyNameRequested;
 45
 046        public bool IsActive => gameObject.activeInHierarchy;
 347        public IChatHUDComponentView ChatHUD => chatView;
 148        public IChannelMembersComponentView ChannelMembersHUD => membersList;
 049        public RectTransform Transform => (RectTransform) transform;
 050        public bool IsFocused => isFocused;
 51        private Color targetGraphicColor;
 52
 53        public override void Awake()
 54        {
 255            base.Awake();
 256            backButton.onClick.AddListener(() => OnBack?.Invoke());
 257            closeButton.onClick.AddListener(() => OnClose?.Invoke());
 358            contextualMenu.OnLeave += () => OnLeaveChannel?.Invoke();
 259            contextualMenu.OnNameCopied += s => OnCopyNameRequested?.Invoke(s);
 260            optionsButton.onClick.AddListener(ShowOptionsMenu);
 61            // TODO: It was decided to temporally remove the loading of the channel's history. We'll re-enable it later.
 62            //scroll.onValueChanged.AddListener(scrollPos =>
 63            //{
 64            //    if (scrollPos.y > 0.995f)
 65            //        OnRequireMoreMessages?.Invoke();
 66            //});
 67
 268            collapsableAreaOriginalWidth = collapsableArea.sizeDelta.x;
 269            membersIconButton.onClick.AddListener(ToggleMembersSection);
 270            expandMembersListButton.onClick.AddListener(ToggleMembersSection);
 271            collapseMembersListButton.onClick.AddListener(ToggleMembersSection);
 272            muteToggle.OnSelectedChanged += (b, s, arg3) => OnMuteChanged?.Invoke(b);
 273            targetGraphicColor = membersIconButton.targetGraphic.color;
 274        }
 75
 76        public override void RefreshControl()
 77        {
 178            nameLabel.text = $"#{model.name}";
 179            memberCountLabel.text = model.memberCount.ToString();
 180            muteToggle.SetIsOnWithoutNotify(model.muted);
 181        }
 82
 183        public void Hide() => gameObject.SetActive(false);
 84
 85        public void Show()
 86        {
 287            gameObject.SetActive(true);
 88
 289            if (!isMembersSectionOpen)
 190                ToggleMembersSection();
 291        }
 92
 93        public void Setup(PublicChatModel model)
 94        {
 195            this.model = model;
 196            RefreshControl();
 197        }
 98
 99        public void SetLoadingMessagesActive(bool isActive)
 100        {
 2101            if (messagesLoading == null) return;
 2102            messagesLoading.SetActive(isActive);
 2103        }
 104
 105        public void SetOldMessagesLoadingActive(bool isActive)
 106        {
 2107            if (oldMessagesLoadingContainer == null) return;
 2108            oldMessagesLoadingContainer.SetActive(isActive);
 2109            oldMessagesLoadingContainer.transform.SetAsFirstSibling();
 2110        }
 111
 0112        public void Configure(PublicChatModel newModel) => Setup(newModel);
 113
 0114        public void OnPointerDown(PointerEventData eventData) => OnFocused?.Invoke(true);
 115
 116        public override void OnPointerExit(PointerEventData eventData)
 117        {
 0118            base.OnPointerExit(eventData);
 0119            OnFocused?.Invoke(false);
 0120        }
 121
 122        private void ShowOptionsMenu()
 123        {
 1124            contextualMenu.SetHeaderTitle($"#{model.name}");
 1125            contextualMenu.Show();
 1126        }
 127
 128        private void ToggleMembersSection()
 129        {
 1130            isMembersSectionOpen = !isMembersSectionOpen;
 131
 1132            expandMembersListButton.gameObject.SetActive(!isMembersSectionOpen);
 1133            collapseMembersListButton.gameObject.SetActive(isMembersSectionOpen);
 134
 1135            contextualMenu.gameObject.transform.SetParent(collapsableArea);
 136
 1137            collapsableArea.SetSizeWithCurrentAnchors(
 138                RectTransform.Axis.Horizontal,
 139                isMembersSectionOpen ? collapsableAreaOriginalWidth + MEMBERS_SECTION_WIDTH : collapsableAreaOriginalWid
 140
 1141            contextualMenu.gameObject.transform.SetParent(this.transform);
 142
 1143            if (isMembersSectionOpen)
 144            {
 1145                targetGraphicColor.a = 1f;
 1146                membersIconButton.targetGraphic.color = targetGraphicColor;
 1147                OnShowMembersList?.Invoke();
 148            }
 149            else
 150            {
 0151                targetGraphicColor.a = 0f;
 0152                membersIconButton.targetGraphic.color = targetGraphicColor;
 0153                OnHideMembersList?.Invoke();
 154            }
 0155        }
 156    }
 157}