diff --git a/horilla_views/admin.py b/horilla_views/admin.py index 03cb2a23a..ce350e7bb 100644 --- a/horilla_views/admin.py +++ b/horilla_views/admin.py @@ -1,5 +1,13 @@ from django.contrib import admin -from horilla_views.models import ActiveGroup, ActiveTab, ToggleColumn +from horilla_views import models -admin.site.register([ToggleColumn, ActiveTab, ActiveGroup]) +admin.site.register( + [ + models.ToggleColumn, + models.ActiveTab, + models.ActiveGroup, + models.SavedFilter, + models.ActiveView, + ] +) diff --git a/horilla_views/forms.py b/horilla_views/forms.py index a0b44cfdc..291f30235 100644 --- a/horilla_views/forms.py +++ b/horilla_views/forms.py @@ -7,6 +7,7 @@ from django.template.loader import render_to_string from django.utils.safestring import SafeText from horilla.horilla_middlewares import _thread_locals +from horilla_views import models class ToggleColumnForm(forms.Form): @@ -34,3 +35,43 @@ class ToggleColumnForm(forms.Form): context = {"form": self, "request": self.request} table_html = render_to_string("generic/as_list.html", context) return table_html + + +class SavedFilterForm(forms.ModelForm): + """ + SavedFilterForm + """ + + color = forms.CharField( + widget=forms.TextInput( + attrs={ + "class": "oh-input w-100", + "type": "color", + "placeholder": "Choose a color", + } + ) + ) + + class Meta: + model = models.SavedFilter + fields = ["title", "is_default", "color"] + + def structured(self): + """ + Render the form fields as HTML table rows with Bootstrap styling. + """ + request = getattr(_thread_locals, "request", None) + context = { + "form": self, + "request": request, + } + table_html = render_to_string("common_form.html", context) + return table_html + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + attrs = self.fields["title"].widget.attrs + attrs["class"] = "oh-input w-100" + attrs["placeholder"] = "Saved filter title" + if self.instance.pk: + self.verbose_name = self.instance.title diff --git a/horilla_views/models.py b/horilla_views/models.py index 683c93835..e6f2df5d8 100644 --- a/horilla_views/models.py +++ b/horilla_views/models.py @@ -50,3 +50,38 @@ class ActiveGroup(HorillaModel): path = models.CharField(max_length=256) group_target = models.CharField(max_length=256) group_by_field = models.CharField(max_length=256) + + +class SavedFilter(HorillaModel): + """ + SavedFilter + """ + + title = models.CharField(max_length=20, null=True) + color = models.CharField(max_length=10, default="") + is_default = models.BooleanField(default=False) + filter = models.TextField() + urlencode = models.TextField(default="") + path = models.CharField(max_length=256) + referrer = models.CharField(max_length=256, default="") + + def save(self, *args, **kwargs): + SavedFilter.objects.filter( + is_default=True, path=self.path, created_by=self.created_by + ).exclude(id=self.pk).update(is_default=False) + return super().save(*args, **kwargs) + + def __str__(self) -> str: + return str(self.title) + + +class ActiveView(HorillaModel): + """ + This model to store the active view type for HNV + """ + + path = models.CharField(max_length=256) + type = models.CharField(max_length=50) + + def save(self, *args, **kwargs): + return super().save(*args, **kwargs) diff --git a/horilla_views/templates/generic/horilla_nav.html b/horilla_views/templates/generic/horilla_nav.html index 3a6decda8..434438d6b 100644 --- a/horilla_views/templates/generic/horilla_nav.html +++ b/horilla_views/templates/generic/horilla_nav.html @@ -14,7 +14,7 @@ > -