[ADD] HORILLA VIEWS: Add filter selected quick action
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
|
||||
<div class="oh-modal__dialog-footer p-0 mt-3">
|
||||
<button
|
||||
onclick="$(this).closest('.oh-modal--show').removeClass('oh-modal--show')"
|
||||
type="submit"
|
||||
class="oh-btn oh-btn--secondary oh-btn--shadow"
|
||||
>
|
||||
|
||||
@@ -364,9 +364,14 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
<script>
|
||||
setInterval(() => {
|
||||
setTimeout(() => {
|
||||
$("#{{view_id}} [type=checkbox].list-table-row:checked").first().change();
|
||||
$("#{{view_id}} [type=checkbox].list-table-row:checked").not().first().change();
|
||||
var ids = JSON.parse($("#{{selected_instances_key_id}}").attr("data-ids"))
|
||||
if (ids.length) {
|
||||
$("#{{view_id}} .quick-bulk-action.d-none").removeClass("d-none");
|
||||
}
|
||||
}, 200);
|
||||
|
||||
</script>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
{% load i18n %}
|
||||
{% if request.actual_ids and request.session.prev_path == request.path %}
|
||||
<script>
|
||||
var ids = {{request.session.hlv_selected_ids|safe}}
|
||||
$("#{{selected_instances_key_id}}").attr("data-ids", JSON.stringify(ids));
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
<div class="d-flex justify-content-between mb-2">
|
||||
<div style="
|
||||
display: flex;
|
||||
@@ -89,13 +96,62 @@
|
||||
</span>)
|
||||
</div>
|
||||
<form
|
||||
hx-get="/{{bulk_path}}"
|
||||
hx-target="#bulkUpdateModalBody{{view_id|safe}}">
|
||||
<input type="hidden" name="instance_ids">
|
||||
<button type="submit" id="bulk_update_get_form{{view_id}}" hidden>
|
||||
</button>
|
||||
hx-get="/{{bulk_path}}"
|
||||
hx-target="#bulkUpdateModalBody{{view_id|safe}}">
|
||||
<input type="hidden" name="instance_ids">
|
||||
<button type="submit" id="bulk_update_get_form{{view_id}}" hidden>
|
||||
</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
<div
|
||||
id="filter_selected_{{view_id}}"
|
||||
class="oh-checkpoint-badge text-warning d-none quick-bulk-action"
|
||||
style="cursor: pointer;
|
||||
color:hsl(7.8deg 91% 60%) !important;"
|
||||
|
||||
onclick="
|
||||
ids = $('#{{selected_instances_key_id}}').attr('data-ids');
|
||||
$('#bulk_update_get_form{{view_id}}').closest('form').find('[name=instance_ids]').val(ids);
|
||||
$('#bulk_update_get_form{{view_id}}').click();
|
||||
$(this).find('[name=selected_ids]').val(ids);
|
||||
$(this).find('[type=submit]').click()
|
||||
"
|
||||
>
|
||||
<form style="display: inline;"
|
||||
hx-post="{{request.path}}?show_all=false" hx-target="#{{view_id|safe}}" hx-swap="outerHTML"
|
||||
onsubmit="event.preventDefault()"
|
||||
hx-on:submit="htmxLoadIndicator(this);">
|
||||
<input type="hidden" name="selected_ids" value="{{request.sesssion.hlv_selected_ids}}">
|
||||
<span class="label"
|
||||
{% comment %} style="display: none;" {% endcomment %}
|
||||
>
|
||||
{% trans "Filter" %}
|
||||
</span>
|
||||
<button hidden onclick="event.stopPropagation()" type="submit"></button>
|
||||
</form>
|
||||
{% endif %}
|
||||
(<span class="count_{{view_id}}">
|
||||
0
|
||||
</span>)
|
||||
</div>
|
||||
{% if request.session.hlv_selected_ids %}
|
||||
<div
|
||||
hx-get="{{request.path}}?show_all=true" hx-target="#{{view_id|safe}}" hx-swap="outerHTML"
|
||||
id="show_selected{{view_id}}"
|
||||
class="oh-checkpoint-badge text-warning quick-bulk-action"
|
||||
style="cursor: pointer;
|
||||
color: hsl(203.16deg 91% 60%) !important;
|
||||
"
|
||||
>
|
||||
<span class="label"
|
||||
{% comment %} style="display: none;" {% endcomment %}
|
||||
>
|
||||
{% trans "Show All" %}
|
||||
</span>
|
||||
(<span class="">
|
||||
{{request.actual_ids|length}}
|
||||
</span>)
|
||||
</div>
|
||||
{% endif %}
|
||||
{% for filter in stored_filters %}
|
||||
<div class="oh-hover-btn-container"
|
||||
hx-get="{{request.path}}?{{filter.urlencode}}"
|
||||
|
||||
Reference in New Issue
Block a user