@login_required()
def notification_infinite_scroll_view(request: WSGIRequest) -> TemplateResponse:
if isinstance(request.user, AnonymousUser):
notifications = AppNotification.objects.none()
else:
notifications = (
AppNotification.objects.active()
.is_sent()
.annotate_is_viewed_by_user(request.user)
.select_related('notification')
.distinct()
.ordered_by_priority_and_sent_datetime()
.process_session_filter(
request=request,
session_key=NOTIFICATION_FILTERING_SESSION_KEY_NAME,
form_class=NotificationListFilterForm,
)
)
filter_session = SessionController(request, NOTIFICATION_FILTERING_SESSION_KEY_NAME)
view = _infinite_scroll_view(request=request, notification_queryset=notifications)
view.context_data.update({
'filter_session': filter_session,
'statuses': NotificationStatusChoices,
'priorities': NotificationPriorityChoices,
})
return view