diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 297bbba21..8c91f609b 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -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_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_template_nav=( diff --git a/app/models/service.py b/app/models/service.py index 7780347f4..cd6de8190 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -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, template_type='all', parent_folder_id=None): 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.is_folder_visible(folder['id'], template_type) + ) ] + def is_folder_visible(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.is_folder_visible(child_folder['id'], template_type) + for child_folder in self.get_template_folders(template_type, template_folder_id) + ): + 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_type, template_folder_id) ) def move_to_folder(self, ids_to_move, move_to): diff --git a/app/templates/components/message-count-label.html b/app/templates/components/message-count-label.html index 14b997665..0e5cfeedc 100644 --- a/app/templates/components/message-count-label.html +++ b/app/templates/components/message-count-label.html @@ -55,3 +55,26 @@ {%- endif -%} {%- endif %} {%- endmacro %} + + +{% macro folder_contents_count(number_of_folders, number_of_templates) %} + + {% if number_of_folders == number_of_templates == 0 %} + Empty + {% endif %} + + {% if number_of_templates == 1 %} + {{ number_of_templates }} template + {%- elif number_of_templates > 1 -%} + {{ number_of_templates }} templates + {%- endif -%} + + {%- if number_of_folders and number_of_templates %}, {% endif -%} + + {%- if number_of_folders == 1 -%} + {{ number_of_folders }} folder + {%- elif number_of_folders > 1 -%} + {{ number_of_folders }} folders + {% endif %} + +{%- endmacro %} diff --git a/app/templates/views/templates/_template_list.html b/app/templates/views/templates/_template_list.html index 96ecbff53..d92627d76 100644 --- a/app/templates/views/templates/_template_list.html +++ b/app/templates/views/templates/_template_list.html @@ -1,4 +1,5 @@ {% from "components/checkbox.html" import unlabelled_checkbox %} +{% from "components/message-count-label.html" import folder_contents_count %}