diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 608be319d..98eee35af 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -100,10 +100,12 @@ def start_tour(service_id, template_id): @main.route("/services//templates") +@main.route("/services//templates/folders/") @main.route("/services//templates/") +@main.route("/services//templates//folders/") @login_required @user_has_permissions() -def choose_template(service_id, template_type='all'): +def choose_template(service_id, template_type='all', template_folder_id=None): template_nav_items = [ (label, key, url_for('.choose_template', service_id=current_service.id, template_type=key), '') @@ -117,8 +119,9 @@ def choose_template(service_id, template_type='all'): return render_template( 'views/templates/choose.html', - template_folders=current_service.template_folders, - templates=current_service.get_templates(template_type), + template_folder_path=current_service.get_template_folder_path(template_folder_id), + template_folders=current_service.get_template_folders(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=( current_service.has_multiple_template_types diff --git a/app/models/service.py b/app/models/service.py index ddd37d807..24cc91261 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -259,5 +259,26 @@ class Service(): return bool(self.inbound_number) @cached_property - def template_folders(self): + def all_template_folders(self): return template_folder_api_client.get_template_folders(self.id) + + def get_template_folders(self, parent_folder_id=None): + return [ + folder for folder in self.all_template_folders + if folder['parent_id'] == parent_folder_id + ] + + def get_template_folder_path(self, template_folder_id): + if template_folder_id is None: + return [] + + id_to_folder = {folder['id']: folder for folder in self.all_template_folders} + + folder = id_to_folder[template_folder_id] + path = [folder] + + while folder['parent_id']: + folder = id_to_folder[folder['parent_id']] + path.append(folder) + + return list(reversed(path)) diff --git a/app/templates/views/templates/choose.html b/app/templates/views/templates/choose.html index 85b586666..7b0f6309d 100644 --- a/app/templates/views/templates/choose.html +++ b/app/templates/views/templates/choose.html @@ -13,7 +13,7 @@ {% block maincolumn_content %} - {% if not templates %} + {% if (not templates) and (not template_folder_path) %}

{{ page_title }}

{% if current_user.has_permissions('manage_templates') %} @@ -62,9 +62,9 @@ {% for template_folder in template_folders %}

- {# #} + {{ template_folder.name }} - {# #} +

Folder containing {{ template_count }} template{% if template_count != 1 %}s{% endif %}

diff --git a/tests/conftest.py b/tests/conftest.py index 288d91812..e65358da9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,3 @@ -import uuid import json import os from contextlib import contextmanager @@ -3241,6 +3240,4 @@ def url_for_endpoint_with_token(endpoint, token): @pytest.fixture def mock_get_template_folders(mocker): - return mocker.patch('app.template_folder_api_client.get_template_folders', return_value=[ - {'id': uuid.uuid4(), 'name': 'Template Folder', 'parent_id': None} - ]) + return mocker.patch('app.template_folder_api_client.get_template_folders', return_value=[])