Collapse notifications on the same post
This commit is contained in:
		
							parent
							
								
									c857cd026f
								
							
						
					
					
						commit
						c72893372a
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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 %}
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user