From 6287092426e8f19c4b35683bc96cc99fbb363bd4 Mon Sep 17 00:00:00 2001 From: Horilla Date: Fri, 7 Feb 2025 09:47:04 +0530 Subject: [PATCH] [ADD] HORILLA VIEWS: Add filter selected quick action --- horilla_views/generic/cbv/views.py | 36 ++++++++++ .../generic/export_fields_modal.html | 1 + .../templates/generic/horilla_list_table.html | 7 +- .../templates/generic/quick_actions.html | 68 +++++++++++++++++-- 4 files changed, 105 insertions(+), 7 deletions(-) diff --git a/horilla_views/generic/cbv/views.py b/horilla_views/generic/cbv/views.py index ea5e360e8..8439fd571 100644 --- a/horilla_views/generic/cbv/views.py +++ b/horilla_views/generic/cbv/views.py @@ -99,6 +99,12 @@ class HorillaListView(ListView): header_attrs: dict = {} + def post(self, *args, **kwargs): + """ + POST method to handle post submissions + """ + return self.get(self, *args, **kwargs) + def __init__(self, **kwargs: Any) -> None: if not self.view_id: self.view_id = get_short_uuid(4) @@ -203,6 +209,24 @@ class HorillaListView(ListView): self._saved_filters = QueryDict("", mutable=True) if self.filter_class: query_dict = self.request.GET + selected_ids = eval_validate( + self.request.POST.get("selected_ids", "[]") + ) + + if ( + self.request.session.get("prev_path") + and self.request.session.get("prev_path") != self.request.path + ): + selected_ids = [] + self.request.session["hlv_selected_ids"] = selected_ids + self.request.session["prev_path"] = self.request.path + + if selected_ids and selected_ids != self.request.session.get( + "hlv_selected_ids", [] + ): + self.request.session["hlv_selected_ids"] = selected_ids + self.request.session["prev_path"] = self.request.path + if "filter_applied" in query_dict.keys(): update_saved_filter_cache(self.request, CACHE) elif CACHE.get( @@ -231,6 +255,18 @@ class HorillaListView(ListView): self.queryset = self.filter_class( data=query_dict, queryset=self.queryset, request=self.request ).qs + + if self.request.GET.get( + "show_all" + ) == "true" and self.request.session.get("hlv_selected_ids"): + del self.request.session["hlv_selected_ids"] + if self.request.session.get("hlv_selected_ids"): + self.request.actual_ids = list( + self.queryset.values_list("id", flat=True) + ) + self.queryset = self.queryset.filter( + id__in=self.request.session["hlv_selected_ids"] + ) return self.queryset def get_context_data(self, **kwargs: Any): diff --git a/horilla_views/templates/generic/export_fields_modal.html b/horilla_views/templates/generic/export_fields_modal.html index 6d07cafd8..867fb8abe 100644 --- a/horilla_views/templates/generic/export_fields_modal.html +++ b/horilla_views/templates/generic/export_fields_modal.html @@ -103,6 +103,7 @@ {% endif %} diff --git a/horilla_views/templates/generic/quick_actions.html b/horilla_views/templates/generic/quick_actions.html index 8c52201a1..6872bb4d8 100644 --- a/horilla_views/templates/generic/quick_actions.html +++ b/horilla_views/templates/generic/quick_actions.html @@ -1,4 +1,11 @@ {% load i18n %} +{% if request.actual_ids and request.session.prev_path == request.path %} + +{% endif %} +
- - + hx-get="/{{bulk_path}}" + hx-target="#bulkUpdateModalBody{{view_id|safe}}"> + + + + {% endif %} +
+
+ + +
- {% endif %} + ( + 0 + ) +
+ {% if request.session.hlv_selected_ids %} +
+ + ( + {{request.actual_ids|length}} + ) +
+ {% endif %} {% for filter in stored_filters %}