[UPDT] HORILLA VIEWS: Temporary cache saved filter

This commit is contained in:
Horilla
2024-11-07 23:20:33 +05:30
parent d70f36f42b
commit 879e4947f9
4 changed files with 71 additions and 1 deletions

View File

@@ -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(

View File

@@ -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) {

View File

@@ -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",
),
]

View File

@@ -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")