Only show relevant folders

A folder is relevant if it, or any of its descents contain a template of
the kind you’re looking for.

If you’re not filtering by template type then you should see all
folders.
This commit is contained in:
Chris Hill-Scott
2018-11-12 10:17:57 +00:00
parent 084c020d0c
commit 10fe78bb31
3 changed files with 23 additions and 8 deletions

View File

@@ -126,7 +126,7 @@ def choose_template(service_id, template_type='all', template_folder_id=None):
current_template_folder_id=template_folder_id,
can_manage_folders=can_manage_folders(),
template_folder_path=current_service.get_template_folder_path(template_folder_id),
template_folders=current_service.get_template_folders(template_folder_id),
template_folders=current_service.get_template_folders(template_folder_id, template_type),
templates=current_service.get_templates(template_type, template_folder_id),
show_search_box=(len(current_service.get_templates(template_type)) > 7),
show_template_nav=(

View File

@@ -298,12 +298,31 @@ class Service():
def all_template_folder_ids(self):
return {folder['id'] for folder in self.all_template_folders}
def get_template_folders(self, parent_folder_id=None):
def get_template_folders(self, parent_folder_id=None, template_type='all'):
return [
folder for folder in self.all_template_folders
if folder['parent_id'] == parent_folder_id
if (
folder['parent_id'] == parent_folder_id and
self.show_folder(folder['id'], template_type)
)
]
def show_folder(self, template_folder_id, template_type='all'):
if template_type == 'all':
return True
if self.get_templates(template_type, template_folder_id):
return True
if any(
self.show_folder(child_folder['id'], template_type)
for child_folder in self.get_template_folders(template_folder_id, template_type)
):
return True
return False
def get_template_folder_path(self, template_folder_id):
if template_folder_id is None:
return []
@@ -322,7 +341,7 @@ class Service():
def get_template_folders_and_templates(self, template_type, template_folder_id):
return (
self.get_templates(template_type, template_folder_id) +
self.get_template_folders(template_folder_id)
self.get_template_folders(template_folder_id, template_type)
)
def move_to_folder(self, ids_to_move, move_to):

View File

@@ -111,8 +111,6 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
{'template_type': 'sms'},
['All', 'Email', 'Letter'],
[
'folder_one Folder containing templates',
'folder_two Folder containing templates',
'sms_template_one Text message template',
'sms_template_two Text message template',
],
@@ -122,8 +120,6 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
{'template_type': 'sms', 'template_folder_id': PARENT_FOLDER_ID},
['All', 'Email', 'Letter'],
[
'folder_one_one Folder containing templates',
'folder_one_two Folder containing templates',
],
),
(