From 1f644ba9747de843e70ac7de155a8dcdab1799a2 Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Fri, 11 Oct 2024 01:58:34 -0300 Subject: [PATCH] feat: improve navbar settings and other stuff --- app/apps/users/urls.py | 5 +++ app/apps/users/views.py | 35 +++++++++++++++---- app/templates/includes/navbar.html | 10 +----- app/templates/includes/navbar/user_menu.html | 29 +++++++++++++++ .../users/fragments/user_settings.html | 11 ++++++ app/templates/users/generic/hide_amounts.html | 2 ++ app/templates/users/generic/show_amounts.html | 3 ++ 7 files changed, 79 insertions(+), 16 deletions(-) create mode 100644 app/templates/includes/navbar/user_menu.html create mode 100644 app/templates/users/fragments/user_settings.html create mode 100644 app/templates/users/generic/hide_amounts.html create mode 100644 app/templates/users/generic/show_amounts.html diff --git a/app/apps/users/urls.py b/app/apps/users/urls.py index 558be03..fc502d8 100644 --- a/app/apps/users/urls.py +++ b/app/apps/users/urls.py @@ -11,4 +11,9 @@ urlpatterns = [ views.toggle_amount_visibility, name="toggle_amount_visibility", ), + path( + "user/settings/", + views.update_settings, + name="user_settings", + ), ] diff --git a/app/apps/users/views.py b/app/apps/users/views.py index e180faa..59b96b8 100644 --- a/app/apps/users/views.py +++ b/app/apps/users/views.py @@ -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( - '
' - ) + response = render(request, "users/generic/show_amounts.html") else: messages.info(request, _("Transaction amounts are now displayed")) - response = HttpResponse('') + 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}) diff --git a/app/templates/includes/navbar.html b/app/templates/includes/navbar.html index 4826f3f..38b0c75 100644 --- a/app/templates/includes/navbar.html +++ b/app/templates/includes/navbar.html @@ -45,15 +45,7 @@ - {% spaceless %} - - {% if user.settings.hide_amounts %} -
- {% else %} - - {% endif %}
- {% endspaceless %} - {% translate 'Logout' %} + {% include 'includes/navbar/user_menu.html' %} diff --git a/app/templates/includes/navbar/user_menu.html b/app/templates/includes/navbar/user_menu.html new file mode 100644 index 0000000..2c0c9df --- /dev/null +++ b/app/templates/includes/navbar/user_menu.html @@ -0,0 +1,29 @@ +{% load i18n %} +{##} + + diff --git a/app/templates/users/fragments/user_settings.html b/app/templates/users/fragments/user_settings.html new file mode 100644 index 0000000..26e5102 --- /dev/null +++ b/app/templates/users/fragments/user_settings.html @@ -0,0 +1,11 @@ +{% extends 'extends/offcanvas.html' %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block title %}{% translate 'User Settings' %}{% endblock %} + +{% block body %} +
+ {% crispy form %} +
+{% endblock %} diff --git a/app/templates/users/generic/hide_amounts.html b/app/templates/users/generic/hide_amounts.html new file mode 100644 index 0000000..940fdb3 --- /dev/null +++ b/app/templates/users/generic/hide_amounts.html @@ -0,0 +1,2 @@ +{% load i18n %} +{% translate 'Hide amounts' %} diff --git a/app/templates/users/generic/show_amounts.html b/app/templates/users/generic/show_amounts.html new file mode 100644 index 0000000..1dee43c --- /dev/null +++ b/app/templates/users/generic/show_amounts.html @@ -0,0 +1,3 @@ +{% load i18n %} + +{% translate 'Show amounts' %}