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
|
Move selected series
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</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 %}
|
{% else %}
|
||||||
<div class="text-muted small mt-2">Case move options are unavailable in this view.</div>
|
<div class="text-muted small mt-2">Case move options are unavailable in this view.</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -1034,54 +1077,6 @@
|
|||||||
detailsElement.addEventListener("toggle", toggleCheckboxes);
|
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 modal = new bootstrap.Modal(document.getElementById("findingModal"));
|
||||||
const modalBody = document.getElementById("findingModalBody");
|
const modalBody = document.getElementById("findingModalBody");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user