Enhance case size rendering and update form field attributes for better UI integration

This commit is contained in:
Ross
2026-05-28 23:10:27 +01:00
parent c1005712e0
commit d74cfe73e0
3 changed files with 40 additions and 3 deletions
+6 -1
View File
@@ -160,7 +160,12 @@ class CaseTable(SelectionTable):
return mark_safe(", ".join(links)) return mark_safe(", ".join(links))
return "No collections" return "No collections"
def render_case_size(self, value): def render_case_size(self, value, record):
if value is None:
try:
value = record.get_total_series_images_size()
except Exception:
value = None
if value is None: if value is None:
return "-" return "-"
return filesizeformat(value) return filesizeformat(value)
+21 -1
View File
@@ -250,7 +250,11 @@
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-success">Create linked cases</button> <div id="case-series-submit-loading" class="d-none text-muted small me-2">
<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span>
Creating linked cases...
</div>
<button id="case-series-submit-button" type="submit" class="btn btn-success">Create linked cases</button>
</div> </div>
</form> </form>
</div> </div>
@@ -468,6 +472,8 @@
if (caseSeriesForm) { if (caseSeriesForm) {
caseSeriesForm.addEventListener('submit', async function (event) { caseSeriesForm.addEventListener('submit', async function (event) {
event.preventDefault(); event.preventDefault();
const submitBtn = document.getElementById('case-series-submit-button');
const submitLoading = document.getElementById('case-series-submit-loading');
const selectedSeries = getSelectedSeriesUids(); const selectedSeries = getSelectedSeriesUids();
const selectedStudies = getSelectedStudyUids(); const selectedStudies = getSelectedStudyUids();
if (!selectedSeries.length || selectedStudies.size < 2) { if (!selectedSeries.length || selectedStudies.size < 2) {
@@ -484,6 +490,13 @@
} }
setImportButtonsDisabled(true); setImportButtonsDisabled(true);
if (submitBtn) {
submitBtn.classList.add('d-none');
submitBtn.disabled = true;
}
if (submitLoading) {
submitLoading.classList.remove('d-none');
}
try { try {
const response = await fetch("{% url 'atlas:uploads_import_case_series_htmx' %}", { const response = await fetch("{% url 'atlas:uploads_import_case_series_htmx' %}", {
method: 'POST', method: 'POST',
@@ -505,6 +518,13 @@
} catch (error) { } catch (error) {
appendImportStatus(`<div class="alert alert-danger mb-0">Linked case import failed. ${error?.message || ''}</div>`); appendImportStatus(`<div class="alert alert-danger mb-0">Linked case import failed. ${error?.message || ''}</div>`);
} finally { } finally {
if (submitLoading) {
submitLoading.classList.add('d-none');
}
if (submitBtn) {
submitBtn.classList.remove('d-none');
submitBtn.disabled = false;
}
setImportButtonsDisabled(false); setImportButtonsDisabled(false);
updateSelectionCount(); updateSelectionCount();
} }
+12
View File
@@ -3451,6 +3451,18 @@ def user_uploads(
case_series_form = CaseForm(user=request.user) case_series_form = CaseForm(user=request.user)
case_series_form.fields["previous_case"].required = False case_series_form.fields["previous_case"].required = False
case_series_form.fields["previous_case"].widget = HiddenInput() case_series_form.fields["previous_case"].widget = HiddenInput()
for field_name in ("condition", "presentation", "procedures"):
field = case_series_form.fields.get(field_name)
if field is None:
continue
attrs = dict(getattr(field.widget, "attrs", {}) or {})
attrs.update(
{
"data-dropdown-parent": "#caseSeriesModal",
"data-width": "100%",
}
)
field.widget.attrs = attrs
return render( return render(
request, request,