Fix of the edeting funktion in the Library Module

This commit is contained in:
2026-06-10 11:24:33 +02:00
parent 3cdd1552d9
commit 1b9bfe1b14
+98 -12
View File
@@ -1057,7 +1057,7 @@
document.getElementById('detailModal').style.display = 'none'; document.getElementById('detailModal').style.display = 'none';
} }
// ========================================================================= // =========================================================================
// 5. EVENT LISTENERS INITIALIZATION & ON-LOAD INITIALIZER // 5. EVENT LISTENERS INITIALIZATION & ON-LOAD INITIALIZER
// ========================================================================= // =========================================================================
function wireScannerUi() { function wireScannerUi() {
@@ -1093,43 +1093,129 @@
} }
} }
// Connect standard Filters and Search inputs // Run when DOM structure is entirely ready
document.getElementById('filterToggleBtn').addEventListener('click', () => { document.addEventListener('DOMContentLoaded', () => {
wireScannerUi(); // Setup scanner control buttons
loadLibraryItems(); // Fetch your database items right away!
// Safely connect standard Filters and Search inputs inside DOMContentLoaded
const filterToggleBtn = document.getElementById('filterToggleBtn');
if (filterToggleBtn) {
filterToggleBtn.addEventListener('click', () => {
filterPanelOpen = !filterPanelOpen; filterPanelOpen = !filterPanelOpen;
document.getElementById('filterPanel').classList.toggle('open'); document.getElementById('filterPanel').classList.toggle('open');
document.getElementById('filterToggleBtn').classList.toggle('active'); filterToggleBtn.classList.toggle('active');
}); });
}
document.getElementById('applyFilterBtn').addEventListener('click', () => { const applyFilterBtn = document.getElementById('applyFilterBtn');
if (applyFilterBtn) {
applyFilterBtn.addEventListener('click', () => {
activeFilters.isbn = document.getElementById('filterISBN').value.toLowerCase(); activeFilters.isbn = document.getElementById('filterISBN').value.toLowerCase();
activeFilters.type = document.getElementById('filterType').value; activeFilters.type = document.getElementById('filterType').value;
activeFilters.status = document.getElementById('filterStatus').value; activeFilters.status = document.getElementById('filterStatus').value;
applyFiltersAndSearch(true); applyFiltersAndSearch(true);
}); });
}
document.getElementById('clearFilterBtn').addEventListener('click', () => { const clearFilterBtn = document.getElementById('clearFilterBtn');
if (clearFilterBtn) {
clearFilterBtn.addEventListener('click', () => {
document.getElementById('filterISBN').value = ''; document.getElementById('filterISBN').value = '';
document.getElementById('filterType').value = ''; document.getElementById('filterType').value = '';
document.getElementById('filterStatus').value = ''; document.getElementById('filterStatus').value = '';
activeFilters = { isbn: '', type: '', status: '' }; activeFilters = { isbn: '', type: '', status: '' };
applyFiltersAndSearch(true); applyFiltersAndSearch(true);
}); });
}
document.getElementById('librarySearch').addEventListener('input', (e) => { const librarySearch = document.getElementById('librarySearch');
if (librarySearch) {
librarySearch.addEventListener('input', (e) => {
currentSearchTerm = (e.target.value || '').toLowerCase(); currentSearchTerm = (e.target.value || '').toLowerCase();
applyFiltersAndSearch(true); applyFiltersAndSearch(true);
}); });
}
document.getElementById('loadMoreBtn').addEventListener('click', () => { const loadMoreBtn = document.getElementById('loadMoreBtn');
if (loadMoreBtn) {
loadMoreBtn.addEventListener('click', () => {
renderedCount = Math.min(renderedCount + RENDER_BATCH_COUNT, visibleItems.length); renderedCount = Math.min(renderedCount + RENDER_BATCH_COUNT, visibleItems.length);
renderItems(); renderItems();
}); });
}
// Run when DOM structure is entirely ready // Edit Modal Form processing
document.addEventListener('DOMContentLoaded', () => { const editForm = document.getElementById('editLibraryForm');
wireScannerUi(); // Setup scanner control buttons if (editForm) {
loadLibraryItems(); // Fetch your database items right away! editForm.addEventListener('submit', async function(e) {
e.preventDefault();
const itemId = document.getElementById('editLibraryItemId').value;
const updatedData = {
name: document.getElementById('editLibraryName').value,
item_type: document.getElementById('editLibraryType').value,
isbn: document.getElementById('editLibraryIsbn').value,
code_4: document.getElementById('editLibraryCode4').value,
ort: document.getElementById('editLibraryLocation').value,
beschreibung: document.getElementById('editLibraryDescription').value
};
try {
const response = await fetch(`/api/library_item/${itemId}/update`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': '{{ csrf_token }}',
'X-CSRF-Token': '{{ csrf_token }}'
},
body: JSON.stringify(updatedData)
}); });
const result = await response.json();
if (response.ok && result.ok) {
alert(result.message || 'Medium erfolgreich aktualisiert!');
closeEditLibraryModal();
pagingState.loading = false;
loadLibraryItems();
} else {
alert(result.message || 'Fehler beim Speichern der Änderungen.');
}
} catch (error) {
console.error('Update failed:', error);
alert('Netzwerkfehler beim Aktualisieren des Mediums.');
}
});
}
});
// Modal Control Functions (accessible globally from table buttons)
function openEditLibraryItem(itemId) {
const item = libraryItems.find(i => i._id === itemId);
if (!item) {
alert('Fehler: Das Medium konnte nicht gefunden werden.');
return;
}
// Populate the form fields - Using correct German properties from MongoDB fields
document.getElementById('editLibraryItemId').value = item._id || '';
document.getElementById('editLibraryName').value = item.Name || '';
document.getElementById('editLibraryType').value = item.ItemType || 'book';
document.getElementById('editLibraryIsbn').value = item.ISBN || '';
document.getElementById('editLibraryCode4').value = item.Code_4 || item.Code4 || '';
document.getElementById('editLibraryLocation').value = item.Ort || '';
document.getElementById('editLibraryDescription').value = item.Beschreibung || '';
document.getElementById('editLibraryModal').style.display = 'block';
}
function closeEditLibraryModal() {
document.getElementById('editLibraryModal').style.display = 'none';
}
</script> </script>
<div id="editLibraryModal" class="modal" style="display:none;"> <div id="editLibraryModal" class="modal" style="display:none;">