Add menu highlighting logic via HX-Trigger, update templates for dynamic menu state management, and extend mixins to support menu highlighting.
This commit is contained in:
@@ -19,6 +19,7 @@ class MemberListView(HTMXViewMixin, PermissionRequiredMixin, FilterView):
|
||||
permission_denied_message = _("You do not have permission to view this page.")
|
||||
permission_required = "members.view_member"
|
||||
partial_name = "members/member_filter.html#content"
|
||||
menu_highlight = "members"
|
||||
|
||||
def handle_no_permission(self) -> HttpResponseRedirect:
|
||||
messages.error(self.request, self.get_permission_denied_message())
|
||||
@@ -48,6 +49,7 @@ class MemberDeleteView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMix
|
||||
permission_required = "members.delete_member"
|
||||
permission_denied_message = _("You do not have permission to view this page.")
|
||||
success_url = reverse_lazy("backend:members:list")
|
||||
menu_highlight = "members"
|
||||
|
||||
def handle_no_permission(self) -> HttpResponseRedirect:
|
||||
messages.error(self.request, self.get_permission_denied_message())
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import json
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.template.loader import render_to_string
|
||||
from django_htmx.http import HttpResponseClientRedirect, HttpResponseClientRefresh
|
||||
@@ -33,6 +35,9 @@ class HTMXViewMixin:
|
||||
# Optional: automatically push URL on GET
|
||||
htmx_push_url = None
|
||||
|
||||
# Optional: name of the menu item to highlight
|
||||
menu_highlight = None
|
||||
|
||||
# Optional: trigger events after rendering
|
||||
htmx_trigger = None
|
||||
htmx_trigger_after_settle = None
|
||||
@@ -62,9 +67,21 @@ class HTMXViewMixin:
|
||||
response.headers["HX-Push-Url"] = self.htmx_push_url or request.get_full_path()
|
||||
|
||||
print(response.headers)
|
||||
|
||||
# Build HX-Trigger payload
|
||||
trigger_payload = {}
|
||||
|
||||
# 1. User-defined triggers
|
||||
if self.htmx_trigger:
|
||||
response.headers["HX-Trigger"] = self.htmx_trigger
|
||||
trigger_payload.update(json.loads(self.htmx_trigger))
|
||||
|
||||
# 2. Auto menu highlight trigger
|
||||
if self.menu_highlight:
|
||||
trigger_payload["menuHighlight"] = self.menu_highlight
|
||||
|
||||
# Emit HX-Trigger if anything is present
|
||||
if trigger_payload:
|
||||
response.headers["HX-Trigger"] = json.dumps(trigger_payload)
|
||||
|
||||
if self.htmx_trigger_after_settle:
|
||||
response.headers["HX-Trigger-After-Settle"] = self.htmx_trigger_after_settle
|
||||
|
||||
Reference in New Issue
Block a user