Enhance case size rendering and update form field attributes for better UI integration
This commit is contained in:
+6
-1
@@ -160,7 +160,12 @@ class CaseTable(SelectionTable):
|
||||
return mark_safe(", ".join(links))
|
||||
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:
|
||||
return "-"
|
||||
return filesizeformat(value)
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
class="btn btn-primary"
|
||||
>Import {% if case %}into case{% endif %}</button>
|
||||
<button id="import-into-case-button" type="button" class="btn btn-outline-primary" data-bs-toggle="modal" data-bs-target="#caseSelectModal">Import into case…</button>
|
||||
<button id="import-case-series-button" type="button" class="btn btn-outline-success" data-bs-toggle="modal" data-bs-target="#caseSeriesModal" disabled>Import as case series…</button>
|
||||
<button id="import-case-series-button" type="button" class="btn btn-outline-success" data-bs-toggle="modal" data-bs-target="#caseSeriesModal" disabled>Import as case series…</button>
|
||||
</div>
|
||||
|
||||
<div id="import-status" class="mt-3"></div>
|
||||
@@ -250,7 +250,11 @@
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<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>
|
||||
</form>
|
||||
</div>
|
||||
@@ -468,6 +472,8 @@
|
||||
if (caseSeriesForm) {
|
||||
caseSeriesForm.addEventListener('submit', async function (event) {
|
||||
event.preventDefault();
|
||||
const submitBtn = document.getElementById('case-series-submit-button');
|
||||
const submitLoading = document.getElementById('case-series-submit-loading');
|
||||
const selectedSeries = getSelectedSeriesUids();
|
||||
const selectedStudies = getSelectedStudyUids();
|
||||
if (!selectedSeries.length || selectedStudies.size < 2) {
|
||||
@@ -484,6 +490,13 @@
|
||||
}
|
||||
|
||||
setImportButtonsDisabled(true);
|
||||
if (submitBtn) {
|
||||
submitBtn.classList.add('d-none');
|
||||
submitBtn.disabled = true;
|
||||
}
|
||||
if (submitLoading) {
|
||||
submitLoading.classList.remove('d-none');
|
||||
}
|
||||
try {
|
||||
const response = await fetch("{% url 'atlas:uploads_import_case_series_htmx' %}", {
|
||||
method: 'POST',
|
||||
@@ -505,6 +518,13 @@
|
||||
} catch (error) {
|
||||
appendImportStatus(`<div class="alert alert-danger mb-0">Linked case import failed. ${error?.message || ''}</div>`);
|
||||
} finally {
|
||||
if (submitLoading) {
|
||||
submitLoading.classList.add('d-none');
|
||||
}
|
||||
if (submitBtn) {
|
||||
submitBtn.classList.remove('d-none');
|
||||
submitBtn.disabled = false;
|
||||
}
|
||||
setImportButtonsDisabled(false);
|
||||
updateSelectionCount();
|
||||
}
|
||||
|
||||
@@ -3451,6 +3451,18 @@ def user_uploads(
|
||||
case_series_form = CaseForm(user=request.user)
|
||||
case_series_form.fields["previous_case"].required = False
|
||||
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(
|
||||
request,
|
||||
|
||||
Reference in New Issue
Block a user