Skip to content
Merged
Show file tree
Hide file tree
Changes from 63 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
3f062e6
Events analytics implemented
sandrade-dcl Feb 14, 2026
27e3330
Removed unnecessary files
sandrade-dcl Feb 14, 2026
eacfbb8
Add utm_source to the events links
sandrade-dcl Feb 16, 2026
9f67c90
Merge branch 'dev' into feat/events-analytics
sandrade-dcl Feb 16, 2026
9062093
Fixed events_section_opened event
sandrade-dcl Feb 16, 2026
933a467
Implemented analytics for Places section
sandrade-dcl Feb 17, 2026
ee273fe
Added live events counter in the start menu and in the sidebar
sandrade-dcl Feb 17, 2026
2b0efd7
Apply feedback: Move EventsAnalytics and PlacesAnalytics inside Explo…
sandrade-dcl Feb 17, 2026
dbbf5b9
Apply feedback: Remove analytics dependency from ExplorePanelControll…
sandrade-dcl Feb 17, 2026
3c2c7a9
Merge branch 'dev' into feat/events-analytics
sandrade-dcl Feb 17, 2026
1ded4bf
Merge branch 'feat/events-analytics' into feat/live-events-counter
sandrade-dcl Feb 17, 2026
1d70c56
Update LiveEventsCounter.prefab
sandrade-dcl Feb 17, 2026
e175b11
Polish counter
RominaMarchetti Feb 17, 2026
f5e2a1b
Normalise all the badges UI
RominaMarchetti Feb 17, 2026
a778740
Apply feedback: Remove leftovers
sandrade-dcl Feb 18, 2026
675ffe1
Merge branch 'feat/events-analytics' into feat/live-events-counter
sandrade-dcl Feb 18, 2026
8827977
Merge branch 'dev' into feat/live-events-counter
sandrade-dcl Feb 18, 2026
02d5f9d
The "Featured" mark in the place card is based now on the highlighted…
sandrade-dcl Feb 18, 2026
7491d17
Rename text in the places filter dropdown
sandrade-dcl Feb 18, 2026
a1986cc
Update PlaceCard.prefab
RominaMarchetti Feb 18, 2026
2c169ac
Apply feedback
sandrade-dcl Feb 18, 2026
cb3c4db
Merge branch 'feat/live-events-counter' into feat/re-discover-polishing
sandrade-dcl Feb 18, 2026
f9871c2
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 18, 2026
5ca7ba1
Implemented "explore places" and "get a name" buttons
sandrade-dcl Feb 18, 2026
0b021ba
Size of the loading more spinner changed
sandrade-dcl Feb 18, 2026
da45fd3
Size of the loading more spinner changed (II)
sandrade-dcl Feb 18, 2026
d9accf1
Implemented event tooltip when hover on live tag
sandrade-dcl Feb 19, 2026
db3c1b8
Implemented friend tooltip when hover on a friend thumbnail
sandrade-dcl Feb 19, 2026
3a61803
Friends connected supported now in "Recent" section
sandrade-dcl Feb 19, 2026
17cd31e
Fixes in the creator row (event detail panel)
sandrade-dcl Feb 19, 2026
1c12485
Remove the category title, since it is redundant
sandrade-dcl Feb 19, 2026
e53920d
Implemented friend tooltip when hover on a friend thumbnail (events)
sandrade-dcl Feb 19, 2026
be972e7
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 20, 2026
196914b
Categories re-ordered
sandrade-dcl Feb 20, 2026
53e16b3
Keeped always visible the counter title
sandrade-dcl Feb 20, 2026
54459bc
Don't show players counter when it's zero
sandrade-dcl Feb 20, 2026
fa07051
Update EventsCalendarController.cs
sandrade-dcl Feb 20, 2026
6dedbe1
Update EventsCalendarController.cs
sandrade-dcl Feb 20, 2026
f516042
Small fixes
sandrade-dcl Feb 20, 2026
a76fde3
Fixes in the creator thumbnail (place detail panel)
sandrade-dcl Feb 20, 2026
6c8934b
Added gradient in the place card header when any tag appears
sandrade-dcl Feb 20, 2026
c8971fc
Update PlaceCard.prefab
sandrade-dcl Feb 20, 2026
4257674
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 20, 2026
2f3d771
Moved live events prior to today to the end of the live events
sandrade-dcl Feb 20, 2026
5453328
Update live tag red colour and event's name tooltip anchor position
RominaMarchetti Feb 20, 2026
8d1db5d
Update events column mask and scrollbar handle
RominaMarchetti Feb 20, 2026
b7f9f74
Sidebar + Explore menu animations integrated
sandrade-dcl Feb 20, 2026
e320dc9
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 23, 2026
8646c31
Fix creator name color in the place detail card
sandrade-dcl Feb 23, 2026
c425fc3
Fixed live events prior to today
sandrade-dcl Feb 23, 2026
ad75448
Added arrow in the bottom side of each day column
sandrade-dcl Feb 23, 2026
f4ff904
Update EventsCalendarView.cs
sandrade-dcl Feb 23, 2026
d5ff3ea
Update live events counter badge colour
RominaMarchetti Feb 23, 2026
ba4afe0
Merge branch 'feat/re-discover-polishing' of https://github.com/decen…
RominaMarchetti Feb 23, 2026
f5701de
Update EventsListView.prefab
sandrade-dcl Feb 23, 2026
1809a89
Update mask
RominaMarchetti Feb 23, 2026
a6f88f7
Patch highlighted event mask
RominaMarchetti Feb 24, 2026
4284e63
Patch event's panel mask
RominaMarchetti Feb 24, 2026
2a4196e
Quit maskable property to events list scrollbar's handle
RominaMarchetti Feb 24, 2026
460a93d
Added discover FF into FeaturesRegistry singleton
sandrade-dcl Feb 24, 2026
83fffa4
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 24, 2026
9f30034
Change order of the Places / Events buttons
sandrade-dcl Feb 24, 2026
45517de
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 24, 2026
3208283
Apply feedback from Claude
sandrade-dcl Feb 24, 2026
071b3cf
Merge branch 'dev' into feat/re-discover-polishing
sandrade-dcl Feb 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion Explorer/Assets/DCL/Events/EventCardBigView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using DCL.EventsApi;
using DCL.PlacesAPIService;
using DCL.Profiles;
using DCL.UI;
using DCL.UI.Profiles.Helpers;
using DG.Tweening;
using System.Collections.Generic;
Expand Down
2 changes: 2 additions & 0 deletions Explorer/Assets/DCL/Events/EventCardView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public struct FriendsConnectedThumbnail
{
public GameObject root;
public ProfilePictureView picture;
public HoverableTooltip tooltip;
}
}

Expand Down Expand Up @@ -187,6 +188,7 @@ public virtual void Configure(EventDTO eventInfo, ThumbnailLoader thumbnailLoade
if (!friendExists) continue;
Profile.CompactInfo friendInfo = friends[i];
friendsThumbnails[i].picture.Setup(profileRepositoryWrapper!, friendInfo);
friendsThumbnails[i].tooltip.Configure(friendInfo.Name);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion Explorer/Assets/DCL/Events/EventsByDayController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ private async UniTask LoadEventsAsync(DateTime fromDate, CancellationToken ct)
placesIds.Add(eventInfo.place_id);
}

Result<PlacesData.IPlacesAPIResponse> placesResponse = await placesAPIService.GetPlacesByIdsAsync(placesIds, ct)
Result<PlacesData.IPlacesAPIResponse> placesResponse = await placesAPIService.GetDestinationsByIdsAsync(placesIds, ct)
.SuppressToResultAsync(ReportCategory.COMMUNITIES);

if (placesResponse.Success)
Expand Down
61 changes: 53 additions & 8 deletions Explorer/Assets/DCL/Events/EventsCalendarController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class EventsCalendarController : IDisposable
{
public event Action<EventDTO>? EventCardClicked;

private const string GET_LIVE_EVENTS_ERROR_MESSAGE = "There was an error loading live events. Please try again.";
private const string GET_EVENTS_ERROR_MESSAGE = "There was an error loading events. Please try again.";

private readonly EventsCalendarView view;
Expand Down Expand Up @@ -188,7 +189,7 @@ private async UniTask CheckHighlightedBannerAsync(DateTime fromDate, Cancellatio
placesIds.Add(eventInfo.place_id);
}

Result<PlacesData.IPlacesAPIResponse> placesResponse = await placesAPIService.GetPlacesByIdsAsync(placesIds, ct)
Result<PlacesData.IPlacesAPIResponse> placesResponse = await placesAPIService.GetDestinationsByIdsAsync(placesIds, ct)
.SuppressToResultAsync(ReportCategory.COMMUNITIES);

if (placesResponse.Success)
Expand All @@ -204,6 +205,18 @@ private async UniTask LoadEventsAsync(DateTime fromDate, int numberOfDays, Cance
view.ClearAllEvents();
view.SetAsLoading(true);

Result<IReadOnlyList<EventDTO>> liveEventsResults = await eventsApiService.GetEventsAsync(ct, onlyLiveEvents: true)
.SuppressToResultAsync(ReportCategory.EVENTS);

if (ct.IsCancellationRequested)
return;

if (!liveEventsResults.Success)
{
NotificationsBusController.Instance.AddNotification(new ServerErrorNotification(GET_LIVE_EVENTS_ERROR_MESSAGE));
return;
}

var fromDateUtc = fromDate.AddDays(-1).ToUniversalTime();
var toDateUtc = fromDate.AddDays(numberOfDays).AddSeconds(-1).ToUniversalTime();
Result<IReadOnlyList<EventDTO>> eventsResult = await eventsApiService.GetEventsByDateRangeAsync(fromDateUtc, toDateUtc, true, ct)
Expand All @@ -218,27 +231,45 @@ private async UniTask LoadEventsAsync(DateTime fromDate, int numberOfDays, Cance
return;
}

List<EventDTO> eventsList = new ();
if (fromDate.Date == DateTime.Today)
{
// In case we have live events prior to today, they have to be also shown on the calendar, so we add them into the current results
foreach (EventDTO liveEventInfo in liveEventsResults.Value)
{
DateTime eventLocalDate = DateTimeOffset.Parse(liveEventInfo.next_start_at).ToLocalTime().DateTime;
if (eventLocalDate.Date < fromDate)
eventsList.Add(liveEventInfo);
}
}
foreach (EventDTO eventInfo in eventsResult.Value)
{
DateTime eventLocalDate = DateTimeOffset.Parse(eventInfo.next_start_at).ToLocalTime().DateTime;
if (eventLocalDate.Date >= fromDate)
eventsList.Add(eventInfo);
}

using PoolExtensions.Scope<List<List<EventDTO>>> eventsGroupedByDay = EVENTS_GROUPED_BY_DAY_POOL.AutoScope();
for (var i = 0; i < numberOfDays; i++)
eventsGroupedByDay.Value.Add(new List<EventDTO>());

if (eventsResult.Value.Count > 0)
if (eventsList.Count > 0)
{
eventsStateService.AddEvents(eventsResult.Value);
eventsStateService.AddEvents(eventsList);

List<string> placesIds = new ();
foreach (EventDTO eventInfo in eventsResult.Value)
List<EventDTO> liveEventsPriorToToday = new ();
foreach (EventDTO eventInfo in eventsList)
{
DateTime eventLocalDate = DateTimeOffset.Parse(eventInfo.next_start_at).ToLocalTime().DateTime;

for (var i = 0; i < numberOfDays; i++)
{
// Live events are always shown on the calendar
// Live events prior to today have to be also shown on the calendar
bool isTodayColumn = i == 0;
if (eventInfo.live && fromDate.Date == DateTime.Today && isTodayColumn)
if (eventInfo.live && fromDate.Date == DateTime.Today && isTodayColumn && eventLocalDate.Date < fromDate)
{
eventsGroupedByDay.Value[i].Add(eventInfo);
liveEventsPriorToToday.Add(eventInfo);
break;
}

Expand All @@ -253,7 +284,21 @@ private async UniTask LoadEventsAsync(DateTime fromDate, int numberOfDays, Cance
placesIds.Add(eventInfo.place_id);
}

Result<PlacesData.IPlacesAPIResponse> placesResponse = await placesAPIService.GetPlacesByIdsAsync(placesIds, ct)
// Live events prior to today have to be placed after the today's live events
if (liveEventsPriorToToday.Count > 0)
{
var todayLiveEventsCount = 0;
foreach (EventDTO eventInfo in eventsGroupedByDay.Value[0])
{
if (eventInfo.live)
todayLiveEventsCount++;
}

foreach (EventDTO liveEventInfo in liveEventsPriorToToday)
eventsGroupedByDay.Value[0].Insert(todayLiveEventsCount++, liveEventInfo);
}

Result<PlacesData.IPlacesAPIResponse> placesResponse = await placesAPIService.GetDestinationsByIdsAsync(placesIds, ct)
.SuppressToResultAsync(ReportCategory.COMMUNITIES);

if (placesResponse.Success)
Expand Down
21 changes: 21 additions & 0 deletions Explorer/Assets/DCL/Events/EventsCalendarView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,12 @@ private struct EventListConfiguration
public HoverableUiElement hoverableUiElement;
public CanvasGroup scrollBarCanvasGroup;
public SkeletonLoadingView skeletonLoadingView;
public GameObject moreEventsArrow;
public ScrollRect scrollRect;
}

private readonly Dictionary<int, List<string>> currentEventsIds = new ();
private readonly Dictionary<int, float> currentOccupancies = new (5);
private DateTime currentFromDate;
private int currentNumberOfDaysShowed;
private EventsStateService eventsStateService = null!;
Expand All @@ -65,6 +68,13 @@ private void Awake()

foreach (EventsDaySelectorButton daySelectorButton in daySelectorButtons)
daySelectorButton.ButtonClicked += OnDaySelectorButtonClicked;

for (var i = 0; i < eventsLists.Count; i++)
{
int eventsListIndex = i;
EventListConfiguration eventListConfiguration = eventsLists[eventsListIndex];
eventListConfiguration.scrollRect.onValueChanged.AddListener(_ => OnEventsScrollValueChanged(eventsListIndex));
}
}

private void OnDestroy()
Expand All @@ -74,6 +84,9 @@ private void OnDestroy()

foreach (EventsDaySelectorButton daySelectorButton in daySelectorButtons)
daySelectorButton.ButtonClicked -= OnDaySelectorButtonClicked;

foreach (EventListConfiguration eventListConfiguration in eventsLists)
eventListConfiguration.scrollRect.onValueChanged.RemoveAllListeners();
}

public void SetDependencies(
Expand Down Expand Up @@ -243,6 +256,8 @@ private void FillWithEmptyCards(IReadOnlyList<EventDTO> events, int eventsListIn
}
}

currentOccupancies[eventsListIndex] = columnOccupancyValue;

int numberOfEmptyCards = columnOccupancyValue switch
{
<= 0.5f => 3,
Expand All @@ -254,6 +269,12 @@ private void FillWithEmptyCards(IReadOnlyList<EventDTO> events, int eventsListIn
currentEventsIds[eventsListIndex].Add(string.Empty);
}

private void OnEventsScrollValueChanged(int eventsListIndex)
{
bool scrollIsNotAtTheBottom = eventsLists[eventsListIndex].scrollRect.verticalNormalizedPosition > 0.01f && currentOccupancies[eventsListIndex] > 1.5f;
eventsLists[eventsListIndex].moreEventsArrow.SetActive(scrollIsNotAtTheBottom);
}

private void OnDaySelectorButtonClicked(DateTime date) =>
DaySelectorButtonClicked?.Invoke(date);

Expand Down
Loading