Skip to content

Commit 8e62f70

Browse files
committed
Refactor the display of Scan actions in the Scan tab
Signed-off-by: tdruez <[email protected]>
1 parent 5a9b65c commit 8e62f70

File tree

6 files changed

+70
-37
lines changed

6 files changed

+70
-37
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<ul class="list-inline mb-0">
2+
{% if scan.view_url %}
3+
<li class="list-inline-item"{% if not show_btn_label %} data-bs-toggle="tooltip"{% endif %} data-bs-title="View Scan results">
4+
<a class="btn btn-outline-dark btn-sm" href="{{ scan.view_url }}" target="_blank">
5+
<i class="far fa-file-alt"></i>{% if show_btn_label %} View Scan results{% endif %}
6+
</a>
7+
</li>
8+
{% endif %}
9+
{% if scan.download_result_url %}
10+
<li class="list-inline-item"{% if not show_btn_label %} data-bs-toggle="tooltip"{% endif %} data-bs-title="Download Scan results">
11+
<a class="btn btn-outline-dark btn-sm" href="{{ scan.download_result_url }}" target="_blank">
12+
<i class="fas fa-download"></i>{% if show_btn_label %} Download Scan results{% endif %}
13+
</a>
14+
</li>
15+
{% endif %}
16+
{% if scan.delete_url %}
17+
<li class="list-inline-item"{% if not show_btn_label %} data-bs-toggle="tooltip"{% endif %} data-bs-title="Delete Scan">
18+
<a class="btn btn-outline-danger btn-sm scan_delete_link" href="#scan-delete-modal" role="button" data-delete-url="{{ scan.delete_url }}" data-bs-toggle="modal">
19+
<i class="far fa-trash-alt"></i>{% if show_btn_label %} Delete Scan{% endif %}
20+
</a>
21+
</li>
22+
{% endif %}
23+
</ul>
Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,5 @@
11
<strong class="ms-1">{{ scan.runs.0.status|title }}</strong>
22
{% include 'component_catalog/includes/scan_status.html' with status=scan.runs.0.status only %}
3-
4-
<ul class="list-inline mt-2 mb-0 text-center">
5-
{% if scan.view_url %}
6-
<li class="list-inline-item" data-bs-toggle="tooltip" data-bs-title="View Scan results">
7-
<a class="btn btn-outline-dark btn-sm" href="{{ scan.view_url }}" target="_blank">
8-
<i class="far fa-file-alt"></i>
9-
</a>
10-
</li>
11-
{% endif %}
12-
{% if scan.download_result_url %}
13-
<li class="list-inline-item" data-bs-toggle="tooltip" data-bs-title="Download Scan results">
14-
<a class="btn btn-outline-dark btn-sm" href="{{ scan.download_result_url }}" target="_blank">
15-
<i class="fas fa-download"></i>
16-
</a>
17-
</li>
18-
{% endif %}
19-
{% if scan.delete_url %}
20-
<li class="list-inline-item" data-bs-toggle="tooltip" data-bs-title="Delete Scan">
21-
<a class="btn btn-outline-danger btn-sm scan_delete_link" href="#scan-delete-modal" role="button" data-delete-url="{{ scan.delete_url }}" data-bs-toggle="modal">
22-
<i class="far fa-trash-alt"></i>
23-
</a>
24-
</li>
25-
{% endif %}
26-
</ul>
3+
<div class="text-center mt-2">
4+
{% include 'component_catalog/includes/scan_actions_list.html' with scan=scan only %}
5+
</div>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{% if forloop.first %}<dl class="row mb-0">{% endif %}
2+
<dt class="col-sm-2 text-end pt-2 pe-0"></dt>
3+
<dd class="col-sm-10">
4+
{% include 'component_catalog/includes/scan_actions_list.html' with scan=values.scan show_btn_label=True only %}
5+
</dd>
6+
{% if forloop.last %}</dl>{% endif %}

component_catalog/templates/component_catalog/tabs/tab_scan.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,13 @@
2828
{% if scan_summary_to_package_form %}
2929
{% include 'component_catalog/includes/scan_summary_to_package_modal.html' %}
3030
{% endif %}
31+
{% include 'component_catalog/includes/scan_delete_modal.html' %}
32+
<script>
33+
document.querySelectorAll('.scan_delete_link').forEach(link => {
34+
link.addEventListener('click', function() {
35+
let deleteUrl = this.getAttribute('data-delete-url');
36+
document.querySelector('#scan-delete-modal a.delete-confirm').setAttribute('href', deleteUrl);
37+
});
38+
});
39+
</script>
3140
{% endif %}

component_catalog/tests/test_views.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2134,6 +2134,10 @@ def test_package_details_view_scan_tab_scan_in_progress(
21342134
<i class="fas fa-clipboard"></i></button>
21352135
<pre class="pre-bg-body-tertiary mb-1 field-scancodeio-version">31.0.0</pre>
21362136
</dd>
2137+
<dt class="col-sm-2 text-end pt-2 pe-0"></dt>
2138+
<dd class="col-sm-10">
2139+
<ul class="list-inline mb-0"></ul>
2140+
</dd>
21372141
</dl>
21382142
"""
21392143
self.assertContains(response, expected, html=True)

component_catalog/views.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,6 +1665,8 @@ def delete_scan_view(request, project_uuid):
16651665
raise Http404("Scan could not be deleted.")
16661666

16671667
messages.success(request, "Scan deleted.")
1668+
if referer := request.META.get("HTTP_REFERER"):
1669+
return redirect(referer)
16681670
return redirect("component_catalog:scan_list")
16691671

16701672

@@ -2354,19 +2356,20 @@ def scan_summary_fields(self, scan_summary):
23542356
return scan_summary_fields
23552357

23562358
def scan_status_fields(self, scan):
2359+
package = self.object
23572360
scan_status_fields = []
23582361
scan_run = scan.get("runs", [{}])[-1]
23592362
status = scan_run.get("status")
23602363
issue_statuses = ["failure", "stale", "stopped"]
23612364
completed_statuses = ["success", *issue_statuses]
23622365

23632366
scan_issue_request_template = settings.SCAN_ISSUE_REQUEST_TEMPLATE
2364-
dataspace_name = self.object.dataspace.name
2367+
dataspace_name = package.dataspace.name
23652368
request_template_uuid = scan_issue_request_template.get(dataspace_name)
23662369
if request_template_uuid and status in completed_statuses:
23672370
request_form_url = reverse("workflow:request_add", args=[request_template_uuid])
23682371
field_context = {
2369-
"href": f"{request_form_url}?content_object_id={self.object.id}",
2372+
"href": f"{request_form_url}?content_object_id={package.id}",
23702373
"target": "_blank",
23712374
"btn_class": "btn-outline-request",
23722375
"icon_class": "fas fa-bug",
@@ -2395,20 +2398,29 @@ def scan_status_fields(self, scan):
23952398
("Task output", task_output, None, "includes/field_log.html")
23962399
)
23972400

2401+
# Scan actions: download, delete, rescan
2402+
download_result_url = None
23982403
if status == "success":
2399-
filename = self.object.filename or self.object.package_url_filename
2400-
field_context = {
2401-
"href": reverse(
2402-
"component_catalog:scan_data_as_file",
2403-
args=[scan.get("uuid"), quote_plus(filename)],
2404-
),
2405-
"target": "_blank",
2406-
"icon_class": "fas fa-download",
2407-
}
2408-
scan_status_fields.append(
2409-
("Download Scan results", field_context, None, "includes/field_button.html")
2404+
filename = package.filename or package.package_url_filename
2405+
download_result_url = reverse(
2406+
"component_catalog:scan_data_as_file",
2407+
args=[scan.get("uuid"), quote_plus(filename)],
24102408
)
24112409

2410+
delete_url = None
2411+
if status in completed_statuses:
2412+
delete_url = reverse("component_catalog:scan_delete", args=[scan.get("uuid")])
2413+
2414+
field_context = {
2415+
"scan": {
2416+
"download_result_url": download_result_url,
2417+
"delete_url": delete_url,
2418+
}
2419+
}
2420+
scan_status_fields.append(
2421+
(None, field_context, None, "component_catalog/tabs/field_scan_actions.html")
2422+
)
2423+
24122424
return scan_status_fields
24132425

24142426
def tab_scan(self):

0 commit comments

Comments
 (0)