Skip to content

Commit

Permalink
wip request context menu
Browse files Browse the repository at this point in the history
  • Loading branch information
lorenzo-ranciaffi committed Jan 22, 2025
1 parent a7729f0 commit a6b9638
Show file tree
Hide file tree
Showing 10 changed files with 97 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -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

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

namespace DCL.Friends.UI.FriendPanel.Sections.Requests
{
Expand All @@ -22,7 +23,7 @@ public class RequestsRequestManager : FriendPanelDoubleCollectionRequestManager<

public event Action<FriendRequest>? DeleteRequestClicked;
public event Action<FriendRequest>? AcceptRequestClicked;
public event Action<Profile>? ContextMenuClicked;
public event Action<Profile, Vector2, RequestUserView>? 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)
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,42 @@
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<RequestsSectionView, RequestsRequestManager, RequestUserView>
{
private readonly GenericContextMenu contextMenu;
private readonly UserProfileContextMenuControlSettings userProfileContextMenuControlSettings;

private Profile? lastClickedProfileCtx;

public event Action<int>? ReceivedRequestsCountChanged;

public RequestsSectionController(RequestsSectionView view,
IFriendsService friendsService,
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;
Expand All @@ -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();

Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
using DCL.Chat;
using UnityEngine;

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; }
}
}
2 changes: 2 additions & 0 deletions Explorer/Assets/DCL/Friends/UI/Prefabs/FriendsPanel.prefab
Original file line number Diff line number Diff line change
Expand Up @@ -2702,6 +2702,8 @@ MonoBehaviour:
<LoadingObject>k__BackingField: {fileID: 7142713786379965369}
<EmptyState>k__BackingField: {fileID: 5376825434192449184}
<TabNotificationIndicator>k__BackingField: {fileID: 8917639088263567752}
<ChatEntryConfiguration>k__BackingField: {fileID: 11400000, guid: 6afb31861b85441b6ab2b988819bb96a, type: 2}
<ContextMenuSettings>k__BackingField: {fileID: 11400000, guid: 299c6c9d8edbc42f59268a946bf4b95b, type: 2}
--- !u!1 &8507033878163480090
GameObject:
m_ObjectHideFlags: 0
Expand Down

0 comments on commit a6b9638

Please sign in to comment.