Clean up dashboard views

This commit is contained in:
jeremystretch 2023-02-24 14:38:46 -05:00
parent 0f566b7975
commit 3370bf7eb3
2 changed files with 28 additions and 30 deletions

View File

@ -35,4 +35,4 @@ class DashboardWidgetAddForm(DashboardWidgetForm):
} }
) )
) )
field_order = ('widget_class', 'title') field_order = ('widget_class', 'title', 'color')

View File

@ -10,7 +10,7 @@ from django_rq.queues import get_connection
from rq import Worker from rq import Worker
from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm
from netbox.registry import registry from extras.dashboard.utils import get_widget_class
from netbox.views import generic from netbox.views import generic
from utilities.forms import ConfirmationForm, get_field_value from utilities.forms import ConfirmationForm, get_field_value
from utilities.htmx import is_htmx from utilities.htmx import is_htmx
@ -676,17 +676,17 @@ class DashboardWidgetAddView(LoginRequiredMixin, View):
template_name = 'extras/dashboard/widget_add.html' template_name = 'extras/dashboard/widget_add.html'
def get(self, request): def get(self, request):
if not is_htmx(request):
return redirect('home')
initial = request.GET or { initial = request.GET or {
'widget_class': 'extras.NoteWidget', 'widget_class': 'extras.NoteWidget',
} }
widget_form = DashboardWidgetAddForm(initial=initial) widget_form = DashboardWidgetAddForm(initial=initial)
widget_name = get_field_value(widget_form, 'widget_class') widget_name = get_field_value(widget_form, 'widget_class')
widget_class = registry['widgets'][widget_name] widget_class = get_widget_class(widget_name)
config_form = widget_class.ConfigForm(prefix='config') config_form = widget_class.ConfigForm(prefix='config')
if not is_htmx(request):
return redirect('home')
return render(request, self.template_name, { return render(request, self.template_name, {
'widget_class': widget_class, 'widget_class': widget_class,
'widget_form': widget_form, 'widget_form': widget_form,
@ -695,23 +695,25 @@ class DashboardWidgetAddView(LoginRequiredMixin, View):
def post(self, request): def post(self, request):
widget_form = DashboardWidgetAddForm(request.POST) widget_form = DashboardWidgetAddForm(request.POST)
config_form = None
widget_class = None
if widget_form.is_valid(): if widget_form.is_valid():
widget_class = registry['widgets'][widget_form.cleaned_data['widget_class']] widget_class = get_widget_class(widget_form.cleaned_data['widget_class'])
config_form = widget_class.ConfigForm(request.POST, prefix='config') config_form = widget_class.ConfigForm(request.POST, prefix='config')
if config_form.is_valid(): if config_form.is_valid():
data = widget_form.cleaned_data data = widget_form.cleaned_data
class_name = data.pop('widget_class') data.pop('widget_class')
data['config'] = config_form.cleaned_data data['config'] = config_form.cleaned_data
widget = widget_class(**data) widget = widget_class(**data)
data['class'] = class_name
request.user.dashboard.add_widget(widget) request.user.dashboard.add_widget(widget)
request.user.dashboard.save() request.user.dashboard.save()
messages.success(request, f'Added widget {widget.id}')
response = HttpResponse() return HttpResponse(headers={
response['HX-Redirect'] = reverse('home') 'HX-Redirect': reverse('home'),
return response })
return render(request, self.template_name, { return render(request, self.template_name, {
'widget_class': widget_class, 'widget_class': widget_class,
@ -724,13 +726,13 @@ class DashboardWidgetConfigView(LoginRequiredMixin, View):
template_name = 'extras/dashboard/widget_config.html' template_name = 'extras/dashboard/widget_config.html'
def get(self, request, id): def get(self, request, id):
if not is_htmx(request):
return redirect('home')
widget = request.user.dashboard.get_widget(id) widget = request.user.dashboard.get_widget(id)
widget_form = DashboardWidgetForm(initial=widget.form_data) widget_form = DashboardWidgetForm(initial=widget.form_data)
config_form = widget.ConfigForm(initial=widget.form_data.get('config'), prefix='config') config_form = widget.ConfigForm(initial=widget.form_data.get('config'), prefix='config')
if not is_htmx(request):
return redirect('home')
return render(request, self.template_name, { return render(request, self.template_name, {
'widget_form': widget_form, 'widget_form': widget_form,
'config_form': config_form, 'config_form': config_form,
@ -745,14 +747,13 @@ class DashboardWidgetConfigView(LoginRequiredMixin, View):
if widget_form.is_valid() and config_form.is_valid(): if widget_form.is_valid() and config_form.is_valid():
data = widget_form.cleaned_data data = widget_form.cleaned_data
data['config'] = config_form.cleaned_data data['config'] = config_form.cleaned_data
print(request.user.dashboard.config)
print(data)
request.user.dashboard.config[str(id)].update(data) request.user.dashboard.config[str(id)].update(data)
request.user.dashboard.save() request.user.dashboard.save()
messages.success(request, f'Updated widget {widget.id}')
response = HttpResponse() return HttpResponse(headers={
response['HX-Redirect'] = reverse('home') 'HX-Redirect': reverse('home'),
return response })
return render(request, self.template_name, { return render(request, self.template_name, {
'widget_form': widget_form, 'widget_form': widget_form,
@ -765,11 +766,12 @@ class DashboardWidgetDeleteView(LoginRequiredMixin, View):
template_name = 'generic/object_delete.html' template_name = 'generic/object_delete.html'
def get(self, request, id): def get(self, request, id):
if not is_htmx(request):
return redirect('home')
widget = request.user.dashboard.get_widget(id) widget = request.user.dashboard.get_widget(id)
form = ConfirmationForm(initial=request.GET) form = ConfirmationForm(initial=request.GET)
# If this is an HTMX request, return only the rendered deletion form as modal content
if is_htmx(request):
return render(request, 'htmx/delete_form.html', { return render(request, 'htmx/delete_form.html', {
'object_type': widget.__class__.__name__, 'object_type': widget.__class__.__name__,
'object': widget, 'object': widget,
@ -777,10 +779,6 @@ class DashboardWidgetDeleteView(LoginRequiredMixin, View):
'form_url': reverse('extras:dashboardwidget_delete', kwargs={'id': id}) 'form_url': reverse('extras:dashboardwidget_delete', kwargs={'id': id})
}) })
return render(request, self.template_name, {
'form': form,
})
def post(self, request, id): def post(self, request, id):
form = ConfirmationForm(request.POST) form = ConfirmationForm(request.POST)