feat: Refactor move series functionality by simplifying event handling and removing redundant code

This commit is contained in:
Ross
2026-04-27 22:49:52 +01:00
parent 29165811d1
commit bf12204c51
+12 -82
View File
@@ -493,60 +493,6 @@
Move selected series
</button>
</form>
<script>
(function () {
if (window.__moveSeriesCasePickerInit) return;
window.__moveSeriesCasePickerInit = true;
function syncMoveSubmit() {
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;
}
function selectMoveDestination(casePk, caseTitle) {
const form = document.getElementById('move-selected-series-form');
const hiddenInput = form ? form.querySelector("[name='destination_case']") : null;
const label = document.getElementById('selected-move-case');
const results = document.getElementById('move-series-case-search-results');
if (!hiddenInput || !casePk) return;
hiddenInput.value = casePk;
if (label) {
label.innerHTML = 'Selected destination: <strong>' + caseTitle + ' (' + casePk + ')</strong>';
label.classList.remove('text-muted');
}
if (results) {
results.querySelectorAll('.list-group-item[data-case-pk]').forEach(function (item) {
item.classList.toggle('active', String(item.getAttribute('data-case-pk')) === String(casePk));
});
}
syncMoveSubmit();
}
document.body.addEventListener('click', function (e) {
const item = e.target.closest('#move-series-case-search-results .list-group-item[data-case-pk]');
if (!item) return;
if (e.target.closest('a,button,form,input')) return;
const casePk = item.getAttribute('data-case-pk');
const titleEl = item.querySelector('h6');
const caseTitle = titleEl ? titleEl.textContent.trim() : ('Case #' + casePk);
selectMoveDestination(casePk, caseTitle);
});
document.body.addEventListener('case:selected', function (e) {
const detail = e.detail || {};
if (!detail.casePk) return;
const caseTitle = detail.caseTitle || ('Case #' + detail.casePk);
selectMoveDestination(detail.casePk, caseTitle);
});
document.addEventListener('DOMContentLoaded', syncMoveSubmit);
syncMoveSubmit();
})();
</script>
{% else %}
<div class="text-muted small mt-2">Case move options are unavailable in this view.</div>
{% endif %}
@@ -1090,9 +1036,9 @@
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 moveSearchResults = document.getElementById("move-series-case-search-results");
const selectionLabel = document.getElementById("selected-move-case");
function syncMoveSeriesSubmitState() {
@@ -1113,39 +1059,23 @@
selectionLabel.classList.remove("text-muted");
}
if (moveSearchResults) {
moveSearchResults.querySelectorAll(".list-group-item").forEach((item) => {
item.classList.toggle("active", String(item.getAttribute("data-case-pk")) === String(casePk));
});
}
syncMoveSeriesSubmitState();
}
if (moveSearchResults) {
moveSearchResults.addEventListener("click", function(event) {
const item = event.target.closest(".list-group-item[data-case-pk]");
if (!item || !moveSearchResults.contains(item)) {
return;
}
if (event.target.closest("a,button,form,input")) {
return;
}
const casePk = item.getAttribute("data-case-pk");
const titleEl = item.querySelector("h6");
const caseTitle = titleEl ? titleEl.textContent.trim() : ("Case #" + casePk);
setSelectedDestination(casePk, caseTitle);
});
}
moveSeriesForm.addEventListener("case:selected", function(event) {
if (!hiddenInput || !event.detail) {
// 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 = event.detail.casePk;
const caseTitle = event.detail.caseTitle || ("Case #" + casePk);
const casePk = detail.casePk;
const caseTitle = detail.caseTitle || ("Case #" + casePk);
setSelectedDestination(casePk, caseTitle);
});