Skip to content

Commit caf7927

Browse files
authored
Merge pull request #85 from cmu-delphi/OKRS24-93-Add-a-checkbox-next-to-each-row-to-filter-them
Added filters by several ID to perform more precise filtering
2 parents 030d0f9 + e4015d2 commit caf7927

File tree

6 files changed

+34
-7
lines changed

6 files changed

+34
-7
lines changed

src/assets/css/style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,3 +1236,7 @@ h6 {
12361236
#order_by_label{
12371237
margin-bottom: 1rem;
12381238
}
1239+
1240+
.clickable-table-cell:hover {
1241+
cursor: pointer;
1242+
}

src/signals/filters.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@
22

33
import django_filters
44
from django.db.models import Q
5-
from django_filters.filters import CharFilter, OrderingFilter
5+
from django_filters.filters import (
6+
BaseInFilter,
7+
CharFilter,
8+
NumberFilter,
9+
OrderingFilter,
10+
)
11+
from django_filters.widgets import QueryArrayWidget
612

713
from signals.models import Signal
814

915

16+
class NumberInFilter(BaseInFilter, NumberFilter):
17+
pass
18+
19+
1020
class SignalFilter(django_filters.FilterSet):
1121
"""
1222
FilterSet for the Signal model.
1323
"""
1424

25+
id = NumberInFilter(field_name='id', lookup_expr='in', widget=QueryArrayWidget)
1526
search = CharFilter(method='filter_search')
1627
order_by = OrderingFilter(
1728
fields=(
@@ -24,6 +35,7 @@ class SignalFilter(django_filters.FilterSet):
2435
class Meta:
2536
model = Signal
2637
fields: list[str] = [
38+
'id',
2739
'search',
2840
'pathogen',
2941
'active',

src/signals/forms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010
ActiveChoices
1111
)
1212

13-
MULTI_SELECT_TOOLTIP_MESSAGE = _('Hold down “Control”, or “Command” on a Mac, to select more than one.')
14-
1513

1614
class SignalFilterForm(forms.ModelForm):
1715
"""
1816
A form for filtering signals.
1917
"""
18+
id = forms.ModelMultipleChoiceField(queryset=Signal.objects.all(), widget=forms.MultipleHiddenInput)
2019
order_by = forms.ChoiceField(choices=[
2120
('', '---------'),
2221
('name', 'Name'),
@@ -35,6 +34,7 @@ class SignalFilterForm(forms.ModelForm):
3534
class Meta:
3635
model = Signal
3736
fields: list[str] = [
37+
'id',
3838
'order_by',
3939
'search',
4040
'pathogen',

src/signals/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def get_queryset(self) -> Any:
3636

3737
def get_url_params(self):
3838
url_params_dict = {
39+
"id": self.request.GET.get("id"),
3940
"search": self.request.GET.get("search"),
4041
"pathogen": int(self.request.GET.get("pathogen"))
4142
if self.request.GET.get("pathogen")

src/templates/signals/signals.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ <h5 class="modal-title">Time Label</h5>
241241
</div>
242242
<div class="card-body">
243243
<div class="d-grid gap-2 mt-3">
244-
<button type="submit" class="btn btn-primary">{% trans 'Apply Filters' %}</button>
244+
<button id="filter-submit" type="submit" class="btn btn-primary">{% trans 'Apply Filters' %}</button>
245245
</div>
246246
</div>
247247
</div>
@@ -264,6 +264,7 @@ <h5 class="modal-title">Time Label</h5>
264264
<table class="table table-borderless table-hover">
265265
<thead>
266266
<tr>
267+
<th scope="col"></th>
267268
<th scope="col">Name</th>
268269
<th scope="col">Data Source</th>
269270
<th scope="col">Description</th>
@@ -282,9 +283,11 @@ <h5 class="modal-title">Time Label</h5>
282283
</div>
283284
</div>
284285
</form>
286+
285287
<script>
286288
document.getElementById('id_order_by').addEventListener('change', function() {
287289
document.getElementById('filters-form').submit();
288290
});
289291
</script>
292+
290293
{% endblock %}

src/templates/signals/signals_list.html

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
{% load crispy_forms_tags %}
2+
13
{% for signal in signals %}
24
{% if forloop.last %}
35
<tr hx-trigger="revealed" class="clickable-table-row" hx-get="{% url 'signals' %}?page={{ page_obj.number|add:1 }}{{ url_params_str }}"
4-
hx-swap="afterend" onClick="location.href='{% url 'signal' pk=signal.id %}';">
6+
hx-swap="afterend">
57
{% else %}
6-
<tr classs="clickable-table-row" onClick="location.href='{% url 'signal' pk=signal.id %}';">
8+
<tr classs="clickable-table-row">
79
{% endif %}
8-
<td>{{ signal.display_name }}</td>
10+
<td>
11+
<input type="checkbox" name="id" value="{{ signal.id }}">
12+
{{ form.id|as_crispy_field }}
13+
</td>
14+
<td onClick="location.href='{% url 'signal' pk=signal.id %}';" class="clickable-table-cell">{{ signal.display_name }}</td>
915
<td>{{ signal.source }}</td>
1016
<td>{{ signal.description }}</td>
1117
<td>
@@ -28,4 +34,5 @@
2834
{% endif %}
2935
</td>
3036
</tr>
37+
3138
{% endfor %}

0 commit comments

Comments
 (0)