Improve moderation dashboard UI and HTMX integration:

- Create partial templates for dashboard, edit submissions, and photo submissions
- Update views to properly handle HTMX requests
- Fix duplicate UI issues when navigating
- Improve overall UI design and transitions
This commit is contained in:
pacnpal
2024-11-13 17:04:42 +00:00
parent 96341bfd82
commit 177117f4d6
4 changed files with 109 additions and 26 deletions

View File

@@ -7,7 +7,7 @@ from django.template.loader import render_to_string
from django.db.models import Q
from django.core.exceptions import PermissionDenied
from typing import Optional, Any, cast
from accounts.models import User # Import custom User model
from accounts.models import User
from .models import EditSubmission, PhotoSubmission
@@ -30,7 +30,10 @@ class ModeratorRequiredMixin(UserPassesTestMixin):
raise PermissionDenied("You do not have moderator permissions.")
class DashboardView(LoginRequiredMixin, ModeratorRequiredMixin, TemplateView):
template_name = 'moderation/dashboard.html'
def get_template_names(self):
if self.request.headers.get('HX-Request'):
return ['moderation/partials/dashboard_content.html']
return ['moderation/dashboard.html']
def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
context = super().get_context_data(**kwargs)
@@ -60,9 +63,13 @@ class EditSubmissionListView(LoginRequiredMixin, ModeratorRequiredMixin, ListVie
return queryset
class PhotoSubmissionListView(LoginRequiredMixin, ModeratorRequiredMixin, ListView):
template_name = 'moderation/photo_submission_list.html'
context_object_name = 'submissions'
def get_template_names(self):
if self.request.headers.get('HX-Request'):
return ['moderation/partials/photo_submission_content.html']
return ['moderation/photo_submission_list.html']
def get_queryset(self):
queryset = PhotoSubmission.objects.all().order_by('-created_at')
@@ -71,18 +78,6 @@ class PhotoSubmissionListView(LoginRequiredMixin, ModeratorRequiredMixin, ListVi
return queryset
def _update_submission_notes(submission: EditSubmission, notes: Optional[str]) -> None:
"""Update submission notes if provided."""
if notes:
submission.notes = notes
submission.save()
def _render_submission_response(template: str, submission: Any, request: HttpRequest) -> HttpResponse:
"""Render submission template response."""
context = {'submission': submission}
html = render_to_string(template, context, request=request)
return HttpResponse(html)
@login_required
def submission_list(request: HttpRequest) -> HttpResponse:
"""HTMX endpoint for filtered submission list"""
@@ -174,3 +169,15 @@ def reject_photo(request: HttpRequest, submission_id: int) -> HttpResponse:
submission.reject(user, request.POST.get('notes', ''))
return _render_submission_response('moderation/partials/photo_submission.html', submission, request)
def _update_submission_notes(submission: EditSubmission, notes: Optional[str]) -> None:
"""Update submission notes if provided."""
if notes:
submission.notes = notes
submission.save()
def _render_submission_response(template: str, submission: Any, request: HttpRequest) -> HttpResponse:
"""Render submission template response."""
context = {'submission': submission}
html = render_to_string(template, context, request=request)
return HttpResponse(html)