Closes #8765: Display and enable bulk clearing of user's table preferences

This commit is contained in:
jeremystretch 2022-03-03 10:03:43 -05:00
parent 21e3159711
commit e6072a51f8
2 changed files with 62 additions and 0 deletions

View File

@ -8,6 +8,7 @@
<form method="post" action="" id="preferences-update">
{% csrf_token %}
{# Built-in preferences #}
{% for group, fields in form.fieldsets %}
<div class="field-group my-5">
<div class="row mb-2">
@ -19,6 +20,7 @@
</div>
{% endfor %}
{# Plugin preferences #}
{% with plugin_fields=form.plugin_fields %}
{% if plugin_fields %}
<div class="field-group my-5">
@ -32,6 +34,50 @@
{% endif %}
{% endwith %}
{# Table configurations #}
<div class="field-group my-5">
<div class="row mb-2">
<h5 class="offset-sm-3">Table Configurations</h5>
</div>
<div class="row">
{% if request.user.config.data.tables %}
<label class="col-sm-3 col-form-label text-lg-end">
Clear table preferences
</label>
<div class="col-sm-9">
<table class="table table-hover object-list">
<thead>
<tr>
<th>
<input type="checkbox" class="toggle form-check-input" title="Toggle All">
</th>
<th>Table</th>
<th>Ordering</th>
<th>Columns</th>
</tr>
</thead>
<tbody>
{% for table, prefs in request.user.config.data.tables.items %}
<tr>
<td>
<input type="checkbox" name="pk" value="tables.{{ table }}" class="form-check-input" />
</td>
<td>{{ table }}</td>
<td>{{ prefs.ordering|join:", "|placeholder }}</td>
<td>{{ prefs.columns|join:", "|placeholder }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="offset-sm-3">
<p class="text-muted">None found</p>
</div>
{% endif %}
</div>
</div>
<div class="text-end my-3">
<a class="btn btn-outline-secondary" href="{% url 'user:preferences' %}">Cancel</a>
<button type="submit" name="_update" class="btn btn-primary">Save </button>

View File

@ -50,6 +50,11 @@ class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMe
'data_format',
)),
)
# List of clearable preferences
pk = forms.MultipleChoiceField(
choices=[],
required=False
)
class Meta:
model = UserConfig
@ -63,12 +68,23 @@ class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMe
super().__init__(*args, instance=instance, **kwargs)
# Compile clearable preference choices
self.fields['pk'].choices = (
(f'tables.{table_name}', '') for table_name in instance.data.get('tables', [])
)
def save(self, *args, **kwargs):
# Set UserConfig data
for pref_name, value in self.cleaned_data.items():
if pref_name == 'pk':
continue
self.instance.set(pref_name, value, commit=False)
# Clear selected preferences
for preference in self.cleaned_data['pk']:
self.instance.clear(preference)
return super().save(*args, **kwargs)
@property