dataviz: ignore hidden chart cells when building filters (#81148) #162
|
@ -345,7 +345,12 @@ class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm):
|
|||
filters_cell_id = kwargs.pop('filters_cell_id', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
chart_cells = list(ChartNgCell.objects.filter(page=page, statistic__isnull=False).order_by('order'))
|
||||
chart_cells = []
|
||||
for cell in ChartNgCell.objects.filter(page=page, statistic__isnull=False).order_by('order'):
|
||||
cell.page = page # use cached placeholders
|
||||
if cell.is_placeholder_active(traverse_cells=False):
|
||||
chart_cells.append(cell)
|
||||
|
||||
if not chart_cells:
|
||||
self.fields.clear()
|
||||
return
|
||||
|
|
|
@ -1386,7 +1386,7 @@ class CellBase(models.Model, metaclass=CellMeta):
|
|||
validity_info.invalid_reason_code, validity_info.invalid_reason_code
|
||||
)
|
||||
|
||||
def is_placeholder_active(self):
|
||||
def is_placeholder_active(self, traverse_cells=True):
|
||||
if not self.placeholder:
|
||||
return False
|
||||
if self.placeholder.startswith('_'):
|
||||
|
@ -1394,7 +1394,7 @@ class CellBase(models.Model, metaclass=CellMeta):
|
|||
|
||||
request = RequestFactory().get('/')
|
||||
if not hasattr(self.page, '_placeholders'):
|
||||
self.page._placeholders = self.page.get_placeholders(request, traverse_cells=True)
|
||||
self.page._placeholders = self.page.get_placeholders(request, traverse_cells=traverse_cells)
|
||||
for placeholder in self.page._placeholders:
|
||||
if placeholder.key == self.placeholder:
|
||||
return True
|
||||
|
|
|
@ -3136,6 +3136,38 @@ def test_chart_filters_cell_select_filters(new_api_statistics, app, admin_user,
|
|||
assert resp.forms[0].get(field_prefix + 'filters', index=0).value == 'ou'
|
||||
|
||||
|
||||
@with_httmock(new_api_mock)
|
||||
def test_chart_filters_cell_hidden_cells(new_api_statistics, app, admin_user):
|
||||
page = Page.objects.create(title='One', slug='index')
|
||||
ChartFiltersCell.objects.create(page=page, order=1, placeholder='content')
|
||||
app = login(app)
|
||||
resp = app.get('/')
|
||||
assert 'No filters are available' in resp.text
|
||||
|
||||
cell = ChartNgCell.objects.create(page=page, order=2, placeholder='content')
|
||||
cell.statistic = Statistic.objects.get(slug='one-serie')
|
||||
cell.save()
|
||||
|
||||
resp = app.get('/')
|
||||
assert 'filter-ou' in resp.form.fields
|
||||
|
||||
cell = ChartNgCell(page=page, order=3, placeholder='content')
|
||||
cell.statistic = Statistic.objects.get(slug='one-serie')
|
||||
cell.filter_params = {'ou': 'default'}
|
||||
cell.save()
|
||||
|
||||
# new cell has consequence on filter computation
|
||||
resp = app.get('/')
|
||||
assert 'filter-ou' not in resp.form.fields
|
||||
|
||||
cell.placeholder = ''
|
||||
cell.save()
|
||||
|
||||
# new cell has no consequence on filter computation since it is hidden
|
||||
resp = app.get('/')
|
||||
assert 'filter-ou' in resp.form.fields
|
||||
|
||||
|
||||
@with_httmock(new_api_mock)
|
||||
@pytest.mark.freeze_time('2021-10-06')
|
||||
def test_chartng_cell_api_view_get_parameters(app, normal_user, new_api_statistics, nocache):
|
||||
|
|
Loading…
Reference in New Issue