[UPDT] HORILLA VIEWS: Temporary cache saved filter
This commit is contained in:
@@ -1022,6 +1022,10 @@ class HorillaNavView(TemplateView):
|
||||
context["create_attrs"] = self.create_attrs
|
||||
context["search_in"] = self.search_in
|
||||
context["filter_instance_context_name"] = self.filter_instance
|
||||
last_filter = CACHE.get(
|
||||
self.request.session.session_key + "last-applied-filter", {}
|
||||
)
|
||||
context["last_filter"] = dict(last_filter)
|
||||
if self.filter_instance:
|
||||
context[self.filter_form_context_name] = self.filter_instance.form
|
||||
context["active_view"] = models.ActiveView.objects.filter(
|
||||
|
||||
@@ -115,7 +115,31 @@
|
||||
<button
|
||||
type="submit"
|
||||
id="applyFilter"
|
||||
onclick="filterCountUpdate('filterForm')"
|
||||
onclick="
|
||||
filterCountUpdate('filterForm');
|
||||
// if (event.isTrusted) {
|
||||
var formData = new FormData($('#filterForm')[0]);
|
||||
var filterData = {};
|
||||
formData.forEach((value, key) => {
|
||||
if (filterData[key]) {
|
||||
filterData[key] = [].concat(filterData[key], value);
|
||||
} else {
|
||||
filterData[key] = value;
|
||||
}
|
||||
});
|
||||
console.log(filterData)
|
||||
$.ajax({
|
||||
type: 'get',
|
||||
url: `{% url 'last-applied-filter' %}`,
|
||||
data: filterData,
|
||||
traditional:true,
|
||||
success: function (response) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// }
|
||||
"
|
||||
class="oh-btn oh-btn--secondary oh-btn--small w-100">
|
||||
{% trans "Filter" %}
|
||||
</button>
|
||||
@@ -207,6 +231,25 @@
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var form = $('#filterForm')[0];
|
||||
var data ={{last_filter|safe}}
|
||||
for (const key in data) {
|
||||
const field = form.elements[key];
|
||||
const value = data[key][0]; // Get the first element in the array
|
||||
|
||||
if (field) {
|
||||
if (field.type === 'checkbox') {
|
||||
field.checked = value === 'on';
|
||||
} else if (field.type === 'select-multiple') {
|
||||
// Handle multiple select fields
|
||||
Array.from(field.options).forEach(option => {
|
||||
option.selected = data[key].includes(option.value);
|
||||
});
|
||||
} else {
|
||||
field.value = value; // Set the value for other input types
|
||||
}
|
||||
}
|
||||
}
|
||||
setTimeout(() => {
|
||||
$(".oh-btn--view-active").click();
|
||||
if (!$(".oh-btn--view-active").length) {
|
||||
|
||||
@@ -34,4 +34,9 @@ urlpatterns = [
|
||||
views.SearchInIds.as_view(),
|
||||
name="search-in-instance-ids",
|
||||
),
|
||||
path(
|
||||
"last-applied-filter",
|
||||
views.LastAppliedFilter.as_view(),
|
||||
name="last-applied-filter",
|
||||
),
|
||||
]
|
||||
|
||||
@@ -237,3 +237,21 @@ class SearchInIds(View):
|
||||
context: dict = CACHE.get(cache_key)
|
||||
context["instances"] = context["filter_class"](self.request.GET).qs
|
||||
return render(self.request, "generic/filter_result.html", context)
|
||||
|
||||
|
||||
@method_decorator(login_required, name="dispatch")
|
||||
class LastAppliedFilter(View):
|
||||
"""
|
||||
Class view to handle last applied filter
|
||||
"""
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
"""
|
||||
Get method
|
||||
"""
|
||||
CACHE.set(
|
||||
self.request.session.session_key + "last-applied-filter",
|
||||
self.request.GET,
|
||||
timeout=600,
|
||||
)
|
||||
return HttpResponse("success")
|
||||
|
||||
Reference in New Issue
Block a user