Collapse notifications on the same post

This commit is contained in:
Andrew Godwin 2022-11-28 22:42:40 -07:00
parent c857cd026f
commit c72893372a
3 changed files with 27 additions and 1 deletions

View file

@ -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

View file

@ -13,21 +13,27 @@
{{ event.subject_identity.name_or_handle }}
</a> liked your post
</div>
{% if not event.collapsed %}
{% include "activities/_post.html" with post=event.subject_post %}
{% endif %}
{% elif event.type == "mentioned" %}
<div class="mention-banner">
<a href="{{ event.subject_identity.urls.view }}">
{{ event.subject_identity.name_or_handle }}
</a> mentioned you
</div>
{% if not event.collapsed %}
{% include "activities/_post.html" with post=event.subject_post %}
{% endif %}
{% elif event.type == "boosted" %}
<div class="boost-banner">
<a href="{{ event.subject_identity.urls.view }}">
{{ event.subject_identity.name_or_handle }}
</a> boosted your post
</div>
{% if not event.collapsed %}
{% include "activities/_post.html" with post=event.subject_post %}
{% endif %}
{% else %}
Unknown event type {{event.type}}
{% endif %}

View file

@ -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.