From a6b9638ce9624c027f1e4b7e4c9396305d4fbea5 Mon Sep 17 00:00:00 2001 From: lorenzo-ranciaffi Date: Wed, 22 Jan 2025 12:59:15 +0100 Subject: [PATCH] wip request context menu --- .../UI/FriendPanel/FriendsPanelController.cs | 1 + .../FriendRequestContextMenuConfiguration.cs | 29 +++++++++++++++++++ ...endRequestContextMenuConfiguration.cs.meta | 3 ++ .../FriendRequestContextMenuSettings.asset | 21 ++++++++++++++ ...riendRequestContextMenuSettings.asset.meta | 8 +++++ .../Sections/Requests/RequestUserView.cs | 2 +- .../Requests/RequestsRequestManager.cs | 7 +++-- .../Requests/RequestsSectionController.cs | 28 ++++++++++++++++-- .../Sections/Requests/RequestsSectionView.cs | 3 ++ .../Friends/UI/Prefabs/FriendsPanel.prefab | 2 ++ 10 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs create mode 100644 Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs.meta create mode 100644 Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset create mode 100644 Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset.meta diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/FriendsPanelController.cs b/Explorer/Assets/DCL/Friends/UI/FriendPanel/FriendsPanelController.cs index 271e29631e..1162552be1 100644 --- a/Explorer/Assets/DCL/Friends/UI/FriendPanel/FriendsPanelController.cs +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/FriendsPanelController.cs @@ -109,6 +109,7 @@ protected override void OnViewInstantiated() friendEventBus, web3IdentityCache, mvcManager, + systemClipboard, new RequestsRequestManager(friendsService, friendEventBus, FRIENDS_PAGE_SIZE, profileCache, profileRepository)); blockedSectionController = new BlockedSectionController(viewInstance!.BlockedSection, web3IdentityCache, diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs new file mode 100644 index 0000000000..cff8d8b81c --- /dev/null +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs @@ -0,0 +1,29 @@ +using System; +using UnityEngine; + +namespace DCL.Friends.UI.FriendPanel.Sections.Requests +{ + [CreateAssetMenu(fileName = "FriendRequestContextMenuSettings", menuName = "DCL/Friends/Requests/ContextMenuSettings")] + [Serializable] + public class FriendRequestContextMenuConfiguration : ScriptableObject + { + [SerializeField] private int contextMenuWidth = 250; + [Space(10)] + [SerializeField] private Sprite viewProfileSprite; + [SerializeField] private string viewProfileText = "View Profile"; + [Space(10)] + [SerializeField] private Sprite blockSprite; + [SerializeField] private string blockText = "Block"; + [Space(10)] + [SerializeField] private Sprite reportSprite; + [SerializeField] private string reportText = "Report"; + + public int ContextMenuWidth => contextMenuWidth; + public Sprite ViewProfileSprite => viewProfileSprite; + public string ViewProfileText => viewProfileText; + public Sprite BlockSprite => blockSprite; + public string BlockText => blockText; + public Sprite ReportSprite => reportSprite; + public string ReportText => reportText; + } +} diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs.meta b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs.meta new file mode 100644 index 0000000000..1f16f36a03 --- /dev/null +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuConfiguration.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ce7c0b4646084ca790d31ec5034e03c7 +timeCreated: 1737545474 \ No newline at end of file diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset new file mode 100644 index 0000000000..8e8bc9fb59 --- /dev/null +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ce7c0b4646084ca790d31ec5034e03c7, type: 3} + m_Name: FriendRequestContextMenuSettings + m_EditorClassIdentifier: + contextMenuWidth: 250 + viewProfileSprite: {fileID: 21300000, guid: c42ef609dd1154fa9a0e37d744af5614, type: 3} + viewProfileText: View Profile + blockSprite: {fileID: 21300000, guid: 493ac3c2397b64caea2decabee6048e8, type: 3} + blockText: Block + reportSprite: {fileID: 21300000, guid: 3bfacc159ebe34861ad08dd502c313fc, type: 3} + reportText: Report diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset.meta b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset.meta new file mode 100644 index 0000000000..75ea2cbfa7 --- /dev/null +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/FriendRequestContextMenuSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 299c6c9d8edbc42f59268a946bf4b95b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestUserView.cs b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestUserView.cs index 5384d62e42..3578da183b 100644 --- a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestUserView.cs +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestUserView.cs @@ -23,7 +23,7 @@ public DateTime RequestDate set { requestDate = value; - RequestDateText.SetText(requestDate.ToString("MMMM yyyy", CultureInfo.InvariantCulture)); + RequestDateText.SetText(requestDate.ToString("MMM dd", CultureInfo.InvariantCulture).ToUpper()); } } diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsRequestManager.cs b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsRequestManager.cs index 7f2825d241..8da9effcbd 100644 --- a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsRequestManager.cs +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsRequestManager.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Threading; +using UnityEngine; namespace DCL.Friends.UI.FriendPanel.Sections.Requests { @@ -22,7 +23,7 @@ public class RequestsRequestManager : FriendPanelDoubleCollectionRequestManager< public event Action? DeleteRequestClicked; public event Action? AcceptRequestClicked; - public event Action? ContextMenuClicked; + public event Action? ContextMenuClicked; public RequestsRequestManager(IFriendsService friendsService, IFriendsEventBus friendEventBus, int pageSize, IProfileCache profileCache, IProfileRepository profileRepository) : base(friendsService, friendEventBus, pageSize, FriendPanelStatus.RECEIVED, FriendPanelStatus.SENT, STATUS_ELEMENT_INDEX, EMPTY_ELEMENT_INDEX, USER_ELEMENT_INDEX) @@ -62,7 +63,7 @@ protected override void CustomiseElement(RequestUserView elementView, int collec } elementView.ContextMenuButton.onClick.RemoveAllListeners(); - elementView.ContextMenuButton.onClick.AddListener(() => ContextMenuClicked?.Invoke(elementView.UserProfile)); + elementView.ContextMenuButton.onClick.AddListener(() => ContextMenuClicked?.Invoke(elementView.UserProfile, elementView.ContextMenuButton.transform.position, elementView)); FriendRequest request = section == FriendPanelStatus.RECEIVED ? receivedRequests[collectionIndex] : sentRequests[collectionIndex]; elementView.RequestDate = request.Timestamp; @@ -73,7 +74,7 @@ protected override async UniTask FetchInitialData(CancellationToken ct) { receivedRequests.Add(new FriendRequest(Guid.NewGuid().ToString(), DateTime.Now.AddDays(-2), "0xd545b9e0a5f3638a5026d1914cc9b47ed16b5ae9", "0x05dE05303EAb867D51854E8b4fE03F7acb0624d9", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi gravida libero quis sapien dictum, a vehicula nisi gravida")); receivedRequests.Add(new FriendRequest(Guid.NewGuid().ToString(), DateTime.Now.AddDays(-1), "0xba7352cff5681b719daf33fa05e93153af8146c8", "0x05dE05303EAb867D51854E8b4fE03F7acb0624d9", "In hac habitasse platea dictumst. Proin sodales, sapien at facilisis consectetur, elit erat luctus quam, vel finibus lacus nulla vel tellus. Aenean vehicula urna nisl. Donec in lacus nisi. Aenean facilisis sagittis turpis nec finibus. Sed eu lorem arcu")); - sentRequests.Add(new FriendRequest(Guid.NewGuid().ToString(), DateTime.Now.AddDays(-3), "0x05dE05303EAb867D51854E8b4fE03F7acb0624d9", "0x23e3d123f69fdd7f08a7c5685506bb344a12f1c4", "Aliquam consectetur euismod dui, vel iaculis ligula rhoncus eget. Maecenas faucibus consequat eros, nec pellentesque diam volutpat ac. Quisque aliquet dolor non tellus mattis, convallis lobortis mauris lobortis")); + sentRequests.Add(new FriendRequest(Guid.NewGuid().ToString(), DateTime.Now.AddMonths(-1), "0x05dE05303EAb867D51854E8b4fE03F7acb0624d9", "0x23e3d123f69fdd7f08a7c5685506bb344a12f1c4", "Aliquam consectetur euismod dui, vel iaculis ligula rhoncus eget. Maecenas faucibus consequat eros, nec pellentesque diam volutpat ac. Quisque aliquet dolor non tellus mattis, convallis lobortis mauris lobortis")); await GetProfile("0xd545b9e0a5f3638a5026d1914cc9b47ed16b5ae9", ct); await GetProfile("0xba7352cff5681b719daf33fa05e93153af8146c8", ct); diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionController.cs b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionController.cs index c24c15e8ef..cbf3564fbf 100644 --- a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionController.cs +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionController.cs @@ -1,16 +1,24 @@ using Cysharp.Threading.Tasks; +using DCL.Clipboard; +using DCL.Passport; using DCL.Profiles; +using DCL.UI.GenericContextMenu; +using DCL.UI.GenericContextMenu.Controls.Configs; using DCL.Web3.Identities; using MVC; using System; using System.Threading; using UnityEngine; -using Utility; namespace DCL.Friends.UI.FriendPanel.Sections.Requests { public class RequestsSectionController : FriendPanelSectionDoubleCollectionController { + private readonly GenericContextMenu contextMenu; + private readonly UserProfileContextMenuControlSettings userProfileContextMenuControlSettings; + + private Profile? lastClickedProfileCtx; + public event Action? ReceivedRequestsCountChanged; public RequestsSectionController(RequestsSectionView view, @@ -18,9 +26,17 @@ public RequestsSectionController(RequestsSectionView view, IFriendsEventBus friendEventBus, IWeb3IdentityCache web3IdentityCache, IMVCManager mvcManager, + ISystemClipboard systemClipboard, RequestsRequestManager requestManager) : base(view, friendsService, friendEventBus, web3IdentityCache, mvcManager, requestManager) { + contextMenu = new GenericContextMenu(view.ContextMenuSettings.ContextMenuWidth, verticalLayoutPadding: new RectOffset(15, 15, 20, 25), elementsSpacing: 5) + .AddControl(userProfileContextMenuControlSettings = new UserProfileContextMenuControlSettings(systemClipboard, profile => Debug.Log($"Send friendship request to {profile.UserId}"))) + .AddControl(new SeparatorContextMenuControlSettings(20, -15, -15)) + .AddControl(new ButtonContextMenuControlSettings(view.ContextMenuSettings.ViewProfileText, view.ContextMenuSettings.ViewProfileSprite, () => OpenProfilePassport(lastClickedProfileCtx!))) + .AddControl(new ButtonContextMenuControlSettings(view.ContextMenuSettings.BlockText, view.ContextMenuSettings.BlockSprite, () => Debug.Log($"Block {lastClickedProfileCtx!.UserId}"))) + .AddControl(new ButtonContextMenuControlSettings(view.ContextMenuSettings.ReportText, view.ContextMenuSettings.ReportSprite, () => Debug.Log($"Report {lastClickedProfileCtx!.UserId}"))); + requestManager.DeleteRequestClicked += DeleteRequestClicked; requestManager.AcceptRequestClicked += AcceptRequestClicked; requestManager.ContextMenuClicked += ContextMenuClicked; @@ -44,6 +60,9 @@ public override void Dispose() ReceivedRequestsCountChanged -= UpdateReceivedRequestsSectionCount; } + private void OpenProfilePassport(Profile profile) => + mvcManager.ShowAsync(PassportController.IssueCommand(new PassportController.Params(profile.UserId))).Forget(); + private void PropagateRequestReceived(FriendRequest request) => PropagateReceivedRequestsCountChanged(); @@ -66,9 +85,12 @@ private void AcceptRequestClicked(FriendRequest request) Debug.Log($"AcceptRequestClicked on {request.FriendRequestId}"); } - private void ContextMenuClicked(Profile profile) + private void ContextMenuClicked(Profile profile, Vector2 buttonPosition, RequestUserView elementView) { - Debug.Log($"ContextMenuClicked on {profile.UserId}"); + lastClickedProfileCtx = profile; + userProfileContextMenuControlSettings.SetInitialData(profile, view.ChatEntryConfiguration.GetNameColor(profile.Name), UserProfileContextMenuControlSettings.FriendshipStatus.NONE); + elementView.CanUnHover = false; + mvcManager.ShowAsync(GenericContextMenuController.IssueCommand(new GenericContextMenuParameter(contextMenu, buttonPosition, actionOnHide: () => elementView.CanUnHover = true))).Forget(); } protected override async UniTaskVoid Init(CancellationToken ct) diff --git a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionView.cs b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionView.cs index 81e21ebadc..bc487cf13b 100644 --- a/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionView.cs +++ b/Explorer/Assets/DCL/Friends/UI/FriendPanel/Sections/Requests/RequestsSectionView.cs @@ -1,3 +1,4 @@ +using DCL.Chat; using UnityEngine; namespace DCL.Friends.UI.FriendPanel.Sections.Requests @@ -5,5 +6,7 @@ namespace DCL.Friends.UI.FriendPanel.Sections.Requests public class RequestsSectionView : FriendPanelSectionView { [field: SerializeField] public NotificationIndicatorView TabNotificationIndicator { get; private set; } + [field: SerializeField] public ChatEntryConfigurationSO ChatEntryConfiguration { get; private set; } + [field: SerializeField] public FriendRequestContextMenuConfiguration ContextMenuSettings { get; private set; } } } diff --git a/Explorer/Assets/DCL/Friends/UI/Prefabs/FriendsPanel.prefab b/Explorer/Assets/DCL/Friends/UI/Prefabs/FriendsPanel.prefab index 0f9f40bb70..c2a7f9b6f9 100644 --- a/Explorer/Assets/DCL/Friends/UI/Prefabs/FriendsPanel.prefab +++ b/Explorer/Assets/DCL/Friends/UI/Prefabs/FriendsPanel.prefab @@ -2702,6 +2702,8 @@ MonoBehaviour: k__BackingField: {fileID: 7142713786379965369} k__BackingField: {fileID: 5376825434192449184} k__BackingField: {fileID: 8917639088263567752} + k__BackingField: {fileID: 11400000, guid: 6afb31861b85441b6ab2b988819bb96a, type: 2} + k__BackingField: {fileID: 11400000, guid: 299c6c9d8edbc42f59268a946bf4b95b, type: 2} --- !u!1 &8507033878163480090 GameObject: m_ObjectHideFlags: 0