// Student dashboard functionality let items = []; // Check authentication function checkAuth() { const token = localStorage.getItem('token'); const role = localStorage.getItem('userRole'); if (!token || role !== 'student') { window.location.href = '/index.html'; } } // Initialize page async function initializePage() { checkAuth(); await loadItems(); setupEventListeners(); displayUserInfo(); initializeModal(); } // Display user info function displayUserInfo() { const username = localStorage.getItem('username'); document.getElementById('userInfo').textContent = `Student: ${username}`; } // Load items from server async function loadItems() { try { const response = await fetch('/api/items', { headers: { 'Authorization': `Bearer ${localStorage.getItem('token')}` } }); items = await response.json(); displayItems(); } catch (error) { console.error('Error loading items:', error); alert('Failed to load items'); } } let itemDetailsModal = null; let currentItem = null; // Initialize Bootstrap modal function initializeModal() { const modalElement = document.getElementById('itemDetailsModal'); itemDetailsModal = new bootstrap.Modal(modalElement); // Set up modal reserve button document.getElementById('modalReserveButton').addEventListener('click', () => { if (currentItem) { const quantity = parseInt(document.getElementById('reserveQuantity').value); reserveItem(currentItem._id, quantity); } }); } // Show item details in modal function showItemDetails(item) { currentItem = item; const availableQuantity = item.quantity - (item.reserved || 0); // Set modal content document.getElementById('modalItemImage').src = item.imageUrl || '/images/default-item.png'; document.getElementById('modalItemName').textContent = item.name; document.getElementById('modalItemDescription').textContent = item.description || 'No description available'; document.getElementById('modalItemLocation').textContent = item.location; document.getElementById('modalItemQuantity').textContent = availableQuantity; // Populate quantity select const quantitySelect = document.getElementById('reserveQuantity'); quantitySelect.innerHTML = ''; for (let i = 1; i <= availableQuantity; i++) { const option = document.createElement('option'); option.value = i; option.textContent = i; quantitySelect.appendChild(option); } // Show/hide reserve button and quantity select based on availability const reserveButton = document.getElementById('modalReserveButton'); const quantityGroup = document.getElementById('quantitySelectGroup'); if (availableQuantity > 0) { reserveButton.style.display = 'block'; quantityGroup.style.display = 'block'; reserveButton.disabled = false; } else { reserveButton.style.display = 'none'; quantityGroup.style.display = 'none'; } itemDetailsModal.show(); } // Track current view mode let currentViewMode = localStorage.getItem('studentViewMode') || 'grid'; // Display items based on current view mode function displayItems() { const locationFilter = document.getElementById('locationFilter').value; const filteredItems = locationFilter === 'all' ? items : items.filter(item => item.location === locationFilter); // Update view mode buttons active state const viewButtons = document.querySelectorAll('.view-mode-btn'); viewButtons.forEach(btn => { btn.classList.toggle('active', btn.getAttribute('data-mode') === currentViewMode); }); // Show/hide appropriate containers document.getElementById('itemsGrid').classList.toggle('d-none', currentViewMode !== 'grid'); document.getElementById('itemsList').classList.toggle('d-none', currentViewMode !== 'list'); if (currentViewMode === 'grid') { // Display items in grid view const gridContainer = document.getElementById('itemsGrid'); gridContainer.innerHTML = filteredItems.map(item => `
${item.description || 'No description available'}
Location: ${item.location}
Available: ${item.quantity - (item.reserved || 0)}
