(() => { // Sprawdź czy jesteśmy na stronie głównej const booksContainer = document.getElementById('books-container'); const searchInput = document.getElementById('searchInput'); const sortSelect = document.getElementById('sortSelect'); if (!booksContainer || !searchInput || !sortSelect) return; // Funkcje specyficzne dla strony głównej const createBookCard = (book) => `
${book.tytul}
${book.tytul}

${book.autor}

${book.cena} PLN

`; const renderBooks = (books) => { booksContainer.innerHTML = books.length > 0 ? books.map(book => createBookCard(book)).join('') : `

Brak wyników wyszukiwania

`; }; const loadBooks = async () => { const searchTerm = searchInput.value; const sortBy = sortSelect.value; try { const response = await fetch(`/api/ksiazki?search=${encodeURIComponent(searchTerm)}&sort=${sortBy}`); const books = await response.json(); renderBooks(books); } catch (error) { console.error('Błąd ładowania książek:', error); } }; // Event listeners tylko dla strony głównej searchInput.addEventListener('input', loadBooks); sortSelect.addEventListener('change', loadBooks); // Inicjalizacja document.addEventListener('DOMContentLoaded', loadBooks); })(); document.addEventListener('DOMContentLoaded', () => { updateNavVisibility(); checkAuthStatus(); }); function updateNavVisibility() { const token = localStorage.getItem('token'); document.querySelectorAll('.anonymous-links, .user-links').forEach(el => { el.style.display = 'none'; }); if (token) { document.querySelector('.user-links').style.display = 'flex'; } else { document.querySelector('.anonymous-links').style.display = 'flex'; } } async function checkAuthStatus() { try { const response = await fetch('/api/check-auth'); const data = await response.json(); if (data.authenticated) { localStorage.setItem('token', data.token); localStorage.setItem('imie', data.user.imie); updateNavVisibility(); } } catch (error) { console.error('Błąd sprawdzania autentykacji:', error); } } document.getElementById('logoutLink')?.addEventListener('click', (e) => { e.preventDefault(); localStorage.removeItem('token'); localStorage.removeItem('imie'); updateNavVisibility(); window.location.href = '/'; }); document.getElementById('loginForm')?.addEventListener('submit', async (e) => { e.preventDefault(); const email = document.getElementById('loginEmail').value; const password = document.getElementById('loginPassword').value; try { const response = await fetch('/login', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email, haslo: password }), }); const data = await response.json(); if (response.ok) { localStorage.setItem('token', data.token); localStorage.setItem('imie', data.imie); updateNavVisibility(); window.location.href = '/'; } else { alert(data.message || 'Logowanie nieudane'); } } catch (error) { console.error('Błąd logowania:', error); alert('Wystąpił błąd podczas logowania'); } }); document.getElementById('registerForm')?.addEventListener('submit', async (e) => { e.preventDefault(); const name = document.getElementById('registerName').value; const email = document.getElementById('registerEmail').value; const password = document.getElementById('registerPassword').value; const confirmPassword = document.getElementById('registerConfirmPassword').value; if (password !== confirmPassword) { alert('Hasła nie są identyczne'); return; } try { const response = await fetch('/rejestracja', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ imie: name, email, haslo: password, confirmPassword }), }); if (response.ok) { alert('Rejestracja udana'); window.location.href = '/login.html'; } else { const data = await response.text(); alert(data || 'Rejestracja nieudana'); } } catch (error) { console.error('Błąd rejestracji:', error); alert('Wystąpił błąd podczas rejestracji'); } }); async function loadBooks(searchTerm = '', sortBy = 'default') { try { const response = await fetch(`/api/ksiazki?search=${encodeURIComponent(searchTerm)}&sort=${sortBy}`); if (!response.ok) throw new Error(`Błąd HTTP: ${response.status}`); const books = await response.json(); renderBooks(books); } catch (error) { console.error('Błąd ładowania książek:', error); showError('Wystąpił błąd podczas ładowania książek'); } } function renderBooks(books) { const container = document.getElementById('books-container'); if (!container) return; if (books.length === 0) { container.innerHTML = `

Nie znaleziono książek

`; return; } container.innerHTML = books.map(book => `
${book.tytul}
${book.tytul}
`).join(''); // Dodaj obsługę przycisków "Dodaj do koszyka" document.querySelectorAll('.add-to-cart').forEach(button => { button.addEventListener('click', async (e) => { e.preventDefault(); const token = localStorage.getItem('token'); if (!token) { alert('Musisz być zalogowany, aby dodać książkę do koszyka'); window.location.href = '/login.html'; return; } const bookId = e.target.getAttribute('data-book-id'); try { const response = await fetch('/api/add-to-cart', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ book_id: parseInt(bookId), quantity: 1 }) }); if (response.ok) { alert('Dodano do koszyka!'); } else { const error = await response.json(); alert(error.error || 'Wystąpił błąd'); } } catch (error) { console.error('Błąd:', error); alert('Wystąpił błąd podczas dodawania do koszyka'); } }); }); } function showError(message) { const container = document.getElementById('books-container'); if (!container) return; container.innerHTML = `
${message}
`; } // Inicjalizacja przy pierwszym załadowaniu document.addEventListener('DOMContentLoaded', () => { if (document.getElementById('books-container')) { loadBooks(); } // Nasłuchiwanie wyszukiwania document.getElementById('searchInput')?.addEventListener('input', (e) => { loadBooks(e.target.value, document.getElementById('sortSelect')?.value || 'default'); }); // Nasłuchiwanie zmiany sortowania document.getElementById('sortSelect')?.addEventListener('change', (e) => { loadBooks(document.getElementById('searchInput')?.value || '', e.target.value); }); }); function getAuthHeaders() { const token = localStorage.getItem('token'); return { 'Content-Type': 'application/json', 'Authorization': token ? `Bearer ${token}` : '' }; } async function updateNavbar() { try { const response = await fetch('/api/check-auth', { headers: getAuthHeaders() }); const authInfo = await response.json(); const userLinks = document.querySelector('.user-links'); const anonLinks = document.querySelector('.anonymous-links'); if (authInfo.authenticated) { userLinks.style.display = 'flex'; anonLinks.style.display = 'none'; } else { userLinks.style.display = 'none'; anonLinks.style.display = 'flex'; } } catch (error) { console.error('Error checking auth:', error); } } // Wywołaj przy każdym załadowaniu strony document.addEventListener('DOMContentLoaded', updateNavbar); localStorage.setItem('token', response.token);