mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-16 20:49:00 -04:00
Merge pull request #2513 from alphagov/empty-folder-message
Improve the empty folder state
This commit is contained in:
@@ -54,6 +54,11 @@
|
||||
|
||||
}
|
||||
|
||||
&-empty {
|
||||
color: $secondary-text-colour;
|
||||
padding: $gutter-half 0 $gutter-one-third 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.folder-heading {
|
||||
|
||||
@@ -126,9 +126,10 @@ 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_folder_has_contents=current_service.get_template_folders_and_templates('all', 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_search_box=current_service.count_of_templates_and_folders > 7,
|
||||
show_template_nav=(
|
||||
current_service.has_multiple_template_types
|
||||
and (len(current_service.all_templates) > 2)
|
||||
|
||||
@@ -133,7 +133,10 @@ class Service():
|
||||
|
||||
@property
|
||||
def has_templates(self):
|
||||
return len(self.all_templates) > 0
|
||||
return bool(self.all_templates)
|
||||
|
||||
def has_folders(self):
|
||||
return bool(self.all_template_folders)
|
||||
|
||||
@property
|
||||
def has_multiple_template_types(self):
|
||||
@@ -364,6 +367,10 @@ class Service():
|
||||
self.get_template_folders(template_type, template_folder_id)
|
||||
)
|
||||
|
||||
@property
|
||||
def count_of_templates_and_folders(self):
|
||||
return len(self.get_template_folders_and_templates('all', None))
|
||||
|
||||
def move_to_folder(self, ids_to_move, move_to):
|
||||
|
||||
ids_to_move = set(ids_to_move)
|
||||
|
||||
@@ -1,44 +1,54 @@
|
||||
{% from "components/checkbox.html" import unlabelled_checkbox %}
|
||||
{% from "components/message-count-label.html" import folder_contents_count %}
|
||||
{% from "components/message-count-label.html" import folder_contents_count, message_count_label %}
|
||||
|
||||
<nav id=template-list>
|
||||
{% for template_folder in template_folders %}
|
||||
<div class="template-list-item {% if can_manage_folders %}template-list-item-with-checkbox{% endif %}">
|
||||
{% if can_manage_folders %}
|
||||
{{ unlabelled_checkbox(
|
||||
id='templates-or-folder-{}'.format(template_folder.id),
|
||||
name='templates_and_folders',
|
||||
value=template_folder.id,
|
||||
) }}
|
||||
{% endif %}
|
||||
<h2 class="message-name template-list-folder">
|
||||
<a href="{{ url_for('.choose_template', service_id=current_service.id, template_type=template_type, template_folder_id=template_folder.id) }}">
|
||||
{{ template_folder.name }}
|
||||
</a>
|
||||
</h2>
|
||||
<p class="message-type">
|
||||
{{ folder_contents_count(
|
||||
current_service.get_template_folders(template_type, template_folder.id)|length,
|
||||
current_service.get_templates(template_type, template_folder.id)|length,
|
||||
) }}
|
||||
</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% for template in templates %}
|
||||
<div class="template-list-item {% if can_manage_folders %}template-list-item-with-checkbox{% endif %}">
|
||||
{% if can_manage_folders %}
|
||||
{{ unlabelled_checkbox(
|
||||
id='templates-or-folder-{}'.format(template.id),
|
||||
name='templates_and_folders',
|
||||
value=template.id,
|
||||
) }}
|
||||
{% endif %}
|
||||
<h2 class="message-name">
|
||||
<a href="{{ url_for('.view_template', service_id=current_service.id, template_id=template.id) }}">{{ template.name }}</a>
|
||||
</h2>
|
||||
<p class="message-type">
|
||||
{{ message_count_label(1, template.template_type, suffix='')|capitalize }} template
|
||||
</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</nav>
|
||||
{% if service_has_templates_or_folders and not templates and not template_folders %}
|
||||
<p class="template-list-empty">
|
||||
{% if template_folder_has_contents %}
|
||||
There are no {{ message_count_label(1, template_type, suffix='') }} templates in this folder
|
||||
{% else %}
|
||||
This folder is empty
|
||||
{% endif %}
|
||||
</p>
|
||||
{% else %}
|
||||
<nav id=template-list>
|
||||
{% for template_folder in template_folders %}
|
||||
<div class="template-list-item {% if can_manage_folders %}template-list-item-with-checkbox{% endif %}">
|
||||
{% if can_manage_folders %}
|
||||
{{ unlabelled_checkbox(
|
||||
id='templates-or-folder-{}'.format(template_folder.id),
|
||||
name='templates_and_folders',
|
||||
value=template_folder.id,
|
||||
) }}
|
||||
{% endif %}
|
||||
<h2 class="message-name template-list-folder">
|
||||
<a href="{{ url_for('.choose_template', service_id=current_service.id, template_type=template_type, template_folder_id=template_folder.id) }}">
|
||||
{{ template_folder.name }}
|
||||
</a>
|
||||
</h2>
|
||||
<p class="message-type">
|
||||
{{ folder_contents_count(
|
||||
current_service.get_template_folders(template_type, template_folder.id)|length,
|
||||
current_service.get_templates(template_type, template_folder.id)|length,
|
||||
) }}
|
||||
</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% for template in templates %}
|
||||
<div class="template-list-item {% if can_manage_folders %}template-list-item-with-checkbox{% endif %}">
|
||||
{% if can_manage_folders %}
|
||||
{{ unlabelled_checkbox(
|
||||
id='templates-or-folder-{}'.format(template.id),
|
||||
name='templates_and_folders',
|
||||
value=template.id,
|
||||
) }}
|
||||
{% endif %}
|
||||
<h2 class="message-name">
|
||||
<a href="{{ url_for('.view_template', service_id=current_service.id, template_id=template.id) }}">{{ template.name }}</a>
|
||||
</h2>
|
||||
<p class="message-type">
|
||||
{{ message_count_label(1, template.template_type, suffix='')|capitalize }} template
|
||||
</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
@@ -77,7 +77,13 @@
|
||||
|
||||
{% if can_manage_folders %}
|
||||
<form method="post">
|
||||
{% with templates=templates, template_folders=template_folders %}
|
||||
{% with
|
||||
templates=templates,
|
||||
template_folders=template_folders,
|
||||
service_has_templates_or_folders=(current_service.has_templates or current_service.has_folders),
|
||||
template_type=template_type,
|
||||
template_folder_has_contents=template_folder_has_contents
|
||||
%}
|
||||
{% include 'views/templates/_template_list.html' %}
|
||||
{% endwith %}
|
||||
{% with templates=templates, template_folders=template_folders, templates_and_folders_form=templates_and_folders_form %}
|
||||
@@ -85,7 +91,13 @@
|
||||
{% endwith %}
|
||||
</form>
|
||||
{% else %}
|
||||
{% with templates=templates, template_folders=template_folders %}
|
||||
{% with
|
||||
templates=templates,
|
||||
template_folders=template_folders,
|
||||
service_has_templates_or_folders=(current_service.has_templates or current_service.has_folders),
|
||||
template_type=template_type,
|
||||
template_folder_has_contents=template_folder_has_contents
|
||||
%}
|
||||
{% include 'views/templates/_template_list.html' %}
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
|
||||
@@ -8,6 +8,7 @@ from tests.conftest import SERVICE_ONE_ID, normalize_spaces
|
||||
PARENT_FOLDER_ID = '7e979e79-d970-43a5-ac69-b625a8d147b0'
|
||||
CHILD_FOLDER_ID = '92ee1ee0-e4ee-4dcc-b1a7-a5da9ebcfa2b'
|
||||
GRANDCHILD_FOLDER_ID = 'fafe723f-1d39-4a10-865f-e551e03d8886'
|
||||
FOLDER_TWO_ID = 'bbbb222b-2b22-2b22-222b-b222b22b2222'
|
||||
|
||||
|
||||
def _folder(name, folder_id=None, parent=None):
|
||||
@@ -105,7 +106,8 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
'expected_parent_link_args,'
|
||||
'extra_args,'
|
||||
'expected_nav_links,'
|
||||
'expected_items'
|
||||
'expected_items, '
|
||||
'expected_empty_message '
|
||||
),
|
||||
[
|
||||
(
|
||||
@@ -123,7 +125,8 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
'email_template_two Email template',
|
||||
'letter_template_one Letter template',
|
||||
'letter_template_two Letter template',
|
||||
]
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
'Templates – service one – GOV.UK Notify',
|
||||
@@ -136,6 +139,7 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
'sms_template_one Text message template',
|
||||
'sms_template_two Text message template',
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
'folder_one – Templates – service one – GOV.UK Notify',
|
||||
@@ -147,6 +151,7 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
'folder_one_one 1 template, 1 folder',
|
||||
'folder_one_two Empty',
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
'folder_one – Templates – service one – GOV.UK Notify',
|
||||
@@ -157,6 +162,7 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
[
|
||||
'folder_one_one 1 folder',
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
'folder_one – Templates – service one – GOV.UK Notify',
|
||||
@@ -165,6 +171,7 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
{'template_type': 'email', 'template_folder_id': PARENT_FOLDER_ID},
|
||||
['All', 'Text message', 'Letter'],
|
||||
[],
|
||||
'There are no email templates in this folder',
|
||||
),
|
||||
(
|
||||
'folder_one_one – folder_one – service one – GOV.UK Notify',
|
||||
@@ -176,6 +183,7 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
'folder_one_one_one 1 template',
|
||||
'letter_template_nested Letter template',
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
'folder_one_one_one – folder_one_one – service one – GOV.UK Notify',
|
||||
@@ -186,6 +194,25 @@ def test_post_add_template_folder_page(client_request, service_one, mocker, pare
|
||||
[
|
||||
'sms_template_nested Text message template',
|
||||
],
|
||||
None,
|
||||
),
|
||||
(
|
||||
'folder_two – Templates – service one – GOV.UK Notify',
|
||||
'Templates / folder_two',
|
||||
{'template_type': 'all'},
|
||||
{'template_folder_id': FOLDER_TWO_ID},
|
||||
['Text message', 'Email', 'Letter'],
|
||||
[],
|
||||
'This folder is empty',
|
||||
),
|
||||
(
|
||||
'folder_two – Templates – service one – GOV.UK Notify',
|
||||
'Templates / folder_two',
|
||||
{'template_type': 'sms'},
|
||||
{'template_folder_id': FOLDER_TWO_ID, 'template_type': 'sms'},
|
||||
['All', 'Email', 'Letter'],
|
||||
[],
|
||||
'This folder is empty',
|
||||
),
|
||||
]
|
||||
)
|
||||
@@ -202,9 +229,10 @@ def test_should_show_templates_folder_page(
|
||||
extra_args,
|
||||
expected_nav_links,
|
||||
expected_items,
|
||||
expected_empty_message,
|
||||
):
|
||||
mock_get_template_folders.return_value = [
|
||||
_folder('folder_two'),
|
||||
_folder('folder_two', FOLDER_TWO_ID),
|
||||
_folder('folder_one', PARENT_FOLDER_ID),
|
||||
_folder('folder_one_two', parent=PARENT_FOLDER_ID),
|
||||
_folder('folder_one_one', CHILD_FOLDER_ID, parent=PARENT_FOLDER_ID),
|
||||
@@ -260,6 +288,13 @@ def test_should_show_templates_folder_page(
|
||||
for index, expected_item in enumerate(expected_items):
|
||||
assert normalize_spaces(page_items[index].text) == expected_item
|
||||
|
||||
if expected_empty_message:
|
||||
assert normalize_spaces(page.select_one('.template-list-empty').text) == (
|
||||
expected_empty_message
|
||||
)
|
||||
else:
|
||||
assert not page.select('.template-list-empty')
|
||||
|
||||
mock_get_service_templates.assert_called_once_with(SERVICE_ONE_ID)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user