feat: Refactor move series functionality by simplifying event handling and removing redundant code
This commit is contained in:
@@ -493,60 +493,6 @@
|
|||||||
Move selected series
|
Move selected series
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</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 %}
|
{% 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 %}
|
||||||
@@ -1090,9 +1036,9 @@
|
|||||||
|
|
||||||
const moveSeriesForm = document.getElementById("move-selected-series-form");
|
const moveSeriesForm = document.getElementById("move-selected-series-form");
|
||||||
if (moveSeriesForm) {
|
if (moveSeriesForm) {
|
||||||
|
console.log("Move series form found, setting up event listeners");
|
||||||
const hiddenInput = moveSeriesForm.querySelector("[name='destination_case']");
|
const hiddenInput = moveSeriesForm.querySelector("[name='destination_case']");
|
||||||
const moveSubmitButton = document.getElementById("move-selected-series-submit");
|
const moveSubmitButton = document.getElementById("move-selected-series-submit");
|
||||||
const moveSearchResults = document.getElementById("move-series-case-search-results");
|
|
||||||
const selectionLabel = document.getElementById("selected-move-case");
|
const selectionLabel = document.getElementById("selected-move-case");
|
||||||
|
|
||||||
function syncMoveSeriesSubmitState() {
|
function syncMoveSeriesSubmitState() {
|
||||||
@@ -1113,39 +1059,23 @@
|
|||||||
selectionLabel.classList.remove("text-muted");
|
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();
|
syncMoveSeriesSubmitState();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moveSearchResults) {
|
// Mirror user_uploads pattern: listen at body level for case_search_widget selection events.
|
||||||
moveSearchResults.addEventListener("click", function(event) {
|
document.body.addEventListener("case:selected", async function(event) {
|
||||||
const item = event.target.closest(".list-group-item[data-case-pk]");
|
console.log("case:selected event received in case display block", event);
|
||||||
if (!item || !moveSearchResults.contains(item)) {
|
const detail = event.detail || {};
|
||||||
return;
|
if (!detail.casePk) {
|
||||||
}
|
|
||||||
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) {
|
|
||||||
return;
|
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 casePk = detail.casePk;
|
||||||
const caseTitle = event.detail.caseTitle || ("Case #" + casePk);
|
const caseTitle = detail.caseTitle || ("Case #" + casePk);
|
||||||
setSelectedDestination(casePk, caseTitle);
|
setSelectedDestination(casePk, caseTitle);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user