< Summary

Class:DCL.Builder.SceneCardViewContextMenu
Assembly:BuilderProjectsPanel
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/HUD/ProjectsPanelHUD/Scripts/Views/SceneCardViewContextMenu.cs
Covered lines:41
Uncovered lines:30
Coverable lines:71
Total lines:166
Line coverage:57.7% (41 of 71)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%110100%
Update()0%2100%
Show(...)0%220100%
Show(...)0%110100%
Hide()0%110100%
Build(...)0%110100%
GetDeployedSceneConfig(...)0%3.213071.43%
GetProjectSceneConfig(...)0%330100%
HideIfClickedOutside()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/BuilderInWorld/HUD/ProjectsPanelHUD/Scripts/Views/SceneCardViewContextMenu.cs

#LineLine coverage
 1using System;
 2using UnityEngine;
 3using UnityEngine.UI;
 4
 5namespace DCL.Builder
 6{
 7    internal class SceneCardViewContextMenu : MonoBehaviour
 8    {
 9        [Header("Containers")]
 10        [SerializeField] internal GameObject headerContainer;
 11        [SerializeField] internal GameObject headerSeparator;
 12
 13        [Header("Buttons")]
 14        [SerializeField] internal Button settingsButton;
 15        [SerializeField] internal Button duplicateAsProjectButton;
 16        [SerializeField] internal Button duplicateButton;
 17        [SerializeField] internal Button downloadButton;
 18        [SerializeField] internal Button shareButton;
 19        [SerializeField] internal Button unpublishButton;
 20        [SerializeField] internal Button deleteButton;
 21        [SerializeField] internal Button quitContributorButton;
 22
 23        public event Action<string> OnSettingsPressed;
 24        public event Action<string> OnDuplicatePressed;
 25        public event Action<string> OnDownloadPressed;
 26        public event Action<string> OnSharePressed;
 27        public event Action<string> OnUnpublishPressed;
 28        public event Action<string> OnDeletePressed;
 29        public event Action<string> OnQuitContributorPressed;
 30
 31        [System.Flags]
 32        public enum ConfigFlags
 33        {
 34            Settings = 1,
 35            DuplicateAsProject = 2,
 36            Duplicate = 4,
 37            Download = 8,
 38            Share = 16,
 39            Unpublish = 32,
 40            Delete = 64,
 41            QuitContributor = 128
 42        }
 43
 44        private const ConfigFlags headerFlags = ConfigFlags.Settings;
 45
 46        private string sceneId;
 47        private RectTransform rectTransform;
 48
 49        private void Awake()
 50        {
 351            rectTransform = GetComponent<RectTransform>();
 52
 353            settingsButton.onClick.AddListener(() =>
 54            {
 055                OnSettingsPressed?.Invoke(sceneId);
 056                Hide();
 057            });
 358            duplicateAsProjectButton.onClick.AddListener(() =>
 59            {
 060                OnDuplicatePressed?.Invoke(sceneId);
 061                Hide();
 062            });
 363            duplicateButton.onClick.AddListener(() =>
 64            {
 065                OnDuplicatePressed?.Invoke(sceneId);
 066                Hide();
 067            });
 368            downloadButton.onClick.AddListener(() =>
 69            {
 070                OnDownloadPressed?.Invoke(sceneId);
 071                Hide();
 072            });
 373            shareButton.onClick.AddListener(() =>
 74            {
 075                OnSharePressed?.Invoke(sceneId);
 076                Hide();
 077            });
 378            unpublishButton.onClick.AddListener(() =>
 79            {
 080                OnUnpublishPressed?.Invoke(sceneId);
 081                Hide();
 082            });
 383            deleteButton.onClick.AddListener(() =>
 84            {
 085                OnDeletePressed?.Invoke(sceneId);
 086                Hide();
 087            });
 388            quitContributorButton.onClick.AddListener(() =>
 89            {
 090                OnQuitContributorPressed?.Invoke(sceneId);
 091                Hide();
 092            });
 393        }
 94
 095        private void Update() { HideIfClickedOutside(); }
 96
 97        public void Show(string sceneId, bool isSceneDeployed, bool isOwnerOrOperator, bool isContributor)
 98        {
 399            ConfigFlags config = isSceneDeployed ? GetDeployedSceneConfig(isOwnerOrOperator, isContributor) : GetProject
 100
 3101            Show(sceneId, config);
 3102        }
 103
 104        public void Show(string sceneId, ConfigFlags configFlags)
 105        {
 3106            this.sceneId = sceneId;
 3107            Build(configFlags);
 3108            gameObject.SetActive(true);
 3109        }
 110
 34111        public void Hide() { gameObject.SetActive(false); }
 112
 113        private void Build(ConfigFlags flags)
 114        {
 3115            headerContainer.SetActive((flags & headerFlags) != 0);
 3116            headerSeparator.SetActive((flags & headerFlags) != 0);
 3117            settingsButton.gameObject.SetActive((flags & ConfigFlags.Settings) != 0);
 3118            duplicateAsProjectButton.gameObject.SetActive((flags & ConfigFlags.DuplicateAsProject) != 0);
 3119            duplicateButton.gameObject.SetActive((flags & ConfigFlags.Duplicate) != 0);
 3120            downloadButton.gameObject.SetActive((flags & ConfigFlags.Download) != 0);
 3121            shareButton.gameObject.SetActive((flags & ConfigFlags.Share) != 0);
 3122            unpublishButton.gameObject.SetActive((flags & ConfigFlags.Unpublish) != 0);
 3123            deleteButton.gameObject.SetActive((flags & ConfigFlags.Delete) != 0);
 3124            quitContributorButton.gameObject.SetActive((flags & ConfigFlags.QuitContributor) != 0);
 3125        }
 126
 127        private ConfigFlags GetDeployedSceneConfig(bool isOwnerOrOperator, bool isContributor)
 128        {
 1129            ConfigFlags config = 0;
 1130            if (isOwnerOrOperator)
 131            {
 1132                config |= ConfigFlags.Unpublish;
 1133            }
 0134            else if (isContributor)
 135            {
 0136                config |= ConfigFlags.QuitContributor;
 137            }
 138
 1139            return config;
 140        }
 141
 142        private ConfigFlags GetProjectSceneConfig(bool isOwnerOrOperator, bool isContributor)
 143        {
 2144            ConfigFlags config = ConfigFlags.Duplicate | ConfigFlags.Download | ConfigFlags.Share;
 2145            if (isOwnerOrOperator)
 146            {
 1147                config |= ConfigFlags.Settings | ConfigFlags.Delete;
 1148            }
 1149            else if (isContributor)
 150            {
 1151                config |= ConfigFlags.QuitContributor;
 152            }
 153
 2154            return config;
 155        }
 156
 157        private void HideIfClickedOutside()
 158        {
 0159            if (Input.GetMouseButtonDown(0) &&
 160                !RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition))
 161            {
 0162                Hide();
 163            }
 0164        }
 165    }
 166}