diff --git a/js/equipment.js b/js/equipment.js index aa96850..979bfcc 100644 --- a/js/equipment.js +++ b/js/equipment.js @@ -19,80 +19,14 @@ function getAccessToken() { return window.localStorage.getItem('access_token'); } -// Render the current page of equipment -async function displayCurrentPage() { - const startIndex = (currentPage - 1) * itemsPerPage; - const endIndex = startIndex + itemsPerPage; - const pageEquipment = filteredEquipment.slice(startIndex, endIndex); - if (!pageEquipment || pageEquipment.length === 0) { +// Render all equipment +function renderFilteredEquipment() { + if (!filteredEquipment || filteredEquipment.length === 0) { equipmentList.innerHTML = '
No equipment found.
'; - updatePagination(); return; } - const html = displayEquipment(pageEquipment); + const html = displayEquipment(filteredEquipment); equipmentList.innerHTML = html; - updatePagination(); -} - -function updatePagination() { - let container = document.getElementById('pagination'); - if (!container) { - container = document.createElement('div'); - container.id = 'pagination'; - if (equipmentList && equipmentList.parentNode) { - equipmentList.parentNode.insertBefore(container, equipmentList.nextSibling); - } - } - const totalPages = Math.ceil(filteredEquipment.length / itemsPerPage) || 1; - if (totalPages <= 1) { - container.innerHTML = ''; - return; - } - - // Bootstrap pagination - let html = ''; - container.innerHTML = html; -} - -window.changePage = async (page) => { - const totalPages = Math.ceil(filteredEquipment.length / itemsPerPage) || 1; - if (page < 1 || page > totalPages) return; - currentPage = page; - await displayCurrentPage(); - if (document.getElementById('equipmentList')) { - document.getElementById('equipmentList').scrollIntoView({ behavior: 'smooth' }); - } } const accessToken = getAccessToken(); @@ -114,11 +48,12 @@ const assignModal = document.getElementById("assignModal"); const assignUserName = document.getElementById("assignUserName"); const cancelAssign = document.getElementById("cancelAssign"); const confirmAssign = document.getElementById("confirmAssign"); +const editModal = document.getElementById("editModal"); +const cancelEdit = document.getElementById("cancelEdit"); +const confirmEdit = document.getElementById("confirmEdit"); let currentEquipmentId = null; // Pagination / data state (module-level) -let currentPage = 1; -let itemsPerPage = 20; let allEquipment = []; let filteredEquipment = []; @@ -153,8 +88,7 @@ async function loadEquipment() { } allEquipment = Array.isArray(data) ? data : []; filteredEquipment = allEquipment.slice(); - currentPage = 1; - await displayCurrentPage(); + renderFilteredEquipment(); } catch (e) { equipmentList.innerHTML = `
Error: ${e.message}
`; } @@ -278,6 +212,7 @@ function displayEquipment(equipment) { html += ``; } html += ``; + html += ``; } html += ''; @@ -316,6 +251,70 @@ addEquipmentBtn.onclick = async () => { loadEquipment(); }; +// Edit equipment +window.openEditModal = equipmentId => { + const eq = allEquipment.find(e => e.id == equipmentId); + if (!eq) return; + currentEquipmentId = equipmentId; + + document.getElementById('editEquipmentName').value = eq.name || ''; + document.getElementById('editEquipmentDesc').value = eq.description || ''; + document.getElementById('editEquipmentNumber').value = eq.number !== null && eq.number !== undefined ? eq.number : ''; + document.getElementById('editEquipmentNumberInStorage').value = eq.number_in_storage !== null && eq.number_in_storage !== undefined ? eq.number_in_storage : ''; + document.getElementById('editEquipmentWhere').value = eq.where || ''; + + const modalEl = document.getElementById('editModal'); + const modal = new bootstrap.Modal(modalEl); + modal.show(); +}; + +if (cancelEdit) { + cancelEdit.onclick = () => { + const modalEl = document.getElementById('editModal'); + const modal = bootstrap.Modal.getInstance(modalEl); + if (modal) modal.hide(); + currentEquipmentId = null; + }; +} + +if (confirmEdit) { + confirmEdit.onclick = async () => { + const name = document.getElementById('editEquipmentName').value.trim(); + if (!name) return alert('Enter equipment name'); + + try { + const payload = { + id: currentEquipmentId, + name, + description: document.getElementById('editEquipmentDesc').value.trim() || null + }; + + const editEqNum = document.getElementById('editEquipmentNumber').value; + const num = editEqNum ? Number(editEqNum) : null; + if (num !== null && !isNaN(num)) payload.number = num; + + const editEqWhere = document.getElementById('editEquipmentWhere').value; + if (editEqWhere.trim()) payload.where = editEqWhere.trim(); + + const editEqNIS = document.getElementById('editEquipmentNumberInStorage').value; + const nis = editEqNIS ? Number(editEqNIS) : null; + if (nis !== null && !isNaN(nis)) payload.number_in_storage = nis; + + // Ensure that 'update_equipment' matches your Supabase Edge Function's expected action name + const res = await callEdge('update_equipment', payload); + if (!res.ok) throw new Error(res.error || 'Failed to update equipment'); + } catch (e) { + alert(e.message); + } + + const modalEl = document.getElementById('editModal'); + const modal = bootstrap.Modal.getInstance(modalEl); + if (modal) modal.hide(); + currentEquipmentId = null; + loadEquipment(); + }; +}; + // Open assign modal window.openAssignModal = equipmentId => { currentEquipmentId = equipmentId; diff --git a/pages/equipment.html b/pages/equipment.html index 42bd645..dff89f8 100644 --- a/pages/equipment.html +++ b/pages/equipment.html @@ -59,7 +59,7 @@

Admin Panel

-
+

Equipment Loan Manager

@@ -128,8 +128,48 @@

Inventory

- - +
+
+ + + +