Просмотр исходного кода

#9416: Add view to reset user's dashboard

jeremystretch 2 лет назад
Родитель
Сommit
90527b799d

+ 1 - 0
netbox/extras/urls.py

@@ -88,6 +88,7 @@ urlpatterns = [
     path('changelog/<int:pk>/', include(get_model_urls('extras', 'objectchange'))),
 
     # User dashboard
+    path('dashboard/reset/', views.DashboardResetView.as_view(), name='dashboard_reset'),
     path('dashboard/widgets/add/', views.DashboardWidgetAddView.as_view(), name='dashboardwidget_add'),
     path('dashboard/widgets/<uuid:id>/configure/', views.DashboardWidgetConfigView.as_view(), name='dashboardwidget_config'),
     path('dashboard/widgets/<uuid:id>/delete/', views.DashboardWidgetDeleteView.as_view(), name='dashboardwidget_delete'),

+ 29 - 1
netbox/extras/views.py

@@ -5,6 +5,7 @@ from django.db.models import Count, Q
 from django.http import HttpResponseBadRequest, HttpResponseForbidden, HttpResponse
 from django.shortcuts import get_object_or_404, redirect, render
 from django.urls import reverse
+from django.utils.translation import gettext as _
 from django.views.generic import View
 
 from core.choices import JobStatusChoices, ManagedFileRootPathChoices
@@ -665,9 +666,36 @@ class JournalEntryBulkDeleteView(generic.BulkDeleteView):
 
 
 #
-# Dashboard widgets
+# Dashboard & widgets
 #
 
+class DashboardResetView(LoginRequiredMixin, View):
+    template_name = 'extras/dashboard/reset.html'
+
+    def get(self, request):
+        get_object_or_404(Dashboard.objects.all(), user=request.user)
+        form = ConfirmationForm()
+
+        return render(request, self.template_name, {
+            'form': form,
+            'return_url': reverse('home'),
+        })
+
+    def post(self, request):
+        dashboard = get_object_or_404(Dashboard.objects.all(), user=request.user)
+        form = ConfirmationForm(request.POST)
+
+        if form.is_valid():
+            dashboard.delete()
+            messages.success(request, _("Your dashboard has been reset."))
+            return redirect(reverse('home'))
+
+        return render(request, self.template_name, {
+            'form': form,
+            'return_url': reverse('home'),
+        })
+
+
 class DashboardWidgetAddView(LoginRequiredMixin, View):
     template_name = 'extras/dashboard/widget_add.html'
 

+ 8 - 0
netbox/templates/extras/dashboard/reset.html

@@ -0,0 +1,8 @@
+{% extends 'generic/confirmation_form.html' %}
+
+{% block title %}Reset Dashboard?{% endblock %}
+
+{% block message %}
+  <p>This will remove <strong>all</strong> configured widgets and restore the default dashboard configuration.</p>
+  <p>This change affects on <i>your</i> dashboard, and will not impact other users.</p>
+{% endblock %}

+ 20 - 13
netbox/templates/home.html

@@ -29,19 +29,26 @@
       {% include 'extras/dashboard/widget.html' %}
     {% endfor %}
   </div>
-  <div class="text-end px-2">
-    <a href="#"
-      hx-get="{% url 'extras:dashboardwidget_add' %}"
-      hx-target="#htmx-modal-content"
-      data-bs-toggle="modal"
-      data-bs-target="#htmx-modal"
-      class="btn btn-success btn-sm"
-    >
-      <i class="mdi mdi-plus"></i> Add Widget
-    </a>
-    <button id="save_dashboard" class="btn btn-primary btn-sm" data-url="{% url 'extras-api:dashboard' %}">
-      <i class="mdi mdi-content-save-outline"></i> Save Layout
-    </button>
+  <div class="d-flex px-3">
+    <div class="flex-grow-1">
+      <a href="#"
+        hx-get="{% url 'extras:dashboardwidget_add' %}"
+        hx-target="#htmx-modal-content"
+        data-bs-toggle="modal"
+        data-bs-target="#htmx-modal"
+        class="btn btn-success btn-sm"
+      >
+        <i class="mdi mdi-plus"></i> Add Widget
+      </a>
+    </div>
+    <div>
+      <button id="save_dashboard" class="btn btn-primary btn-sm" data-url="{% url 'extras-api:dashboard' %}">
+        <i class="mdi mdi-content-save-outline"></i> Save Layout
+      </button>
+      <a href="{% url 'extras:dashboard_reset' %}" class="btn btn-danger btn-sm">
+        <i class="mdi mdi-backspace"></i>  Reset Dashboard
+      </a>
+    </div>
   </div>
 {% endblock content-wrapper %}