From b503558ee41b3fa0e37e8142c31407939b10022e Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 2 Mar 2026 12:48:55 +0000 Subject: [PATCH] Add case selection handling and import functionality in user uploads --- atlas/templates/atlas/case_display_block.html | 5 + atlas/templates/atlas/collection_detail.html | 34 +++++ .../atlas/partials/case_search_widget.html | 34 +++++ atlas/templates/atlas/user_uploads.html | 132 ++++++++---------- 4 files changed, 129 insertions(+), 76 deletions(-) diff --git a/atlas/templates/atlas/case_display_block.html b/atlas/templates/atlas/case_display_block.html index 0669c27f..3c7b0367 100755 --- a/atlas/templates/atlas/case_display_block.html +++ b/atlas/templates/atlas/case_display_block.html @@ -91,6 +91,11 @@ pointer-events: auto; } .quick-edit-wrap .quick-edit-button:hover { opacity: 1; } + + /* Normal group visual style */ + .normal-group { border: 1px solid rgba(13,110,253,0.15); background: #f8fbff; padding: .75rem; border-radius: .375rem; margin-bottom: .75rem; } + .normal-group .normal-heading { font-weight: 600; color: #0d6efd; margin-bottom: .5rem; } + .normal-group .badge { margin-right: .25rem; }
diff --git a/atlas/templates/atlas/collection_detail.html b/atlas/templates/atlas/collection_detail.html index 5ca9e1bb..b4ce7d6d 100644 --- a/atlas/templates/atlas/collection_detail.html +++ b/atlas/templates/atlas/collection_detail.html @@ -185,4 +185,38 @@ } catch (e) { console.warn('collection warning persistence error', e); } }); + {% endblock %} diff --git a/atlas/templates/atlas/partials/case_search_widget.html b/atlas/templates/atlas/partials/case_search_widget.html index 30a1d8ee..351cd8f7 100644 --- a/atlas/templates/atlas/partials/case_search_widget.html +++ b/atlas/templates/atlas/partials/case_search_widget.html @@ -46,3 +46,37 @@ })(); + + diff --git a/atlas/templates/atlas/user_uploads.html b/atlas/templates/atlas/user_uploads.html index 75de7a0a..d854b0fe 100644 --- a/atlas/templates/atlas/user_uploads.html +++ b/atlas/templates/atlas/user_uploads.html @@ -322,84 +322,64 @@ const toImport = checkboxes.length ? checkboxes.filter(cb => !cb.disabled) : selectableCheckboxes; - if (toImport.length === 0) { - alert("Please select at least one series to import (not already imported)."); - return; - } - const statusDiv = document.getElementById('import-status'); - statusDiv.innerHTML = ''; - const orderSeries = document.querySelector('input[name="order-series"]:checked').value; - const csrfToken = '{{ csrf_token }}'; - {% if case %} - const importUrl = "{% url 'api-1:import_dicoms_case' case.id %}"; - {% else %} - const importUrl = "{% url 'api-1:import_dicoms' %}"; - {% endif %} - for (let i = 0; i < toImport.length; i++) { - const seriesId = toImport[i].value; - statusDiv.innerHTML += `
Importing series ${seriesId}...
`; - try { - const response = await fetch(importUrl, { - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - "X-CSRFToken": csrfToken, - }, - body: `selection=${encodeURIComponent(seriesId)}&order-series=${encodeURIComponent(orderSeries)}` - }); - const text = await response.text(); - document.getElementById(`import-status-${seriesId}`).innerHTML = `Series ${seriesId}: ${text}`; - // Mark as imported in the UI and make unselectable - const li = document.querySelector(`#series-list input[value="${seriesId}"]`)?.closest('li'); - if (li && !li.classList.contains('imported')) { - li.classList.add('imported'); - // Add badge if not already present - if (!li.querySelector('.badge.bg-success')) { - const badge = document.createElement('span'); - badge.className = 'badge bg-success ms-2'; - badge.textContent = 'Imported'; - li.appendChild(badge); + - if (!detail) return; const inputs = detail.querySelectorAll('input[name="selection"]'); inputs.forEach(cb => {