feat: Refactor move series case selection logic with improved event handling and state synchronization
This commit is contained in:
@@ -493,6 +493,49 @@
|
||||
Move selected series
|
||||
</button>
|
||||
</form>
|
||||
<script>
|
||||
(function () {
|
||||
if (window.__moveSeriesCaseSelectionBound) return;
|
||||
window.__moveSeriesCaseSelectionBound = true;
|
||||
|
||||
function syncMoveSeriesSubmitState() {
|
||||
const form = document.getElementById('move-selected-series-form');
|
||||
const hiddenInput = form ? form.querySelector("[name='destination_case']") : null;
|
||||
const submitBtn = document.getElementById('move-selected-series-submit');
|
||||
if (!hiddenInput || !submitBtn) return;
|
||||
submitBtn.disabled = !hiddenInput.value;
|
||||
}
|
||||
|
||||
document.body.addEventListener('case:selected', function (e) {
|
||||
try {
|
||||
const detail = e.detail || {};
|
||||
const casePk = detail.casePk;
|
||||
const caseTitle = detail.caseTitle || ('Case #' + casePk);
|
||||
if (!casePk) return;
|
||||
|
||||
// Only react to selections from this move panel's widget.
|
||||
if (!e.target || !e.target.closest('#move-selected-series-form')) return;
|
||||
|
||||
const form = document.getElementById('move-selected-series-form');
|
||||
const hiddenInput = form ? form.querySelector("[name='destination_case']") : null;
|
||||
const label = document.getElementById('selected-move-case');
|
||||
if (!hiddenInput) return;
|
||||
|
||||
hiddenInput.value = casePk;
|
||||
if (label) {
|
||||
label.innerHTML = 'Selected destination: <strong>' + caseTitle + ' (' + casePk + ')</strong>';
|
||||
label.classList.remove('text-muted');
|
||||
}
|
||||
|
||||
syncMoveSeriesSubmitState();
|
||||
} catch (err) {
|
||||
console.error('Move series case:selected handler error', err);
|
||||
}
|
||||
});
|
||||
|
||||
syncMoveSeriesSubmitState();
|
||||
})();
|
||||
</script>
|
||||
{% else %}
|
||||
<div class="text-muted small mt-2">Case move options are unavailable in this view.</div>
|
||||
{% endif %}
|
||||
@@ -1034,54 +1077,6 @@
|
||||
detailsElement.addEventListener("toggle", toggleCheckboxes);
|
||||
}
|
||||
|
||||
const moveSeriesForm = document.getElementById("move-selected-series-form");
|
||||
if (moveSeriesForm) {
|
||||
console.log("Move series form found, setting up event listeners");
|
||||
const hiddenInput = moveSeriesForm.querySelector("[name='destination_case']");
|
||||
const moveSubmitButton = document.getElementById("move-selected-series-submit");
|
||||
const selectionLabel = document.getElementById("selected-move-case");
|
||||
|
||||
function syncMoveSeriesSubmitState() {
|
||||
if (!moveSubmitButton || !hiddenInput) {
|
||||
return;
|
||||
}
|
||||
moveSubmitButton.disabled = !hiddenInput.value;
|
||||
}
|
||||
|
||||
function setSelectedDestination(casePk, caseTitle) {
|
||||
if (!hiddenInput || !casePk) {
|
||||
return;
|
||||
}
|
||||
|
||||
hiddenInput.value = casePk;
|
||||
if (selectionLabel) {
|
||||
selectionLabel.innerHTML = "Selected destination: <strong>" + caseTitle + " (" + casePk + ")</strong>";
|
||||
selectionLabel.classList.remove("text-muted");
|
||||
}
|
||||
|
||||
syncMoveSeriesSubmitState();
|
||||
}
|
||||
|
||||
// Mirror user_uploads pattern: listen at body level for case_search_widget selection events.
|
||||
document.body.addEventListener("case:selected", async function(event) {
|
||||
console.log("case:selected event received in case display block", event);
|
||||
const detail = event.detail || {};
|
||||
if (!detail.casePk) {
|
||||
return;
|
||||
}
|
||||
// Ignore case selections from other widgets on the page.
|
||||
//if (!event.target || !event.target.closest("#move-selected-series-form")) {
|
||||
// return;
|
||||
//}
|
||||
|
||||
const casePk = detail.casePk;
|
||||
const caseTitle = detail.caseTitle || ("Case #" + casePk);
|
||||
setSelectedDestination(casePk, caseTitle);
|
||||
});
|
||||
|
||||
syncMoveSeriesSubmitState();
|
||||
}
|
||||
|
||||
const modal = new bootstrap.Modal(document.getElementById("findingModal"));
|
||||
const modalBody = document.getElementById("findingModalBody");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user