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 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)
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
class="btn btn-primary"
|
class="btn btn-primary"
|
||||||
>Import {% if case %}into case{% endif %}</button>
|
>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-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>
|
||||||
|
|
||||||
<div id="import-status" class="mt-3"></div>
|
<div id="import-status" class="mt-3"></div>
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user