From c72893372afe255689ff56a618b6c849974569a3 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Mon, 28 Nov 2022 22:42:40 -0700 Subject: [PATCH] Collapse notifications on the same post --- activities/views/timelines.py | 20 ++++++++++++++++++++ templates/activities/_event.html | 6 ++++++ templates/activities/notifications.html | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/activities/views/timelines.py b/activities/views/timelines.py index 694039e..753add6 100644 --- a/activities/views/timelines.py +++ b/activities/views/timelines.py @@ -173,3 +173,23 @@ class Notifications(ListView): .order_by("-created")[:50] .select_related("subject_post", "subject_post__author", "subject_identity") ) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + # Collapse similar notifications into one + events = [] + for event in context["page_obj"]: + if ( + events + and event.type + in [ + TimelineEvent.Types.liked, + TimelineEvent.Types.boosted, + TimelineEvent.Types.mentioned, + ] + and event.subject_post_id == events[-1].subject_post_id + ): + events[-1].collapsed = True + events.append(event) + context["events"] = events + return context diff --git a/templates/activities/_event.html b/templates/activities/_event.html index c6d30b1..0c94aad 100644 --- a/templates/activities/_event.html +++ b/templates/activities/_event.html @@ -13,21 +13,27 @@ {{ event.subject_identity.name_or_handle }} liked your post + {% if not event.collapsed %} {% include "activities/_post.html" with post=event.subject_post %} + {% endif %} {% elif event.type == "mentioned" %}
{{ event.subject_identity.name_or_handle }} mentioned you
+ {% if not event.collapsed %} {% include "activities/_post.html" with post=event.subject_post %} + {% endif %} {% elif event.type == "boosted" %}
{{ event.subject_identity.name_or_handle }} boosted your post
+ {% if not event.collapsed %} {% include "activities/_post.html" with post=event.subject_post %} + {% endif %} {% else %} Unknown event type {{event.type}} {% endif %} diff --git a/templates/activities/notifications.html b/templates/activities/notifications.html index a9c51be..f34dc28 100644 --- a/templates/activities/notifications.html +++ b/templates/activities/notifications.html @@ -3,7 +3,7 @@ {% block title %}Notifications{% endblock %} {% block content %} - {% for event in page_obj %} + {% for event in events %} {% include "activities/_event.html" %} {% empty %} No notirications yet.