feat: improve navbar settings and other stuff

This commit is contained in:
Herculino Trotta
2024-10-11 01:58:34 -03:00
parent 1e4b4de0ec
commit 1f644ba974
7 changed files with 79 additions and 16 deletions

View File

@@ -11,4 +11,9 @@ urlpatterns = [
views.toggle_amount_visibility,
name="toggle_amount_visibility",
),
path(
"user/settings/",
views.update_settings,
name="user_settings",
),
]

View File

@@ -11,8 +11,10 @@ from django.utils.translation import gettext_lazy as _
from apps.users.forms import (
LoginForm,
UserSettingsForm,
)
from apps.common.decorators.htmx import only_htmx
from apps.users.models import UserSettings
def logout_view(request):
@@ -29,20 +31,39 @@ class UserLoginView(LoginView):
@only_htmx
@login_required
def toggle_amount_visibility(request):
current_hide_amounts = request.user.settings.hide_amounts
user_settings, created = UserSettings.objects.get_or_create(user=request.user)
current_hide_amounts = user_settings.hide_amounts
new_hide_amounts = not current_hide_amounts
request.user.settings.hide_amounts = new_hide_amounts
request.user.settings.save()
user_settings.hide_amounts = new_hide_amounts
user_settings.save()
if new_hide_amounts is True:
messages.info(request, _("Transaction amounts are now hidden"))
response = HttpResponse(
'<i class="fa-solid fa-eye-slash fa-fw"></i><div id="settings-hide-amounts" class="d-inline tw-invisible"></div>'
)
response = render(request, "users/generic/show_amounts.html")
else:
messages.info(request, _("Transaction amounts are now displayed"))
response = HttpResponse('<i class="fa-solid fa-eye fa-fw"></i>')
response = render(request, "users/generic/hide_amounts.html")
response.headers["HX-Trigger"] = "transaction_updated, toast"
return response
@only_htmx
@login_required
def update_settings(request):
user_settings, created = UserSettings.objects.get_or_create(user=request.user)
if request.method == "POST":
form = UserSettingsForm(request.POST, instance=user_settings)
if form.is_valid():
form.save()
messages.success(request, _("Your settings have been updated."))
return HttpResponse(
status=204,
headers={"HX-Refresh": "true"},
)
else:
form = UserSettingsForm(instance=user_settings)
return render(request, "users/fragments/user_settings.html", {"form": form})