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-13 11:10:20 +00:00
parent 084c020d0c
commit 10fe78bb31
3 changed files with 23 additions and 8 deletions
+1 -1
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, current_template_folder_id=template_folder_id,
can_manage_folders=can_manage_folders(), can_manage_folders=can_manage_folders(),
template_folder_path=current_service.get_template_folder_path(template_folder_id), 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), templates=current_service.get_templates(template_type, template_folder_id),
show_search_box=(len(current_service.get_templates(template_type)) > 7), show_search_box=(len(current_service.get_templates(template_type)) > 7),
show_template_nav=( show_template_nav=(
+22 -3
View File
@@ -298,12 +298,31 @@ class Service():
def all_template_folder_ids(self): def all_template_folder_ids(self):
return {folder['id'] for folder in self.all_template_folders} 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 [ return [
folder for folder in self.all_template_folders 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): def get_template_folder_path(self, template_folder_id):
if template_folder_id is None: if template_folder_id is None:
return [] return []
@@ -322,7 +341,7 @@ class Service():
def get_template_folders_and_templates(self, template_type, template_folder_id): def get_template_folders_and_templates(self, template_type, template_folder_id):
return ( return (
self.get_templates(template_type, template_folder_id) + 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): def move_to_folder(self, ids_to_move, move_to):
@@ -111,8 +111,6 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
{'template_type': 'sms'}, {'template_type': 'sms'},
['All', 'Email', 'Letter'], ['All', 'Email', 'Letter'],
[ [
'folder_one Folder containing templates',
'folder_two Folder containing templates',
'sms_template_one Text message template', 'sms_template_one Text message template',
'sms_template_two 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}, {'template_type': 'sms', 'template_folder_id': PARENT_FOLDER_ID},
['All', 'Email', 'Letter'], ['All', 'Email', 'Letter'],
[ [
'folder_one_one Folder containing templates',
'folder_one_two Folder containing templates',
], ],
), ),
( (