Skip to content

Commit dd77481

Browse files
committed
v0.5.11: Add HTMX for loading spinner on approval form
- Add HTMX to base template - Use hx-post with hx-indicator for loading state - Disable buttons during request with hx-disabled-elt - Return HX-Redirect header for HTMX requests
1 parent 517ce7b commit dd77481

5 files changed

Lines changed: 27 additions & 4 deletions

File tree

django_forms_workflows/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Enterprise-grade, database-driven form builder with approval workflows
44
"""
55

6-
__version__ = "0.5.10"
6+
__version__ = "0.5.11"
77
__author__ = "Django Forms Workflows Contributors"
88
__license__ = "LGPL-3.0-only"
99

django_forms_workflows/templates/django_forms_workflows/approve.html

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ <h5 class="mb-0">Submitted Data</h5>
6969
<h5 class="mb-0">Your Decision</h5>
7070
</div>
7171
<div class="card-body">
72-
<form method="post" id="approvalForm">
72+
<form method="post" id="approvalForm"
73+
hx-post=""
74+
hx-indicator="#loadingIndicator"
75+
hx-disabled-elt="button[type=submit]">
7376
{% csrf_token %}
7477
<div class="mb-3">
7578
<label for="comments" class="form-label">Comments (Optional)</label>
@@ -85,6 +88,10 @@ <h5 class="mb-0">Your Decision</h5>
8588
<a href="{% url 'forms_workflows:approval_inbox' %}" class="btn btn-outline-secondary btn-lg">
8689
<i class="bi bi-arrow-left"></i> Back
8790
</a>
91+
<span id="loadingIndicator" class="htmx-indicator ms-3">
92+
<span class="spinner-border spinner-border-sm" role="status"></span>
93+
Processing...
94+
</span>
8895
</div>
8996
</form>
9097
</div>
@@ -93,5 +100,13 @@ <h5 class="mb-0">Your Decision</h5>
93100
</div>
94101
{% endblock %}
95102

103+
{% block extra_css %}
104+
<style>
105+
.htmx-indicator { display: none; }
106+
.htmx-request .htmx-indicator { display: inline-block; }
107+
.htmx-request button[type=submit] { opacity: 0.6; }
108+
</style>
109+
{% endblock %}
110+
96111

97112

django_forms_workflows/templates/django_forms_workflows/base.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@
113113

114114
<!-- Bootstrap 5 JS Bundle -->
115115
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
116+
<!-- HTMX -->
117+
<script src="https://unpkg.com/htmx.org@2.0.4"></script>
116118
{% block extra_js %}{% endblock %}
117119
</body>
118120
</html>

django_forms_workflows/views.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
from django.contrib.auth.decorators import login_required
1515
from django.core.files.storage import default_storage
1616
from django.db import models
17-
from django.http import HttpResponseForbidden, JsonResponse
17+
from django.http import HttpResponse, HttpResponseForbidden, JsonResponse
1818
from django.shortcuts import get_object_or_404, redirect, render
19+
from django.urls import reverse
1920
from django.utils import timezone
2021
from django.views.decorators.http import require_http_methods
2122

@@ -353,6 +354,11 @@ def approve_submission(request, task_id):
353354
)
354355

355356
messages.success(request, f"Submission {decision}d successfully.")
357+
redirect_url = reverse("forms_workflows:approval_inbox")
358+
if request.headers.get("HX-Request"):
359+
response = HttpResponse()
360+
response["HX-Redirect"] = redirect_url
361+
return response
356362
return redirect("forms_workflows:approval_inbox")
357363

358364
return render(

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "django-forms-workflows"
3-
version = "0.5.10"
3+
version = "0.5.11"
44
description = "Enterprise-grade, database-driven form builder with approval workflows and external data integration"
55
license = "LGPL-3.0-only"
66
readme = "README.md"

0 commit comments

Comments
 (0)