Skip to content

Commit eb1d6fd

Browse files
authored
Merge pull request #128 from cmu-delphi/OKRS24-187-Signals-Add-a-filter-to-show-only-base-signals
Added filter by base_for field
2 parents d31f138 + b7623f4 commit eb1d6fd

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

src/signals/filters.py

+2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class SignalFilter(django_filters.FilterSet):
4343
format_type = django_filters.MultipleChoiceFilter(choices=FormatChoices.choices)
4444
source = django_filters.ModelMultipleChoiceFilter(queryset=SourceSubdivision.objects.all())
4545
time_type = django_filters.MultipleChoiceFilter(choices=TimeTypeChoices.choices)
46+
base_signal = django_filters.BooleanFilter(lookup_expr='isnull', field_name='base_for')
4647

4748
class Meta:
4849
model = Signal
@@ -57,6 +58,7 @@ class Meta:
5758
'format_type',
5859
'source',
5960
'time_type',
61+
'base_signal',
6062
]
6163

6264
def filter_search(self, queryset, name, value) -> Any:

src/signals/forms.py

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class SignalFilterForm(forms.ModelForm):
3030
format_type = forms.ChoiceField(choices=FormatChoices.choices, widget=forms.CheckboxSelectMultiple())
3131
source = forms.ModelMultipleChoiceField(queryset=SourceSubdivision.objects.all(), widget=forms.CheckboxSelectMultiple())
3232
time_type = forms.ChoiceField(choices=TimeTypeChoices.choices, widget=forms.CheckboxSelectMultiple())
33+
base_signal = forms.ChoiceField(choices=[('', _('All')), (True, _('Yes')), (False, _('No'))], required=False, widget=forms.RadioSelect())
3334

3435
class Meta:
3536
model = Signal
@@ -79,6 +80,7 @@ class Meta:
7980
'data-bs-toggle': 'tooltip',
8081
'data-bs-placement': 'bottom',
8182
}),
83+
8284
}
8385

8486
def __init__(self, *args, **kwargs) -> None:

src/signals/views.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ def get_url_params(self):
5353
else None,
5454
"format_type": [el for el in self.request.GET.getlist("format_type")],
5555
"source": [int(el) for el in self.request.GET.getlist("source")],
56-
"time_type": [el for el in self.request.GET.getlist("time_type")]
56+
"time_type": [el for el in self.request.GET.getlist("time_type")],
57+
"base_signal": self.request.GET.get("base_signal"),
5758
}
5859
url_params_str = ""
5960
for param_name, param_value in url_params_dict.items():

src/templates/signals/signals.html

+19-1
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,25 @@ <h2 class="accordion-header" id="available_geography-heading">
196196
</div>
197197
</div>
198198
</div>
199+
<div class="accordion-item">
200+
<h2 class="accordion-header">
201+
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#base_signal-collapse" aria-expanded="false" aria-controls="active-collapse">
202+
<label for="id_base_signal" class="form-label">
203+
Base Signal
204+
<a tabindex="0" role="button" class="info-button" data-bs-toggle="popover" data-bs-title="Base Signal" data-bs-content="{{ filters_descriptions.SignalFilter.base_signal }}"><i class="bi bi-info-circle"></i></a>
205+
</label>
206+
</button>
207+
</h2>
208+
{% if form.base_signal.value %}
209+
<div id="base_signal-collapse" class="accordion-collapse" aria-labelledby="base_signal-heading">
210+
{% else %}
211+
<div id="base_signal-collapse" class="accordion-collapse collapse" aria-labelledby="base_signal-heading">
212+
{% endif %}
213+
<div class="accordion-body">
214+
{{ form.base_signal|as_crispy_field }}
215+
</div>
216+
</div>
217+
</div>
199218
</div>
200219
<div class="card-body">
201220
<div class="d-grid gap-2 mt-3">
@@ -285,7 +304,6 @@ <h2 class="accordion-header" id="available_geography-heading">
285304
</div>
286305
</div>
287306
</form>
288-
289307
<script>
290308

291309
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]');

0 commit comments

Comments
 (0)