< Summary

Class:DCL.Chat.HUD.ChatChannelComponentView
Assembly:WorldChatWindowHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/WorldChatWindowHUD/ChatChannelComponentView.cs
Covered lines:34
Uncovered lines:22
Coverable lines:56
Total lines:157
Line coverage:60.7% (34 of 56)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Create()0%110100%
Awake()0%110100%
RefreshControl()0%110100%
Hide()0%110100%
Show()0%110100%
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%42600%

File(s)

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

#LineLine coverage
 1using System;
 2using System.Collections;
 3using TMPro;
 4using UnityEngine;
 5using UnityEngine.EventSystems;
 6using UnityEngine.UI;
 7
 8namespace DCL.Chat.HUD
 9{
 10    public class ChatChannelComponentView : BaseComponentView, IChatChannelWindowView, IComponentModelConfig<PublicChatM
 11        IPointerDownHandler
 12    {
 13        private const int MEMBERS_SECTION_WIDTH = 280;
 14
 15        [SerializeField] internal Button closeButton;
 16        [SerializeField] internal Button backButton;
 17        [SerializeField] internal Button optionsButton;
 18        [SerializeField] internal TMP_Text nameLabel;
 19        [SerializeField] internal ChatHUDView chatView;
 20        [SerializeField] internal PublicChatModel model;
 21        [SerializeField] internal GameObject messagesLoading;
 22        [SerializeField] internal ScrollRect scroll;
 23        [SerializeField] internal GameObject oldMessagesLoadingContainer;
 24        [SerializeField] internal ChannelContextualMenu contextualMenu;
 25        [SerializeField] internal TMP_Text memberCountLabel;
 26        [SerializeField] internal RectTransform collapsableArea;
 27        [SerializeField] internal Button membersIconButton;
 28        [SerializeField] internal ButtonComponentView expandMembersListButton;
 29        [SerializeField] internal ButtonComponentView collapseMembersListButton;
 30        [SerializeField] internal ChannelMembersComponentView membersList;
 31        [SerializeField] internal ToggleComponentView muteToggle;
 32
 33        private Coroutine alphaRoutine;
 34        private bool isMembersSectionOpen;
 35        private float collapsableAreaOriginalWidth;
 36
 37        public event Action OnClose;
 38        public event Action<bool> OnFocused;
 39        public event Action OnBack;
 40        public event Action OnRequireMoreMessages;
 41        public event Action OnLeaveChannel;
 42        public event Action OnShowMembersList;
 43        public event Action OnHideMembersList;
 44        public event Action<bool> OnMuteChanged;
 45
 046        public bool IsActive => gameObject.activeInHierarchy;
 147        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 static ChatChannelComponentView Create()
 54        {
 255            return Instantiate(Resources.Load<ChatChannelComponentView>("SocialBarV1/ChatChannelHUD"));
 56        }
 57
 58        public override void Awake()
 59        {
 260            base.Awake();
 261            backButton.onClick.AddListener(() => OnBack?.Invoke());
 262            closeButton.onClick.AddListener(() => OnClose?.Invoke());
 363            contextualMenu.OnLeave += () => OnLeaveChannel?.Invoke();
 264            optionsButton.onClick.AddListener(ShowOptionsMenu);
 65            // TODO: It was decided to temporally remove the loading of the channel's history. We'll re-enable it later.
 66            //scroll.onValueChanged.AddListener(scrollPos =>
 67            //{
 68            //    if (scrollPos.y > 0.995f)
 69            //        OnRequireMoreMessages?.Invoke();
 70            //});
 71
 272            collapsableAreaOriginalWidth = collapsableArea.sizeDelta.x;
 273            membersIconButton.onClick.AddListener(ToggleMembersSection);
 274            expandMembersListButton.onClick.AddListener(ToggleMembersSection);
 275            collapseMembersListButton.onClick.AddListener(ToggleMembersSection);
 276            muteToggle.OnSelectedChanged += (b, s, arg3) => OnMuteChanged?.Invoke(b);
 277            targetGraphicColor = membersIconButton.targetGraphic.color;
 278        }
 79
 80        public override void RefreshControl()
 81        {
 182            nameLabel.text = $"#{model.name}";
 183            memberCountLabel.text = model.memberCount.ToString();
 184            muteToggle.SetIsOnWithoutNotify(model.muted);
 185        }
 86
 187        public void Hide() => gameObject.SetActive(false);
 88
 289        public void Show() => gameObject.SetActive(true);
 90
 91        public void Setup(PublicChatModel model)
 92        {
 193            this.model = model;
 194            RefreshControl();
 195        }
 96
 97        public void SetLoadingMessagesActive(bool isActive)
 98        {
 299            if (messagesLoading == null) return;
 2100            messagesLoading.SetActive(isActive);
 2101        }
 102
 103        public void SetOldMessagesLoadingActive(bool isActive)
 104        {
 2105            if (oldMessagesLoadingContainer == null) return;
 2106            oldMessagesLoadingContainer.SetActive(isActive);
 2107            oldMessagesLoadingContainer.transform.SetAsFirstSibling();
 2108        }
 109
 0110        public void Configure(PublicChatModel newModel) => Setup(newModel);
 111
 0112        public void OnPointerDown(PointerEventData eventData) => OnFocused?.Invoke(true);
 113
 114        public override void OnPointerExit(PointerEventData eventData)
 115        {
 0116            base.OnPointerExit(eventData);
 0117            OnFocused?.Invoke(false);
 0118        }
 119
 120        private void ShowOptionsMenu()
 121        {
 1122            contextualMenu.SetHeaderTitle($"#{model.name}");
 1123            contextualMenu.Show();
 1124        }
 125
 126        private void ToggleMembersSection()
 127        {
 0128            isMembersSectionOpen = !isMembersSectionOpen;
 129
 0130            expandMembersListButton.gameObject.SetActive(!isMembersSectionOpen);
 0131            collapseMembersListButton.gameObject.SetActive(isMembersSectionOpen);
 132
 0133            contextualMenu.gameObject.transform.SetParent(collapsableArea);
 134
 0135            collapsableArea.sizeDelta = new Vector2(
 136                isMembersSectionOpen ?
 137                    collapsableAreaOriginalWidth + MEMBERS_SECTION_WIDTH :
 138                    collapsableAreaOriginalWidth,
 139                collapsableArea.sizeDelta.y);
 140
 0141            contextualMenu.gameObject.transform.SetParent(this.transform);
 142
 0143            if (isMembersSectionOpen)
 144            {
 0145                targetGraphicColor.a = 1f;
 0146                membersIconButton.targetGraphic.color = targetGraphicColor;
 0147                OnShowMembersList?.Invoke();
 148            }
 149            else
 150            {
 0151                targetGraphicColor.a = 0f;
 0152                membersIconButton.targetGraphic.color = targetGraphicColor;
 0153                OnHideMembersList?.Invoke();
 154            }
 0155        }
 156    }
 157}